Sterownik akwarystyczny (uniwersalny)

Jakiś czas temu wykonałem sterownik akwarystyczny o nazwie roboczej ‘SAKWA’ i postanowiłem go Wam przedstawić. Jest to moja pierwsza prezentacja tak dużego projektu (samodzielnie wykonanego) więc jeżeli zauważycie jakieś błędy to proszę o kontakt.

Z racji tej, że postanowiłem założyć akwarium słodkowodne potrzebowałem układu, który informowałby mnie o temperaturze wody, oraz sterował grzałką oraz oświetleniem – to jest główny powód wykonania tego układu.
Analizując działanie tego sterownika można powiedzieć, że jest to bardziej sterownik uniwersalny z programowalnymi 8 wyjściami, które mogą reagować na temperaturę, czas, oraz sygnał wejściowy (4 wejścia).

Założenia:

Przed projektowaniem postawiłem sobie następujące założenia, które wykonywany sterownik powinien posiadać:

  • sterowanie co najmniej 5 wyjściami;
  • odczyt temperatury z 2 czujników temperatury – DS18B20;
  • wykorzystanie zegara RTC;
  • podtrzymanie czasu w zegarze RTC;
  • interfejs użytkownika w postacie wyświetlacza LCD 2×16, oraz 4 przycisków;
  • możliwość konfiguracji przy użyciu komputera PC – poprzez interfejs UART;
  • elastyczne Menu;
  • program czasu rzeczywistego;
  • budowa modułowa.

Budowa układu:

Układ sterownika został podzielony na następujące moduły:

  1. Moduł CPU;
  2. Moduł wejść;
  3. Moduł wyjść;
  4. Moduł zasilania;

oraz płytki pomocnicze:

  1. RS232;
  2. 1-wire;
  3. Przycisków;
  4. Zegar RTC z podtrzymaniem.

Odpowiednie moduły posiadają niezbędne komponenty wymagane do prawidłowego działania. Połączenia pomiędzy odpowiednimi modułami odbywa się przy udziale przewodów przyłączeniowych. Każda płytka posiada złącze sygnałowe, które podłączane jest do modułu CPU, oraz złącze zasilające – w zależności od tego jaki napięcie jest wymagane na płytce, posiada ona jedno bądź dwa złącza zasilania (możliwość zasilenia napięciem o wartości 5VDC lub/i 12VDC).

Moduł CPU

Sercem całego sterownika jest moduł CPU wyposażony w mikrokontroler Atmega32. Układ taktowany jest zewnętrznym rezonatorem kwarcowym o częstotliwości 16MHz. Wszystkie piny są wyprowadzone na złączki o rastrze 2,54. Sterowanie wyjściami sterownika odbywa się poprzez cały port A. Wyświetlacz podpinany jest do pinów 2 do 7 portu C, natomiast sterowaniem podświetleniem odbywa się poprzez pin PD3. Stan wejść odczytywany jest na porcie D (piny od 4 do 7) natomiast stan przycisków na porcie B (piny od 1 do 4). Zostały również wyprowadzone piny do komunikacji poprzez UART. Interfejs 1-wire obsługiwany jest na pinie PB0.
Na płytce znajduje się miejsce do wpięcia płytki pomocniczej z zegarem RTC
Pozostałe nieużywane na chwilę obecną piny mikrokontrolera zostały również wyprowadzone na tzw. goldpiny. Schemat ideowy układu jest przedstawiony poniżej.

Płytka drukowana została wykonana metodą przewlekaną. Druk jest jednostronny.

Moduł wejść

Sygnałem sterującym jest stan wysoki (poziom napięcia zasilającego VCC) układu. Na zewnątrz obudowy została wyprowadzona złączka 6 pinowa o rastrze 2,54. Na pinie pierwszym występuje masa, a na pinie ostatnim (szóstym) napięcie VCC. Na pinach 2 do 5 podawany jest sygnał wejściowy (wejścia od 1 do 4). Stan danego wejścia podawany jest pośrednio do mikrokontrolera poprzez transoptor LTV847. Został on zastosowany w celu optoizolacji sygnału wejściowego od sygnału trafiającego bezpośrednio do mikrokontrolera.
Poniżej przedstawiam schemat ideowy oraz złożony układ.

Moduł wyjść

Drugim najważniejszym modułem (nie biorąc pod uwagę modułu zasilającego) w sterowniku jest moduł wyjść. Dzięki niemu możliwe jest sterowanie różnymi odbiorami (grzałka, oświetlenie) według preferencji które zostały ustawione w sterowniku.
Głównym i najważniejszym elementem tego układu jest transoptor (LTV847). Sygnał sterujący z mikrokontrolera podawany jest do transoptora. Stanowi on optoizolację układu wyjściowego.
Maksymalny prąd, jaki może pobierać odbiornik, na jedno wyjście wynosi 50mA.
Sygnały wyjściowe wyprowadzone są na złącze DB9.
Poniżej umieszczam schemat ideowy oraz zdjęcie złożonego układu.

