Sterownik do terrarium z symulacją zmierzchu i świtu

Sterownik do terrarium z symulacją zmierzchu i świtu

Sterownik terrarium

Uwielbiam Animal Planet, jako że pasją do “dziwnych” i “niestandardowych” zwierząt zaraził mnie mój ojciec to też w naszym domu pojawiło się kilka węży między innymi boa tęczowy, boa constrictor, następnie były ptaszniki, mrówki to i w końcu kiedyś musiała pojawić się też i jaszczurka. Jako, że chyba nie ma piękniejszej jaszczurki od brodatego smoka to stałem się też i jej szczęśliwym posiadaczem.

Przed zakupem stworzyłem dla niej lokum to które widzicie na zdjęciu, ale postanowiłem przy okazji, że zapewnię jej warunki zbliżone do “naturalnych”. Pomysł również podrzucił mi ojciec, którego Agamka często zasypiała w dziwnych miejscach bo nagle zaskakiwała ją “noc”.
Wtedy powstał plan sterownika.

Założenia:

  • Cykl dnia i nocy z zmierzchem i świtem.
  • Pomiar temperatury i wilgotności
  • Wyświetlacz który pokazywał by datę i czas, temperaturę i wilgotność, temperaturę wyspy, stan oświetlenia i stan UVB.
  • Ma być tanio i łatwo

Wybór padł na Arduino bo proste tanie i mnóstwo wsparcia na forach. Spełniał wszystkie wymogi poza jednym nie chciałem symulować zmierzchu i świtu za pomocą LED. I tu pojawił się problem skąd wziąć ściemniacz AC który da się podłączyć do Arduino… Szukałem gotowych rozwiązań i nie mogłem znaleść nic co by mi pasowało, aż pewnego razu znalazłem to link. Po więcej szczegółów odsyłam do tego genialnego artykułu.

Po zlutowaniu układu okazało się, że jest to strzał w dziesiątkę. Układ sprawdzał się idealnie i bez problemu mógł obsłużyć dwie żarówki 40W.

Poza lampami żarnikowymi w terrarium znajdą się jeszcze dwie żarówki które nie mogą być podpięte pod w/w układ, a są to żarówka UVB oraz żarówka LED. Te podłączyłem za pomocą zwykłych przekaźników.

Jako czuniki temperatury i wilgotności użyłem dwóch układów DHT11, które chyba każdy kto choć trochę interesował się elektroniką i Arduino zna. A temperaturę wyspy mierzę wtopionym czujnikiem DS18B20.

Za kontrolę czasu odpowiadał zegar DS1307 chodzący na szynie I2C.

Wyświetlacz który użyłem był również obsługiwany po szynie I2C więc każdy z was może dobrać sobie taki wyświetlacz jaki mu pasuje najlepiej. Ja użyłem wyświetlacza 2×16.

Aby Arduino dało się szybko podmienić lub przeprogramować użyłem “tarczy” (Shield-a) wpinanej do Arduino na “kanapkę”.

Zanim zamieszczę okrojony schemat podłączenia to trochę o nim opowiem. Najważniejsze o czym trzeba pamiętać to ilość kabli które potrzebujemy włożyć do środka terrarium. Ja zastosowałem dwie żarówki 40W (obecnie używam tylko jednej), 1 żarówka UVB, 1 żarówka Led-owa. Żarówki żarnikowe posłużą nam do symulacji zmierzchu i świtu i te podłączmy jednym przewodem. Żarówka UVB i LED-owa zaświecać będą się zaraz po zakończeniu symulacji świtu i gasić tuż przed symulacją zmierzchu i też podłączmy je jednym przewodem szeregowo. Następnie czujniki. Dla dwóch DHT11 użyłem skrętki, a czujnik DS18B20 ma wbudowany kabel więc tylko go przedłużyłem.

Schemat połączeń zasilania prądu zmiennego

Schemat połaczeń w arduino
Schemat połaczeń w Arduino

Mam nadzieję, że schematy są wystarczająco zrozumiałe. Na początku może się to wydawać skomplikowane, ale po analizie kodu wszystko staje się wystarczająco proste.

Jeżeli wszystko poszło ok to po włączeniu układu powinien on o godzinie 6:30 zacząć wschód o 7 załączyć UVB i LED, a o 20 30 wyłączyć UVB i LED i powoli zacząć zmierzch.

Po zakończonych pracach projektowych czas wszystko włożyć w jakąś obudowę ja wybrałem drewniane pudełko i efekt końcowy widać na poniższej galerii.

