#include <Arduino.h>
float temperatura; // se definen las variables locales.
float tempAnt;
int pinlm35 = 5; // El LM35 va conectado a una entrada anolgica, en este caso se define en 5
int Relepin = 8; // El rele va conectado a una salida digital, a la salida 8
String datorecibido; // Dato recibido que va a ser la temperatura que se establece como limite
char val; // variable tipo texto para enviar recibir letras y comandos por puerto serie
int variableT = 0;
bool leyendotemp = false;
bool desactivoRele = false, desactivoReleAnt;
bool activaLM35 = false, activaLM35Ant;
void setup() {
Serial.begin(9600); //se activa el puerto serie comun del arduino
pinMode(pinlm35, INPUT); //se configura el LM35 como entrada analoga
pinMode(Relepin, OUTPUT); //se configura el Relay como salida digital
digitalWrite(Relepin, HIGH); //se establece desde un principio un voltaje HIGH, para evitar que el rele funcione.
}
void loop() {
while (Serial.available()> 0) {
val = Serial.read();// Si el pto serie esta disponible lee el valor enviado por el bluetooth datorecibido = String(""); //se recibe el dato desde el bluetooth
// BOTON parada de emergencia, si es A apaga el sistema// la bobina del rele arduino se apaga con 1
switch (val) {
// BOTON parada de emergencia, si es A apaga el sistema
// la bobina del rele arduino se apaga con 1
case 'A': desactivoRele = true;
Serial.println("Pasé por A");
break;
// BOTON PARA ENCENDIDO MANUAL, si es b enciende el sistema
// la bobina del rele arduino se acciona con 0
case 'B': desactivoRele = false;
Serial.println("Pasé por B");
break;
// como el dato se recibe en forma de caracteres,
case '0'...'9': //Serial.println(datorecibido);
leyendotemp = true;
datorecibido += val;
break;
case 0x0a: if (leyendotemp) {
//Serial.println("Recibido : "+ datorecibido);
variableT = datorecibido.toInt();
//Serial.println("variableT : "+ String(variableT));
leyendotemp = false;
datorecibido = ""; //se recibe el dato desde el bluetooth
}
break;
}
}
temperatura = 500.0 * analogRead(pinlm35) / 1023.0; // se hace la conversion de la entrada analoga a un valor
// de temperatura en °C, mediante la ecuacion dada
if (tempAnt != temperatura)
Serial.println(temperatura); // se imprime el valor de la temperatura
tempAnt = temperatura;
//Se programa para que cuando la lectura de temperatura sea mayor a 31, se desactive el rele
if (temperatura > 31.0) {
activaLM35 = true;
desactivoRele = false;
}
//Se programa para que cuando la lectura de temperatura sea menor a la temperatura recibida por el bluetooth, se active el rele
if (temperatura <= variableT) {
activaLM35 = false;
}
if (activaLM35 != activaLM35Ant) {
Serial.println(activaLM35?"activaLM35 ON":"activaLM35 OFF");
// si la temp > 31 o se activo 'a' boton emergencia el rele se apaga
if (activaLM35) {
digitalWrite(Relepin, HIGH); // rele desactivado
Serial.println("Desactivo Horno");
}
// la opcion manual debe estar en falso para que funcione auto
if (!activaLM35 && !desactivoRele ) {
digitalWrite(Relepin, LOW);
Serial.println("Activo Horno");
}
}
activaLM35Ant = activaLM35;
if (desactivoReleAnt != desactivoRele) {
Serial.println(desactivoRele?"desactivoRele ON":"desactivoRele OFF");
if (desactivoRele) {
digitalWrite(Relepin, HIGH); // rele desactivado
Serial.println("Desactivo Horno");
}
if (!desactivoRele && !activaLM35) {
digitalWrite(Relepin, LOW);
Serial.println("Activo Horno");
}
}
desactivoReleAnt = desactivoRele;
}