Jak widać na powyższych zdjęciach ostatnie 6 wyjść można ręcznie wyłączyć – został zastosowany do tego celu DIP SWITCH. Dzięki temu możliwe jest całkowite odłączenie wyjść, aby zminimalizować pobierany prąd przez ten moduł.
Zostanie (w niedalekiej przyszłości) dokonana zmiana modułu wyjść, polegająca na dodaniu tranzystorów, dzięki czemu wyjście układu sterującego będzie typu otwarty kolektor (bądź otwarty dren).

Moduł zasilania

Cały sterownik powinien zasilany być napięciem stałym z zakresy 9-14VDC. Zalecana wartość napięcia to 12VDC, natomiast wydajność prądowa zasilacza powinna wynosić minimum 1A.
Układ sterowania zasilany jest napięciem 5V, natomiast stan wysoki wyjść układu wynosi około 12V.
Konwersją napięcia zajmuje się popularny stabilizator liniowy LM7805. Na płytce moduły zasilającego znajdują się dwa gniazda bezpiecznikowe z wkładkami po 500mA. Gniazdo zasilające to popularne gniazdo DC 2,5. Polaryzacja styków we wtyczce w tym przypadku nie ma dużego znaczenia, dlatego że został zastosowany mostek greatza (brak konieczność uważania na polaryzacją kosztem obniżenia napięcia zasilającego o około 1,4V).

Po wykonaniu całego sterownika i podpięciu wszystkich modułów oraz obciążeniu kilku wyjść okazało się, że stabilizator dość mocno się grzeje. Występuje również co jakiś czas samoczynny reset układu, co według mnie spowodowane jest właśnie przez ten stabilizator (zbyt duże obciążeni = duże straty ciepła = niestabilność napięcia wyjściowego). Dlatego zamiast popularnego stabilizatora liniowego 7805 zostanie zastosowana przetwornica DC-DC step down (atnelowska). Podczas konwersji napięcia z 12V na 5V nie wydziela się na niej takie ciepło (jak to ma miejsce w stabilizatorze liniowym), oraz możliwy jest większy pobór prądu przy mniejszych stratach ciepła.

Płytki pomocnicze

W celu wyprowadzenia niektórych sygnałów na zewnątrz obudowy, bądź podłączenie jakichś układów do jakiegoś modułu zostały wykonane dodatkowe płytki pomocnicze:

  • RS232
  • 1-wire
  • Przycisków
  • Zegar RTC z podtrzymaniem

Za prawidłowe odmierzanie czasu odpowiedzialny jest układ PCF8563P. W przypadku zaniku napięcia zasilającego podtrzymaniem zasilania zajmuje się kondensator GOLD CAP o pojemności 1F.

Opis biblioteki do tego układu znajduje się w osobnym artykule (zostanie opublikowany w najbliższym czasie).

Moduł 230V

UWAGA!!
Układ ten posiada niebezpieczne napięcie 230V. Montaż i uruchomienie tego układu powinny dokonywać tylko i wyłącznie doświadczenie elektrycy.

Schemat ideowy modułu 230V
Schemat ideowy modułu 230V

Moduł ten umożliwia sterowanie urządzeniami zasilającymi z sieci. Jedna płytka składa się z 3 wyjść. Sygnał ze sterownika podawany jest na układ optoizolacji wykonany z optotriaka, który z kolei steruje triakiem (maksymalny prąd wynosi 12A, lecz zalecane maksymalne obciążenie wynosi 2A).

Algorytmy działania:

Algorytm główny
Algorytm główny

Program pętli głównej jest bardzo krótki i wygląda następująco:

while(1){

		//***odczyt z czujników temperatury
		refresh_temp();

		//***odczyt z RTC
		if(!twi_status_slave.twi_no_dev_err)		//jeżeli nie ma błedu związanego z rtc
			refresh_rtc();

		//***reakcja na klawisze
		SWITCH_EVENT();

		//***reakcja na parametry gdy nie ma włączonej konfiugracji parametrów
		if( !sakwa_bool.conf_on)
			reaction_event();

		//***odświeżenie LCD
		DISPLAY_EVENT(1);

		//***prezentowanie nazw wyjsc
		present_name_out();

		//***Wygaszenie lcd, oraz powrót do ekranu głównego po czasie
		lcd_back_screen();

		//***Zdarzenia od UART
		if(sakwa_bool.uart_active)
			UART_EVENT(uart_bufor);


		wdt_reset();		//reset liczenia watchdoga
	}

Jak można zauważyć, większość programu oparta jest na zdarzeniach. Przed pętlą główną odbywa się natomiast rejestracja obsługi odpowiedniego zdarzenia.

Sterownik akwarystyczny umożliwia reagowanie na następujące parametry:

  • Zmianę stanu wejścia;
  • Zakres temperatury (ustawiana histereza);
  • Załączenie oraz wyłączenie o określonej godzinie;
  • Załączenie oraz wyłączenie o określonych czasach – dwa razy na dobę.

