#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Definir los pines
int potPin = 34; // Pin del potenciómetro
int pirPin = 23; // Pin del sensor PIR
int ldrPin = 35; // Pin del LDR
int ledPin = 25; // Pin del LED
// Crear una instancia del LCD (dirección 0x27 es común, verifica si tu LCD tiene una dirección diferente)
LiquidCrystal_I2C lcd(0x27, 20, 4);
void setup() {
// Inicializar el monitor serial
Serial.begin(115200);
// Inicializar el LCD
lcd.init();
lcd.backlight();
// Configurar los pines
pinMode(pirPin, INPUT);
pinMode(ledPin, OUTPUT);
}
void loop() {
float ldrLux = readLDR();
int pirValue = leerPIR();
int potValue = leerPotentiometer();
imprimirLCD(pirValue, ldrLux, potValue);
controlLED(potValue);
delay(500); // Esperar 500 ms antes de la siguiente lectura
}
// Subfunción para leer el valor del sensor LDR
float readLDR() {
int ldrValue = analogRead(ldrPin);
float voltage = ldrValue * (3.3 / 4095.0); // Convertir a voltaje
float lux = (500 / voltage); // Convertir a Lux (esto es una estimación, ajusta según tu configuración)
return lux;
}
// Subfunción para leer el valor del sensor PIR
int leerPIR() {
return digitalRead(pirPin);
}
// Subfunción para leer el valor del potenciómetro
int leerPotentiometer() {
return analogRead(potPin);
}
void imprimirLCD(int pirValue, int ldrLux, int potValue) {
// Limpiar la pantalla LCD
lcd.clear();
Serial.println("GR2-ET pilamunga");
// Mostrar los valores en el LCD
lcd.setCursor(0, 0); //A que altura se refleja el titulo en el LCD.
lcd.print("CONTROL DE SENSORES");
Serial.println("CONTROL DE SENSORES");//Imprimir en el Monitor Serial
lcd.setCursor(0, 1); //A que altura se refleja el dato del potencionemtro en el LCD.
lcd.print("POT: "); // Imprime el tema que querramos ponerle.
lcd.print(potValue);// Imprime los valores del sensor.
Serial.println(potValue);//Imprimir en el Monitor Serial
lcd.setCursor(0, 2); //A que altura se refleja el dato del LDR en el LCD.
lcd.print("FOT: "); // Imprime el tema que querramos ponerle.
lcd.print(ldrLux); // Imprime los valores del sensor.
Serial.println(ldrLux);//Imprimir en el Monitor Serial
// Esperar 1 segundo antes de la siguiente actualización
delay(1000);
}
// Controlar el LED basado en el valor del potenciómetro
void controlLED(int potValue) {
if (potValue > 1500) {
digitalWrite(ledPin, HIGH); // Encender el LED
lcd.setCursor(0, 3); //A que altura se refleja el dato PIR en el LCD.
lcd.print("PIR: "); // Imprime el sensor PIR
lcd.print("NOVEDADES"); // Si cumple la funcion se va asignar como novedades.
Serial.println("NOVEDADES");//Imprimir en el Monitor Serial
delay(2000); // Tiempo estimado de 2seg
} else {
digitalWrite(ledPin, LOW); // Apagar el LED
lcd.setCursor(0, 3); //A que altura se refleja el dato PIR en el LCD.
lcd.print("PIR: "); // Imprime el sensor PIR
lcd.print("S/N"); // Si cumple la funcion se va asignar como novedades.
Serial.println("S/N");//Imprimir en el Monitor Serial
delay(2000);// Tiempo estimado de 2seg
}
}