Izbový termostat - Arduino + Ethernet

Izbový termostat navrhnutý na platforme Arduino Uno + Ethernet shield Wiznet W5100 / W5500. Termostat pre vykurovanie / chladenie.

Arduino je šikovná embeeded platforma, ktorú je možné využiť napríklad aj na stavbu izbového termostatu, ktorý si dnes ukážeme. Termostat je prístupný z LAN siete v ktorej sa nachádza, pričom je vybavený webovým rozhraním ktoré slúži na konfiguráciu všetkých prvkov termostatu. Webové rozhranie beží priamo na Arduine v režime webservera. Webserver umožňuje beh niekoľkých na sebe nezávislých HTML stránok, ktoré môžu mať informatívny, alebo aj funkcionálny charakter. Webserver beží na porte 80 - HTTP.

 Po hardvérovej stránke projekt využíva:

Arduino Uno / Mega 2560

Ethernet shield Wiznet W5100 / Ethernet modul Wiznet W5200-W5500

Teplotný senzor DS18B20 na OneWire zbernici

Relé SRD-5VDC-SL-C slúžiace na spínanie kotla

Elektromagnetické relé SRD-5VDC-SL-C, ktoré je v projekte použité umožňuje spínať až 10A pri 230V - výkon 2300W. V prípade spínania jednosmerného obvodu (záťaže) je možné spínať 300W (10A pri 30V DC). Prípadne je pre schému zapojenia plne kompatibilné aj SSR relé OMRON G3MB-202P, ktoré je vhodné iba pre neindukčnú záťaž a výhradne pre obvod so striedavým napätím. Maximálny spínaný výkon 460W (230V, 2A). Spotreba Arduina s Ethernet shieldom a ostatnými perifériami je na úrovni 100-120mA pri rozopnutom relé. Pri zopnutom stave pod 200mA pri 5V napájaní.

Webové rozhranie pre termostat umožňuje:

Prehliadať v reálnom čase teplotu zo senzora DS18B20

Prehliadať v reálnom čase stav relé s dynamickou zmenou výstupu na stránke

Modifikovať cieľovú (referenčnú) teplotu v rozsahu 5 až 50°C s 0,25°C krokom

Modifikovať hysterézu v rozsahu 0 až 10°C s 0,25°C krokom

ZAP/VYP regulácia kotla:

Webové rozhranie je navrhnuté pre prispôsobenie sa väčším i menším obrazovkám. Je reponzívne, podporuje širokouhlé obrazovky s vysokým rozlíšením, ale aj mobilné zariadenia. Rozhranie využíva importované CSS štýly Bootstrap frameworku z externého CDN servera, ktorý načíta client-side zariadenie pri otvorení stránky bežiacej na Arduine. Nakoľko je Arduino Uno limitované pamäťou, dokáže spustiť iba stránky s veľkosťou pár kB. Importovaním CSS štýlov z externého servera umožní žnížiť výkonové a pamäťové zaťaženie Arduina.  Programová implementácia (pri Arduine Uno) využíva 70% flash pamäte (32kB - 4kB Bootloader) a 44% RAM pamäte (2kB).

Statické časti webovej stránky (hlavička a pätička HTML dokumentu, linkovanie Bootstrap CSS, meta tagy, HTTP response hlavička, Content Type, formulár a ďalšie) sú uložené priamo vo flash pamäti Arduina, čo dokáže výrazne redukovať veľkosť používanej RAM pamäte pre obsah generovaný používateľovi. Webserver je tak stabilnejší a zvláda aj multi-pripojenie viacerých zariadení v sieti súčasne.

Aby ostali nastavené hodnoty zachované aj po výpadku napájania, sú uložené do EEPROM pamäte Arduina. Referenčná teplota na offset 10, hysteréza na offset 100. Každá z hodnôt zaberá maximálne 5B v EEPROM pamäti. Limit prepisov EEPROM je na úrovni 100-tisíc prepisov. Dáta sa prepisujú iba pri odoslaní HTML formulára. V prípade, že zariadenie pri prvom spustení nemá nič uložené na spomenutých EEPROM offsetoch, vykoná sa automatický zápis s predvolenými hodnotami - referencia: 20,25, hysteréza 0,25°C

Prostredníctvom meta tagu Refresh vykonáva obnovu celej stránky Arduino každých 10 sekúnd. Do tohto času je potrebné stihnúť zapísať zmenu pre termostat, inak sa input okná resetujú pri obnovení stránky. Nakoľko knižnice Ethernet neobsahuje využitie asynchrónneho webservera, je nutné prepisovať celú stránku. Dynamický údaj, ktorý sa predovšetkým mení je aktuálna hodnota výstupu- Zapnutý / Vypnutý.

Formulár pre zápis cieľovej - referenčnej teploty a hysterézy:

Priebeh spracovania zadaných údajov (presmerovanie používateľa):

Ukážkový výstup do Serial (UART) monitoru:

Používateľ na stránke action.html vykoná zmenu pre termostat (relé prechádza zo stavu VYP do ZAP). 

Logika relé sa vykonáva nezávisle na webovom rozhraní každých 10 sekúnd 

HTML stránky bežiace na Arduine:

/ - root stránka obsahujúca formulár, aktuálny výpis logického výstupu pre relé, teplotu

/action.html - spracúvava hodnoty z formulára, zapisuje ich do EEPROM pamäte, presmeruje používateľa späť na root stránku

/get_data/ - distribuuje dáta o aktuálnej teplote, referenčnej teplote a hysteréza tretej strane (počítač, mikrokontróler, iný klient...) v JSON formáte

Rozšírená verzia tohto termostatu obsahuje navyše:

Manuálny režim pre relé (neobmedzená doba, natvrdo ZAP/VYP)

Watchdog timer

Dostupné senzory SHT21, SHT31, DHT22, BME280, BMP280 a iné

Režim chladenia

Ovládanie a konfigurácia po RS232 / UART nezávisle na Ethernete

PID regulácia teploty pre termostat

Možnosť využitia platforiem ESP8266, ESP32 pre termostat

Schéma zapojenia: 

Programovú implementáciu pre projekt je možné nájsť na: https://github.com/martinius96/termostat-ethernet/ Implmentácia obsahuje programy pre statickú / dynamickú IPv4 adresu priradenú k Ethernet shieldu. 

Termostat je určený iba pre interiérové teploty! (nad 0°C), čomu je prispôsobená aj logika systému. Termostatom je možné nahradiť už existujúci izbový termostat, možno dočasne nahradiť termostat v chladničke, udržiavať stálu teplotu v teráriu a podobne.

Podobné projekty je možné nájsť na: https://arduino.php5.sk

Text je súčasťou Refresher Blogu, nie je redakčným obsahom. Administrátorov môžete kontaktovať na blogy@refresher.sk.

Ohodnoť blog
1
Poslať správu

Chceš vedieť, keď martinius96 pridá nový blog?

Zadaj svoj mail a dostaneš upozornenie. Kedykoľvek sa môžeš odhlásiť.