Obsługa reakcji wykonywana jest co około 3 sekundy – zmiana jakiegoś parametru zostanie dopiero uwzględniona po upływie tego czasu.

Fragmenty algorytmu które zostało oznaczone tym samym kolorem są takie same, tzn. w programie jest to funkcja które jest wywoływana. Jeżeli występują drobne różnice, to funkcja taka posiada dodatkowy parametr wejściowy który powoduje odpowiednią zmianę wykonywanego programu.

W przypadku reakcji gdzie możliwe jest ustawienie załączenie i wyłączenie wyjścia dwa razy na dobę, algorytm działania jest ten sam co dla pojedynczego czasu. W przypadku gdy ustawione czasy się zazębiają, wyjście ustawiane jest dla czasu pierwszego.

 Obsługa sterownika:

Sterownik - panel przedni
Sterownik – panel przedni

Sterownik na panelu przednim posiada wyświetlacz LCD oraz 4 przyciski (ok/menu,wyjście/anuluj, góra, dół). Wejście do menu, przejście do następnej pozycji (podczas konfiguracji parametrów) oraz potwierdzenie wybrania odpowiedniej opcji dokonuje się przy użyciu przycisku ok/menu, natomiast wyjście oraz anulowanie danej czynności poprzez przycisk wyjście/anuluj. Poruszanie się po menu, oraz ustawianie parametrów dokonuje się za pomocą przycisków góra i dół.

Sterownik - panel tylni
Sterownik – panel tylni

Wyjścia podłączane są do złącza DB9. Maksymalne obciążenie wyjścia wynosi 50mA – zwiększenie obciążalności wyjścia dokonuje się poprzez dodatkowe moduły wykonawcze (np. moduł wykonawczy 230V). Możliwe jest podłączenie dwóch czujników temperatury DS18B20 – w tym celu na tylnym panelu wyprowadzone są dwa złącza 3 pinowe o rastrze 2,54. Na złączu 6 pinowym o rastrze 2,54 wyprowadzone są styki z których odczytywany jest stan wejściowy przez sterownik.

Ekranem początkowym jest ekran przedstawiający aktualny czas, odczytane temperatury oraz stan danego wyjścia. W miejscu prezentującym stan wyjść co określony czas pojawia się numer aktywnego wyjścia wraz z jego opisem.

Podczas wyświetlania ekranu głównego, aby przejść do menu sterownika należy wcisnąć przycisk ok/menu.

W pierwszej linijce znajduje się nazwa w której zakładce w chwili obecnej się znajdujemy, natomiast w drugiej lini kolejne zakładki dostępne w obecnym menu.

Podczas konfiguracji parametrów sterownika zapisywanie ustawianych wartości dokonuje się poprzez wybranie funkcji zapis, lub ustawienie parametru Z: na T (Zapis: Tak) , bądź wykonanie obydwóch czynności.

Konfigurację sterownika można również dokonać poprzez komputer PC łącząc sterownik przy pomocy przejściówki UART – RS232 (np. poprzez układ ft232). Komunikacja ze sterownikiem odbywa się po wcześniejszym wyborze polecenie Połącz z PC z menu sterownika (naciśnięcie dowolnego przycisku, bądź reset układu spowoduje przerwanie połączenia z komputerem PC). Ustawianie parametrów, oraz odczyt danych wykonuje się w terminalu (np. PuTTY) przy wykorzystaniu komend AT.

Podsumowanie:

Układ w chwili obecnej działa już jakiś okres czasu. Jak w każdym układzie pojawiły się i nadal czasem pojawiają się błędy, ale na bieżąco są one usuwane. Mogę powiedzieć, że założenia zostały całkowicie spełnione.
Już mam w głowie pomysł na drugą wersję sterownika. W następnej wersji mam zamiar podzielić wyjścia na kilka grup, które będą podporządkowane odpowiednim funkcją (np. grupa uniwersalnego sterowania – gniazda 230V, sterowanie oświetleniem LED, itp.). Będzie możliwość również podpięcia innych czujników (wilgotności, PH), oraz zostanie użyty inny wyświetlacz – zastanawiam się nad wyświetlaczem LCD 4×20 albo TFT z dotykowym ekranem.

Jest to mój pierwszy duży projekt wykonany od początku do końca – nie licząc projektów kilku układów, na których się uczyłem. Wykonanie go zajęło mi około 3 miesięcy, po kilka godzin na dzień – oczywiście pierwsza wersja.

Nie umieszczę na chwilę obecną programu ani plików z EAGLE. Jak ‘wypieszczę’ układ, oraz program postaram się uzupełnić wątek o te pliki.

Aby otrzymać więcej informacji, proszę o kontakt poprzez formularz kontaktowy.

Instrukcja obsługi:

Pobierz “Instrukcja-obsługi-sterownika-akwarystycznego-SAKWA-v1.7.x.pdf”

Instrukcja-obsługi-sterownika-akwarystycznego-SAKWA-v1.7.x.pdf – Pobrano 200 razy – 2,08 MB

Zdjęcia: