🚨 P07 - Sistema de alarma luminosa y acústica con pulsador

ℹ️ Empieza aquí:

En esta práctica integrarás varios componentes para crear un sistema de alarma realista, capaz de activarse y desactivarse mediante un pulsador, y que utiliza señales luminosas y acústicas.
Aprenderás a estructurar el programa usando una máquina de estados y a controlar eventos en el tiempo mediante millis(), una técnica fundamental en sistemas embebidos reales.


🚀 Objetivos

 Integrar LEDs, buzzer y pulsador en un único sistema.
 Implementar una máquina de estados.
 Controlar señales acústicas y luminosas.
 Utilizar temporización no bloqueante con millis().
 Diseñar un sistema interactivo completo.


🧩 Contenidos trabajados

 Máquinas de estados.
 Entradas digitales con INPUT_PULLUP.
 Control de buzzer activo.
 Control de múltiples salidas.
 Temporización con millis().


💻 Materiales y recursos

 Arduino UNO.
 Protoboard.
 1 buzzer activo.
 2 LEDs.
 2 resistencias (220 Ω – 330 Ω).
 1 pulsador.
 Cables Dupont.
 Ordenador con Arduino IDE.


🔧 Montaje práctico

LEDs

1. Conecta:

  • LED verde → pin 8
  • LED rojo → pin 9

2. Cada LED con su resistencia a GND.


Buzzer

1. Pin positivo → pin 10
2. Pin negativo → GND


Pulsador

1. Un terminal → GND
2. Otro terminal → pin 2

(Usaremos INPUT_PULLUP)


🧭 Desarrollo de la práctica

Paso 1: Crear el proyecto

1. Abrir Arduino IDE
2. Archivo → Nuevo
3. Guardar como:

P07_Alarma_ApellidoNombre


Paso 2: Declarar variables

const int pinLEDVerde = 8;  
const int pinLEDRojo = 9;  
const int pinBuzzer = 10;  
const int pinPulsador = 2;  

bool alarmaActiva = false;  

unsigned long tiempoAnterior = 0;  
const unsigned long intervalo = 300;  

bool estadoSalida = false;  

Paso 3: Configurar setup()

void setup() {

  pinMode(pinLEDVerde, OUTPUT);  
  pinMode(pinLEDRojo, OUTPUT);  
  pinMode(pinBuzzer, OUTPUT);  

  pinMode(pinPulsador, INPUT_PULLUP);  

}

Paso 4: Leer pulsador

Añade al loop():

int lectura = digitalRead(pinPulsador);  

if (lectura == LOW) {

  alarmaActiva = !alarmaActiva;  

  delay(200);  

}

Paso 5: Máquina de estados

Añade al loop():

if (alarmaActiva == false) {

  digitalWrite(pinLEDVerde, HIGH);  
  digitalWrite(pinLEDRojo, LOW);  
  digitalWrite(pinBuzzer, LOW);  

}

else {

  digitalWrite(pinLEDVerde, LOW);  

  unsigned long tiempoActual = millis();  

  if (tiempoActual - tiempoAnterior >= intervalo) {

    tiempoAnterior = tiempoActual;  

    estadoSalida = !estadoSalida;  

    digitalWrite(pinLEDRojo, estadoSalida);  
    digitalWrite(pinBuzzer, estadoSalida);  

  }

}

📄 Código completo

const int pinLEDVerde = 8;  
const int pinLEDRojo = 9;  
const int pinBuzzer = 10;  
const int pinPulsador = 2;  

bool alarmaActiva = false;  

unsigned long tiempoAnterior = 0;  
const unsigned long intervalo = 300;  

bool estadoSalida = false;  

void setup() {

  pinMode(pinLEDVerde, OUTPUT);  
  pinMode(pinLEDRojo, OUTPUT);  
  pinMode(pinBuzzer, OUTPUT);  
  pinMode(pinPulsador, INPUT_PULLUP);  

}

void loop() {

  int lectura = digitalRead(pinPulsador);  

  if (lectura == LOW) {

    alarmaActiva = !alarmaActiva;  
    delay(200);  

  }

  if (alarmaActiva == false) {

    digitalWrite(pinLEDVerde, HIGH);  
    digitalWrite(pinLEDRojo, LOW);  
    digitalWrite(pinBuzzer, LOW);  

  }

  else {

    digitalWrite(pinLEDVerde, LOW);  

    unsigned long tiempoActual = millis();  

    if (tiempoActual - tiempoAnterior >= intervalo) {

      tiempoAnterior = tiempoActual;  

      estadoSalida = !estadoSalida;  

      digitalWrite(pinLEDRojo, estadoSalida);  
      digitalWrite(pinBuzzer, estadoSalida);  

    }

  }

}

✅ Comprobación de funcionamiento

Estado reposo:

• LED verde encendido
• LED rojo apagado
• Buzzer apagado

Estado alarma:

• LED rojo parpadea
• Buzzer suena intermitente


📦 Entrega

 Archivo .ino funcional
 Vídeo demostración
 Explicación de la máquina de estados


📊 Rúbrica de evaluación

Criterio Excelente Adecuado Insuficiente
Montaje Correcto Parcial Incorrecto
Funcionamiento Completo Parcial No funciona
Máquina estados Correcta Parcial Incorrecta
Código Claro Mejorable Incorrecto
Comprensión Alta Media Baja

🎯 Para pensar (opcional)

¿Cómo añadirías un retardo de salida de 10 segundos antes de que la alarma se active?

Updated: