24 października 2015

Sterownik pompy C.O.

Jak do tej pory sterownik do pompy centralnego ogrzewania był najbardziej czasochłonnym projektem z jakim miałem do czynienia. Głównie dlatego, że podczas projektowania go musiałem nieco bardziej zgłębić się w techniki programowania mikrokontrolerów w języku C.
Rolą takiego sterownika jest załączanie pompy wymuszającej obieg wody w kaloryferach przy zadanej temperaturze oraz wyłączenie pompy, gdy temperatura spadnie poniżej zadanej. Cały sterownik do pompy C.O. składa się z kilku części. Sercem sterownika jest mikrokontroler Atmega8. Do odczytu temperatury wykorzystałem popularny układ cyfrowego czujnika temperatury - DS18B20. Dane z czujnika trafiają do mikrokontrolera, a ten wyświetla dane na wyświetlaczu 2x16 opartym na popularnym sterowniku hd44780. Całość zasila transformator 2VA (12V, 166mA). Do załączania pompy służy przekaźnik. Całość udało mi się zmieścić w obudowie Z-52 (wys. 40,0 mm, szer. 74,5 mm, dł. 145,9 mm), do której stworzyłem również front panel z opisem przycisków oraz diod sygnalizacyjnych.
Płyta główna sterownika do pompy C.O.
Ekranik umieściłem na dystansach 15mm. Oraz uniosłem go dodatkowo ~5mm na śrubach. Co dało łącznie jakieś 20mm. Ekranik ma sterowane podświetlenie poprzez tranzystor NPN, który z kolei jest sterowany mikrokontrolerem. Jeśli zostanie wciśnięty którykolwiek z przycisków znajdujących się na front panelu sterownika zostaje załączone podświetlenie na 1 min. Jeśli cały czas naciskamy na przyciski automatycznie czas ten jest resetowany. Dodałem również automatyczne cofanie do okna głównego, jeśli nie zostanie wciśnięty żaden przycisk w menu konfiguracyjnym przez 10 sekund.
Płyta główna sterownika do pompy C.O. - tył 
Płytkę PCB zaprojektowałem w programie Eagle. Tutaj również wypomniała się wersja demo, troszkę musiałem inaczej poukładać części na płytce, ponieważ ograniczał mnie jej maksymalny rozmiar. Na szczęście limit 10x8cm nie dotyczy wielkości samej płytki, ani też ścieżek. Jedynie dotyczy podzespołów umieszczanych na płytce. Stąd moja płytka ma szerokość prawie 12cm. Na płytce jest również miejsce na kwarc, jednakże w wersji oficjalnej go nie zamontowałem. Czas tego sterownika nie jest zbyt dokładny, ponieważ błąd wynosi ok. 2s/10min. Ale w przypadku takiego sterownika w zasadzie nie robi to różnicy. Nie ma znaczenia, czy anty stop załączy się 30 min szybciej, czy 30 min później.
Projekt płytki sterownik do pompy C.O. 


W lewym górnym rogu musiałem również troszkę zeszlifować płytkę ekraniku, ponieważ w tym miejscu jest śruba łącząca dwa elementy obudowy. Płytkę podzieliłem na dwie strefy. Cały prawy bok to 230V AC, natomiast lewa strona to logika i bezpieczne napięcie 12V. Na koniec płytka została zabezpieczona specjalnym preparatem, który chroni ją przed utlenianiem się oraz wilgocią.

Sterownik do pompy C.O. posiada jedną główną funkcję - temperatura aktualna, oraz cztery konfiguracyjne; temperatura załączenia pompy, nastawa histerezy, ustawienia Anty Stopu i kalibracja temperatury. Co prawda czujnik temperatury DS18B20 jest bardzo dokładany, ale odczytywana temperatura może się różnić w zależności od miejsca zamocowania czujnika. Do poruszania się po oknach konfiguracyjnych służy przycisk MENU. Natomiast przyciski dodawania i odejmowania służą do ustawiania wartości w funkcjach, po za funkcją główną, tutaj pełnią inne role. Przycisk dodawania służy do zmiany trybu automatycznego na ręczny i odwrotnie. W trybie automatycznym temperatura zbierana przez czujnik temperatury jest porównywana z parametrami nastawionymi. W trybie ręcznym przekaźnik działa niezależnie od ustawionej temperatury.

