4 czerwca 2016

Sterownik kolektora słonecznego do basenu


Odkąd zbudowałem razem z bratem kolektor słoneczny chciałem też zbudować sterownik, w którym można ustawić temperaturę załączenia pompy obiegowej wody oraz zobaczyć na wyświetlaczu aktualną temperaturę wody w kolektorze.
A że lato było bardzo upalne, a kolektor skończyliśmy w wakacje zrobiłem  na szybko prosty układ na wzmacniaczu operacyjnym LM358 i termistorze, który po prostu załączał pompę jeśli woda w kolektorze osiągnęła zadaną temperaturę (układ ten już jakiś czas temu opisywałem na blogu, można zobaczyć go TUTAJ). Ostateczny sterownik postanowiłem zrobić w zimę, tak aby wykorzystać udane lato i nie siedzieć w warsztacie ;)

W między czasie pojawiły się nowe pomysły m.in. dodanie drugiego czujnika temperatury, który mierzyłby również temperaturę wody w basenie, możliwość ustawienia maksymalnej temperatury wody w basenie oraz pomiar najwyższej i najniższej temperatury wody w basenie.

Płytka sterownika kolektora słonecznego do basenu
Postanowiłem do sterownika wykorzystać dwa zielone wyświetlacze potrójne - siedmiosegmentowe, w połączeniu multipleksowanym, do pomiaru temperatury wykorzystałem dwa cyfrowe czujniki DS18B20. Całym sterownikiem steruje mikrokontroler Atmega8, taktowany wewnętrznym oscylatorem 8MHz. Ustawienia parametrów dokonuje się za pomocą trzech przycisków. Pompa wodna sterowana jest za pomocą przekaźnika, zielona dioda sygnalizuje aktualny stan przekaźnika (świeci - załączony). Wszystkie łączenia; zasilanie, wyjście na pompę wodną, czujniki temperatury są na gniazda śrubowe - ARK. Cały sterownik zabezpieczony jest bezpiecznikiem topikowym 0.1A. Na stabilizatorze napięcia LM7805 znalazł się radiator, ponieważ troszkę się grzeje. Płytka również otrzymała opis, który również został stworzony metodą termotransferu. Jak taki opis wykonać opisywałem tutaj.

Projekt płytki sterownika kolektora słonecznego

Płytka ma wymiary ok. 10x9cm. W celu zaoszczędzenia miejsca niektóre rezystory i wszystkie tranzystory są w obudowach SMD. Rezystory mają obudowę 0603, a tranzystory SOT23. Na prawej stronie płytki znajduje się napięcie sieci tj. 230V AC, a na lewej stronie znajduje się bezpieczne napięcie, które jest odseparowane od sieci za pomocą transformatora 9V/2VA i zasila całą logikę.

