#include #include #include int menu = 0; //VARIABLE PARA PODER DESPLAZARME POR EL MENÚ int SP1 = 60; //SETPOINT DE TEMP ESTABLECIDO POR DEFECTO EN EL TERMO, PARA QUE SE MANDE H2O A LOS RADIADORES int SP2 = 55; //SETPOINT DE TEMP ESTABLECIDO POR DEFECTO DEL H2O A LA SALIDA DE LA ESTUFA int SP3 = 85; //SETPOINT DE TEMP MAXIMA ESTABLECIDA POR DEFECTO EN EL TERMO bool o_n = 0; // VARIABLE PARA ACTIVAR LAS BOMBA HACIA LOS RADIADORES SI SE DEMANDA Y SE CUMPLE EL SETPOINT ESTABLECIDO bool o_n2 = 0; // VARIABLE PARA ACTIVAR LAS BOMBA HACIA LOS RADIADORES DE LA COMPARACION SI ES MAX LA TEMP DEL TERMO LiquidCrystal_I2C LCD1(0x27,20,4); //DECLARANDO UN OBJETO DEL TIPO DISPLAY unsigned long t; //VARIABLE PARA TRABAJAR CON MILLIS EN EL ENCENDIDO DE LA LUZ DE FONDO DEL DISPLAY unsigned long t1; //VARIABLE PARA TRABAJAR CON MILLIS EN EL MOSTRADO DE DATOS bool PISO_1 = 0; //VARIABLE QUE ALMACENA LA ACTIVACIÓN DEL TERMOSTATO DEL PISO 1 bool PISO_2 = 0; //VARIABLE QUE ALMACENA LA ACTIVACIÓN DEL TERMOSTATO DEL PISO 2 byte grados[8] = { 0b00000111, 0b00000101, 0b00000111, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, }; void setup() { // put your setup code here, to run once: pinMode(13, OUTPUT); //DECLARANDO PIN 13 COMO SALIDA PARA LA ACT/DESACTIVACIÓN DE LA BOMBA HACIA TERMO pinMode(12, OUTPUT); //DECLARANDO PIN 12 COMO SALIDA PARA LA ACT/DESACTIVACIÓN DE LA BOMBA HACIA RADIADORES PISO 1 pinMode(11, OUTPUT); //DECLARANDO PIN 11 COMO SALIDA PARA LA ACT/DESACTIVACIÓN DE LA BOMBA HACIA RADIADORES PISO 2 pinMode(10, INPUT); //DECLARANDO PIN 10 COMO ENTRADA DE ACT/DESACTIVACIÓN TERMOSTATO PISO 1 pinMode(9, INPUT); //DECLARANDO PIN 9 COMO ENTRADA DE ACT/DESACTIVACIÓN TERMOSTATO PISO 2 pinMode(8, INPUT); //DECLARANDO PIN 8 COMO ENTRADA DEL BOTON DE SELECCIONAR LOS SETPOINTS pinMode(7, INPUT); //DECLARANDO PIN 7 COMO ENTRADA DEL BOTON QUE DISMINUYE EL SETPOINT pinMode(6, INPUT); //DECLARANDO PIN 6 COMO ENTRADA DEL BOTON QUE AUMENTA EL SETPOINT LCD1.init(); //INICIALIZANDO DISPLAY LCD1.backlight(); //ACTIVANDO LUZ DE FONDO DISPLAY LCD1.setCursor(3,0); //COLOCANDO CURSOR DISPLAY LCD1.print("PERICO PEREZ SL"); //IMPRIMIENDO DONDE ESTÁ EL CURSOR LCD1.setCursor(0,1); //COLOCANDO EL CURSOR DISPLAY LCD1.print("Control Temperatura"); //IMPRIMIENDO DONDE ESTÁ EL CURSOR LCD1.setCursor(11,3); //COLOCANDO CURSOR DISPLAY LCD1.print("By ARTURO"); //IMPRIMIENDO DONDE ESTÁ EL CURSOR LCD1.createChar (0, grados); //CREANDO CARACTER GRADOS t = millis(); t1 = millis(); Serial.begin(9600);//Recuerda ajustar to monitor serial a 9600 } //FUNCIÓN QUE MIDE LA TEMPERATURA EN FUNCIÓN DE LOS PARÁMETROS DE CADA NTC---ECUACION Steinhart-Hart double TermistorNTC(int RawADC) { double Temp; Temp = log(((10240000/RawADC) - 9990)); Temp = 1 / (0.002343861912 + (0.00004746015750 + (0.0000007387844497 * Temp * Temp ))* Temp ); //PARÁMETROS CALCULADOS https://www.thinksrs.com/downloads/programs/Therm%20Calc/NTCCalibrator/NTCcalculator.htm Temp = Temp - 273.15;// Convierte de Kelvin a Celsius return Temp; } //FUNCIÓN QUE MIDE LA TEMPERATURA EN FUNCIÓN DE LOS PARÁMETROS DE CADA NTC---ECUACION Steinhart-Hart double TermistorNTC1(int RawADC) { double Temp1; Temp1 = log(((10240000/RawADC) - 9990)); Temp1 = 1 / (0.002036039101 + (0.00009106506794 + (0.0000006157252906 * Temp1 * Temp1 ))* Temp1 ); //PARÁMETROS CALCULADOS https://www.thinksrs.com/downloads/programs/Therm%20Calc/NTCCalibrator/NTCcalculator.htm Temp1 = Temp1 - 273.15;// Convierte de Kelvin a Celsius return Temp1; } //FUNCIÓN QUE MIDE LA TEMPERATURA EN FUNCIÓN DE LOS PARÁMETROS DE CADA NTC---ECUACION Steinhart-Hart double TermistorNTC2(int RawADC) { double Temp2; Temp2 = log(((10240000/RawADC) - 9990)); Temp2 = 1 / (0.002064939141 + (0.00008349295632 + (0.0000006655146377 * Temp2 * Temp2 ))* Temp2 ); //PARÁMETROS CALCULADOS https://www.thinksrs.com/downloads/programs/Therm%20Calc/NTCCalibrator/NTCcalculator.htm Temp2 = Temp2 - 273.15;// Convierte de Kelvin a Celsius return Temp2; } void loop() { // put your main code here, to run repeatedly: int A0; // LECTURA DE LA ENTRADA ANALOG 1 CORRESPONDIENTE A LA TEMPERATURA 1 DEL TERMO int A1; // LECTURA DE LA ENTRADA ANALOG 2 CORRESPONDIENTE A LA TEMPERATURA 2 DEL H2O DE LA ESTUFA int A2; // LECTURA DE LA ENTRADA ANALOG 3 CORRESPONDIENTE A LA MAXIMA TEMPERATURA DEL TERMO double T1; // VARIABLE PROCESADA Q CONTIENE LA TEMPERATURA 1 DEL TERMO double T2; // VARIABLE PROCESADA Q CONTIENE LA TEMPERATURA 2 DEL H2O DE LA ESTUFA double T3; // VARIABLE PROCESADA Q CONTIENE LA TEMPERATURA 3 MAXIMA DEL TERMO A0 = analogRead(0); // LEYENDO EL VALOR DE LA T1 POR LA ENTRADA DIGITAL 0 Y PONIENDOLO EN LA VARIABLE TEMPORAL A0 A1 = analogRead(1); // LEYENDO EL VALOR DE LA T2 POR LA ENTRADA DIGITAL 1 Y PONIENDOLO EN LA VARIABLE TEMPORAL A1 A2 = analogRead(2); // LEYENDO EL VALOR DE LA T3 POR LA ENTRADA DIGITAL 2 Y PONIENDOLO EN LA VARIABLE TEMPORAL A3 T1 = TermistorNTC(A0); //LLAMANDO A LA FUNCION QUE CONVIERTE A TEMPERATURA EL VOLTAJE DE LA ENTRADA EN CUESTIÓN T2 = TermistorNTC(A1); //LLAMANDO A LA FUNCION QUE CONVIERTE A TEMPERATURA EL VOLTAJE DE LA ENTRADA EN CUESTIÓN T3 = TermistorNTC(A2); //LLAMANDO A LA FUNCION QUE CONVIERTE A TEMPERATURA EL VOLTAJE DE LA ENTRADA EN CUESTIÓN int entrarmenu = 1; //VARIABLE PARA PODER SALIR DE LA CONFIGURACION DE SETPOINTS bool L = 0; //VARIABLE PARA PODER ILUMINAR EL DISPLAY //LCD1.noBacklight(); //LCD1.clear(); //LCD1.setCursor(3,0); //COLOCANDO CURSOR DISPLAY //LCD1.print("PERICO PEREZ SL"); //IMPRIMIENDO DONDE ESTÁ EL CURSOR //LCD1.setCursor(0,1); //COLOCANDO EL CURSOR DISPLAY //LCD1.print("Control Temperatura"); //IMPRIMIENDO DONDE ESTÁ EL CURSOR //LCD1.setCursor(11,3); //COLOCANDO CURSOR DISPLAY //LCD1.print("By ARTURO"); //delay(1000); if ((digitalRead(8) == 0) || (digitalRead(7) == 0) || (digitalRead(6) == 0)) { L = 1; } //IMPRIMIENDO LOS VALORES DE TEMPERATURA Y SETPOINTS //TEMPERATURA Y SETPOINT DEL TERMO if(millis() - t1 > 3000) { LCD1.clear(); //LIMPIA EL DISPLAY LCD1.noBacklight(); LCD1.setCursor(4,0); LCD1.print("TEMPERATURAS"); LCD1.setCursor(0,1); LCD1.print("TERMO"); LCD1.setCursor(5,1); LCD1.print("="); LCD1.print(T1); LCD1.setCursor(13,1); LCD1.print("SP"); LCD1.setCursor(15,1); LCD1.print("="); LCD1.print(SP1); LCD1.setCursor(18,1); LCD1.write((byte)0); LCD1.print("C"); //TEMPERATURA Y SETPOINT DEL AGUA DE LA ESTUFA LCD1.setCursor(0,2); LCD1.print("ESTUF"); LCD1.setCursor(5,2); LCD1.print("="); LCD1.print(T2); LCD1.setCursor(13,2); LCD1.print("SP"); LCD1.setCursor(15,2); LCD1.print("="); LCD1.print(SP2); LCD1.setCursor(18,2); LCD1.write((byte)0); LCD1.print("C"); //TEMPERATURA Y SETPOINT MÁXIMA DEL AGUA DEL TERMO LCD1.setCursor(0,3); LCD1.print("+TERM"); LCD1.setCursor(5,3); LCD1.print("="); LCD1.print(T3); LCD1.setCursor(13,3); LCD1.print("SP"); LCD1.setCursor(15,3); LCD1.print("="); LCD1.print(SP3); LCD1.setCursor(18,3); LCD1.write((byte)0); LCD1.print("C"); if (L == 1) //COMPROBANDO SI HAN SOLICITADO ILUMINAR EL DISPLAY { LCD1.backlight(); } delay(2500); t1 = millis(); }else { LCD1.noBacklight(); LCD1.clear(); LCD1.setCursor(3,0); //COLOCANDO CURSOR DISPLAY LCD1.print("PERICO PEREZ SL"); //IMPRIMIENDO DONDE ESTÁ EL CURSOR LCD1.setCursor(0,1); //COLOCANDO EL CURSOR DISPLAY LCD1.print("Control Temperatura"); //IMPRIMIENDO DONDE ESTÁ EL CURSOR LCD1.setCursor(11,3); //COLOCANDO CURSOR DISPLAY LCD1.print("By ARTURO"); delay(1000); } //delay(1000); //Serial.println(1); //Serial.println(T1);//Escribe la temperatura en el monitor serial //delay(1000); //Serial.println(2); //Serial.println(T2);//Escribe la temperatura en el monitor serial //delay(1000); //Serial.println(3); //Serial.println(T3);//Escribe la temperatura en el monitor serial //delay(1000); //Serial.println("SETPOINT H2O TERMO"); //Serial.println(SP1); //delay(1000); //Serial.println("SETPOINT H2O ESTUF"); //Serial.println(SP2); //delay(1000); //Serial.println("SETPOINT MAX H2O TERMO"); //Serial.println(SP3); //delay(1000); if((digitalRead(7) == 0) && (digitalRead(6) == 0)) { LCD1.backlight(); LCD1.clear(); LCD1.setCursor(8,0); LCD1.print("MENU"); //Serial.println("MENU"); unsigned long start = millis() + 120000UL; while(entrarmenu == 1 && millis() < start) { if((digitalRead(8)) == 0) { if(menu == 4) { menu = 0; } menu++; while(!digitalRead(8)); switch(menu){ case 1: LCD1.clear(); LCD1.setCursor(8,0); LCD1.print("MENU"); LCD1.setCursor(0,1); LCD1.print("TEMP H2O TERMO"); LCD1.setCursor(16,1); LCD1.print(SP1); LCD1.setCursor(18,1); LCD1.write((byte)0); LCD1.print("C"); //Serial.println("SP1"); //Serial.println(SP1); break; case 2: LCD1.clear(); LCD1.setCursor(8,0); LCD1.print("MENU"); LCD1.setCursor(0,2); LCD1.print("TEMP H2O ESTUF"); LCD1.setCursor(16,2); LCD1.print(SP2); LCD1.setCursor(18,2); LCD1.write((byte)0); LCD1.print("C"); //Serial.println("SP2"); //Serial.println(SP2); break; case 3: LCD1.clear(); LCD1.setCursor(8,0); LCD1.print("MENU"); LCD1.setCursor(0,3); LCD1.print("TEMP +H2O TERMO"); LCD1.setCursor(16,3); LCD1.print(SP3); LCD1.setCursor(18,3); LCD1.write((byte)0); LCD1.print("C"); //Serial.println("SP3"); //Serial.println(SP3); break; case 4: LCD1.clear(); LCD1.setCursor(8,0); LCD1.print("MENU"); LCD1.setCursor(0,1); LCD1.print("SALIR CONFIGURACION"); LCD1.setCursor(0,2); LCD1.print("PULSE BOTON SUBIR"); //Serial.println("SALIR MENU"); break; } //while(!digitalRead(8)); } //BAJANDO SETPOINTS if (digitalRead(7) == 0) { if (menu == 1) { if (SP1 <= 50) { SP1 = 50; } SP1 = SP1 -1; LCD1.clear(); LCD1.setCursor(8,0); LCD1.print("MENU"); LCD1.setCursor(0,1); LCD1.print("TEMP H2O TERMO"); LCD1.setCursor(16,1); LCD1.print(SP1); LCD1.setCursor(18,1); LCD1.write((byte)0); LCD1.print("C"); //Serial.println(SP1); while(!digitalRead(7)); } } if (digitalRead(7) == 0) { if (menu == 2) { if (SP2 <= 45) { SP2 = 45; } SP2 = SP2 - 1; LCD1.clear(); LCD1.setCursor(8,0); LCD1.print("MENU"); LCD1.setCursor(0,2); LCD1.print("TEMP H2O ESTUF"); LCD1.setCursor(16,2); LCD1.print(SP2); LCD1.setCursor(18,2); LCD1.write((byte)0); LCD1.print("C"); //Serial.println(SP2); while(!digitalRead(7)); } } if (digitalRead(7) == 0) { if (menu == 3) { if (SP3 <= 80) { SP3 = 80; } SP3 = SP3 - 1; LCD1.clear(); LCD1.setCursor(8,0); LCD1.print("MENU"); LCD1.setCursor(0,3); LCD1.print("TEMP +H2OTERMO"); LCD1.setCursor(16,3); LCD1.print(SP3); LCD1.setCursor(18,3); LCD1.write((byte)0); LCD1.print("C"); //Serial.println(SP3); while(!digitalRead(7)); } } //SUBIENDO SETPOINTS if (digitalRead(6) == 0) { if (menu == 1) { if (SP1 >= 80) { SP1 = 80; } SP1 = SP1 + 1; LCD1.clear(); LCD1.setCursor(8,0); LCD1.print("MENU"); LCD1.setCursor(0,1); LCD1.print("TEMP H2O TERMO"); LCD1.setCursor(16,1); LCD1.print(SP1); LCD1.setCursor(18,1); LCD1.write((byte)0); LCD1.print("C"); //Serial.println(SP1); while(!digitalRead(6)); } } if (digitalRead(6) == 0) { if (menu == 2) { if (SP2 >= 65) { SP2 = 65; } SP2 = SP2 + 1; LCD1.clear(); LCD1.setCursor(8,0); LCD1.print("MENU"); LCD1.setCursor(0,2); LCD1.print("TEMP H2O ESTUF"); LCD1.setCursor(16,2); LCD1.print(SP2); LCD1.setCursor(18,2); LCD1.write((byte)0); LCD1.print("C"); //Serial.println(SP2); while(!digitalRead(6)); } } if (digitalRead(6) == 0) { if (menu == 3) { if (SP3 >= 90) { SP3 = 90; } SP3 = SP3 + 1; LCD1.clear(); LCD1.setCursor(8,0); LCD1.print("MENU"); LCD1.setCursor(0,3); LCD1.print("TEMP +H2OTERMO"); LCD1.setCursor(16,3); LCD1.print(SP3); LCD1.setCursor(18,3); LCD1.write((byte)0); LCD1.print("C"); //Serial.println(SP3); while(!digitalRead(6)); } } //SALIENDO DEL MENU if (digitalRead(6) == 0) { if (menu == 4) { entrarmenu = 2; menu = 0; //Serial.println("FIN CONFIG"); while(!digitalRead(6)); } } } //FIN WHILE LCD1.noBacklight(); } //FIN ENTRAR EN CONFIGURAC PISO_1 = digitalRead(10); PISO_2 = digitalRead(9); if (o_n == 1 || o_n2 == 1) { digitalWrite(12, HIGH); } else { digitalWrite(12, LOW); } //ENCUESTANDO SI SE ACTIVA LA SEÑAL DEL TERMOSTATO DEL PISO 1 Y SI LA TEMP DEL TERMO CUMPLE PARA PODER HACER PASAR EL H2O HACIA LOS RADIADORES if (PISO_1 == HIGH && T1 >= SP1 ){ o_n = 1; //digitalWrite(12, HIGH); //ACTIVANDO LA BOMBA DE SUMINISTRO DE AGUA A 60C HACIA LOS RADIADORES } else { o_n = 0; //digitalWrite(12, LOW); } //ENCUESTANDO SI SE ACTIVA LA SEÑAL DEL TERMOSTATO DEL PISO 2 Y SI LA TEMP DEL TERMO CUMPLE PARA PODER HACER PASAR EL H2O HACIA LOS RADIADORES //if (PISO_2 == HIGH && SP1 >= 35 ){ //digitalWrite(11, HIGH); //ACTIVANDO LA BOMBA DE SUMINISTRO DE AGUA A 60C HACIA LOS RADIADORES //} //else { //digitalWrite(11, LOW); //} //COMPRABANDO Q LA TEMPERATURA DEL AGUA DEL TERMO NO SE CALIENTE DEMASIADO if (T3 >= SP3) { //if (PISO_1 == HIGH || PISO_2 == HIGH) //COMPROBANDO SI ALGUNO DE LOS TERMOSTATOS DE LOS PISOS ESTÁN ACTIVOS //{ //if (PISO_1 == HIGH) //COMPRUEBA CUAL PISO TIENE MENOR TEMPERATURA QUE EL SETPOINT FIJADO //{ o_n2 = 1; //digitalWrite(12, HIGH); //}// else {digitalWrite(11, HIGH);} //}else { //digitalWrite(12, HIGH); //digitalWrite(11, HIGH); //} } else { o_n2 = 0; } //COMPROBANDO SI LA TEMPERATURA DEL AGUA DE LA ESTUFA ES SUFICIENTE PARA HACERLA CIRCULAR HACIA EL TERMO if (T2 >= SP2) { digitalWrite(13, HIGH); //ACTIVANDO LA BOMBA DE SUMINISTRO DE AGUA HACIA EL TERMO } else { digitalWrite(13, LOW); } }