Arduino - Inteligentny czajnik

Spis treści Ostatnia aktualizacja
1. Wstęp 2011-05-16 00:04:32
2. Wybór części 2011-05-03 11:14:45
3. Czas gotowania i stygnięcia wody w czajniku 2011-05-11 00:00:24
4. Projekt 2011-05-03 22:37:46
5. Wykonanie 2011-05-04 23:53:20

1. Wstęp

dodać diodę RGB informującą o tym czy woda nadaje się na herbatę - czerwona za gorąca, zielona ok, niebieska za zimna
dodać wyświetlacz alfanumeryczny 2 znakowy z liczbą minut pozostałą do ostygnięcia wody
na początku licznik bez podnoszenia czajnika

W ciągu dnia wielokrotnie gotuję wodę w czajniku bezprzewodowym. Niestety dosyć często zdarza mi się zapomnieć że go nastawiłem. W momencie gdy chcę sobie zrobić herbatę okazuje się, że woda zdążyła ostygnąć i muszę włączać czajnik jeszcze raz. To nie tylko marnotrawstwo energii, ale też pieniędzy i czasu.

Od dłuższego czasu zastanawiałem się jak temu zaradzić. Pomysł pojawił się w momencie, gdy zacząłem eksperymentować z Arduino. Rozwiązaniem będzie głosowe powiadomienie o zakończeniu gotowania wody oraz okresowe przypominanie, że zagotowana woda stygnie.

Cały projekt będzie składał się z następujących elementów:

Czujnik zużycia energii pozwoli na wykrycie, kiedy czajnik będzie gotował wodę. Rejestrowany będzie czas jego włączenia oraz automatycznego wyłączenia. Pozwoli to m.in. na obliczenie kwoty, która jest tracona przez niewykorzystanie zagotowanej wody.

Przełącznik będzie sygnalizował podniesienie czajnika z podstawki. Jeżeli czajnik zostanie podniesiony po upływie określonego czasu (ostygnięcia wody), to znaczy że zagotowana woda nie została wykorzystana.

Do Arduino podpięty będzie czujnik zużycia energii, przełącznik oraz moduł bezprzewodowej komunikacji. Cała logika rozwiązania zostanie zaimplementowana po stronie komputera. Pozwoli to na szybsze i łatwiejsze modyfikacje algorytmu. Po stronie Arduino zostanie zaimplementowany algorytm zbierający dane i przekazujący je bezpośrednio do komputera.

Czas rozpoczęcia i zakończenia gotowana oraz fakt czy woda została wykorzystana czy nie będzie zapisywany do bazy danych. Komputer będzie też generował powiadomienia w postaci komunikatów głosowych informujących o zakończeniu gotowania wody oraz przypominający o konieczności jej wykorzystania.

2. Wybór części

2.1. Czujnik zasilania


Na początku trzeba było rozwiązać kwestię wykrycia kiedy czajnik jest zasilany. Rozważałem dwa rozwiązania, czujnik zużycia energii w postaci miernika cęgowego lub rurkę kontaktronową reagującą na pole magnetyczne zaindukowane w kablu zasilającym czajnik.

Rurka wprawdzie jest bardzo tania, ale pozwoli tylko na określenie kiedy czajnik jest włączony. Do tego wymaga nawinięcia kilkunastu zwojów drutu na rurkę i kabel zasilający co nie będzie ani eleganckim rozwiązaniem, ani też nie pozwoli na szybki montaż i demontaż całości.

Miernik cęgowy (SCT-013-30) mimo, że kosztuje kilkadziesiąt złotych, to pozwoli na dokładny pomiar zużycia energii. Umożliwia także szybkie zapięcie go na dowolnym kablu więc w przyszłości może się jeszcze przydać.

2.2. Komunikacja z komputerem


Kolejnym problemem był wybór modułu komunikacji. Z racji umiejscowienia całego mechanizmu, odpada zastosowanie połączenia kablowego przez ethernet. Pozostaje zatem transmisja bezprzewodowa. Poniżej wypisałem wszystkie możliwości i wady i zalety każdego z rozwiązań.