Sterownik po załączeniu wyświetla temperaturę z dwóch cyfrowych czujników DS18B20 na dwóch wyświetlaczach. Na pierwszym jest wyświetlana temperatura z czujnika, który jest umieszczony w wodzie w basenie, a na drugim wyświetlana jest temperatura wody w kolektorze słonecznym. Na wyświetlaczach został umieszczony zielony filtr, który poprawia widoczność cyfr. Do poruszania się po funkcjach konfiguracyjnych służy przycisk "menu". Na pierwszym wyświetlaczu jest wyświetlana nazwa skrótowa funkcji (3 znaki), a na drugim wartości nastawione, maksymalne, minimalne itd.. Wartości zmienia się za pomocą dwóch pozostałych przycisków. Sterownik posiada następujące funkcje:

  • Nastawa temperatury załączenia pompy (napis na wyświetlaczu: nAS) - jeśli temperatura wody w kolektorze słonecznym jest większą o zadaną wartość niż w basenie, to pompa zostaje załączona np. woda w basenie ma temperaturę 21*C, nastawiona wartość wynosi 6*C, więc jeśli woda wylatująca z kolektora będzie miała co najmniej temperaturę 27*C to pompa będzie pracować cały czas.
  •  Histereza (napis na wyświetlaczu: hIS) - można tutaj ustawić temperaturę wyłączenia pompy. Jeśli np. temperatura załączenia wynosi 25*C, a histereza 3*C, to pompa zostanie załączona przy temperaturze 25*C i wyłączona przy 22*C. 
  • Temperatura wody w basenie (napis na wyświetlaczu: tbS) - ustawia się tutaj maksymalną temperaturę wody w basenie np. jeśli jest ustawiona na 27*C, to kolektor słoneczny będzie grzał aż do uzyskania temperatury wody 27*C w basenie. Tutaj również programowo jest dodana histereza, która wynosi 0.5*C  - woda w basenie się porusza i bez histerezy mógłby być efekt ciągłego załączania i wyłączania się pompy. Jeśli woda w basenie będzie miała zadaną temperaturę to sterownik przechodzi w tryb ochronny kolektora słonecznego. Jeśli w tym czasie temperatura wody w kolektorze wzroście do 50*C to pompa obiegowa wody zostanie załączona, tak aby kolektor słoneczny został schłodzony. Wyłączenie pompy wodnej w tym trybie nastąpi przy temp. 45*C (histereza 5*C). 
  • Ilość czujników na magistrali 1Wire (napis na wyświetlaczu: ILE) - wyświetla ilość widocznych cyfrowych czujników DS18B20.
  • Najwyższa temperatura wody w kolektorze (napis na wyświetlaczu: tc-) - wyświetla najwyższą zanotowaną temperaturę wody w kolektorze.
  • Najwyższa temperatura wody w basenie (napis na wyświetlaczu: tb-)  - tak jak poprzednio, ale dla basenu.
  • Najniższa temperatura wody w basenie (napis na wyświetlaczu: tb_) - wyświetla najniższą zanotowaną temperaturę wody w basenie.

Wszystkie powyższe wartości zapisywane są do pamięci EEPROM. Pomiar temperatur najwyższych i najniższych dokonywany jest z różnicą 0.1*C. Ta sama dokładność obowiązuje przy porównywaniu temp. z obu czujników. Jeśli będziemy w którejś z wyżej wymienionych funkcji i przez 10s nie zostanie wciśnięty żaden przycisk to automatycznie program powraca do funkcji głównej - wyświetlającej aktualną temperaturę wody z dwóch czujników DS18B20. Poniższa grafika pokazuje jak wyglądają komunikaty w rzeczywistości:

Wygląda komunikatów na wyświetlaczach


Ponadto, jeśli jesteśmy w głównej funkcji - wyświetlającej aktualną temperaturę z dwóch czujników DS18B20 to mamy do dyspozycji dodatkowe funkcje przycisków dodaj i odejmij. Na przycisku odejmującym znajduje się też tryb ręczny. Po wciśnięciu przycisku na pierwszym wyświetlaczu wyświetla się napis "on", a na drugim odmierzany jest czas, który ustawiony jest na 2 min. Czas na wyświetlaczu wyświetla się w sekundach. Przez ten czas przekaźnik jest załączony. Po upływie tego czasu program przechodzi do funkcji głównej. Można też anulować tryb ręczny naciskając jeszcze raz na ten sam przycisk.
Natomiast dodatkową funkcją przycisku dodającego jest możliwość zresetowania wszystkich zapisanych parametrów w pamięci EPPROM i wgrania domyślnych wartości. Aby wgrać ustawienia domyślne należy przytrzymać przycisk przez 3 sekundy. W tym czasie na pierwszym wyświetlaczu wyświetlany jest napis "rSt", a na drugim wyświetlany jest odmierzany czas 3s - w dół. Jeśli przycisk przytrzymamy przez 3s - aż do odliczania czasu to na drugim wyświetlaczu pojawi się napis "ok", który na wyświetlaczu siedmiosegmentowym wygląda tak: "ol-". Jeśli nie przytrzymamy przycisku przez 3s, dane nie zostaną zresetowane.  Domyślne parametry są następujące:
  • nastawa temperatury załączenia pompy: 6*C
  • histereza: 3*C
  • temperatura wody w basenie: 27*C
  • reszta parametrów tj. maksymalna temperatura wody w kolektorze, basenie i najmniejsza temperatura wody w basenie również są resetowane. 
