#include <Wire.h>
#include <LiquidCrystal.h>
// Pines para los LEDs
const int LED_VERDE_PIN = 23;
const int LED_ROJO_PIN = 22;
const int LED_AMARILLO_PIN = 0;
// Pin de entrada analógica para el termistor NTC
const int NTC_PIN = 13;
// Pin de control del zumbador
const int BUZZER_PIN = 12;
int valor; //Variable que guardara los datos de entrada del KY-013
// Umbral de temperatura para activar la alarma (ajustar según sea necesario)
const float UMBRAL_TEMPERATURA = 10;
const float UMBRAL_ADVERTENCIA = 5;
// LCD settings
LiquidCrystal lcd(15,2,4,5,18,19);
#define BUZZER_CHANNEL 0 // Define un canal para el zumbador
float R1 = 10000; // Valor de R1 de la PCB 10k
float logR2, R2, TK, TC,TF; //Elementos para realizar la ecuación
float A = 0.001129148, B= 0.000234125, C = 0.0000000876741; //Valores constantes considerando NTC de 10K y trabajando a una temperatura entre -55°C a +125°C
void setup() {
Serial.begin(115200);
lcd.begin(16, 2);
lcd.print("Temperatura:");
pinMode(BUZZER_PIN, OUTPUT);
pinMode(LED_VERDE_PIN, OUTPUT);
pinMode(LED_ROJO_PIN, OUTPUT);
pinMode(LED_AMARILLO_PIN, OUTPUT);
ledcSetup(BUZZER_CHANNEL, 2000, 8); // Configura el canal, la frecuencia y la resolución
// Indica que el sistema está funcionando
digitalWrite(LED_VERDE_PIN, HIGH);
}
void loop() {
valor = analogRead(NTC_PIN); //Se asigna los valores leídos a la variable valor
Serial.print("Valor Analógico:"); //Se imprimirá los valores del sensor
Serial.println(valor); // que va de 0-1023, esto para saber que que valores esta teniendo en reposo en termistor
valor = map (valor, 0, 270, 0, 50); //para evitar la exponencial, usaremos la función map
//en donde 0-270, serán los valores de entrada analógico vs 0-50 el valor de temperatura
//Conversión de valores analógicos a grados Celsius
R2 = R1 * (1023.0 / (float)valor - 1.0); //Calculo de la resistencia del termistor
logR2 = log(R2); //Calculo del logaritmo de la resistencia del termistor
TK = (1.0 / (A + B * logR2 + C * logR2 * logR2 * logR2)); // Temperatura en Kelvin
TC = TK - 273.15; //Conversión a Temperatura Celsius
TC=TC*(-1);
TF=(TC * 9/5) + 32;
lcd.setCursor(0, 1);
lcd.print(TC);
lcd.print("C");
if (TC > UMBRAL_ADVERTENCIA) {
digitalWrite(LED_AMARILLO_PIN, HIGH); // Enciende el LED Amarillo
}
else if (TC > UMBRAL_TEMPERATURA) {
// Hacer sonar el zumbador (si se utiliza un zumbador activo)
// Para un zumbador pasivo, esta parte depende de la configuración del circuito
tone(BUZZER_PIN, 1000); // Puedes ajustar la frecuencia para obtener un sonido diferente
digitalWrite(LED_ROJO_PIN, HIGH); // Enciende el LED rojo
} else {
noTone(BUZZER_PIN);
digitalWrite(LED_ROJO_PIN, LOW); // Apaga el LED rojo
digitalWrite(LED_AMARILLO_PIN, LOW); // Apaga el LED rojo
}
delay(500); // Espere 1 segundo antes de actualizar la temperatura
// Imprime la temperatura en el puerto serial
Serial.print("Temperatura Celsius: ");
Serial.print(TC);
Serial.println("C");
Serial.print("Temperatura Kelvin: ");
Serial.print(TK);
Serial.println("K");
}