
*Icebox thermostat* jest termostatem do lodówki zawierającym mniej i bardziej wymyślne funkcjonalności, przy czym większości z nich z pewnością nie znajdziecie w pospolitych termostatach. Zostały uznane za całkowicie zbędne i pozbawione sensu

Konfiguracji termostatu dokonuje się bezprzewodowo z użyciem BlueTooth oraz konsoli VT100.
Termostat posiada dwa kanały pomiaru temperatury. Każdy kanał może obsługiwać 4 typy czujników (KTY152 DS18B20, DS18S20, DHT11/DHT22).
Zakres temperatur to od -50 do 99 stopni C, przy czym zakres wizualizowany na konsoli wynosi zawsze 20 stopni, minimalna histereza to 2 stopnie celcjusza.
W przypadku gdy w którymś kanale podłączony jest czujnik DHT11 dodatkowo jest wyświetlana i logowana informacja o wilgotności.
Dla każdego czujnika jest możliwość dokładnej regulacji offsetu. W przypadku analogowych dodatkowo występuje parametr wzmocnienia (dokładna kalibracja dwu punktowa jest możliwa, ale dosyć uciążliwa).
Jest opcja do kilku bitów histerezy dla mierzonych wartości. (nie tyczy czujników DS16S20 oraz DHT11 które mają zbyt niską wyjściową rozdzielczości).
Ponowne załączenie silnika jest poprzedzone czasem 'relaksacji' która domyślnie wynosi 3 minuty. Jak wiadomo kompresor załączony wkrótce po wyłączeniu najczęściej zostaje zablokowany i odłączony bezpiecznikiem termicznym. Dodatkowo w tym czasie marnuje z 200W mocy. Nie ma sensu fundować mu takich atrakcji.
Termostat posiada wbudowany czujnik światła który służy włączeniu alarmu otwartych drzwi, po zadanym czasie.
Dostępna jest regulacja głośności sygnalizacji alarmu, oraz czasu opóźnienia zadziałania.
Interfejs użytkownika jest tekstowy z elementami semigrafiki dla temperatur z obu czujników.
Składa się z 5 stron wybieranych klawiszami F1-F5, każda odpowiada konfiguracji osobnych parametrów, wyświetlaniu dobowego logu, lub liczników czasu pracy, połączenia BT etc.
Zmiany parametrów dokonuje się jedynie z użyciem strzałek kursora. Jest to celowe ze względu na potencjalną adaptację kodu pod 4 przyciski lub enkoder.
F1 - Strona główna
Możliwa zmiana temperatur oraz czasu z jakiego liczone średnie etc.

Zawiera kolejno zegarek, kontrolki: otwartych drzwi, szczęśliwej godziny, aktywnej sprężarki, oraz wystąpienia błędu.
Następnie wyświetlane są średnie temperatury z ostatnich 3 lub 24h pracy, oraz wilgotność.
Kolejna linia zawiera bargrafy średniego czasu otwartych drzwi oraz użycia sprężarki.
Poniżej znajdują się wskaźniki temperatury z możliwością konfiguracji za pomocą strzałek kursora.
Za napisem ICEBOX znajduje się przybliżone dobowe zużycie energii jaką lodówka zjadła w ciągu ostatnich 24h.
Ewentualnie planuje zjeść na podstawie danych z ostatnich 3h pacy.
F2 - Strona z logiem dobowym


Log zawiera zapisane średnie godzinowe temperatury ostatniej doby z maksimami i minimami, dla każdego czujnika, Dostępny jest też zapis użycia silnika w każdej godzinie, czasu otwarcia drzwiczek oraz wilgotności.
F3 - Podstawowa konfiguracja
Możliwa jest zmiana wszystkich parametrów.

