- Zasilanie: 230 VAC, 50 Hz
- Pobór mocy bez obciążenia: 3,5 W
- Parametry wyjścia 230 VAC:
- 4 kanały załącz/wyłącz
- maksymalna moc przyłączonego urządzenia: 150 W
- przeznaczenie wyjść: oświetlenie dzienne (żarówka, świetlówka, stycznik), pompka, grzałka, zawór elektromagnetyczny, inne
- Parametry wyjścia 310 VDC:
- 1 kanał (regulacja PWM)
- maksymalna moc przyłączonego urządzenia: 150 W
- przeznaczenie wyjścia: oświetlenie dzienne – żarówka 230 V
- Sumaryczna moc urządzeń 230 VAC/310 VDC:
- Wyjścia niskonapięciowe – 3 kanały załącz/wyłącz, dla OUT3F także regulacja PWM
- Zasilanie wewnętrzne: 12 VDC (sumaryczna moc urządzeń 6 W)
- Zasilanie zewnętrzne: maksymalna moc przyłączonego urządzenia 50 W
- Sumaryczna moc urządzeń: 80 W
- Przeznaczenie wyjść: oświetlenie nocne LED, wentylator, pompka, zawór, inne
- Pomiar temperatury
- Zakres: 0...100°C
- Rozdzielczość: 0,1°C
- Dokładność: ±0,5°C (0...85°C)
- Pomiar pH
- Zakres: 0...10 pH
- Rozdzielczość: 0,1 pH
- Pomiar poziomu wody
- Zakres: 0...15 cm
- Wskazanie: 0...100
Opis programu
Zanim procesor wejdzie w pętlę główną inicjuje porty, wyświetlacz LCD, timery, przerwania, odczytuje nastawy z EEPROM-u dokonując według nich autokonfiguracji, inicjuje układ zegara DS1307, przetwornik ADC oblicza wartości zmiennych związanych ze sterowaniem oświetlenia, inicjuje inne zmienne. W pętli głównej przeprowadzane jest skanowanie klawiatury. Wciśnięcie któregokolwiek klawisza powoduje skasowanie flagi pamięci alarmu oraz licznika czasu upływającego do zgaszenia podświetlacza LCD. Jeśli flaga podświetlacza jest wyzerowana, następuje jej ustawienie. Jeśli istnieje alarm, na określony czas zostaje wyciszony sygnał akustyczny. Wyzerowana zostaje flaga alarmu przecieku (jedyny alarm ustępujący dopiero po potwierdzeniu z klawiatury). Jeśli ustawiona jest flaga podświetlacza LCD i nie występuje alarm lub trwa okres wyciszania sygnału akustycznego, sterownik będzie reagował na wciskanie klawiszy sterujących wyjściami lub powodujących wejście do podprogramów konfiguracji, albo parametryzacji.
Sterowanie za pomocą klawiszy
Klawiszem [up] – zawsze załączamy lub wyłączamy ręcznie światło dzienne. W przypadku, gdy wyjście OUT1L wykorzystujemy do załączania innych urządzeń aniżeli światło, dłuższe przytrzymanie tego klawisza skutkuje ręcznym załączeniem/wyłączeniem światła nocnego. Przyciskiem [down] sterujemy wtedy wyjściem OUT1L. Gdy wyjście OUT1L będzie sterować oświetleniem dziennym, światło nocne załączamy/wyłączamy przyciskiem [down]. Czas trwania załączania/wyłączania (świtu/zmierzchu) w trybie ręcznym jest równy parametrowi czas trwania zmierzchu/świtu – ręka. Jest tak również w sytuacji, gdy zaniknie i powróci napięcie sieciowe. Parametr czas trwania zmierzchu/świtu – auto brany jest pod uwagę przez sterownik w trybie automatycznym (z wyjątkiem zaniku i powrotu napięcia sieciowego). Rozjaśnianie/ściemnianie w trybie ręcznym może więc trwać znacznie krócej niż w trybie automatycznym (warto wykorzystywać tę możliwość przy pracach pielęgnacyjnych w akwarium).
Klawisz [>] – sterowanie ręczne OUT2.
Klawisz [enter] – sterowanie ręczne OUT3F.
Klawisz [esc] – sterowanie ręczne OUT4FD, dłuższe przytrzymanie oznacza sterowanie ręczne OUT5.
Wciskaniu klawiszy, podobnie jak stanowi alarmowemu, towarzyszy sygnał dźwiękowy. Dłuższe przytrzymanie klawisza [>] powoduje wejście w podprogram konfiguracji wyjść sterownika, natomiast przytrzymanie klawisza [enter] powoduje wejście w podprogram parametryzacji. W obu przypadkach następuje zmiana podświetlenia wyświetlacza z koloru zielonego na bursztynowy (wyświetlacz nie będzie podświetlany, gdy panel czołowy będzie silnie oświetlany z zewnątrz).
W pętli głównej wykonywany jest także podprogram obsługi LCD (okno główne) – wyświetlanie czasu, poziomu napełnienia akwarium, temperatury, aktualnego pH, informacji o trybie załączania/wyłączania oświetlenia dziennego/nocnego, rodzaju funkcji załączonej/wyłączonej w danym momencie. Np. włączenie/wyłączenie wentylatora w trybie auto lub ręka, spowoduje zapalenie/zgaszenie diod LED (zielonej/czerwonej) oraz pojawienie się, na chwilę w ostatniej linii LCD napisu „wentylator >>”.
Na LCD mogą w każdej chwili pojawić się informacje o zaistniałym alarmie, powodując zanik informacji o niższym priorytecie. Opis alarmów zawarto w tab. 1.
Oczywiście występowanie poszczególnych komunikatów na LCD oraz ich skutki zależeć będą od tego, czy aktywowaliśmy określone funkcje.
Podprogramy przerwań
Co 1 ms następuje wejście w podprogram obsługi przerwania od przepełnienia Timera 0. W przerwaniu tym obliczane są kolejne interwały, w których podejmowane są akcje opisane niżej.
- co 1 ms:
- obsługa funkcji karmienia (załączenie/wyłączenie wyjścia OUT4FD oraz odliczanie czasu karmienia określonego w ustawialnym parametrze CZAS DOZOWANIA
- co 50 ms:
- zapis informacji do ekspanderów PCF 8574 (sterowanie diodami LED),
- sterowanie diodą LED dla funkcji wentylatora (częstotliwość migania będzie uzależniona od zadanej prędkości wentylatora). Informacja przekazywana będzie do PCF 8574 w następnym cyklu przerwania – jak powyżej,
- sterowanie wyjściami LAMP i OUT1L (jeśli OUT1L=LAMPA) z uwzględnieniem opóźnienia dla HQI – wysokoprężnej metahalogenowej lampy łukowej, na podstawie stanu flag odpowiadających wyjściom. Upływający czas opóźnienia dla załączenia HQI na wspomnianych wyjściach sygnalizowany jest miganiem LED odpowiadającej wyjściu LAMP i/lub OUT1L (2 Hz). Stan OUT1L – Strefa III (w opcji I lub II, jeśli OUT1L=LAMPA i nie ma HQI) może być uzależniony od natężenia światła padającego na panel sterownika a zarazem akwarium (jedna z funkcji fototranzystora na panelu).
- co base_time ms – wartość parametru zależna od ustawialnego parametru CZAS ROZJAŚNIANIA/ŚCIEMNIANIA (czas świtu/zmierzchu):
- zmiana wartości zmiennej temp_duty_PWMA (kierunek zależny od operacji: rozjaśnianie czy ściemnianie). Zmiana jest wstrzymywana na czas odliczania opóźnienia dla załączenia HQI
- zmiana wartości zmiennej temp_duty_PWMB
- obliczenie poziomu natężenia oświetlenia duty_PWMB w zależności od temp_duty_PWMB, ustawialnego parametru MAX POZIOM NOCNEJ STREFY, OPCJI – FAZY KSIĘŻYCA.
- obliczenie poziomu natężenia oświetlenia duty_PWMA w zależności od temp_duty_PWMA, parametru MAX POZIOM STREFY I.
- co 500 ms:
- odczyt wartości natężenia oświetlenia zewnętrznego (poprzez ADC),
- odczyt wartości poziomu wody (poprzez ADC),
- wywołanie podprogramu obsługi wejść analogowych.
Co 1 s następuje wejście w podprogram obsługi przerwania wyzwalanego INT0 (od DS1307). Wykonuje się w nim:
- odczyt z DS1307 (data, czas), konwersja danych z BCD,
- odczyt z ADS1110 i obliczenie wartości pH (ADS1110 – wersja EDO5; adres 0x9A),
- cykl wentylatora,
- cykl pauzy dla karmienia,
- obliczenia dla funkcji oświetlenia,
- załączenie oświetlenia dziennego, wyłączenie nocnego,
- wyłączenie oświetlenia dziennego, załączenie na kilka sekund wentylatora (max obroty) – dla utrzymania jego sprawności,
- załączenie oświetlenia nocnego,
- wyłączenie oświetlenia nocnego, jeśli aktywna opcja: WYGAŚ OŚW. NOCNE O,
- załączenie karmienia,
- sterowanie timerem,
- odliczanie czasu dla opóźnienia HQI 2 i/lub HQI 3 (rozgrzane lampy nie powinny być włączane przed ostygnięciem),
- ustawianie/zerowanie flag dla wyjść LAMP i OUT1L z uwzględnieniem numeru opcji oświetlenia,
- określenie pory dnia (noc/dzień),
- odliczanie pauzy sygnału dźwiękowego alarmu,
- sterowanie funkcją napowietrzania z uwzględnieniem opcji „praca z grzałką”, „co jakiś czas przez jakiś czas”, „od godziny do godziny”,
- odczyt temperatury z DS18B20 (sprawdzenie poprawności transmisji za pomocą CRC),
- wywołanie podprogramów regulacji temperatury oraz regulacji pH
- ustawienie flag alarmowych pH – jeśli alarm
W podprogramie obsługi przerwania od przepełnienia Timera 1 wykonuje się:
- wpisanie duty_PWMA (aktualny poziom oświetlenia strefy I) do OCR1A,
- wpisanie duty_PWMB (aktualny poziom oświetlenia strefy nocnej) do OCR1B
W podprogramie obsługi przerwania od przepełnienia Timera 2 wykonuje się:
- wpisanie duty_PWM2 do OCR2 (aktualna prędkość wentylatora)
Podprogramy
W podprogramie obsługi wejść analogowych realizowane są następujące funkcje:
- ustawianie/zerowanie flagi sterującej OUT1L (jeśli OUT1L=LAMPA)
- sterowanie podświetleniem LCD (podświetlenie zielone – normalny tryb pracy, bursztynowe – tryb programowania lub stan alarmowy)
- monitoring poziomu wody i sterowanie dopełnianiem
W podprogramie regulacji temperatury (co 1 s) odbywa się sterowanie grzałką (rys. 8), oświetleniem – wyłącznie w wypadku przekroczenia ustawialnego progu odchyłki, wentylatorem i chłodnicą (rys. 9).
W trybie pracy automatycznej i ręcznej wentylator startuje na maksymalnych obrotach, po chwili spadają one do ustawianego przez użytkownika minimum, po czym, jeśli temperatura nie spada, zwiększają się systematycznie w ustawianych odstępach czasu, aż do ustawianego maksimum. W sytuacji, gdy wentylator pracuje razem z chłodnicą, po osiągnięciu przez niego ustawionych obrotów maksymalnych, jeśli nie spada temperatura i po ustawionym czasie, następuje załączenie chłodnicy. Spadek temperatury powoduje zatrzymanie przyrostu obrotów wentylatora.
Tryb parametryzacji
W tym trybie, w zależności od określonej konfiguracji, mamy dostęp do następujących grup i podgrup menu:
- czas i data – możliwość ustawienia,
- oświetlenie – regulacja max jasności żarówki, włączenie/wyłączenie lampy HQI, zwłoka załączenia, próg wyłącz/załącz, regulacja max jasności oświetlenia nocnego, „wygaś o” (ustawianie godziny jeśli nie chcemy, by światło nocne świeciło przez całą noc, załącz oświetlenie dzienne/zgaś nocne, wyłącz oświetlenie dzienne/zapal nocne, wygaś oświetlenie dzienne powyżej ustawionej odchyłki temperatury, zwłoka HQI, zwłoka dla wszystkich lamp HQI, czas trwania zmierzchu/świtu,
- termostat (rys. 8) – ustaw temperaturę w dzień, ustaw temperaturę w nocy, ustaw histerezę regulacji temperatury, dopuszczalna odchyłka górna, dopuszczalna odchyłka dolna, korekta temperatury mierzonej,
- pomiar pH – alarm górny, alarm dolny, regulacja pH (ustaw limit górny i dolny),
- powietrze,
- karmienie – ustawianie pór karmienia, ustawianie czasu dozowania,
- dopełnianie,
- timer,
- wentylator – ustawianie obrotów min i max, ustawianie okresu trwania poziomu obrotów.
Nie wszystkie parametry (lub opcje) będą widoczne w menu. Jeśli np. nie konfigurujemy żadnego wyjścia jako przeznaczonego do pracy z wentylatorem, nie znajdziemy nigdzie menu: „wentylator”. Jeśli nie uaktywnimy opcji „pora karmienia – 2”, nie pojawi się pozycja „00:00” (czas karmienia 2).
W głównym menu parametryzacji możemy zablokować funkcję termostatu oraz pomiaru pH (zamiast znaku „>” pojawi się znak „x”). Wciśnięcie klawisza [>] powoduje wejście w podgrupę. Po funkcjach, opcjach i parametrach poruszamy się przy pomocy klawiszy [up] i [down]. Wybrana pozycja pulsuje. Daną opcję uaktywniamy („odhaczamy”) klawiszem [enter] (pojawia się wówczas znak „<<”). Edycji parametru (z wyjątkiem korekty temperatury mierzonej) dokonujemy poprzez wciśnięcie klawisza [enter] (zaczyna pulsować ostatnia pozycja wartości), zmianę wartości przy pomocy klawiszy [up] i [down]. Klawiszem [>] możemy zmieniać pozycję wartości (pulsuje wybrana pozycja), aby przyspieszyć ustawianie parametru. Edycję parametru kończymy ponownie wciskając klawisz [enter] – pozycja przestaje pulsować, pulsuje cała wartość. Z grupy lub podgrupy menu wychodzimy używając klawisza [esc].
Konfigurowanie wyjść sterownika
Po wejściu do podprogramu konfiguracji widzimy 5 linijek pokazujących przyporządkowanie określonych funkcji kolejnym wyjściom sterownika. Klawiszem [góra][dół] przesuwamy się po numerach wyjść, klawiszem [enter] aktywujemy tryb edycji dla danego wyjścia, klawiszem [>] zmieniamy jego funkcję. Pamiętamy o tym, aby wyboru funkcji dokonywać dla wyjść w porządku od 1 do 5 (aby uniknąć powtarzania tej samej funkcji dla różnych wyjść) oraz o tym, że wyjścia 3 i 4 to wyjścia niskonapięciowe DC, pozostałe – 230 VAC (wyjścia PWMB – 310 VDC oraz PWMN nie podlegają konfiguracji).
Możliwości konfiguracji:
- OUT1L – Lampa/Grzanie/Chłodzenie/Dopełnianie/CO2/Timer
- OUT2 – Powietrze/Grzanie/Chłodzenie/Dopełnianie/CO2/Timer
- OUT3F – Wentylator/Chłodzenie/Dopełnianie/CO2/Timer
- OUT4FD – Karmienie/Chłodzenie/Dopełnianie/CO2/Timer
- OUT5 – Powietrze/Grzanie/Chłodzenie/Dopełnianie/CO2/Timer
Uwaga: zmiana w konfiguracji i wyjście z podmenu powoduje zerowanie procesora.
Pomiar temperatury
Pomiar temperatury dokonywany jest przez specjalizowany czujnik półprzewodnikowy DS18B20 o zakresie pomiarowym (–55...125°C o konfigurowalnej rozdzielczości: 9, 10, 11 i 12 bitów, odpowiadającej odczytowi temperatury z rozdzielczością 0,5, 0,25, 0,125, i 0,0625°C. Czas konwersji dla rozdzielczości 12 bitów, a w takim trybie pracuje czujnik, wynosi maksymalnie 750 ms. Wartości zmierzonej temperatury odczytywane są przez procesor w postaci cyfrowej poprzez magistralę 1 Wire. Następnie przy wykorzystaniu kontroli CRC sprawdzana jest poprawność transmisji. Program dokonuje przeliczeń umożliwiając uzyskanie rozdzielczości 0,1°C.
Ustawienia
- F_CPU=8 MHz (wewnętrzny oscylator RC) – ustawienie za pomocą Fuse bitów,
- Timer0: timer taktowany F_CPU/64,
- Ustawienia PWM: Timer1: rozdzielczość 10 bitów, Timer taktowany F_CPU/64, Fast PWM mode with ICR (0x3FF) top-count,
- Timer2: rozdzielczość 8 bitów, Timer taktowany F_CPU/128, Fast PWM with 0xFF top-count,
- zgłoszenie przerwania INT0 na rosnącym zboczu,
- Watchdog: makro wdt_enable(WDTO_2S) z AVR Libc umieszczone w podprogramie uaktualniania pamięci LCD zeruje watchdog co 2 s, zabezpieczając sterownik przed skutkami ewentualnego zawieszenia się programu.
Uwagi
Aby zaoszczędzić przestrzeni pamięci SRAM (2 kB), potrzebnej także na obsługę stosu, zdecydowaną większość komunikatów i części składowych menu wyświetlacza, umieściłem w pamięci Flash procesora (32 kB).
Po kompilacji programu otrzymujemy komunikat o 43 procentach zajętości SRAM-u oraz 100 procent zajętości pamięci Flash.
Program został napisany w języku C przy pomocy popularnego kompilatora avr-gcc (GCC) wersja 3.4.3 i był debugowany za pomocą AVRStudio 4.12 poprzez interfejs JTAG-ICE avr. Po jego ostatecznej korekcie (zapewne znajdą się jeszcze jakieś błędy) złącze JTAG zamieniłem na ISP.
Montaż i uruchomienie
Elementy elektroniki zostały zamontowane na dwustronnych płytkach drukowanych. W układzie sterowania jak i wykonawczym zdecydowałem się na montaż przewlekany. W układzie panela oraz czujnika poziomu wody – także na montaż powierzchniowy SMD.
Montaż płytki rozpoczynamy od wlutowania elementów biernych wraz z podstawkami pod układy scalone oraz gniazdami złącz i listwami kołkowymi typu goldpin (gniazda SL1 – 3 montujemy na spodniej stronie obwodu drukowanego). Kolejne etapy to przylutowanie buzzera, półprzewodników, baterii litowej, a następnie umieszczenie w podstawkach układu zegara oraz mikrokontrolera.
Montaż układu wykonawczego rozpoczynamy od wlutowania rezystorów, kondensatorów (elektrolitycznych – na końcu), bezpieczników, podstawek pod układy scalone i transoptorów (można z nich zrezygnować), półprzewodników, gniazd złącz, a następnie transformatora. Kolejny etap to montaż radiatorów dla tranzystora Q1 (radiator typu FK219SACB1) oraz dla przetwornicy impulsowej IC2. W wypadku poboru nieznacznej mocy radiatory nie będą potrzebne.
Wyświetlacz LCD w panelu czołowym połączony jest elektrycznie z obwodem drukowanym za pomącą gumki z elastomeru (2×8×13 mm) wymontowanej ze starego modułu wyświetlacza. Gumka jest dość wysoka (8 mm) ze względu na zastosowanie do podświetlenia LCD super jasnych diod LED 3 mm oraz grubej, zmatowionej obustronnie pleksi (5 mm). Ten świetnie rozpraszający światło materiał został oklejony od spodu i po bokach białym ekranem (naklejką), a następnie przymocowany do obwodu drukowanego wraz z LCD za pomocą sprężystych blaszek. Klamry te z jednej strony opasują krawędzie LCD, z drugiej – krawędzie obwodu drukowanego, wchodząc w jego wycięcia (rys. 10). Pomiędzy pleksi a obwodem drukowanym umieściłem cienką gumkę, co podobnie jak kilka kropel silikonu w miejscach połączeń, stanowić ma zabezpieczenie przed przemieszczeniem się elementów wyświetlacza.
Zarówno boki wyświetlacza, jak i fototranzystor dobrze jest zaopatrzyć w zaczernione ekrany (koszulki) ograniczające emitowanie lub dostęp światła do tych elementów.
Montaż dobrze jest rozpocząć od przylutowania elementów SMD (rezystory, kondensatory, mikroprzełączniki), układy scalone pozostawimy na koniec). Kolejnym etapem będzie przylutowanie elementów przewlekanych (w tym gniazda szpilkowego oraz diod LED podświetlacza z wygiętymi pod kątem 90° wyprowadzeniami). Zanim przystąpimy do montażu wyświetlacza lutujemy z użyciem plecionki do odsysania lutowia układy scalone.
Montaż wyświetlacza może wymagać niemałego wysiłku – trzeba będzie idealnie zgrać ze sobą pady LCD – poprzez elastomer – z padami obwodu drukowanego. W praktyce, okazało się konieczne uruchomienie części sterującej połączonej z panelem i takie przemieszczanie wyświetlacza, aby nawiązał on komunikację z procesorem.
Monitor poziomu wody
Montaż rozpoczynamy od przylutowania elementów SMD – rezystorów, kondensatorów, układów scalonych, tranzystora Q1, następnie elementów przewlekanych. Diody i fotodiodę IRED lutujemy od spodniej strony płytki. Diody zaopatrujemy w koszulki blokujące dostęp promieni do fotodiody.
Obudowa oraz inne elementy
W zakres przygotowania obudowy (obudowa KRADEX – Z2) weszło wiercenie otworów w panelu tylnym pod gniazda i kable, a w czołowym – wiercenie i wycinanie otworów pod klawiaturę, LED-y, fototranzystor oraz wyświetlacz. W dolnej części obudowy oraz w panelu tylnym wykonałem perforację w celu wymuszenia cyrkulacji powietrza (sprawniejsze odprowadzanie ciepła). Jako gniazda wyjściowe niskiego napięcia zastosowałem gniazda typu jack 6,35 mm. Jako gniazda wejściowe temperatury – jack 3,5 mm/stereo, przecieku i braku wody ZZ – jack 2,5 mm/mono, poziomu wody – jack 3,5 mm/stereo, pH-metru – gniazdo telefoniczne. W tylnej ściance znajduje się też gniazdo zasilania zewnętrznego typu PC-G2,5 (z przełącznikiem) oraz gniazdo bezpiecznikowe 10 A. Wyjścia 230 VAC oraz 310 VDC za pośrednictwem złączy z listwą zaciskową oraz wielożyłowego kabla (duży przekrój i dobra izolacja!), połączyłem z przystosowaną (rozdzielone styki) listwą zasilającą wchodzącą w skład typowego przedłużacza sieciowego. W listwie tej zamocowałem gniazda bezpiecznikowe obwodów napięcia 230/310 V. Wartości zastosowanych tutaj bezpieczników będą zależeć m.in. od mocy podłączonych odbiorników. Kabel wielożyłowy oraz sieciowy powinny być solidnie przymocowane do obudowy. Transformator dodatkowo został przytwierdzony do spodniej części obudowy za pomocą blaszanego wspornika.
W przypadku zastosowania lamp HQI, zalecane będzie zasilanie ich z wyjść 230 VAC sterownika poprzez dodatkowe styczniki o odpowiedniej obciążalności prądowej.
Układ DS18B20 umieściłem w koszulce termokurczliwej wypełnionej na końcach silikonem, następnie po jego wyschnięciu podgrzałem ją w celu polepszenia szczelności.
Kabelki z uszkodzonych myszek komputerowych doskonale nadają się do połączenia czujników ze sterownikiem.
Grzegorz Sipiora
dzesek@wp.pl