CONTENIDO ►
El control mediante Arduino de la calefacción por suelo radiante según la hora del día no es nada nuevo. Pero la posibilidad de controlar la temperatura del suelo desde un sensor de luz (fotoresistencia) te permitirá que el uso de suelos calientes en el baño o la cocina sea lo más económico posible. Aquí hemos publicado una descripción detallada del montaje del proyecto, un diagrama de cableado con sensores y un programa de trabajo para la placa Arduino Micro.
Para esta actividad necesitaremos:
- Arduino Micro / Arduino Mega
- módulo ds1302 / ds1307 / ds3231
- pantalla oled 128×64 i2c
- relé de estado sólido
- sensor de temperatura lm35
- fotoresistencia y resistencia
- pulsadores
- librairies iarduino_RTC.h, OLED_I2C.h
La ventaja del proyecto es que la temperatura puede regularse no sólo en función de la hora del día, sino también de la presencia/ausencia de personas. De ello se encarga una fotorresistencia, ya que en la cocina y el baño la luz siempre se enciende cuando una persona entra en la habitación. Y la calefacción por suelo radiante controlada por un sensor de movimiento no es la opción más fiable, ya que el sensor PIR puede no ver el movimiento.
Arduino control de calefacción suelo radiante

Dado que es necesario regular la temperatura de los pisos eléctricos principalmente por la hora del día y el día de la semana, el proyecto utiliza un módulo de reloj en tiempo real RTC ds1307 (puede utilizar otro). En este caso, la hora se mostrará en una pequeña pantalla OLED. Por lo tanto, es deseable para parpadear el módulo ds1307 de antemano, el establecimiento de la hora actual y la fecha en él, cómo hacerlo leer aquí: Módulo de reloj en tiempo real
También puede cargar todos los ajustes en la EEPROM utilizando el siguiente programa. Todas las líneas tienen comentarios para indicar la finalidad de la variable. La hora, el modo de funcionamiento y la temperatura de la calefacción por suelo radiante pueden modificarse en cualquier momento mediante los botones de control. Los nuevos ajustes también se guardarán en la EEPROM, por lo que no se borrarán al desconectar la alimentación.
Programa Arduino para guardar los ajustes en la EEPROM
#include "EEPROM.h" // === ajuste de temperatura por defecto === // int t_day = 20; // temperatura diurna int t_night = 15; // temperatura nocturna int t_presence = 25; // temperatura al encender la luz int t_day_week = 15; // temperatura diurna durante el fin de semana int t_night_week = 10; // temperatura nocturna durante el fin de semana // === configuración del modo por defecto === // int m = 1; // 1, 2, 3 // === configuración horaria por defecto === // int h_day = 10; // hora de conexión de la temperatura diurna int h_night = 22; // hora de conexión de la temperatura nocturna void setup() { Serial.begin(9600); // almacenamiento de datos en memoria EEPROM EEPROM.update(0, t_day); EEPROM.update(1, t_night); EEPROM.update(2, t_presence); EEPROM.update(3, t_day_week); EEPROM.update(4, t_night_week); EEPROM.update(5, m); EEPROM.update(6, h_day); EEPROM.update(7, h_night); delay(1000); // visualizar todos los datos en el monitor del puerto Serial.println("t_day - " + String(EEPROM.read(0))); Serial.println("t_night - " + String(EEPROM.read(1))); Serial.println("t_presence - " + String(EEPROM.read(2))); Serial.println("t_day_week - " + String(EEPROM.read(3))); Serial.println("t_night_week - " + String(EEPROM.read(4))); Serial.println("m - " + String(EEPROM.read(5))); Serial.println("h_day - " + String(EEPROM.read(6))); Serial.println("h_night - " + String(EEPROM.read(7))); } void loop() { }
Explicación del código para guardar los ajustes en la EEPROM:
- todas las variables se almacenarán exclusivamente en la memoria no volátil del Arduino Micro para ahorrar memoria del microcontrolador;
- si no carga este código, todas las variables se establecerán en 255 hasta que cambie sus valores manualmente.
Unidad de control de la calefacción por suelo radiante