RTC clock 01:03:14 Aktualny czas
Happy Hour 02:00 Wymusza wyłączenie kompresora
Happy Time 4h Czas wyłączonej sprężarki
BT PowerOff 1m Czas po jakim BT zostanie wyłączony liczony od otwarcia drzwiczek
#1 On Thrs +32C Temperatura załączenia kompresora
#1 Off Thrs +28C Temperatura wyłączenia
#2 On Thrs +13C
#2 Off Thrs +06C
#1 Offset 00.0C Offset temperatury wyświetlanej
#2 Offset 00.0C
#Priority #1 & #2 on Warunki logiczne kanałów w sterowaniu załączeniem sprężarki*
Filtr delay 10s Czas opóźnienia zadziałania przekroczenia progu temperatury
Alarm delay 10s Opóźnienie sygnalizacji dźwiękowej
Door 100% 100s Czas w sekundach odpowiadający 100% użycia drzwiczek w godzinie
BT password 1111* Hasło parowania BT
*Parametr #Priority umożliwia wybór warunków załączenia i wyłączenia przekaźnika dla czujników działających wspólnie.
#1 & #2 on Wymuszenie załączenia kompresora, stan termometrów nieistotny
#1 #2 dis Wymuszenie wyłączenia
#1 OR #2 załączenie lub wyłączenie w przypadku przekroczenia zakresu przez jeden z czujników. W przypadku gdy w kanałach spełnione są przeciwnie skrajne warunki, stan załączenia nie jest zmieniany.
#1 AND #2 W celu włączenia lub wyłączenia konieczne jest przekroczenie zakresu w obu czujnikach, w przypadku gdy w kanałach spełnione są przeciwnie skrajne warunki, stan załączenia nie jest zmieniany.
(Z tego powodu powstały opcje z priorytetem kanału).
#1 Priori Jak dla #1 OR #2 z tym że w przypadku konfliktu priorytet ma kanał 1
#2 Priori Jak dla #1 OR #2 z tym że w przypadku konfliktu priorytet ma kanał 2
#1 only Sterowanie wyłącznie przez kanał 1
#2 only Sterowanie wyłącznie przez kanał 2
F4 - Ustawienia zaawansowane
Możliwa jest zmiana wszystkich parametrów.

#1 Sensor DHT11+ Wybór czujnika #1
#1 AMP adc 00* Współczynnik wzmocnienia jeśli użyty analogowy czujnik
#1 OFS adc 00* Precyzyjny offset dla ADC
#1 OFS bar -20C Przesunięcie skali wyświetlanej w konsoli na interesujący nas termostatowany zakres
#2 Sensor Disable Wybór czujnika #2
#2 AMP adc 00*
#2 OFS adc 00*
#2 OFS bar 00C
Hysteresis 0LSb Histereza wartości temperatury z czujników
Log offset 0h Od jakiej godziny ma się zaczynać wyświetlany log na stronie statystyk.
Motor relax 3m Czas odpoczynku kompresora po wyłączeniu
Door thresh 220* Parametr czułości czujnika oświetlenia.
Power rate 80W Wartość poboru mocy przez załączony kompresor.
Audio vol 16* Głośność dźwięku.
Action <-> Akcje dodatkowe reset, ustawienia domyślne, kasowanie liczników wszystkich, kasowanie tylko liczników błędów, wejście w bootloader (zmiana firmware)
F5 - Różne liczniki
Możliwe skasowanie wszystkich lub tylko błędów.

Sys starts 2* Licznik startów systemu
Work time 21h Sumaryczny czas pracy systemu
BT connect 1340m Czas połączeń BT
Motor cycl 3* Ilość włączeń sprężarki
Motor time 18h Czas pracy sprężarki
Door open 0m Czas otwartych drzwi
ADC err #1 9* Błąd ADC (dla użytego analogowego czujnika)
ADC err #2 0*
1W PRS err #1 0* Błąd zwarcia lub braku czujnika cyfrowego
1W CRC err #1 0* Błąd sumy kontrolnej czujnika cyfrowego
1W PRS err #2 0*
1W CRC err #2 0*
RELAY error 4* Błąd czasu zadziałania przekaźnika*
EEPROM error 0* Błąd zapisu /odczytu eeprom
SYSTEM error 0* Błąd systemu (zadziałania watchdoga procesora)
Do CPU sterującego doprowadzony został sygnał AC zza transformatora. Służy on nie tylko synchronizacji zegara systemowego do częstotliwości 50Hz, ale również załączaniu silnika synchronicznie z przejściem napięcia sieci przez 0. Funkcjonalność taka użyta wraz z gasikiem RC sprawdza się znakomicie oszczędzając miniaturowy przekaźnik oraz minimalizując emisje zakłóceń radiowych. Błąd przekaźnika wystąpi w momencie gdy z jakiegoś powodu, nie zostanie załączony lub wyłączony synchronicznie z napięciem zasilającym 240V. Może to nastąpić wskutek błędu w programie lub chwilowego zaniku sygnału synchronizacji 50Hz.
F9 - Strona powitalna (brak obrazka)
Wyświetlana też po restarcie systemu dla pierwszego połączenia przez BT
F11, F12 - Test sygnalizacji dźwiękowej
Ze względu na udostępnienie źródeł, części programowej nie będę zbyt szeroko opisywał.
Wielokrotnie ulepszane biblioteki zawierają min.
Obsługą ADC z oversamplingiem i generatorem szumu, użyte również w zasilaczu który jakiś czas temu prezentowałem.
Bootloader, który w tej wersji obsługuje dwa usarty (jeden programowy), z ładowaniem kodu przez Xmodem. Na wstępie synchronizując zegar systemowy do 50Hz (trwa to 1.5 s na starcie).
Obsługa nvram zapewnia automatyczne kopiowanie w tle wybranego obszaru ram do eeprom z naprawą błędów.
Można też skorzystać z biblioteki do obsługi termometrów, lub tablicowej linearyzacji KTY182, który po kalibracji wydaje się działać niewiele gorzej od DS18B20.
Na pokładzie jest też odtwarzacz próbek dźwiękowych, tak więc jeśli lodówka zacznie do Was gadać , to się nie zdziwcie