Poniżej fotka z głównymi funkcjami sterownika:
Podgląd na ekrany i funkcje sterownika
Natomiast przycisk odejmowania służy do wgrywania ustawień domyślnych: temperatura nastawiona 35*C, histereza 3*C, anty stop 7 dni i kalibracja 0*C. Aby wgrać ustawienia domyślne należy wcisnąć przycisk na 3 sekundy (czas zostaje odliczany na drugim poziomie, od razu za napisem "Ust. domyślne"). Dane te są pobierane z pamięć flash. Stworzyłem taką możliwość dlatego, że wszystkie cztery wyżej wymienione dane są od razu po naciśnięciu przycisków dodawania lub odejmowania ( w funkcjach ustawień wartości) zapisywane w pamięci EEPROM. A domyślnie wartość EEPROM to 255. Także gdyby coś kiedyś się stało z taką pamięcią nie będzie problemów aby z powrotem powrócić na "normalne wartości".
Widok ładowania ustawień domyślnych


W funkcji głównej oprócz wyświetlania się temperatury aktualnej oraz trybu mogą również wyświetlać się ostrzeżenia, błędy oraz informacje.

- Jeśli temperatura spadnie poniżej 5*C załączy się tryb rozmrażania, wówczas na ekraniku pojawi się napis "ostrzeżenie niska temp." oraz aktualna temperatura. W tym trybie przekaźnik zostaje załączony oraz włącza się alarm dźwiękowy.

- Jeśli temperatura będzie większa niż 90*C załączy się tryb alarmowy i na ekraniku pojawi się napis "ostrzeżenie wys. temp" oraz aktualna temperatura. W tym trybie również zostanie załączony alarm dźwiękowy.

- Kolejnym trybem jest błąd odczytu temperatury z czujnika DS18B20. Jeśli mikrokontroler nie wykryje czujnika temperatury to załączy przekaźnik oraz alarm dźwiękowy. Na ekraniku pojawi się napis "błąd czujnika temperatury". Jest to zabezpieczenie, które zadziała podczas uszkodzenia się przewodu lub samego czujnika temperatury.

- Ostatni tryb służy do wyświetlania informacji na temat anty stopu. W ten tryb układ przechodzi jeśli temperatura załączenia nie zostanie przekroczona przez ilość nastawionych dni anty stopu np. jeśli anty stop ustawimy na 7 dni, temperaturę nastawioną na 35*C. Jeśli przez 7 dni nie zostanie osiągnięta temperatura 35*C to załączy się ten tryb. Wyświetla się w nim ilość dni do ponownego załączenia przekaźnika. Oraz ilość minut do wyłączenia przekaźnika. Długość załączenia przekaźnika jest ustawiona na sztywno i wynosi 5 min.

Poniżej można zobaczyć jak wyglądają wszystkie informacje na wyświetlaczu. Wyświetlacz ma kolor niebieski ponieważ dla testów użyłem mojej płytki testowej z mikrokontrolerem Atmega8 oraz modułu z wyświetlaczami. Wartości niektórych paramentów został celowo obniżone, aby można było przetestować je w działaniu.
Dodatkowe informacje na wyświetlaczu


Wcześniej wspominałem o alarmie dźwiękowym. Jeśli alarm się załączy naciśniecie na którykolwiek z trzech przycisków spowoduje wyłączenie się alarmu dźwiękowego. Do ostrzeżeń o wysokiej i niskiej temperaturze została dodana również histereza o temp. 2*C, ponieważ jeśli temperatura wahała się między 4.9*C a 5*C załączał się co chwilę alarm informujący o niskiej temperaturze. Kasowanie alarmu na przyciskach nic nie dawało, ponieważ po chwil temperatura wzrosła do 5*C, a po chwili znowu spadła do 4*9C, co powodowało ponowne uruchomienie się alarmu. Teraz alarm załącza się przy 5*C, a wyłącza automatycznie przy 7*C, chyba, że wcześniej skasujemy go za pomocą przycisku. Identycznie jest z ostrzeżeniem o wysokiej temperaturze.

