Arduino i Esp8266 do monitorowania kotła CO

Od kilku lat mam w domu kocioł CO z podajnikiem na ekogroszek (kocioł firmy Tekla ze sterownikiem Recalart Economic Premium). Niestety nie jest to zupełnie bezobsługowy system – pomijając konieczność dorzucania węgla, wybieranie popiołu i czyszczenie, jest jeszcze kilka innych problemów. Sterownik kontroluje ilość podawanego węgla, ale tak naprawdę z węglem nic nigdy nie wiadomo – wystarczy kupić groszek z innej kopalni i już są problemy, zdarzyło mi się już, że węgiel okazywał się tak koksujący, że pomimo obrotowego paleniska w piecu gasło i konieczne było przeprogramowanie sterownika (zwiększenie mocy nadmuchu, zmiana częstotliwości podawania węgla).
Najczęstszym problemem jednak jest to, że zapominam dosypać węgla do zbiornika.
Tak więc kocioł z podajnikiem to mnóstwo frajdy i biegania do piwnicy 🙂

Kiedy zacząłem interesować się Arduino i Esp8266 od razu przyszedł mi do głowy pomysł, by zdalnie monitorować temperaturę CO i ilość zużywanego węgla.

Wiem, że mogłem skorzystać z gotowych systemów IoT – tych darmowych serwisów online czy chociażby czegoś na RaspberryPi ale całość jest robiona bardziej dla zabawy niż z realnej potrzeby i chcę mieć swój własny system robiony od początku do końca przeze mnie (nawet, jeśli nie idealny).

Założenia mojego systemu w pierwszej wersji (od razu zakładałem, że nie ostatecznej) były takie:
Arduino łączy się przez wifi z moją siecią domową poprzez podłączony szeregowo Esp8266. Wysyła co określony czas temperatury i inne dane.
Podczas pracy nad programem zmieniłem jednak koncepcję:
1. Arduino z Esp8266 działa jako serwer WWW – dzięki temu nie muszę przeprogramowywać go, gdy na przykład chcę zmienić częstotliwość odczytów, albo gdy zmienię system w którym zapisuję dane.
2. Odczyty temperatury zbierane są na żądanie, po tym jak klient połączy się z nim. Całość oparta jest na magistrali 1wire – czujniki temperatury Dallas DS18B20. Dzięki temu wszystkie czujniki podłączam jednym dwużyłowym kabelkiem.
Każdy czujnik ma swój adres, który podawany jest przy odczycie – wiem który czujnik jest w jakim miejscu
W razie uszkodzenia mogę go po prostu wymienić, mogę też dołożyć kolejne czujniki i nie muszę modyfikować kodu.
3. Ilość węgla – podłączyłem ultradźwiękowy czujnik odległości. W założeniu ma on być przymocowany do klapy i mierzyć odległość do węgla. Nie przetestowałem tego jednak i zmieniłem plan – wydaje mi się że w zamkniętym zbiorniku nie będzie działał dobrze, na dodatek pył węglowy po jakimś czasie spowoduje problemy.
Zmieniłem plan, korzystając ze znalezionego gdzieś pomysłu – postanowiłem użyć starej ładowarki do telefonu podłączonej do zasilania silnika podajnika – będę mierzyć ilość kilogramów faktycznie podawanego węgla (ale to dalszy etap)
4. Mój sterownik kotła posiada funkcję obniżenia temperatury. Zwarcie styków (na przykład zdalnym termostatem) powoduje obniżenie temperatury (przydatne w nocy) – i właśnie to coś, czym chciałbym sterować z zewnątrz, na przykład ustalając obniżenie temperatury w nocy, lub też na podstawie temperatur w domu.
Sterownik kotła tak naprawdę reguluje moc grzania na podstawie temperatury panującej na zewnątrz, co nie zawsze dobrze przekłada się na temperaturę wewnątrz (wiatr, nasłonecznienie). Można dokupić zdalny termostat ale to właśnie coś, co mogę zrobić samemu i będzie to zdecydowanie bardziej „inteligentne” rozwiązanie.

Cały system zmontowałem w zeszłym roku i przez zimę sprawował się bardzo dobrze. Na razie mierzył tylko temperatury (wyjście gorącej wody z pieca, powrót zimnej oraz temperatura na zewnątrz domu). Po wejściu pod adres tego serwera otrzymywało się zestawienie adresów czujników i odczyty temperatur w postaci:
adres;temperatura|adres;temperatura|adres;temperatura|
Program odczytujący dane napisałem w PHP i uruchamiany był co kilka minut crontabem z serwera na którym trzymam tą stronę. Dane zapisywały się do MySQL.

Niestety największy problem całego tego systemu dotyczył układu Esp8266. Układ ten spisuje się świetnie, ale nie w przypadku gdy wykorzystuje się komendy AT. Znalazłem kilka różnych wersji firmware obsługujących AT – niektóre w ogóle nie działały, a jak już znalazłem działającą – to nie jest to stabilne. Trzeba by zapewne napisać bardzo rozbudowany program obsługujący na przykład wiele klientów (kilka jednoczesnych połączeń zawiesza cały mój „system”) ale w tak prostym przypadku to nie ma znaczenia.
Zrobiłem więc bardzo prymitywne (i zapewne niezbyt poprawne) sprawdzanie, kiedy Esp8266 przestaje reagować i nie da się wyjść z pętli – wtedy Arduino po prostu resetuje się i wszystko wraca do normy. Arduino ma się też resetować co jakiś czas tak po prostu na wszelki wypadek (choć głownie dlatego, że nie przewidziałem „przekręcenia się” systemowego licznika milisekund).
To samo dotyczy komunikacji wifi – jeśli przez określony czas serwer nie otrzyma żadnego żądania, uznaje że coś jest nie tak i resetuje się.
Całość więc nie jest profesjonalna ani od strony technicznej, ani programowej, ale działa bez zarzutu. Zresztą nawet zawieszenie się układu zmusiłoby mnie co najwyżej do zejścia do piwnicy.

Kolejny problem to napięcia – Arduino pracuje na 5V a Esp8266 na 3V. Całość zasilam znaleziony gdzieś w sieci gotowy układem YuRobot, który podłączyłem do zasilacza 9V, na wyjściu USB jest 5V a na pinach 5V i 3V. Do tego konwerter sygnału logicznego do komunikacji Arduino-Esp8266 co komplikuje cały system.

Poniżej cały schemat i kod źródłowy, ale na ten sezon grzewczy chcę przygotować inną – znacznie uproszczoną wersję, poza tym mój plan pomiaru ilości węgla wymaga, żeby nie stosować przerw (delay) ale raczej prymitywnej „wielozadaniowości”  – żeby nawet w trakcie czekania system mógł monitorować podawanie węgla.
Sterowanie CO v1

 

 

Do wyświetlania wyników pomiarów (jak już wspomniałem zapisywane są w MySQL) napisałem krótki program w PHP korzystający z Google Chart API. To chyba temat na inny wpis, ale wygląda to mniej więcej tak:

temperatury

Tak wygląda cała instalacja po roku używania i zdjęciu (robię coś lepszego):

Arduino + Esp8266

 

Kod źródłowy mojego programu na Arduino:

dodałem jeszcze mruganie diodą co określony czas (wizualnie widać czy działa) oraz gdy jest połączenie z zewnątrz.

 

Napisz odpowiedź

Twój adres e-mail nie zostanie opublikowany.