În perioada sărbătorilor și a iernii unul dintre subiectele preferate este cel despre termostatul meu IoT. Cu toate că sste perfect funcționabil, încerc în fiecare an să îi aduc îmbunătățiri și să îi adaug noi feature-uri. Ceea ce mă încurajează în acest demers este mai ales feedbackul consistent primit de multe ori de acasă. În această iterație i-am adăugat un gamepad pentru control și i-am reajustat controlul telecomandei datorită librăriei care s-a schimbat.
Termostatul, deși foarte simplu ca idee - trebuie doar să controlăm un ON/OFF pentru a porni, respectiv opri centrala - este o componentă esențială în fiecare casă. Dacă nu ne iese aplicația s-ar putea să stăm o noapte fără căldură. Era să ajung și eu în această situație, noroc că am găsit o soluție alternativă. Așa cum știți, codul Arduino există doar pe calculator și nu putem să îl obținem din nou de pe placă unde ajunge doar varianta compilată. La prima reconectare și recompilare, am primit, bineînțeles, o eroare. Librăria senzorului de IR a fost modificată de anul trecut, iar codul existent nu mai era valabil. Trebuia, de asemenea, să obțin noile coduri de la taste. Așa că, într-o primă etapă, a trebuit să comentez tot codul respectiv. Soluția salvatoare a venit prin folosirea unei plăci Joystick pentru controlul temperaturii.
Putem folosi componenta fie având conexiuni directe, fie pur și simplu să o atașăm peste un Arduino. Soluția aleasă a fost să realizăm conexiunile direct. Nimic complicat! Iar gnd, 3.3v și pinii de control ne spun dacă un buton este apăsat. Interesant este că avem semnal On tot timpul. Dacă se apasă un buton, primim 0 (OFF) ca date citite. Mai avem încă doi pini analogici pentru valorile joystickului, iar apăsarea acestuia este citită ca un alt buton (K).
Din perspectiva codului trebuie urmați pașii clasici:
A. Inițializarea pinilor:
int const upButton=2;
int const rightButton=3;
int const downButton=4;
int const leftButton=5;
int const okButton=6;
int const joyX=A0;
int const joyY=A2;
void setup()
{
pinMode(upButton, INPUT);
pinMode(downButton, INPUT);
pinMode(leftButton, INPUT);
pinMode(rightButton, INPUT);
pinMode(okButton, INPUT);
pinMode(joyX, INPUT);
pinMode(joyY, INPUT);
}
B. Citirea valorilor
void loop()
{
int stateUp=digitalRead(upButton);
int stateDown=digitalRead(
downButton);
int stateLeft=digitalRead(
leftButton);
int stateRight=digitalRead(
rightButton);
int stateEnter=digitalRead(
okButton);
int stateJoyX=analogRead(joyX);
int stateJoyY=analogRead(joyY);
C. Folosirea datelor citite
if (!stateUp || stateJoyY>450) {
updateTempLimit(0.5);
} else
if (!stateDown || stateJoyY<250) {
updateTempLimit(-0.5);
} else
if (!stateLeft || stateJoyX<250)
menuLeft();
else if (!stateRight || stateJoyX>450)
menuRight();
else if (!stateEnter) showInfo=!showInfo;
Logica aplicată este folosită pentru navigarea în aplicație: stânga, dreapta sau pentru a crește, respectiv micșora temperatura de referință.
Codul pentru aceste acțiuni este simplu. Practic dacă temperatura citită de la senzor este mai mare decât cea de referință minus un delta de 0.5 C, oprim căldura. În caz contrar, îi dăm drumul cu o extra verificare în prealabil.
if ((tempSensor-DELTA )>reference_temp){
heating=false;
} else if (tempSensor>0 &&
(tempSensor < reference_temp)){
heating=true;
}
Pornirea efectivă se realizează prin pornirea unui releu de 5V la care sunt conectate cele două fire de la centrală.
digitalWrite(relay,(heating)?HIGH:LOW);
Așa cum menționam inițial este destul de important să avem termostatul tot timpul în stare de funcționare. Pentru aceasta vă sugerez să aveți unele componente în dublu exemplar, cum ar fi releul sau placa Arduino.
Am putea să includem în acest sistem și un Raspberry Pi. Puterea de procesare ar fi mult mai mare și am putea chiar să dezvoltăm o aplicație ce poate controla termostatul remote. Să îi adăugăm o camera video și să putem lăsa mesaje, de exemplu, la cine vine primul acasă, iar printr-un senzor de IR sau cu ultrasunete am putea detecta prezența cuiva lângă centrală. Integrarea cu OpenAI, transcrierea comenzilor și execuția lor, similar cu proiectul talk to God. Am putea astfel să avem un dialog sau să rulăm anumite piese în bucătărie.
Sper că v-am făcut curioși. Pentru o imagine mai clară asupra acestui proces de îmbunătățire a termostatului IOT.
de Ovidiu Mățan
de Ovidiu Mățan
de Vlad Ionescu