W mikrokontrolerze działają dwa timery. Timer1 służy do obsługi wyświetlaczy, które są odświeżane z częstotliwością ok. 360Hz ( 60Hz na wyświetlacz), dzięki czemu nie powstaje efekt migotania. Timer2 działa w trybie CTC i służy do obsługi czasów; odczyt temperatury z czujników DS18B20 co 1s, zliczanie czasu trybu manualnego, resetu, auto powrotu do głównej funkcji itd.
Dodałem również blokady maksymalnych i minimalnych wartości, jakie można ustawić za pomocą przycisków. Temperaturę załączenia pompy wodnej można ustawić od 0*C do 30*C, histerezę od 0*C do 15*C, maksymalną temp. wody w basenie od 15*C do 35*C.  W sterowniku działa również watchdog, który w razie zawieszenia się sterownika zresetuje go. Cały program zajmuje trochę ponad 4kB pamięci flash.

Widok na płytkę sterownika w obudowie

Czujniki temperatury DS18B20 kupiłem w obudowie wodoodpornej. Jeśli nastąpi uszkodzenie czujnika to na wyświetlaczu pojawi się napis "Err". Na początku do przypisywania czujników od basenu i kolektora słonecznego stworzyłem prosty algorytm, który w funkcji main sprawdzał po załączeniu sterownika do prądu, który czujnik ma większą temperaturę i na tej podstawie przypisywał odpowiedni czujnik DS18B20 do kolektora i basenu. Czujnik z większą temperaturą = czujnik z kolektora. Ostatecznie jednak zdecydowałem się na wpisanie do sterownika podczas programowania na sztywno numerów identyfikacyjnych czujników. Teraz na pewno nie zostaną zamienione względem siebie, ale w przypadku awarii jestem zmuszony do ponownego podłączenia całego sterownika do komputera i wpisania ręcznie nowego numeru identyfikacyjnego czujnika. W przyszłości planuję zautomatyzować cały proces - tak, by można było sobie poradzić bez komputera ;)

Sterownik został przykręcony na 4 śrubach m4 do obudowy plastikowej z przezroczystym przodem, dzięki czemu można odczytać temperatury. Obudowa posiada stopień ochrony IP65. Wszystkie przewody zostały zadławione dławicami kablowymi.


EDIT: Zostałem zmuszony do wymiany zielonych wyświetlaczy z filtrem na czerwone. Okazało się, że w słońcu nie było na nich nic widać. Natomiast na czerwonych z czerwonym filtrem widoczność w słońcu jest dobra - temperaturę widać z ponad 10m.


Schemat:
Schemat sterownika kolektora słonecznego do basenu
Części:
mikrokontroler Atmega8 | stabilizator napięcia LM7805 | dwa wyświetlacze LED potrójne - multipleksowane 0.56" | tranzystory: BC848, 6x BC857 | rezystory: 10K, 4.7K, 7x 2.2K, 1K, 8x 150 ohm | kondensatory: 470uF, 100uF, 10uF, 3x 100nF | dioda prostownicza 1N4007 | dioda LED 5mm | mostek Graetza | transformator 9V/2VA | gn. bezpiecznikowe - radiowe 20mm | przekaźnik JZC-32F-012-HS | gn. ARK | gn. kanda 10pin - ISP | 3x tactswitch | dwa cyfrowe czujniki temperatury DS18B20.


1 komentarz:

Aby uniknąć spamu, komentarze na blogu pojawiają się po zatwierdzeniu.