P09 - Sistema de monitorización de luz con alarma configurable
🌡️ P09 - Sistema de monitorización de luz con alarma configurable
ℹ️ Empieza aquí:
En esta práctica integrarás múltiples conceptos aprendidos anteriormente para construir un sistema embebido completo.
El sistema será capaz de:• Medir la luz ambiente con un LDR
• Mostrar el valor en el Monitor Serie
• Activar una alarma luminosa y acústica
• Permitir al usuario configurar el umbral de alarma mediante comandosEste tipo de arquitectura es la base de sistemas reales de monitorización médica, industrial y domótica.
🚀 Objetivos
• Integrar sensores, actuadores e interfaz serie.
• Leer y procesar entradas analógicas.
• Implementar lógica de decisión basada en umbrales.
• Permitir configuración desde el Monitor Serie.
• Diseñar un sistema embebido completo funcional.
🧩 Contenidos trabajados
• Lectura analógica (analogRead).
• Comunicación serie bidireccional.
• Variables configurables.
• Máquinas de estados simples.
• Integración de sistemas.
💻 Materiales y recursos
• Arduino UNO
• Protoboard
• 1 LDR
• 1 resistencia 10kΩ
• 1 LED rojo
• 1 LED verde
• 2 resistencias 220Ω
• 1 buzzer activo
• Cables
• Arduino IDE
🔧 Montaje práctico
LDR
Conectar divisor de tensión:
• LDR → 5V
• LDR → A0
• Resistencia → GND
LEDs
LED verde → pin 8
LED rojo → pin 9
Buzzer
Pin positivo → pin 10
Pin negativo → GND
🧭 Desarrollo de la práctica
Paso 1: Crear proyecto
Nombre:
P09_Monitor_Luz_ApellidoNombre
Paso 2: Declarar variables
int pinLDR = A0;
int pinLEDVerde = 8;
int pinLEDRojo = 9;
int pinBuzzer = 10;
int umbral = 500;
unsigned long tiempoAnterior = 0;
const unsigned long intervalo = 500;
Paso 3: Configurar setup()
void setup() {
pinMode(pinLEDVerde, OUTPUT);
pinMode(pinLEDRojo, OUTPUT);
pinMode(pinBuzzer, OUTPUT);
Serial.begin(9600);
Serial.println("Sistema monitor luz");
Serial.println("Enviar nuevo umbral (0–1023)");
}
Paso 4: Leer sensor
Dentro de loop():
int valorLuz = analogRead(pinLDR);
Paso 5: Mostrar datos
unsigned long tiempoActual = millis();
if (tiempoActual - tiempoAnterior >= intervalo) {
tiempoAnterior = tiempoActual;
Serial.print("Luz: ");
Serial.print(valorLuz);
Serial.print(" Umbral: ");
Serial.println(umbral);
}
Paso 6: Sistema alarma
if (valorLuz < umbral) {
digitalWrite(pinLEDVerde, LOW);
digitalWrite(pinLEDRojo, HIGH);
digitalWrite(pinBuzzer, HIGH);
}
else {
digitalWrite(pinLEDVerde, HIGH);
digitalWrite(pinLEDRojo, LOW);
digitalWrite(pinBuzzer, LOW);
}
Paso 7: Leer comandos serie
if (Serial.available() > 0) {
int nuevoUmbral = Serial.parseInt();
if (nuevoUmbral >= 0 && nuevoUmbral <= 1023) {
umbral = nuevoUmbral;
Serial.print("Nuevo umbral: ");
Serial.println(umbral);
}
}
📄 Código completo
int pinLDR = A0;
int pinLEDVerde = 8;
int pinLEDRojo = 9;
int pinBuzzer = 10;
int umbral = 500;
unsigned long tiempoAnterior = 0;
const unsigned long intervalo = 500;
void setup() {
pinMode(pinLEDVerde, OUTPUT);
pinMode(pinLEDRojo, OUTPUT);
pinMode(pinBuzzer, OUTPUT);
Serial.begin(9600);
Serial.println("Sistema monitor luz");
Serial.println("Enviar nuevo umbral (0–1023)");
}
void loop() {
int valorLuz = analogRead(pinLDR);
unsigned long tiempoActual = millis();
if (tiempoActual - tiempoAnterior >= intervalo) {
tiempoAnterior = tiempoActual;
Serial.print("Luz: ");
Serial.print(valorLuz);
Serial.print(" Umbral: ");
Serial.println(umbral);
}
if (valorLuz < umbral) {
digitalWrite(pinLEDVerde, LOW);
digitalWrite(pinLEDRojo, HIGH);
digitalWrite(pinBuzzer, HIGH);
}
else {
digitalWrite(pinLEDVerde, HIGH);
digitalWrite(pinLEDRojo, LOW);
digitalWrite(pinBuzzer, LOW);
}
if (Serial.available() > 0) {
int nuevoUmbral = Serial.parseInt();
if (nuevoUmbral >= 0 && nuevoUmbral <= 1023) {
umbral = nuevoUmbral;
Serial.print("Nuevo umbral: ");
Serial.println(umbral);
}
}
}
✅ Comprobación de funcionamiento
El sistema debe:
• Mostrar valores de luz
• Permitir cambiar el umbral
• Activar alarma automáticamente
📦 Entrega
• Código fuente
• Vídeo funcionamiento
• Captura Monitor Serie
📊 Rúbrica de evaluación
| Criterio | Excelente | Adecuado | Insuficiente |
|---|---|---|---|
| Lectura sensor | Correcta | Parcial | Incorrecta |
| Sistema alarma | Funciona | Parcial | Incorrecto |
| Comunicación serie | Funciona | Parcial | Incorrecto |
| Integración | Completa | Parcial | Incorrecta |
| Código | Profesional | Mejorable | Incorrecto |
🎯 Para pensar (opcional)
¿Cómo podrías guardar el umbral en memoria EEPROM para que no se pierda al apagar Arduino?