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 wyrozumiałość.
Wstęp: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 2x16, 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:
- Moduł CPU;
- Moduł wejść;
- Moduł wyjść;
- Moduł zasilania;
oraz płytki pomocnicze:
- RS232;
- 1-wire;
- Przycisków;
- Zegar RTC z podtrzymaniem.
Na zewnątrz samego układu sterownika znajduje się moduł wykonawczy 230V.
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ł CPUSercem całego sterownika jest moduł CPU wyposażony w mikrokontroler Atmega32. Układ taktowany jest zewnętrznym rezonatorem kwarcowym o częstotliwości 16MHz (na zdjęciu jest 4MHz ale został on zmieniony na 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.
Poniżej przedstawiam schemat ideowy modułu, oraz zdjęcie złożonego modułu.
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 zdjęcie złożonego układu.
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 modułu.
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ł wykonawczy 230VModuł 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. Układ ten jest podłączany do sterownika poprzez złącze DB9.
Nie posiadam zdjęć jak wygląda w chwili obecnej ten moduł. Jak będę miał do niego dostęp i możliwość zrobienia zdjęcia to umieszczę je tutaj.
Moduł zasilaniaCały sterownik powinien zasilany być napięciem stałym 12V, 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).
Zegar RTCZa 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 0,47F.
Opis bibliotek do układu PCF8563P znajduje się na
forum.
Algorytmy działania:Przedstawiam wam algorytmy działania poszczególnych fragmentów kodu. Powinny on Wam trochę nakreślić sposób oraz zasadę działania programu.
Algorytm główny sterownika:
Program pętli głównej jest bardzo krótki i wygląda następująco:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
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.
Algorytm główny obsługi reakcji:
Algorytm reakcji na ustawiony czas:
Algorytm reakcji na zadaną temperaturę:
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 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ół.
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 tylnim 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.
Ekran początkowy:
Prezentacja opisu aktywnego wyjścia
Podczas wyświetlania ekranu głównego, aby przejść do menu sterownika należy wcisnąć przycisk ok/menu.
Struktura menu:
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.
Uffff w końcu podsumowanie
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 4x20 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.I jeszcze zdjęcie jak to wszytko wygląda w środku:
P.S.
Dzięki Mirku za książki, moduły, oraz zaangażowanie.