#include <LiquidCrystal.h>
#include <DHT.h>
#include <math.h>
// ===== Configuración del LCD =====
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
// ===== Configuración del sensor DHT22 (solo para humedad) =====
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
// ===== Pines de sensores y actuador =====
const int pinLDR = A0;
const int pinTemp = A1; // Sensor NTC (temperatura)
const int pinLED = 13;
// ===== Umbral de oscuridad =====
const int umbralOscuridad = 500;
// ===== Constante Beta del NTC (según documentación oficial de Wokwi) =====
const float BETA = 3950.0;
void setup() {
lcd.begin(16, 2);
dht.begin();
pinMode(pinLED, OUTPUT);
Serial.begin(9600);
lcd.setCursor(0, 0);
lcd.print("Iniciando...");
delay(2000);
lcd.clear();
}
float calcularTemperaturaNTC(int analogValue) {
if (analogValue == 0) analogValue = 1; // evitar división por cero
float celsius = 1 / (log(1 / (1023.0 / analogValue - 1)) / BETA + 1.0 / 298.15) - 273.15;
return celsius;
}
void loop() {
// ===== Lectura de temperatura (NTC) =====
int lecturaTemp = analogRead(pinTemp);
float temperatura = calcularTemperaturaNTC(lecturaTemp);
// ===== Lectura de humedad (DHT22) =====
float humedad = dht.readHumidity();
// ===== Lectura del nivel de luz =====
int valorLDR = analogRead(pinLDR);
Serial.print("Valor LDR: ");
Serial.println(valorLDR);
Serial.print("Lectura NTC (analogRead): ");
Serial.println(lecturaTemp);
Serial.print("Temp calculada: ");
Serial.println(temperatura);
// ===== Verificar si el DHT dio error de lectura =====
if (isnan(humedad)) {
lcd.setCursor(0, 0);
lcd.print("Error sensor DHT");
} else {
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temperatura, 1);
lcd.print((char)223);
lcd.print("C ");
lcd.setCursor(0, 1);
lcd.print("Hum: ");
lcd.print(humedad, 1);
lcd.print("% ");
}
// ===== Control automático del LED según luz ambiental =====
if (valorLDR > umbralOscuridad) {
digitalWrite(pinLED, HIGH);
} else {
digitalWrite(pinLED, LOW);
}
delay(2000);
}