Warto może jeszcze coś wspomnieć na temat samej histerezy. Jest to nic innego jak odjęcie histerezy (temperatury) od temperatury zadanej. Czyli jeśli temperatura zadana wynosi 35*C, a histereza 3*C to w wyniku odejmowania uzyskamy temperaturę wyłączenia przekaźnika równą 32*C. Inaczej mówiąc pompa załączy się przy temperaturze większej niż 35*C i wyłącz jeśli będzie niższa niż 32*C.

Front panel został zaprojektowany w programie do grafiki wektorowej - Inkscape. Nie miałem nigdy styczności z tym programem, ale okazało się, że jeśli ktoś używał kiedykolwiek painta to z tym programem nie będzie miał problemów. Program jest dużo bardziej zaawansowany niż paint, ale jego obsług jest bardzo prosta ;)
Projekt front panelu


Front panel podzielony jest na różne warstwy. Pierwsze został wydrukowany jako pilot dla otworów ( np. otwory dla gniazda bezpiecznika radiowego i głównego załącznika ) środki oznaczyłem plusikiem, do tego miejsca przykładałem wiertła. Wersja do zalaminowania była pozbawiona tych punktów środkowych.

Front panel został wydrukowany na zwykłym papierze, który został zalaminowany. Przed laminowaniem zostało wycięte tylko miejsce na ekranik. A całość została wycięta za pomocą nożyka do tapet. Na początku miałem problem w jaki sposób zrobić przyciski, ale zdecydowałem się na eksperymentalne umieszczenie przycisków typu tackswitch pod zalaminowanym papierem. Okazało się, że działają one całkiem przyzwoicie, a sam sterownik prezentuje się całkiem nieźle.
Widok na ukończony sterownik  do pompy C.O. 
Samego programu sterownika nie udostępnię. Wspomnę tylko, że całość zajmuje prawie 6kb. Jest jeden główny plik konfiguracyjny, w którym można ustawić w zasadzie wszystko od portów mikrokontrolera aż po czasy, wartości domyślne, maksymalne, minimalne:

// =========================================== STREFA KONFIGURACYJNA =================================================

// ********** Ustawienia domyślne (fabryczne) - FLASH
#define NAST_TEMP 35 // Nastawa TEMPERATURY ZAŁĄCZENIA
#define NAST_HIST 3 // Nastawa HISTEREZY
#define NAST_AS 7 // Nastawa Anty STOPU
#define NAST_KALIB 0 // Nastawa kalibracji

// ********** Konfiguracja maksymalnych i minimalnych wartości
#define TEMP_MAX 80 // Maksymalna temperatura jaką można ustawić
#define TEMP_MIN 25 // Minimalna temperatura jaką można ustawić

#define HIST_MAX 10 // Maksymalna temperatura histerezy jaką można ustawić
#define HIST_MIN 1 // Minimalna temperatura histerezy jaką można ustawić

#define AS_MAX 21 // Maksymalna ilość dni jaką można ustawić w ANTY STOPIE
#define AS_MIN 2 // Minimalna ilość dni jaką można ustawić w ANTY STOPIE

#define KALI_MAX 15 // Maksymalna wartość kalibracji
#define KALI_MIN -15 // Minimalna wartość kalibracji

// ********** Konfiguracja trybów awaryjnych | *C
#define WYS_TEMP 90 // Ustawienie niebezpiecznie dużej temperatury
#define ZAM_TEMP 5 // Ustawienie zabezpieczenia przed zamarzaniem | ustaw cel na więcej w funkcje.c!

// ********** Konfiguracja czasów | sekundy
#define LCD_TIME 60 // czas w sekundach podświetlenia LCD
#define AUTO_BACK_TIME 10 // czas w sekundach automatycznego cofania na okno główne - temp. aktualna
#define KEY_TIME_LOAD_DEFAULTS 3 // czas w sekundach odliczania przytrzymanego przycisku ładowania ust. domyślnych
#define ANTY_STOP_ON 5 // czas w minutach załączenia ANTY STOPU - zał. pompy