Efekt końcowy 1
Efekt końcowy 1
Efekt końcowy 2
Efekt końcowy 2
Przed efektem końcowym :)
Przed efektem końcowym :)

Taki układ działa już u mnie od około roku. Jedynym minusem to brak zaimplementowanej zmiany czasu z letniego na zimowy, ale myślę, że załatwię to kiedyś przy okazji jakąś zworką. Jeżeli będziecie mieć jakieś pytania to piszcie w komentarzach postaram się Wam odpowiedzieć w ramach możliwości.

Pozdrawiam
Tomek
www.darbean.net.pl

Ocena: 4.29/5 (głosów: 56)

Podobne posty

25 komentarzy do “Sterownik do terrarium z symulacją zmierzchu i świtu

  • Czyli że wszystkie czasy są ustawione na sztywno i nie można ich zmienić bez przeprogramowania procka. Obecnie pisze program sterownika do akwarium co prawda w Bascom ale ja każdą wartość mogę zmieniać.

    Odpowiedz
    • Czasu RTC nie trzeba zmieniać bo nawet przy spadku napięcia zewnętrznego bateria podtrzyma jego działanie(a czas letni/zimowy można zrobić na zworkę). Co do czasów ustawiania świtu i zmierzchu to myślałem nad funkcją ustawiania tych wartości bez potrzeby przeprogramowania Arduino, ale przeanalizowałem jak często będę musiał zmieniać ten czas i w moim przypadku jest to na tyle rzadko, że nie ma sensu tego implementować(od roku nie zmieniałem). Gdybym jednak zmieniał arduino na osobny mikrokontroler jak zasugerował #ioiok to z pewnością dodałbym mały panel sterowania.

      Odpowiedz
      • ja w swoim termometrze wykorzystuje bluetooth :) jak podpinam do niego telefon to ten wysyła aktualną datę i godzinę (przy odpowiednim ustawieniu w apce)

        Odpowiedz
        • niestety u mnie trochę estetyka kuleje, i to był pierwszy projekt który robiłem, na własnoręcznie robionym klonie arduino, własnej płytce itp, i wiem że ma spore niedociągnięcia np świruje analogowy termometr który miał służyć do mierzenia temperatury w mieszkaniu. Pewnie przez brak cewki w zasilaniu albo jest zbyt blisko 7805:P kiedyś przy okazji innego projektu wrzucałem zdjęcie.

          Odpowiedz
      • Robiłem drzewiaste menu (do podobnego LCD) do programatora czasowego i zęby na tym zjadłem – jest to zaskakująco dużo roboty.
        Po pierwsze, znaleźć/przerobić odpowiednią bibliotekę do obsługi menu, żeby intuicyjnie prezentowała godziny, dni tygodnia, opcje itp.
        Po drugie, znaleźć szybko rysującą i nieblokującą bibliotekę do obsługi wyświetlacza po I²C.
        Po trzecie, obsługa menu nie może kolidować z główną pętlą programu, więc przyciski muszą być na przerwaniach – czyli w efekcie albo dokładamy kolejny scalak I²C do obsługi przycisków, albo robimy jakieś bramki, bo pinów do obsługi przerwań w Arduino Uno nie ma zbyt wiele.
        Po czwarte, 2KB RAM w Arduino ledwie wystarcza, żeby pomieścić obsługę aktuatorów i wskaźniki do struktury drzewa menu; komunikaty trzeba było programować w EPROMie i stamtąd pobierać przez wskaźnik. Ale i tak musiałem np. “pakować” booleany do pojedynczego uint8_t i używać operatorów binarnych, żeby oszczędzić RAM.
        Po piąte, gdzie zapisywać ustawione wartości, żeby się zapamiętywały po restarcie, ale też nie zamordować EPROMu (ja użyłem wolnych komórek RAMu od RTC)
        Po szóste, ten prościutki program razem z bibliotekami, po wywaleniu z nich WSZYSTKICH nieużywanych funkcji i struktur, zajął… 31,6KB czyli zostało 400 bajtów (!) wolnego miejsca w EPROMie.

        Projekt zakończył się powodzeniem i kiedyś nawet chciałem go opisać, ale doszedłem do wniosku, że i tak nikomu nie będzie chciało się tego czytać, bo nie da się z tego zrobić tutoriala ;)

        Odpowiedz
  • Mało do czego mogę się przyczepić więc powiem tylko standardowo, że jeśli ten projekt działa już ok. roku to czas pomyśleć nad przeniesieniem go na jakiś osobny mikrokontroler, albo (to co ja polecam) na arduino pro mini

    Odpowiedz
    • Tak wiem, ale cały czas brakuje czasu. Poza tym musiałbym go zbudować na płytce podobnej do arduino, żeby nie musieć przerabiać tej “kanapki”. Narazie szybciej i o niewiele drożej wyjdzie kupić mi drugie arduino uno choć przymierzam się kupić arduino mega i zrobić mały inteligentny pokój, a później dom.

      Odpowiedz
      • Możesz zrobić sobie bardo prostą przejściówkę na płytce uniwersalnej. A dokładniej w dużą płytkę uniwersalną przez goldpiny wlutowujesz arduino pro mini a w miejscach gdzie powinny być wyjścia arduino uno wstawiasz gniazda do goldpinów i oczywiście odpowiednio ciągniesz ścieżki i ewentualnie zworki/przewody. Wtedy masz wszystko pasujące do twojej ,,kanapki” i na pewno taniej, zwłaszcza gdy użyjesz klona arduino pro mini

        Odpowiedz
  • Witaj,
    fajny pomysł i wykonanie również ciekawe.

    Od siebie polecam Arduino Pro Mini – tanie jak barszcz i nie trzeba się pierniczyć z obstawą do Atmegi budując ją samemu.
    Poza tym nie polecam tego DS, dokładności to nie ma żadnej, śpieszy się kilkadziesiąt sekund dziennie – także jako zegarek odpada, no chyba że sobie zrobisz synchronizacje po NTP ale to się mija z celem. Zdecydowanie lepiej użyć DS3231 – droższy ale zupełnie inna bajka – odchyłka na poziomie poniżej 2s rocznie!
    Zamiast DHT11 poleciłbym również DHT22 bo podobnie jak z DS zupełnie inna dokładność w dokonywanych pomiarach ;/

    Ogólnie fajnie, że chciało ci się zamieścić, bo sam wiem, że szybciej się robi projekt, niż go później dokumentuje ;D

    Odpowiedz
    • Wszystko jest tak przygotowane że wymiana na wymienione przez Ciebie elementy trwałaby 30 minut z magicznym “pssst” na początku. Z tym zegarem to racja ale te straty czasu na razie mi nie dokuczają(to znaczy zauważyłem je ale nie ma tragedii), a co do czujników to fakt, ale podczas budowania tylko takie miałem.

      Jak już pisałem sterownik chodzi już sobie od roku. Działa i to jest najważniejsze. A dokumentacja i prezentacja? No cóż rok się do tego zabierałem :)

      Dzięki za polecenie odpowiednich podzespołów.

      Odpowiedz
  • Dokładnie czegoś w tym stylu szukam, tyle że do akwarium, czyli bez czujników wilgotności i temp. Nie myślałeś o wyświetlaczu z przyciskami i menu, gdzie mógł byś w każdej chwili zmieniać czas naświetlania?

    Odpowiedz
    • No rozważałem ale nie potrzebuję zbyt często zmieniać czasów i postanowiłem że na razie zostawię to zaprogramowane w układzie. Sprawę ułatwia mi kanapka odpinam arduino od shield-a i aktualizuję soft. Cała operacja zajmuje 10 minut wiec nie ma to dla mnie znaczenia. Jeżeli chciałbyś zbudować podobny układ to popatrz do komentarza #Konrada. Użyj zamiast moich proponowane przez niego elementy. A co do przycisków to faktycznie można to dodać i jeżeli będę jeszcze kiedyś komuś budował podobny układ to pewnie się nad nimi zastanowię.

      Odpowiedz
  • Przyczepię się do słownictwa… Nie ma czegoś takiego jak “żarówka LED”! W LED-ach nie ma żarnika (wolframowego, węglowego itp.)! Na takie lampki (tak, lampki, źródła światła) możemy mówić “LEDówki”, “lampki LED”, lub same “LED-y”. Nie bądźmy głupi jak ‘sprzedawcy’ z Allegro, którzy nie mają pojęcia, co sprzedają ;)

    Odpowiedz
  • nie lepiej zamiast funkcji getMonthName użyć zwykłej tablicy, coś takiego powinno zadziałać.

    deklaracja
    char dni[7]={“Nie”,”Pon”,”Wto”,”Sro”,”Czw”,”Pia”,”Sob”};

    wywołanie
    String day = dni[now.dayOfWeek()];

    Odpowiedz
  • nie ten typ danych :) deklaracja raczej powinna wyglądać tak:
    String dni[7]={“Nie”,”Pon”,”Wto”,”Sro”,”Czw”,”Pia”,”Sob”};

    Odpowiedz

Odpowiedz

anuluj

Masz uwagi?