SISTEMA DE LA ALARMA
CODIGO DEL SISTEMA
const int ledRojo = 2;
const int ledAzul = 3;
const int ledVerde = 4;
const int botonConfig = 5;
const int botonMovimiento = 6;
const int fotoCelda = A0;
const int potPin = A1;
int tiempoParpadeo = 0; // Duración de cada parpadeo en segundos
int nivelParpadeos = 0; // Cantidad de parpadeos configurados
int contadorPulsos = 0; // Para contar los pulsos del botón de configuración
bool configurado = false;
bool azulEncendido = false;
bool verdeEncendido = false;
bool ultimaLecturaBoton = HIGH;
bool ultimaLecturaFinal = HIGH;
unsigned long tiempoUltimoPulsador = 0;
unsigned long tiempoUltimoFinal = 0;
void setup() {
Serial.begin(9600);
pinMode(ledRojo, OUTPUT);
pinMode(ledAzul, OUTPUT);
pinMode(ledVerde, OUTPUT);
pinMode(botonConfig, INPUT_PULLUP);
pinMode(botonMovimiento, INPUT_PULLUP);
digitalWrite(ledRojo, LOW);
digitalWrite(ledAzul, LOW);
digitalWrite(ledVerde, LOW);
solicitarTiempoParpadeo();
}
void loop() {
if (!azulEncendido) {
detectarPulsosIniciales();
} else if (!verdeEncendido) {
leerPotenciometro();
detectarFinalConfiguracion();
} else if (configurado) {
verificarAlarma();
}
}
void solicitarTiempoParpadeo() {
Serial.println("Ingrese un número entre 1 y 3 (duración del parpadeo en segundos):");
while (true) {
if (Serial.available() > 0) {
int valor = Serial.parseInt();
if (valor >= 1 && valor <= 3) {
tiempoParpadeo = valor;
Serial.print("Tiempo de parpadeo configurado: ");
Serial.print(valor);
Serial.println(" segundos.");
break;
} else {
Serial.println("ERROR: Valor inválido. Ingrese un número entre 1 y 3.");
}
}
}
}
void detectarPulsosIniciales() {
bool lectura = digitalRead(botonConfig);
if (lectura == LOW && ultimaLecturaBoton == HIGH) {
contadorPulsos++;
Serial.print("Pulsos detectados: ");
Serial.println(contadorPulsos);
delay(300);
}
ultimaLecturaBoton = lectura;
if (contadorPulsos >= 3) {
digitalWrite(ledAzul, HIGH);
azulEncendido = true;
Serial.println("¡3 pulsos detectados! LED azul encendido.");
}
}
void leerPotenciometro() {
int valor = analogRead(potPin);
int nivel = map(valor, 0, 1023, 1, 5);
if (nivel != nivelParpadeos) {
nivelParpadeos = nivel;
Serial.print("Nivel de parpadeos configurado: ");
Serial.println(nivelParpadeos);
delay(200);
}
}
void detectarFinalConfiguracion() {
bool lectura = digitalRead(botonConfig);
if (lectura == LOW && ultimaLecturaFinal == HIGH) {
contadorPulsos++;
Serial.print("Pulsos totales: ");
Serial.println(contadorPulsos);
delay(300);
}
ultimaLecturaFinal = lectura;
if (contadorPulsos >= 5) {
digitalWrite(ledVerde, HIGH);
verdeEncendido = true;
configurado = true;
Serial.println("Configuración completa. LED verde encendido.");
}
}
void verificarAlarma() {
int luz = analogRead(fotoCelda);
bool noche = luz < 500; // Ajusta este valor según la iluminación del entorno
bool movimiento = digitalRead(botonMovimiento) == LOW;
if (noche && movimiento) {
Serial.println("¡Alarma activada por movimiento nocturno!");
activarAlarma();
delay(1000);
}
}
void activarAlarma() {
for (int i = 0; i < nivelParpadeos; i++) {
digitalWrite(ledRojo, HIGH);
delay(tiempoParpadeo * 1000);
digitalWrite(ledRojo, LOW);
delay(tiempoParpadeo * 1000);
}
Serial.println("Alarma completada.");
}
El sistema permite al usuario:
-
Configurar la duración de parpadeo de la alarma mediante consola serial.
-
Confirmar configuración con pulsaciones en un botón.
-
Elegir la cantidad de parpadeos de la alarma con un potenciómetro.
-
Activar la alarma automáticamente si se detecta movimiento durante la noche (usando una fotocelda).
-
Señalizar estados del sistema con LEDs de colores.
Materiales Utilizados
-
Arduino UNO
-
3 LEDs: Rojo (alarma), Azul (pulsos detectados), Verde (configuración completada)
-
2 Pulsadores:
-
Uno para configurar
-
Uno para simular movimiento
-
-
1 Potenciómetro (configura nivel de alarma)
-
1 Fotocelda (detecta iluminación)
-
Resistencias adecuadas
-
Protoboard y cables
Flujo del Programa
1. Inicio del sistema (setup)
-
Configura pines como entrada/salida.
-
Apaga todos los LEDs.
-
Solicita al usuario por consola serial un número entre 1 y 3, que representa la duración de cada parpadeo de la alarma (en segundos).
2. Ciclo principal (loop)
a. Fase de conteo de pulsos iniciales
-
El usuario debe presionar el botón de configuración al menos 3 veces.
-
Al llegar a 3 pulsos:
-
Se enciende el LED azul, indicando que se puede continuar.
-
b. Fase de configuración de nivel
-
El usuario mueve el potenciómetro, y el sistema lee su valor.
-
El nivel se mapea de 1 a 5 y representa la cantidad de parpadeos de la alarma.
-
Este valor se muestra por consola serial.
-
Luego, el usuario debe volver a presionar el botón hasta llegar a 5 pulsos totales.
-
Se enciende el LED verde, indicando que la configuración ha finalizado correctamente.
c. Fase de vigilancia
-
El sistema lee la fotocelda para determinar si es de noche (
luz < 500). -
Si es de noche y se presiona el botón de movimiento (simulando movimiento):
-
Se activa la alarma.
-
Activación de la Alarma (activarAlarma)
-
El LED rojo parpadea según:
-
La duración configurada (
tiempoParpadeo) -
La cantidad de parpadeos (
nivelParpadeos)
-
-
Cada parpadeo es un ciclo de LED encendido y apagado por el tiempo configurado.
Comentarios
Publicar un comentario