Cum sa iti monitorizezi temperatura si sistemul de incalzire in casa ?

Cum sa iti monitorizezi temperatura si sistemul de incalzire in casa?

Sistemele de incalzire existente in apartamentele si casele noastre in prezent necesita o atentie deosebita, mai ales iarna, cand este necesara ajustarea constanta a temperaturii pentru a avea parte de confortul dorit.

Nu ar fi interesant daca am concepe o automatizare care sa realizeze aceasta munca pentru noi, care sa fie usor controlabila si modificata la nevoie si sa se ajusteze pe sistemele de incalzire deja existente in casa noastra?
Noi spunem ca da. Si nu numai ca ne-ar ajuta din perspectiva confortului, dar am putea face chiar economie oprind incalzirea atunci cand ea nu este necesara sau supraincalzirea atunci cand temperatura de afara este deja mai ridicata.
Acest articol isi propune sa va ghideze pasii pentru a realiza aceasta automatizare usor si cu o investitie mult redusa, fata de achizionarea unei sistem dedicat cu o instalare complicata si functionalitati predefinite nemodificabile.
Teorie
Sa analizam putin datele de intrare si iesire cu care lucram. Avem o temperatura in casa pe care o putem masura prin plasarea unor senzori in fiecare camera sau macar in una in care dorim sa functioneze sistemul. De asemenea, exista un sistem de incalzire sub forma unor calorifere, aer conditionat sau incalzire centralizata, cu care putem modifica temperatura, de obicei, manual.
Algoritmul pe care il propunem ne ofera posibilitatea de a stabili niste reguli de control automat al temperaturii in camere si, mai important, acces prin Internet la aceste date si controlul de la distanta.
Pentru partea software vom folosi platforma www.devicehub.net,  iar pentru partea de hardware o combinatie intre placa de dezvoltare Arduino, senzori, modul de conectare Ethernet si sugestii in functie de tipul de sistem de incalzire pentru controlul lor.
Principalele facilitati oferite de Devicehub.net sunt: serviciul online de stocare a datelor si controlul aparatelor electronice de orice fel care se pot conecta la Internet. La baza functionarii platformei sta relatia dintre senzori (entitati care culeg date din lumea reala) si actuatori (componente electronice care executa actiuni in lumea reala si pot fi, de asemenea, controlabili din platforma online). Spre deosebire de alte platforme similare, care colecteaza datele de la senzori, Devicehub.net este singura de acest gen care permite controlul si supervizarea online a actuatorilor.
Platforma se adreseaza atat companiilor de orice tip, cat si pasionatilor de electronica si programare datorita extensibilitatii si posibilitatii de a conecta o gama uriasa de senzori si actuatori la ea. Orice industrie sau aplicatie in domeniul tehnologic poate beneficia de controlul si supervizarea aparatelor si proceselor, prin intermediul unor componente conectate la Devicehub.net.
Arduino este o placa electronica de dezvoltare open source, folosita atat de incepatori cat si de electronistii profesionisti, pentru realizarea rapida a prototipurilor electronice. Ea a aparut in anul 2005, datorita unor profesori italieni care au realizat-o pentru a putea preda mai usor cursurile de microcontrolere stundetilor. Pentru ca a avut sursele libere si a fost folosita cu succes in mediul universitar in toata Italia, a evoluat vertiginos in urmatorii ani, fiind utlizata atat pentru workshopuri si cursuri cat si la scara industriala in diverse aplicatii si subansamble.
Arduino este in esenta o placa de dezvoltare care contine un microcontroller care primeste date le analizeaza si ia decizii pe baza carora poate trimite date in functie de cum il programam. Pe langa acest microcontroller, placa mai contine doar un numar mic de componente necesare pentru partea de programare de pe un PC si partii de alimentare a circuitului.
Limbajul de programare folosit este C++, iar mediul de programare este descarcabil gratuit pe website-ul www.arduino.cc, unde se gasesc de asemenea si informatii despre modelele de Arduino si specificatiile lor.
In functie de modelul de placa aleasa aceasta contine un numar de pini digitali si unul de pini analogici, care sunt “intrarile” si “iesirile” placii noastre. Pinii digitali sunt folositi pentru a controla sau primi date de la aparate care au doua stari – oprit sau pornit, 0 sau 1, utili in cazul nostru pentru a opri sau porni sistemul de incalzire. Pinii analogici sunt folositi pentru a citi date de la senzori care ofera date nu doar cu doua stari, ci o multitudine de pozitii intermediare intre 0 si 1, foarte utili in cazul nostru in care dorim sa citim temperatura intr-o camera.
Practica
Odata stabilite aceste detalii teoretice, sa trecem la partea practica. Pentru strangerea de date de la senzori aveti nevoie de un cont care se poate face gratuit la http://devicehub.net/accounts/register/ .
Dupa ce ati facut contul, creati un nou proiect si adaugati un senzor si un actuator in el. Senzorul va fi folosit pentru a masura temperatura intr-o camera, iar actuatorul este un releu care poate comuta sistemul de incalzire.
Pe partea de hardware avem nevoie de o placa de dezvoltare Arduino, un modul ethernet DHT11 care contine un senzor de temperatura si unul de umiditate, un modul cu releu si un alimentator pentru sistemul nostru. Noi am folosit Arduino Pro Mini, pe care l-am programat cu un modul FTDI (dar se poate folosi cu succes si un Arduino UNO, care nu are nevoie de acest modul de programare), un modul ethernet cu cipul enc28j60 si un modul releu la 5v special pentru Arduino (la iesirea principala poate comanda orice aparat alimentat la 220v).
Conexiunile intre Arduino si module se fac in felul urmator :
ENCJ2860 – Arduino:
CS – 10
SI – 11
SO – 12
SCK – 13
VCC – 5V
GND – GND
DHT11 – Arduino:
S – 8
VCC – 5V
GND – GND
Releu – Arduino:
S – 9
VCC – 5V
GND – GND
Codul folosit pe Arduino este urmatorul:
(au fost folosite doua librarii: una pentru senzorul de temperatura DHT11, pe care o gasiti la  adresa – http://playground.arduino.cc/main/DHT11Lib – si una pentru modulul Ethernet, pe care o gasiti la adresa – https://github.com/jcw/ethercard, iar aceste librarii se plaseaza in directorul “libraries” din workspace-ul creat de Arduino la instalare).
De asemenea, nu uitati sa inlocuiti in codul de mai jos datele referitoare la id-ul proiectului, numele senzorilor, precum si api-key-ul specific contului vostru de pe devicehub.net .
#include <dht11.h>
#include <EtherCard.h>
dht11 DHT11;
#define DHT11PIN 8
// ethernet interface mac address, trebuie sa fie unica in reteaua dvs
static byte mymac[] = { 0×74,0×69,0×69,0x2D,0×30,0×31 };
byte Ethernet::buffer[700];
static uint32_t timer;
char website[] PROGMEM = “www.devicehub.net”;
int state = 48;
boolean automode = true;
int temp_dorita = 24;
// apelata cand interogarea este completa
static void my_callback (byte status, word off, word len) {
  Serial.println(“>>>”);
  Ethernet::buffer[off+300] = 0;
  state = *(const char*)(Ethernet::buffer + off + len – 1);
  if(state == 49){
    Serial.println(“auto mode on”);
    automode = true;
  }else if(state == 48){
    Serial.println(“automode off”);
    automode = false;
  }
}
void setup()
{
  pinMode(9, OUTPUT);
  Serial.begin(57600);
  if (ether.begin(sizeof Ethernet::buffer, mymac, 10) == 0)
    Serial.println( “Failed to access Ethernet controller”);
  if (!ether.dhcpSetup())
    Serial.println(“DHCP failed”);
  ether.printIp(“IP:  “, ether.myip);
  ether.printIp(“GW:  “, ether.gwip);
  ether.printIp(“DNS: “, ether.dnsip);
  if (!ether.dnsLookup(website))
    Serial.println(“DNS failed”);
  ether.printIp(“SRV: “, ether.hisip);
  digitalWrite(9, HIGH);
}
void loop()
{
  ether.packetLoop(ether.packetReceive());
  if (millis() > timer) {
    int chk = DHT11.read(DHT11PIN);
    char queryString[256] = {0};
    sprintf(queryString, “?apiKey=copiati_api_key_aici&copiati_numele_senzor1_aici=%d&copiati_numele_senzor2_aici=%d”, (int)DHT11.temperature,(int)DHT11.humidity);
    timer = millis() + 5000;
    Serial.println();
    Serial.print(“<<< REQ “);
    ether.browseUrl(PSTR(“/io/copiati_idul_proiectului_aici/”), queryString, website, my_callback);
  }
  if(automode == true){
    if ((int)DHT11.temperature < temp_dorita){
        //actuator ON
        Serial.println(“actuator ON”);
        digitalWrite(9, HIGH);
      }else{
        //actuator OFF
        Serial.println(“actuator OFF”);
        digitalWrite(9, LOW);
    }
  }
}
  //Celsius to Fahrenheit conversion
double Fahrenheit(double celsius)
{
  return 1.8 * celsius + 32;
}
//Celsius to Kelvin conversion
double Kelvin(double celsius)
{
  return celsius + 273.15;
}
// dewPoint function NOAA
// reference: http://wahiduddin.net/calc/density_algorithms.htm
double dewPoint(double celsius, double humidity)
{
  double A0= 373.15/(273.15 + celsius);
  double SUM = -7.90298 * (A0-1);
  SUM += 5.02808 * log10(A0);
  SUM += -1.3816e-7 * (pow(10, (11.344*(1-1/A0)))-1) ;
  SUM += 8.1328e-3 * (pow(10,(-3.49149*(A0-1)))-1) ;
  SUM += log10(1013.246);
  double VP = pow(10, SUM-3) * humidity;
  double T = log(VP/0.61078);   // temp var
  return (241.88 * T) / (17.558-T);
}
// delta max = 0.6544 wrt dewPoint()
// 5x faster than dewPoint()
// reference: http://en.wikipedia.org/wiki/Dew_point
double dewPointFast(double celsius, double humidity)
{
  double a = 17.271;
  double b = 237.7;
  double temp = (a * celsius) / (b + celsius) + log(humidity/100);
  double Td = (b * temp) / (a – temp);
  return Td;
}
Codul afisat mai sus realizeaza trimiterea datelor de la senzor in platforma online accesibila atat pe pc cat si pe smartphone sau pe tableta, precum si controlul direct al sistemului de incalzire, prin activarea modului auto din platforma online, care tinde sa mentina temperatura la cea setata de noi in variabila temp_dorita, in cazul de fata, 24 grade Celsius.
Asteptam cu interes sugestiile sau intrebarile voastre. Spor la lucru!

Leave a Comment

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *