Mini centralita domótica con control de luces y ventilador mediante botones y relés

Proyecto Arduino para mini centralita domótica que controla luces y ventilador con botones y relés usando resistencias pull-up y debounce por software.

Breve Introducción

Mini centralita domótica con control de luces y ventilador mediante botones y relés (arduino)
DESCRIPCIÓN:
Este proyecto implementa una mini centralita domótica basada en Arduino para el control de dos luces y un ventilador mediante botones. Cada dispositivo es controlado por un relé, activado o desactivado al presionar el botón correspondiente. El sistema utiliza entradas con resistencias pull-up internas para garantizar estabilidad y prevenir activaciones falsas.

NOTAS ADICIONALES:
El proyecto utiliza entradas con resistencias pull-up internas de Arduino para simplificar el cableado de los botones. Los relés son accionados mediante transistores para garantizar la correcta gestión de la corriente. Es importante conectar diodos de protección en paralelo a los relés para evitar daños a los transistores causados por picos de tensión inductivos. El código implementa un simple debounce por software para evitar múltiples lecturas no deseadas de los botones.

EXPLICACIONES:
- Los botones están conectados a pines digitales configurados con INPUT_PULLUP, por lo que su estado normal es HIGH y cuando se presionan pasan a LOW.
- Los relés son accionados mediante transistores NPN, la base del transistor está conectada al pin Arduino a través de una resistencia de 1kΩ para limitar la corriente.
- El diodo 1N4007 en paralelo al relé protege el transistor de picos de tensión generados por la bobina del relé cuando se apaga.
- La función leggiPulsante implementa un debounce por software para evitar que el ruido eléctrico o la presión prolongada del botón generen múltiples activaciones no deseadas.
- Cuando se presiona un botón, el estado booleano asociado al relé se invierte y el relé se activa o desactiva en consecuencia.
- El monitor serial se usa para proporcionar retroalimentación en tiempo real sobre el estado de los dispositivos controlados.

Código de Ejemplo: arduino

// Mini centralita domótica: control de luces y ventilador mediante botones y relés
// Cada botón conmuta el estado del relé respectivo

// Definición de pines de botones
const int pulsanteLuce1 = 2;
const int pulsanteLuce2 = 3;
const int pulsanteVentola = 4;

// Definición de pines de relés (accionados mediante transistores)
const int releLuce1 = 8;
const int releLuce2 = 9;
const int releVentola = 10;

// Variables para almacenar estado de relés
bool statoLuce1 = false;
bool statoLuce2 = false;
bool statoVentola = false;

// Variables para gestión de debounce
unsigned long ultimoTempoLuce1 = 0;
unsigned long ultimoTempoLuce2 = 0;
unsigned long ultimoTempoVentola = 0;
const unsigned long debounceDelay = 50; // debounce de 50 ms

void setup() {
  // Configuración de pines de botones como INPUT_PULLUP
  pinMode(pulsanteLuce1, INPUT_PULLUP);
  pinMode(pulsanteLuce2, INPUT_PULLUP);
  pinMode(pulsanteVentola, INPUT_PULLUP);

  // Configuración de pines de relés como OUTPUT
  pinMode(releLuce1, OUTPUT);
  pinMode(releLuce2, OUTPUT);
  pinMode(releVentola, OUTPUT);

  // Inicializar relés apagados (LOW = relé apagado, depende del módulo)
  digitalWrite(releLuce1, LOW);
  digitalWrite(releLuce2, LOW);
  digitalWrite(releVentola, LOW);

  // Serial para depuración
  Serial.begin(9600);
  Serial.println("Centralita domótica iniciada");
}

void loop() {
  // Control botón luz 1
  if (leggiPulsante(pulsanteLuce1, &ultimoTempoLuce1)) {
    statoLuce1 = !statoLuce1; // Invertir estado
    digitalWrite(releLuce1, statoLuce1 ? HIGH : LOW);
    Serial.print("Luz 1: ");
    Serial.println(statoLuce1 ? "Encendida" : "Apagada");
  }

  // Control botón luz 2
  if (leggiPulsante(pulsanteLuce2, &ultimoTempoLuce2)) {
    statoLuce2 = !statoLuce2;
    digitalWrite(releLuce2, statoLuce2 ? HIGH : LOW);
    Serial.print("Luz 2: ");
    Serial.println(statoLuce2 ? "Encendida" : "Apagada");
  }

  // Control botón ventilador
  if (leggiPulsante(pulsanteVentola, &ultimoTempoVentola)) {
    statoVentola = !statoVentola;
    digitalWrite(releVentola, statoVentola ? HIGH : LOW);
    Serial.print("Ventilador: ");
    Serial.println(statoVentola ? "Encendido" : "Apagado");
  }
}

