// Definición de constantes para el sensor y el control
#define ADC_VREF_mV 5000.0 // Voltaje de referencia del ADC en milivoltios
#define ADC_RESOLUTION 1024.0 // Resolución del ADC
#define histHaciaArriba 1.0 // Banda de histéresis hacia arriba
#define histHaciaAbajo 1.0 // Banda de histéresis hacia abajo
// Definición de pines
#define PIN_LM35 A0 // Pin al que está conectado el sensor de temperatura LM35
#define PIN_LED 3 // Pin de conexión del LED (representa un ventilador)
// Variables para el control de temperatura
float setPoint = 22.0; // Variable que almacena el valor del Set Point
void setup() {
Serial.begin(9600); // Inicializa la comunicación serial a 9600 baudios
pinMode(PIN_LED, OUTPUT); // Configura el pin del LED como salida
digitalWrite(PIN_LED, LOW); // Apaga el LED (o ventilador) inicialmente
// Solicitar y configurar el valor de setPoint desde el monitor serial
Serial.println("Por favor, ingrese el valor de Set Point (en grados Celsius): ");
while (!Serial.available()) {
// Esperar hasta que se ingrese un valor
}
setPoint = Serial.parseFloat(); // Lee el valor ingresado desde el monitor serial
Serial.print("Set Point configurado a: ");
Serial.print(setPoint);
Serial.println(" °C");
}
void loop() {
// Obtener el valor del ADC desde el sensor de temperatura
int adcVal = analogRead(PIN_LM35);
// Convertir el valor del ADC a voltaje en milivoltios
float milliVolt = adcVal * (ADC_VREF_mV / ADC_RESOLUTION);
// Convertir el voltaje a temperatura en grados Celsius
float tempC = milliVolt / 10;
// Imprimir la temperatura en el Monitor Serial:
Serial.print("Temperatura: ");
Serial.print(tempC); // Imprimir la temperatura en grados Celsius
Serial.println("°C");
// Control ON-OFF
if (tempC >= (setPoint + histHaciaArriba)) {
digitalWrite(PIN_LED, HIGH); // Enciende el dispositivo de control
} else if (tempC <= (setPoint - histHaciaAbajo)) {
digitalWrite(PIN_LED, LOW); // Apaga el dispositivo de control
}
delay(1000); // Espera 1 segundo antes de la siguiente lectura y acción
}