#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal.h>
// Definir pines para los componentes
#define DHT_PIN 10
#define PIR_PIN 1
#define LDR_PIN A0
#define LED_AZUL_PIN 9
#define LED_CELESTE_PIN 0
#define BUZZER_PIN 11
#define LED_PIR_12_PIN 12
#define LED_PIR_13_PIN 13
// Definir umbrales para los sensores
#define TEMP_MIN 10
#define TEMP_MAX 50
#define HUMIDITY_MIN 5
#define HUMIDITY_MAX 80
#define LIGHT_MIN 15
#define LIGHT_MAX 95
// Inicializar objetos
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
DHT dht(DHT_PIN, DHT22);
void setup() {
Serial.begin(9600);
Serial.println("Iniciando el programa...");
// Inicializar pines
pinMode(PIR_PIN, INPUT);
pinMode(LED_AZUL_PIN, OUTPUT);
pinMode(LED_CELESTE_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(LED_PIR_12_PIN, OUTPUT);
pinMode(LED_PIR_13_PIN, OUTPUT);
// Inicializar el display LCD
lcd.begin(16, 2);
// Inicializar el sensor de temperatura y humedad
dht.begin();
}
void loop() {
// Obtener lecturas de los sensores
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
int lightValue = analogRead(LDR_PIN);
// Imprimir valores en el monitor serial
Serial.print("Temperatura: ");
Serial.println(temperature);
Serial.print("Humedad: ");
Serial.println(humidity);
Serial.print("Luz: ");
Serial.println(lightValue);
// Mostrar niveles actuales en el LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" L: ");
lcd.print(lightValue);
lcd.print(" T: ");
lcd.print(temperature);
lcd.setCursor(0, 1);
lcd.print(" C H: ");
lcd.print(humidity);
lcd.print("%");
// Imprimir estado del sensor PIR
Serial.print("PIR: ");
Serial.println(digitalRead(PIR_PIN));
// Comprobar temperatura y humedad
if (temperature < TEMP_MIN || temperature > TEMP_MAX ||
humidity < HUMIDITY_MIN || humidity > HUMIDITY_MAX) {
// Activar alarma
activateAlarm('T'); // T para temperatura
}
// Comprobar movimiento
if (digitalRead(PIR_PIN) == HIGH) {
// Activar alarma
activateAlarm('P'); // P para presencia
}
// Comprobar luz y controlar LEDs
checkAndControlLights(lightValue);
// Comprobar luz y activar alarma
if (lightValue < LIGHT_MIN || lightValue > LIGHT_MAX) {
// Activar alarma
activateAlarm('L'); // L para luz
}
// Comprobar luz y controlar LEDs
checkAndControlLights(lightValue);
}
void activateAlarm(char sensorCode) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Alarma activada:");
lcd.setCursor(0, 1);
lcd.print("Sensor: ");
lcd.print(sensorCode);
digitalWrite(BUZZER_PIN, HIGH);
digitalWrite(LED_PIR_12_PIN, HIGH); // Encender el LED asociado al PIR en el pin 12
digitalWrite(LED_PIR_13_PIN, HIGH); // Encender otro LED asociado al PIR en el pin 13
delay(1000); // Puedes ajustar el tiempo de activación del zumbador
// Restaurar estado inicial
digitalWrite(BUZZER_PIN, LOW);
digitalWrite(LED_PIR_12_PIN, LOW); // Apagar el LED asociado al PIR en el pin 12
digitalWrite(LED_PIR_13_PIN, LOW); // Apagar otro LED asociado al PIR en el pin 13
lcd.clear();
delay(1000); // Puedes ajustar el tiempo entre alarmas
}
void checkAndControlLights(int lightValue) {
// Controlar el LED azul
if (lightValue < LIGHT_MIN || lightValue > LIGHT_MAX) {
digitalWrite(LED_AZUL_PIN, HIGH); // Encender el LED azul
} else {
digitalWrite(LED_AZUL_PIN, LOW); // Apagar el LED azul
}
// Controlar el LED celeste según las unidades LUX
if (lightValue < LIGHT_MIN || lightValue > LIGHT_MAX) {
digitalWrite(LED_CELESTE_PIN, HIGH); // Encender el LED celeste
} else {
digitalWrite(LED_CELESTE_PIN, LOW); // Apagar el LED celeste
}
}