El circuito utiliza un relé de estado sólido para encender el calentador (presta atención a la corriente máxima que puede soportar el relé). En lugar de Arduino Micro puedes utilizar la placa Mega 2560, Arduino Nano no tiene suficiente memoria para el programa. El sensor LM35 y la LDR se instalan en los lugares donde se desea medir la temperatura y la luz. Antes de cargar el programa en la placa, no olvides instalar las librerías necesarias.
Código Arduino para control de la calefacción por suelo
#include "EEPROM.h" #include "iarduino_RTC.h" iarduino_RTC myRTC (RTC_DS1307); // DS1307 i2C // iarduino_RTC myRTC (RTC_DS1302, 7, 8, 9); // DS1302 // iarduino_RTC myRTC (RTC_DS3231); // DS3231 i2C #include "OLED_I2C.h" OLED myOLED(SDA, SCL, 8); extern uint8_t SmallFont[]; extern uint8_t MediumNumbers[]; extern uint8_t BigNumbers[]; #define B1 12 // pin para el primer botón #define B2 8 // pin para el segundo botón #define B3 4 // pin para el tercer botón #define RELE 2 // pin de relé #define LM35 A1 // pin de la sensor lm35 #define LDR A3 // pin de la fotorresistencia #define ldr 500 // nivel de iluminación con la luz encendida bool button1WasUp = true; bool button2WasUp = true; bool button3WasUp = true; bool button1IsUp; bool button2IsUp; bool button3IsUp; bool f; int temp, t; byte w; void setup() { myOLED.begin(); myRTC.begin(); pinMode(B1, INPUT_PULLUP); pinMode(B2, INPUT_PULLUP); pinMode(B3, INPUT_PULLUP); pinMode(LDR, INPUT); pinMode(LM35, INPUT); pinMode(RELE, OUTPUT); } void loop() { int m = EEPROM.read(5); myOLED.clrScr(); myOLED.setFont(BigNumbers); myOLED.print(String(t), 45, 2); myOLED.setFont(SmallFont); myOLED.print("*", 77, 3); myOLED.setFont(MediumNumbers); myOLED.print(myRTC.gettime("H-i-s"), CENTER, 32); myOLED.setFont(SmallFont); if (f == 0) { digitalWrite(RELE, LOW); myOLED.print("floor heating OFF", CENTER, 56); } if (f == 1) { digitalWrite(RELE, HIGH); myOLED.print("floor heating ON", CENTER, 56); } myOLED.update(); temp = analogRead(LM35); t = (temp / 1023.0) * 5.0 * 1000 / 10; if (m == 1) mode1(); if (m == 2) mode2(); if (m == 3) mode3(); button1IsUp = digitalRead(B1); button2IsUp = digitalRead(B2); button3IsUp = digitalRead(B3); if (button1WasUp && !button1IsUp) { delay(10); button1IsUp = digitalRead(B1); if (!button1IsUp) { delay(500); w = 1; temp_setting(); } } button1WasUp = button1IsUp; if (button2WasUp && !button2IsUp) { delay(10); button2IsUp = digitalRead(B2); if (!button2IsUp) { delay(500); w = 1; clock_setting(); } } button2WasUp = button2IsUp; if (button3WasUp && !button3IsUp) { delay(10); button3IsUp = digitalRead(B3); if (!button3IsUp) { myOLED.clrScr(); myOLED.setFont(SmallFont); myOLED.print("analogRead(LDR)", CENTER, 12); myOLED.setFont(MediumNumbers); myOLED.print(String(analogRead(LDR)), CENTER, 32); myOLED.update(); delay(2000); } } button3WasUp = button3IsUp; } // === daily work mode === // void mode1() { int t_day = EEPROM.read(0); int t_night = EEPROM.read(1); int t_presence = EEPROM.read(2); int h_day = EEPROM.read(6); int h_night = EEPROM.read(7); int hour = myRTC.gettime("H"); if (hour >= h_night) { if (t > t_night) f = 0; if (t < t_night - 2) f = 1; } if (hour >= h_day) { if (t > t_day) f = 0; if (t < t_day - 2) f = 1; } if (analogRead(LDR) > ldr and t < t_presence) f = 1; } // === weekday / weekend mode === // void mode2() { int t_day = EEPROM.read(0); int t_night = EEPROM.read(1); int t_presence = EEPROM.read(2); int t_day_week = EEPROM.read(3); int t_night_week = EEPROM.read(4); int h_day = EEPROM.read(6); int h_night = EEPROM.read(7); int hour = myRTC.gettime("H"); int day = myRTC.gettime("D"); if (hour >= h_night and day != 6 or day != 7) { if (t > t_night) f = 0; if (t < t_night - 2) f = 1; } if (hour >= h_day and day != 6 or day != 7) { if (t > t_day) f = 0; if (t < t_day - 2) f = 1; } if (hour >= h_night and day == 6 or day == 7) { if (t > t_night_week) f = 0; if (t < t_night_week - 2) f = 1; } if (hour >= h_day and day == 6 or day == 7) { if (t > t_day_week) f = 0; if (t < t_day_week - 2) f = 1; } if (analogRead(LDR) > ldr and t < t_presence) f = 1; } // === independent mode === // void mode3() { int t_day = EEPROM.read(0); int t_night = EEPROM.read(1); int h_day = EEPROM.read(6); int h_night = EEPROM.read(7); if (myRTC.gettime("H") >= h_night) { if (t > t_night) f = 0; if (t < t_night - 2) f = 1; } if (myRTC.gettime("H") >= h_day) { if (t > t_day) f = 0; if (t < t_day - 2) f = 1; } } void temp_setting() { int t_day = EEPROM.read(0); int t_night = EEPROM.read(1); int t_presence = EEPROM.read(2); int t_day_week = EEPROM.read(3); int t_night_week = EEPROM.read(4); int m = EEPROM.read(5); int h_day = EEPROM.read(6); int h_night = EEPROM.read(7); while (w == 1) { myOLED.clrScr(); myOLED.setFont(SmallFont); myOLED.print("MODE SELECTION", CENTER, 12); myOLED.print("daily work", 15, 32); myOLED.print("weekday / weekend", 15, 44); myOLED.print("independent mode", 15, 56); if (m == 1) { myOLED.print("-", 2, 32); } if (m == 2) { myOLED.print("-", 2, 44); } if (m == 3) { myOLED.print("-", 2, 56); } myOLED.update(); button1IsUp = digitalRead(B1); button2IsUp = digitalRead(B2); button3IsUp = digitalRead(B3); if (button1WasUp && !button1IsUp) { delay(10); button1IsUp = digitalRead(B1); if (!button1IsUp) { EEPROM.update(5, m); delay(500); w = 2; break; } } button1WasUp = button1IsUp; if (button2WasUp && !button2IsUp) { delay(10); button2IsUp = digitalRead(B2); if (!button2IsUp) { m--; if (m < 1) m = 1; } } button2WasUp = button2IsUp; if (button3WasUp && !button3IsUp) { delay(10); button3IsUp = digitalRead(B3); if (!button3IsUp) { m++; if (m > 3) m = 3; } } button3WasUp = button3IsUp; } while (w == 2) { myOLED.clrScr(); myOLED.setFont(SmallFont); myOLED.print("DAYTIME TEMPERATURE", CENTER, 12); myOLED.setFont(MediumNumbers); myOLED.print(String(t_day), CENTER, 32); myOLED.update(); button1IsUp = digitalRead(B1); button2IsUp = digitalRead(B2); button3IsUp = digitalRead(B3); if (button1WasUp && !button1IsUp) { delay(10); button1IsUp = digitalRead(B1); if (!button1IsUp) { EEPROM.update(0, t_day); delay(500); w = 3; break; } } button1WasUp = button1IsUp; if (button2WasUp && !button2IsUp) { delay(10); button2IsUp = digitalRead(B2); if (!button2IsUp) { t_day--; if (t_day < 0) t_day = 0; } } button2WasUp = button2IsUp; if (button3WasUp && !button3IsUp) { delay(10); button3IsUp = digitalRead(B3); if (!button3IsUp) { t_day++; if (t_day > 40) t_day = 40; } } button3WasUp = button3IsUp; } while (w == 3) { myOLED.clrScr(); myOLED.setFont(SmallFont); myOLED.print("NIGHT TEMPERATURE", CENTER, 12); myOLED.setFont(MediumNumbers); myOLED.print(String(t_night), CENTER, 32); myOLED.update(); button1IsUp = digitalRead(B1); button2IsUp = digitalRead(B2); button3IsUp = digitalRead(B3); if (button1WasUp && !button1IsUp) { delay(10); button1IsUp = digitalRead(B1); if (!button1IsUp) { EEPROM.update(1, t_night); delay(500); w = 4; break; } } button1WasUp = button1IsUp; if (button2WasUp && !button2IsUp) { delay(10); button2IsUp = digitalRead(B2); if (!button2IsUp) { t_night--; if (t_night < 0) t_night = 0; } } button2WasUp = button2IsUp; if (button3WasUp && !button3IsUp) { delay(10); button3IsUp = digitalRead(B3); if (!button3IsUp) { t_night++; if (t_night > 40) t_night = 40; } } button3WasUp = button3IsUp; } while (w == 4) { myOLED.clrScr(); myOLED.setFont(SmallFont); myOLED.print("DAY MODE ACTIVATION", CENTER, 12); myOLED.setFont(MediumNumbers); myOLED.print(String(h_day), CENTER, 32); myOLED.update(); button1IsUp = digitalRead(B1); button2IsUp = digitalRead(B2); button3IsUp = digitalRead(B3); if (button1WasUp && !button1IsUp) { delay(10); button1IsUp = digitalRead(B1); if (!button1IsUp) { EEPROM.update(6, h_day); delay(500); w = 5; break; } } button1WasUp = button1IsUp; if (button2WasUp && !button2IsUp) { delay(10); button2IsUp = digitalRead(B2); if (!button2IsUp) { h_day--; if (h_day < 0) h_day = 0; } } button2WasUp = button2IsUp; if (button3WasUp && !button3IsUp) { delay(10); button3IsUp = digitalRead(B3); if (!button3IsUp) { h_day++; if (h_day > 23) h_day = 23; } } button3WasUp = button3IsUp; } while (w == 5) { myOLED.clrScr(); myOLED.setFont(SmallFont); myOLED.print("NIGHT MODE ACTIVATION", CENTER, 12); myOLED.setFont(MediumNumbers); myOLED.print(String(h_night), CENTER, 32); myOLED.update(); button1IsUp = digitalRead(B1); button2IsUp = digitalRead(B2); button3IsUp = digitalRead(B3); if (button1WasUp && !button1IsUp) { delay(10); button1IsUp = digitalRead(B1); if (!button1IsUp) { EEPROM.update(7, h_night); delay(500); if (m == 3) { myOLED.clrScr(); myOLED.setFont(SmallFont); myOLED.print("DATA HAS BEEN SAVED", CENTER, 12); myOLED.update(); delay(2000); w = 0; break; } w = 6; break; } } button1WasUp = button1IsUp; if (button2WasUp && !button2IsUp) { delay(10); button2IsUp = digitalRead(B2); if (!button2IsUp) { h_night--; if (h_night < 0) h_night = 0; } } button2WasUp = button2IsUp; if (button3WasUp && !button3IsUp) { delay(10); button3IsUp = digitalRead(B3); if (!button3IsUp) { h_night++; if (h_night > 23) h_night = 23; } } button3WasUp = button3IsUp; } while (w == 6 and m == 1 or m == 2) { myOLED.clrScr(); myOLED.setFont(SmallFont); myOLED.print("AMBIENT TEMPERATURE", CENTER, 12); myOLED.setFont(MediumNumbers); myOLED.print(String(t_presence), CENTER, 32); myOLED.update(); button1IsUp = digitalRead(B1); button2IsUp = digitalRead(B2); button3IsUp = digitalRead(B3); if (button1WasUp && !button1IsUp) { delay(10); button1IsUp = digitalRead(B1); if (!button1IsUp) { EEPROM.update(2, t_presence); delay(500); if (m == 1) { myOLED.clrScr(); myOLED.setFont(SmallFont); myOLED.print("DATA HAS BEEN SAVED", CENTER, 12); myOLED.update(); delay(2000); w = 0; break; } w = 7; break; } } button1WasUp = button1IsUp; if (button2WasUp && !button2IsUp) { delay(10); button2IsUp = digitalRead(B2); if (!button2IsUp) { t_presence--; if (t_presence < 0) t_presence = 0; } } button2WasUp = button2IsUp; if (button3WasUp && !button3IsUp) { delay(10); button3IsUp = digitalRead(B3); if (!button3IsUp) { t_presence++; if (t_presence > 40) t_presence = 40; } } button3WasUp = button3IsUp; } while (w == 7 and m == 2) { myOLED.clrScr(); myOLED.setFont(SmallFont); myOLED.print("WEEKEND DAY TEMPERAT", CENTER, 12); myOLED.setFont(MediumNumbers); myOLED.print(String(t_day_week), CENTER, 32); myOLED.update(); button1IsUp = digitalRead(B1); button2IsUp = digitalRead(B2); button3IsUp = digitalRead(B3); if (button1WasUp && !button1IsUp) { delay(10); button1IsUp = digitalRead(B1); if (!button1IsUp) { EEPROM.update(3, t_day_week); delay(500); w = 8; break; } } button1WasUp = button1IsUp; if (button2WasUp && !button2IsUp) { delay(10); button2IsUp = digitalRead(B2); if (!button2IsUp) { t_day_week--; if (t_day_week < 0) t_day_week = 0; } } button2WasUp = button2IsUp; if (button3WasUp && !button3IsUp) { delay(10); button3IsUp = digitalRead(B3); if (!button3IsUp) { t_day_week++; if (t_day_week > 40) t_day_week = 40; } } button3WasUp = button3IsUp; } while (w == 8 and m == 2) { myOLED.clrScr(); myOLED.setFont(SmallFont); myOLED.print("WEEKEND NIGHT TEMPER", CENTER, 12); myOLED.setFont(MediumNumbers); myOLED.print(String(t_night_week), CENTER, 32); myOLED.update(); button1IsUp = digitalRead(B1); button2IsUp = digitalRead(B2); button3IsUp = digitalRead(B3); if (button1WasUp && !button1IsUp) { delay(10); button1IsUp = digitalRead(B1); if (!button1IsUp) { EEPROM.update(4, t_night_week); delay(500); myOLED.clrScr(); myOLED.setFont(SmallFont); myOLED.print("DATA HAS BEEN SAVED", CENTER, 12); myOLED.update(); delay(2000); w = 0; break; } } button1WasUp = button1IsUp; if (button2WasUp && !button2IsUp) { delay(10); button2IsUp = digitalRead(B2); if (!button2IsUp) { t_night_week--; if (t_night_week < 0) t_night_week = 0; } } button2WasUp = button2IsUp; if (button3WasUp && !button3IsUp) { delay(10); button3IsUp = digitalRead(B3); if (!button3IsUp) { t_night_week++; if (t_night_week > 40) t_night_week = 40; } } button3WasUp = button3IsUp; } } void clock_setting() { int minute = myRTC.gettime("i"); int hour = myRTC.gettime("H"); int day = myRTC.gettime("d"); int month = myRTC.gettime("m"); int year = myRTC.gettime("Y"); while (w == 1) { myOLED.clrScr(); myOLED.setFont(SmallFont); myOLED.print("HOUR SETTING", CENTER, 12); myOLED.setFont(MediumNumbers); myOLED.print(String(hour), CENTER, 32); myOLED.update(); button1IsUp = digitalRead(B1); button2IsUp = digitalRead(B2); button3IsUp = digitalRead(B3); if (button1WasUp && !button1IsUp) { delay(10); button1IsUp = digitalRead(B1); if (!button1IsUp) { delay(500); w = 2; break; } } button1WasUp = button1IsUp; if (button2WasUp && !button2IsUp) { delay(10); button2IsUp = digitalRead(B2); if (!button2IsUp) { hour--; if (hour < 0) hour = 0; } } button2WasUp = button2IsUp; if (button3WasUp && !button3IsUp) { delay(10); button3IsUp = digitalRead(B3); if (!button3IsUp) { hour++; if (hour > 23) hour = 23; } } button3WasUp = button3IsUp; } while (w == 2) { myOLED.clrScr(); myOLED.setFont(SmallFont); myOLED.print("MINUTE SETTING", CENTER, 12); myOLED.setFont(MediumNumbers); myOLED.print(String(minute), CENTER, 32); myOLED.update(); button1IsUp = digitalRead(B1); button2IsUp = digitalRead(B2); button3IsUp = digitalRead(B3); if (button1WasUp && !button1IsUp) { delay(10); button1IsUp = digitalRead(B1); if (!button1IsUp) { delay(500); w = 3; break; } } button1WasUp = button1IsUp; if (button2WasUp && !button2IsUp) { delay(10); button2IsUp = digitalRead(B2); if (!button2IsUp) { minute--; if (minute < 0) minute = 0; } } button2WasUp = button2IsUp; if (button3WasUp && !button3IsUp) { delay(10); button3IsUp = digitalRead(B3); if (!button3IsUp) { minute++; if (minute > 59) minute = 59; } } button3WasUp = button3IsUp; } while (w == 3) { myOLED.clrScr(); myOLED.setFont(SmallFont); myOLED.print("DAY SETTING", CENTER, 12); myOLED.setFont(MediumNumbers); myOLED.print(String(day), CENTER, 32); myOLED.update(); button1IsUp = digitalRead(B1); button2IsUp = digitalRead(B2); button3IsUp = digitalRead(B3); if (button1WasUp && !button1IsUp) { delay(10); button1IsUp = digitalRead(B1); if (!button1IsUp) { delay(500); w = 4; break; } } button1WasUp = button1IsUp; if (button2WasUp && !button2IsUp) { delay(10); button2IsUp = digitalRead(B2); if (!button2IsUp) { day--; if (day < 0) day = 0; } } button2WasUp = button2IsUp; if (button3WasUp && !button3IsUp) { delay(10); button3IsUp = digitalRead(B3); if (!button3IsUp) { day++; if (day > 31) day = 31; } } button3WasUp = button3IsUp; } while (w == 4) { myOLED.clrScr(); myOLED.setFont(SmallFont); myOLED.print("MONTH SETTING", CENTER, 12); myOLED.setFont(MediumNumbers); myOLED.print(String(month), CENTER, 32); myOLED.update(); button1IsUp = digitalRead(B1); button2IsUp = digitalRead(B2); button3IsUp = digitalRead(B3); if (button1WasUp && !button1IsUp) { delay(10); button1IsUp = digitalRead(B1); if (!button1IsUp) { delay(500); w = 5; break; } } button1WasUp = button1IsUp; if (button2WasUp && !button2IsUp) { delay(10); button2IsUp = digitalRead(B2); if (!button2IsUp) { month--; if (month < 0) month = 0; } } button2WasUp = button2IsUp; if (button3WasUp && !button3IsUp) { delay(10); button3IsUp = digitalRead(B3); if (!button3IsUp) { month++; if (month > 12) month = 12; } } button3WasUp = button3IsUp; } while (w == 5) { myOLED.clrScr(); myOLED.setFont(SmallFont); myOLED.print("YEAR SETTING", CENTER, 12); myOLED.setFont(MediumNumbers); myOLED.print(String(year), CENTER, 32); myOLED.update(); button1IsUp = digitalRead(B1); button2IsUp = digitalRead(B2); button3IsUp = digitalRead(B3); if (button1WasUp && !button1IsUp) { delay(10); button1IsUp = digitalRead(B1); if (!button1IsUp) { delay(500); w = 0; break; } } button1WasUp = button1IsUp; if (button2WasUp && !button2IsUp) { delay(10); button2IsUp = digitalRead(B2); if (!button2IsUp) { year--; if (year < 0) year = 0; } } button2WasUp = button2IsUp; if (button3WasUp && !button3IsUp) { delay(10); button3IsUp = digitalRead(B3); if (!button3IsUp) { year++; if (year > 99) year = 99; } } button3WasUp = button3IsUp; myRTC.settime(0, minute, hour, day, month, year); myOLED.clrScr(); myOLED.setFont(SmallFont); myOLED.print("DATA HAS BEEN SAVED", CENTER, 12); myOLED.setFont(MediumNumbers); myOLED.print(myRTC.gettime("H-i-s"), CENTER, 32); myOLED.update(); delay(2000); } }
Modos de calefacción por suelo radiante eléctrico en Arduino:
- daily work – en este modo es posible ajustar la temperatura del suelo durante el día (t_day) y la noche (t_night), pero independientemente del día de la semana. La transición del modo día al modo noche y viceversa se establece mediante las variables h_day y h_night. También en este modo es posible ajustar la temperatura del suelo cuando la luz está encendida – t_presencia;
- weekday / weekend – en este modo, además de las funciones del primer modo, se ha añadido la posibilidad de ajustar una temperatura diferente de la calefacción eléctrica de suelo los fines de semana (variables t_day_week y t_night_week). La temperatura del suelo eléctrico también cambia cuando se enciende la luz, pero independientemente del día de la semana;
- independent mode – en este modo no es posible cambiar la temperatura del suelo cuando la luz está encendida, por lo demás todos los ajustes corresponden al primer modo..
Conclusión. Todas las variables del programa están comentadas en detalle, y el control de los botones es bastante fácil de entender, ya que toda la información se muestra en la pantalla OLED. Al salir del modo de configuración, toda la información introducida se almacenará en EEPROM, y el tiempo debe ser responsabilidad del módulo RTC con una fuente de alimentación autónoma. Preguntas y comentarios sobre el proyecto dejar en los comentarios.
Deja una respuesta