Jak już wspomniałem, program termostatu oblicza pobór energii na podstawie dobowego czasu załączenia sprężarki oraz zręcznie ustawianej wartości 'Power rate'. Wartość ta powinna być zmierzona z użyciem miernika mocy i uśredniona dla przeciętnego cyklu załączenia kompresora. Pobór mocy przez silnik jest zmienny w czasie, i w moim przypadku wynosił po starcie 90W, by po pół godziny spaść do70W.
Na zakończenie kilka słów o hardware, który jest tu właściwie na dokładkę

W związku z tym, w prototypie został użyty transformator zalewany 0.5VA dostarczający 12V~ ( 230V / 2x6V 0.5VA EI30/10,5). Sprawność jego jest marna, ale nie tak marna jak pierwotnie planowanego transformatora 0.25W, który na biegu jałowym pobierał 2W! mocy.
Pobór mocy zależnie od aktywności BT oraz przekaźnika wynosi 0.5W - 0.9W. Jak wspomniałem połowa to straty transformatora. W celu optymalizacji zużycia prądu, było by zasadne użycie zasilacza beztransformatorowego i sprawnej przetwornicy z np. 24V na 3V.
Pierwotnie do zasilania przetwornicy i przekaźnika planowałem napięciem 24V, ale trafo 230V / 2x 15V 0,25VA okazało się porażką. Stąd obecnie praca przy 15V które następnie zamieniane są na 3VDC przez prymitywną samowzbudną przetwornicę. Ma ona sprawność na poziomie 50% i jej napięcie mocno zależy od temperatury, ale do tego zastosowania jest wystarczająca.
Ze względu na użycie 50R głośnika, nie ma potrzeby używania dodatkowego wzmacniacza. Porty procesora dostarczają wystarczającej mocy. Z głośnikiem 16R również nie było problemów. Warto pamiętać, aby w takich rozwiązaniach, pasmo odtwarzanie przez głośnik nie zawierało częstotliwości nie przetwarzanych. Umożliwi to podniesienie względnego poziomu głośności i ograniczenie poboru mocy, również ze względu na niezbyt wydajny zasilacz. (max moc oddawana na 50R głośniku to max 100mW).
Wspomnę jeszcze o próbkowaniu czujników analogowych, gdyż użycie ich w projekcie było pewnym wyzwaniem i próbą dla wbudowanego adc oraz technik zawężania pasma. Ponieważ pomiary analogowe nie trwają zbyt długo, bo 50ms na czujnik w każdej sekundzie. Można więc minimalizować samonagrzewanie 1k PTC, które w przypadku 3V i dzielnika 1k + 1k wynosi aż 15mW mocy, co daje zauważalne podniesienie temperatury. Pierwsza próba niwelacji zjawiska polegała na kluczowaniu zasilania tranzystorem. Okazało się jednak, że oporność załączonego tranzystora ma zbyt duży wpływ na pomiary tak zasilanego dzielnika napięcia. W każdym razie lepsze rezultaty można osiągnąć podając stałe zasilanie i ściągając napięcie na czujniku do masy przez port procesora na czas oczekiwania na pomiar przez ADC. W prawdzie nie osiągniemy zerowego napięcia podczas nieaktywności czujnika, ale za to pozbędziemy się problemów z wpływem oporności mosfeta. ADC pracuje w konfiguracji z napięciem odniesienia na poziomie zasilania CPU (ratiometric), co pozwala nie przejmować się rozrzutem wbudowanego w ukontroler napięcia odniesienia.
W takim układzie pomiarowym, zmiana napięcia CPU między 3 a 4V dawała zmiany pomiaru temperatury w zakresie 0.2C, co jest wartością zupełnie wystarczającą, w przypadku stabilizacji nie gorszej w naszym przypadku od 100mV.




W załączniku znajduje się cały kod źródłowy (asembler avr studio 4) wraz z programem (hex2bin) do tworzenia obrazów wgrywanych bootloaderem, oraz krótkim opisem.
Cool? Ranking DIY