#include <Wire.h> // Incluye la librería Wire para la comunicación I2C
#include <LiquidCrystal_I2C.h> // Incluye la librería para controlar pantallas LCD a través de I2C
// Definición de pines
const int NTC_PIN = A0; // Pin analógico para el sensor NTC
const int LED_PIN = 2; // Pin digital para el LED
const int BUZZER_PIN = 3; // Pin digital para el zumbador
const int RELAY_PIN = 4; // Pin digital para el módulo de relé
// Constantes para el sensor NTC
const float BETA = 3950; // Constante B del termistor
const int THRESHOLD_TEMP = 30; // Temperatura umbral en grados Celsius
// Inicializa la pantalla LCD en la dirección 0x27 y un tamaño de 16x2
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
// Configura los pines como salidas
pinMode(LED_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(RELAY_PIN, OUTPUT);
// Inicializa la LCD y enciende la retroiluminación
lcd.init();
lcd.backlight();
// Inicia la comunicación serie para depuración
Serial.begin(9600);
}
void loop() {
// Lee el valor analógico del sensor NTC
int analogValue = analogRead(NTC_PIN);
// Calcula la temperatura en Celsius usando la fórmula del termistor
float celsius = 1.0 / (log(1.0 / (1023.0 / analogValue - 1)) / BETA + 1.0 / 298.15) - 273.15;
// Muestra la temperatura en la LCD
lcd.setCursor(0, 0); // Establece el cursor en la posición (0,0)
lcd.print("Temp: "); // Imprime "Temp: "
lcd.print(celsius); // Imprime la temperatura
lcd.print("C"); // Imprime "C" para grados Celsius
// Comprueba si la temperatura excede el umbral
if (celsius > THRESHOLD_TEMP) {
digitalWrite(LED_PIN, HIGH); // Enciende el LED
digitalWrite(BUZZER_PIN, HIGH); // Activa el zumbador
digitalWrite(RELAY_PIN, HIGH); // Activa el relé
} else {
digitalWrite(LED_PIN, LOW); // Apaga el LED
digitalWrite(BUZZER_PIN, LOW); // Desactiva el zumbador
digitalWrite(RELAY_PIN, LOW); // Desactiva el relé
}
// Imprime la temperatura en el monitor serie para depuración
Serial.print("Temperature: ");
Serial.print(celsius); // Imprime la temperatura
Serial.println(" "); // Nueva línea
delay(1000); // Espera 1 segundo antes de la próxima lectura
}