#include <Wire.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(22, 16, 23, 19, 18, 5, 17);
// Pines
const int pinLM35 = 15;
const int pinRelay = 4;
const int pinFanPWM = 0;
void setup() {
Serial.begin(115200);
// LCD
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print("Sistema Temp ON");
delay(200);
// Relé
pinMode(pinRelay, OUTPUT);
}
void loop() {
// Leer LM35
int lectura = analogRead(pinLM35);
float voltaje = lectura * (3.3 / 4095.0);
float temperatura = voltaje * 100.0;
// PWM inverso a temperatura
int pwmValor;
String estadoFan;
if (temperatura >= 40) {
pwmValor = 0;
estadoFan = "OFF";
digitalWrite(pinRelay, HIGH);
} else if (temperatura <= 25) {
pwmValor = 255;
estadoFan = "ALTO";
digitalWrite(pinRelay, LOW);
} else {
pwmValor = map(temperatura, 25, 40, 255, 0);
if (pwmValor > 170)
estadoFan = "ALTO";
else if (pwmValor > 80)
estadoFan = "MEDIO";
else
estadoFan = "BAJO";
}
// PWM con analogWrite (usa la librería especial)
analogWrite(pinFanPWM, pwmValor);
// Mostrar en LCD
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temperatura, 1);
lcd.print(" C ");
lcd.setCursor(0, 1);
lcd.print("Fan: ");
lcd.print(estadoFan);
lcd.print(" ");
// Serial
Serial.print("Temp: ");
Serial.print(temperatura);
Serial.print(" C | PWM: ");
Serial.println(pwmValor);
delay(1000);
}