// Función para leer botón con debounce
// Devuelve true si el botón fue presionado (transición estable HIGH->LOW)
bool leggiPulsante(int pin, unsigned long* ultimoTempo) {
  static bool statoPrecedente[11] = {HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH};
  bool statoAttuale = digitalRead(pin);
  unsigned long tempoCorrente = millis();

  // Comprobar transición de HIGH a LOW (botón presionado)
  if (statoPrecedente[pin] == HIGH && statoAttuale == LOW) {
    // Verificar debounce
    if (tempoCorrente - *ultimoTempo > debounceDelay) {
      *ultimoTempo = tempoCorrente;
      statoPrecedente[pin] = statoAttuale;
      return true;
    }
  }
  statoPrecedente[pin] = statoAttuale;
  return false;
}
×
×
×
¿Quieres regenerar la respuesta?
×
Exportar chat
Elige el formato de exportación
⏳ Generazione PDF in corso…
Allegati
×
⚠️ Estás a punto de cerrar el chat y pasar al generador de imágenes. Si no has iniciado sesión, perderás nuestro chat. ¿Confirmas?
👁 Estás viendo un chat compartido en modo temporal. No se guardará.
💬
×
Prompts guardados
×
Nota privada
×
Etiqueta
×
Buscar en todos los chats
×
Tus insights
Analizando…
×
Preferencias de IA
Nombre del asistente 30
Longitud de las respuestas
Modelo de IA
Respuestas estructuradas
Incluir ejemplos
Usar emojis
Guíame, no resuelvas Pistas y preguntas en vez de la solución hecha
Más ajustes →
×
Compartir este chat
Quien abra este enlace podrá ver el chat o añadirlo a su perfil como chat propio.
⚠️ Atención: también se compartirán los archivos adjuntos del chat. Quien lo añada recibirá una copia en su propia carpeta.
Chat compartido
Alguien ha compartido un chat contigo. ¿Solo quieres verlo o añadirlo a tus chats?
⚠️ Atención: también se compartirán los archivos adjuntos del chat. Quien lo añada recibirá una copia en su propia carpeta.
×

📌 Mensajes guardados

Cargando...

×

Historial de Chat

programas-ejemplo · HISTORIAL DE CHAT

Cargando...

Preferencias de IA

×
  • 🟢 BásicoRespuestas rápidas y esenciales para estudiar
  • 🔵 MedioMayor calidad para estudio y programación
  • 🟣 AvanzadoRazonamiento complejo y análisis detallado
Explicar Pasos

¿Qué se necesita?

Arduino Uno (x1)

Relé de 5V y 1 canal (x3) para control de luces y ventilador

Diodo 1N4007 (x3) para protección contra corrientes inversas en los relés

Transistor NPN (ej. 2N2222) (x3) para accionar los relés

Resistencia 1kΩ (x3) para base del transistor

Resistencia 10kΩ (x3) para pull-down del transistor (opcional)

Botón pulsador (x3)

Resistencia interna de pull-up de Arduino (usada en los botones)

Alimentación 5V (USB o externa)

CONEXIONES:
  • Botón 1 conectado entre pin digital 2 y GND (INPUT_PULLUP activo)
  • Botón 2 conectado entre pin digital 3 y GND (INPUT_PULLUP activo)
  • Botón 3 conectado entre pin digital 4 y GND (INPUT_PULLUP activo)
  • Base transistor 1 conectada a pin digital 8 mediante resistencia 1kΩ; colector al relé 1; emisor a GND
  • Base transistor 2 conectada a pin digital 9 mediante resistencia 1kΩ; colector al relé 2; emisor a GND
  • Base transistor 3 conectada a pin digital 10 mediante resistencia 1kΩ; colector al relé 3; emisor a GND
  • Diodo 1N4007 conectado en paralelo al relé (cátodo a +5V, ánodo al colector del transistor) para protección
  • Relés alimentados a 5V (VCC relé a +5V, GND relé a GND Arduino)
  • Cargas (luces y ventilador) conectadas a los contactos del relé según especificaciones de seguridad

Temas Similares

LED parpadeante con botón de parada
Programa Arduino para hacer parpadear un LED con botón de parada que detiene el parpadeo y apaga el LED al presionarlo.
Semáforo peatonal con dos LED y botón
Proyecto Arduino para un semáforo peatonal con dos LED y botón que controla el paso con temporizador sin bloquear el programa.
Termómetro básico con sensor de temperatura y LED de aviso
Termómetro básico con sensor LM35 y LED de aviso que muestra la temperatura y alerta si supera 3 grados Celsius con Arduino Uno.
Alarma de puerta abierta con sensor magnético y zumbador
Proyecto Arduino para alarma de puerta abierta con sensor magnético reed y zumbador piezo. Detecta apertura y activa señal acústica con resistencia pull-up.
Control de un ventilador con sensor de temperatura on/off
Proyecto Arduino para controlar un ventilador con sensor LM35 que enciende o apaga según la temperatura detectada, usando transistor y diodo de protección.
LED que se enciende en la oscuridad con fotorresistencia
Proyecto Arduino para encender un LED en la oscuridad usando una fotorresistencia y divisor de tensión con calibración de umbral de luz ambiental.
Timbre de casa con botón y zumbador
Proyecto Arduino para un timbre de casa con botón y zumbador activo usando INPUT_PULLUP y debounce por software para un funcionamiento simple y efectivo.
Contador de personas con botón y pantalla de 7 segmentos
Proyecto Arduino con contador de personas que usa botón y pantalla de 7 segmentos cátodo común para mostrar números del al 9 con debounce por software.