Moduł Zalety Wady
Nadajnik + odbiornik RF 433Mhz niska cena
może pracować w trybie master*
duża podatność na zakłócenia
Układ nRF24L01+ 2.4GHz niska cena
znacznie bardziej odporny na zakłócenia
może pracować w trybie master*
konieczność zakupu dwóch modułów
konieczność oprogramowania odbiornika
Moduł XBee bardzo zawansowany
dużo gotowych przykładów do wykorzystania
może pracować w trybie master*
częściowe wsparcie dla OS X
konieczność zakupu dwóch modułów
konieczność oprogramowania odbiornika
wysoka cena
Moduł Wixel rozwiązanie podobne do XBee
może pracować w trybie master*
niewysoka cena
częściowe wsparcie dla OS X**
konieczność zakupu dwóch modułów
konieczność oprogramowania odbiornika
Moduł Bluetooth
(BTM-112, MS, BTShieldV1.1, RF-BT0417CB)
nie wymaga użycia dwóch modułów
dużo gotowych przykładów do wykorzystania
niewysoka cena
nie może pracować w trybie master*

* tryb master polega na inicjowaniu połączenia z Arduino
** wspierany jest tylko wirtualny port, nie jest konieczna instalacja sterowników

3. Czas gotowania i stygnięcia wody w czajniku

3_Do stworzenia algorytmu generującego powiadomienia potrzebny był mi czas, który upływa od zagotowania wody, do momentu w którym jest już na tyle chłodna, że nie nadaje się do zrobienie herbaty.

Do jego określenia wykonałem mały eksperyment. Do Arduino podpiąłem analogowy czujnik temperatury (MCP9700-E/TO), który następnie umieściłem w czajniku na czas gotowania i stygnięcia wody. Czujnik ten nie jest zbyt dokładny i potrafi się mylić o ponad 1 stopień przy kolejnych odczytach, ale do tego eksperymentu w zupełności wystarczył. Poniżej schemat połączenia czujnika z Arduino.



Do gromadzenia danych i rysowania na bieżąco wykresu użyta została aplikacja Processing. Do przetworzenia zgromadzonych danych posłużył arkusz w Google Docs.



Tak powstały dwa poniższe wykresy. Widać na nich, że gotowanie wody zajęło niecałe 3 minuty (165 sekund). W tym czasie nastąpił wzrost temperatury o 72 stopnie, od 25 (woda zimna) do 97 (woda gotująca). Do ostygnięcia wody potrzeba było około 40 minut. Przez ten czas woda jest jeszcze na tyle gorąca, że można z niej zrobić herbatę.


4. Projekt

4.1. Projekt układu


Po zebraniu wszystkich części przyszła pora na zaprojektowanie układu. Bardzo pomocna okazała się strona OpenEnergyMonitor zawierająca artykuł How to build a basic energy monitor opisujący sposób podłączenia czujnika pomiaru energii do Arduino.

Jedyną wprowadzoną przeze mnie modyfikacją była zmiana użytego rezystora obciążeniowego z 56-100Ohm na zwykły rezystor 220Ohm. Ten pierwszy pozwoli na odczytanie wartości do 26.5Amp, co w moim przypadku było trochę zbyt dużym zakresem. Czajnik pobiera od 1850W do 2200W (zgodnie z tym co napisano na jego spodzie) co przy napięciu 230V daje 9.5A. Korzystając z wygodnego kalkulatora, po wprowadzeniu wartości 10A dla Max RMS current oraz 1500 dla Current sensor turn ratio (wartość znaleziona w artykule Detailed energy monitor system design) wyszło 265Ohm. Po dodaniu 2A zapasu wyszło 220Ohm.

Lista użytych części:

Arduino Uno.



Czujnik cęgowy SCT-013 30A (parametry techniczne).



Moduł Bluetooth.



Sposób podłączenia czujnika przez płytkę prototypową.



4.2. Projekt algorytmu


Zamiast rzucić się od razu do programowania, postanowiłem wpierw zrobić dokładny projekt algorytmu. Z pomocą przyszła darmowa aplikacja na iPada do tworzenia schematów stanów. Pierwszy schemat jest dosyć ogólny i obejmuje cały system. Następne zaś dotyczą już bezpośrednio Arduino oraz aplikacji, która będzie działać na komputerze.

Schemat stanów systemu.



Schemat stanów aplikacji na Arduino.



Schemat stanów aplikacji na Mac.


5. Wykonanie

Rozgałęziacz powalający na podłączenie miernika cęgowego.