// ********** Konfiguracja przycisków
#define KEY_PIN PINB // pin przycisków
#define KEY_PORTX PORTB // port przycisków
#define SET_KEY (1<

Dodatkowo uruchomiony jest WatchDog, w razie gdyby się z jakiś powodów zawiesił sterownik WD dokona jego restartu.

Wartości maksymalne i minimalne są ustawione w następujący sposób: temperaturę nastawioną można ustawić od 25*C do 80*C, histerezę od 1*C do 10*C, anty stop od 2 dni do 21 dni oraz kalibracje od +15*C do -15*C lub -7*C. Kalibracja posiada warunek LUB, ponieważ jeśli temperatura odczytywana z czujnika wynosi np. 18*C i jeśli ustawimy kalibrację na -15*C to po wyjściu z konfiguracji otrzymamy alarm o niskiej temperaturze, ponieważ zostanie przekroczona temperatura alarmu ( 5*C) i po kalibracji będzie wynosić 3*C. Dlatego w takich przypadkach kalibracja zostanie zablokowana na temperaturze odczytanej 7*C.
Informacje o wartościach maksymalnych 


Ponieważ wartości maksymalne są różne, postanowiłem dodać informację o nich na wyświetlaczu. Jeśli w danej funkcji wartość osiągnie maksymalną wartość wówczas na wyświetlaczu pojawi się napis "max!".

Całość jest zabezpieczona bezpiecznikiem topikowym - radiowy o wartości 0.5A. Dodałem również przycisk załączenia awaryjnego, który jest umieszczony na górze, po prawej stronie. Przycisk ten załącza bezpośrednio pompę. Całość wykończyłem dwoma czarnymi dławikami i odgiętką na przewód od czujnika temperatury. Przewód zasilający i łączący pompę mają ok. 1,5m, natomiast przewód łączący czujnik temperatury ze sterownikiem ma ok. 1m.

Całość pobiera maksymalnie 2W. Pracująca pompa - różnie, ale niektóre mają tylko dwa tryby np. 20W/40W. Czyli jeśli w piecu wygaśnie to niepotrzebnie będziemy marnować aż 20W. Mając taki sterownik po wygaszeniu pieca będziemy zużywać tylko ok. 1W (przekaźnik nie pracuje, dioda LED od pompy się nie pali, ekranik się nie świeci, a zatem jedynie dioda LED - zasilanie, mikrokontroler i sam czujnik DS18B20 będzie pobierał jakiś malutki prąd) .

Schemat:
Schemat sterownika pompy C.O.
Podzespoły elektroniczne: Transformator 2VA (12V, 166mA) | przycisk kołyskowy okrągły i prostokątny | przekaźnik 12V cewka, 230V styki | Atmega8 | rezystory: R1= 10k, R2, R5, R8= 2.2K, R4= 4.7K, R6, R7= 1K | potenciometr R3=10K | kondensatory: C1 = 470uF, C2,C3, C5, C7= 100nF, C4= 100uF, C6, C10= 10uF, C8,C9 = 22pF | kwarc 16Mhz | wyświetlacz LCD 2x16 hd44780 | dwie diody LED 5mm | gniazdo bezpiecznika radiowego | mostek gretza | 3 tranzystory NPN np. BC547 | buzzer 5V | stabilizator napięcia LM7805 | mosiężne dystanse 20mm | cyfrowy termometr DS18B20 | dwa dławiki 6-8mm | odgiętką 4mm | dwie oprawy na diody LED 5mm | 3 przyciski tackswitch | przewody




1 komentarz:

  1. Wlaśnie poszukiwałem schematu/projektu sterownika pompy c.o. :) Dzieki wielkie, bardzo przydatny artykuł, dobrze, że strona jeszcze istnieje i niech tak będzie jak najdłuej, znalazłem tu kilka fajnych artykułów i projektów, które mnie zainteresowały, a i hobby autora ,otywuje do własnej pracy hobbystycznej jako mały elektornik, dzięki Autorze :)

    OdpowiedzUsuń

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