///////////CANAL DE YOUTUBE.COM/@EFRAINRL ///////////////
//////CONFIGURACION DE LIBRERIAS, SINO LA TIENES TENDRIAS QUE INSTALARLAS ///////////
//////REVISA EL VIDEO ///////////
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
#include <Wire.h>
////// CONFIGURACION DEL LCD
LiquidCrystal_I2C lcd(0x27,16,2);
///// CONFIGURAR EL PIN DONDE SE CONECTARA EL SENSOR (PIN 2) /////////////
#define ONE_WIRE_BUS 2
///// CONFIGURACION PARA EL SENSOR DS18B20
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
//////////MOSTRAR EL SIMBOLO DE GRADOS ///////////
byte grados[8] = {
0b01100,
0b10010,
0b10010,
0b01100,
0b00000,
0b00000,
0b00000,
0b00000
};
//////////DECLARANDO VARIABLES PARA EL TECLADO MATRICIAL //////////////
char key;
byte SPkeypad;
byte T,setPoint;
byte setSP, f_init;
//////// TECLADO MATRICIAL 4X4 //////////
const byte ROWS=4;
const byte COLS=4;
char keys[ROWS][COLS]={
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
//////////PINES DE TECLADO MATRICIAL ////////
byte rowPins[ROWS]={11,10,9,8};
byte colPins[COLS]={7,6,5,4};
Keypad keypad = Keypad(makeKeymap(keys),rowPins, colPins, ROWS, COLS);
///////PINES DE SALIDA A RELEVADOR PARA FOCO Y VENTILADOR //////////
int relevador = 12;
int relevador2 =13;
/////////// INICIA VOID SETUP ///////////
void setup(){
//// INICIALIZAMOS EL SENSOR DS18B20 ////
sensors.begin();
///// INICIALIZAMOS EL LCD CON I2C ////
lcd.init();
///// DECLARAMOS PIN 12 Y 13 COMO SALIDA PARA LOS RELEVADORES ///////
pinMode(relevador,OUTPUT);
pinMode(relevador2, OUTPUT);
///////////ENCENDEMOS EL BLACKLIGHT DEL LCD ////////////
lcd.backlight();
lcd.createChar(1, grados);
lcd.begin(16, 2);
/////// MENSAJE DE BIENVENIDA //////////////
lcd.print("CONTROL TEMP");
lcd.setCursor(0, 1);
lcd.print("SG NORTEC - Lab. Temperatura");
delay(1500);
lcd.clear();
setPoint=35;
}
void loop(){
///// COMENZAMOS CON LA LECTURA DE LA TEMPERATURA ///////////////
sensors.requestTemperatures();
////TEXTO DE INICIO
lcd.setCursor(0,0);
lcd.print("SP=");
////// VARIABLE DONDE GUARDAMOS LA TEMPERATURA QUE DESEAMOS //////////////
lcd.print(setPoint);
lcd.write(1);
lcd.print("C ");
lcd.setCursor(8, 0);
//////// IMPRIMIMOS LA TEMPERATURA DEL SENSOR ///////////////
lcd.print("T=");
lcd.print(sensors.getTempCByIndex(0));
lcd.write(1);
lcd.print("C ");
///// COMENZAMOS A LEER LOS DATOS DEL TECLADO ////////////
leerKeypad();
/////////////// ERROR, SI LA TEMPERATURA DEL SENSOR ES MAYOR A 100, SE PUEDE MODIFICAR //////////
if(sensors.getTempCByIndex(0) >= 100){
error();
setup();
} ////ERROR SI LA TEMPERATURA ES MAYOR A 100 DEL SET POINT ///////////////
if(setPoint >= 100){
error();
setup();
}
else {
loop();
}
}
///////// RUTINA CUANDO HAYA UN ERROR EN EL SISTEMA Y LA TEMPERATURA SEA MAYOR A 100 /////////////
void error(){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Fuera de rango");
lcd.setCursor(0,1);
lcd.print("Sistema OFF");
delay(2000);
digitalWrite(relevador,LOW);
digitalWrite(relevador2,LOW);
}
//////// RUTINA PARA LEER EL DATO DEL TECLADO MATRICIAL //////////////////
void leerKeypad(){
key=keypad.getKey();
if(key != NO_KEY){
///////////TECLA CON LA QUE SE CONFIGURA LA TEMPERATURA (*) ////////////////////
if (key=='*'){
lcd.clear();
lcd.print("Configurar Temp");
delay(1000);
lcd.clear();
lcd.print("ST= ");
lcd.write(2);
lcd.print((char)223);
lcd.print("C");
lcd.blink();
lcd.setCursor(3,0);
////////// BYTE PARA QUE PODAMOS RECONOCER LAS DECENAS Y UNIDADES //////////////
byte kursor = 3;
byte final=1;
do{
key=keypad.getKey();
if(key != NO_KEY){
if (key!='*' && key!='#' && kursor<5){
lcd.print(key);
/////////// PARA RECONOCER ASCII COMO BINARIO -48 /////////////
key=key-48;
SPkeypad=SPkeypad*10;
SPkeypad=SPkeypad+key;
kursor++;
lcd.setCursor(kursor,0);
}
///// DETENEMOS LA LECTURA DE LOS DATOS
else if (key=='#' && kursor==5){
final=0;
}
}
//////////// GUARDAMOS LA TEMPERATURA///////////
if(kursor==5){
lcd.noBlink();
lcd.setCursor(0,1);
lcd.print("Guardar Temp #");
}
}
/////////MENSAJE CUANDO AJUSTAMOS LA TEMPERATURA///////////////
while(final);
setPoint = SPkeypad;
SPkeypad = 0;
f_init=0;
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Temperatura");
lcd.setCursor(0,1);
lcd.print("Ajustada");
delay(500);
lcd.clear();
}
}
////////// CONFIGURACION DE SALIDAS A RELEVADOR ////////////////
///////////////////// CALEFACCION ///////////////////////////
if(sensors.getTempCByIndex(0)<=(setPoint)){
lcd.setCursor(0,1);
//////// RELEVADORES ENCENDIDOS ///////////
lcd.print("Set=* Termo ON ");
digitalWrite(relevador, HIGH);
digitalWrite(relevador2, HIGH);
}
///////// RELEVADORES APAGADOS //////////
else if(sensors.getTempCByIndex(0)>=setPoint){
lcd.setCursor(0,1);
lcd.print("Set=* Termo OFF");
digitalWrite(relevador,LOW);
digitalWrite(relevador2,LOW);
}
}