Marudnik do kwiatów (część druga)

Marudnik do kwiatów (część druga)

W poprzedniej części opisałem projekt powiadamiacza o podlewaniu kwiatków od strony programowej. Dziś zapraszam do kontynuacji lektury, tym razem rozwiązanie sprzętowe. Dla porządku spis treści:

W części pierwszej:

W części drugiej:

W ostatniej części:

Zbudujmy więc układ!

Potrzebne będą:

  • mikrokontroler Atmega z serii “picopower”,
  • trochę drobnicy elektronicznej – potencjometry regulowane 2 sztuki 10-22kΩ, kondensatory 10nF-100nF, rezystory 1, 10, 47kΩ, mikroprzełącznik do resetu, parę goldpinów. Parametry elektroniki nie są graniczne – czy kondensator ma 10n, 47n czy 100n nie ma większego znaczenia, rezystory i potencjometry dobieramy eksperymentalnie, rezystor do diody na zasadzie “aby fajnie świeciła”,
  • dwie baterie – paluszki AA i pudełko do nich,
  • płytka drukowana lub testowa,
  • jako że w komentarzach pod poprzednim wpisem pojawiła się propozycja zasilania ogniwami słonecznymi: trzy najtańsze ogrodowe lampki solarne.

Całość powinna się zamknąć w kwocie 20-25zł (najdroższy jest mikrokontroler i lampki).

Odnośnie mikrokontrolera – jak większość podzespołów elektronicznych, produkowane są w różnych podwersjach. Podwersja z serii “picopower”, oznaczona końcówką “P” (Atmega88P, Atmega88PA, Atmega328P), charakteryzuje się dwoma ciekawymi cechami:

  • napięcie zasilania już od 1,8V, dzięki zastosowaniu wewnątrz struktury scalonej przetwornicy podnoszącej napięcie,
  • ekstremalnie wysoką energooszczędność, dzięki czemu może funkcjonować przy zasilaniu prądem rzędu 100 nA (nanoamperów).

Jeżeli w Waszych projektach nie jest to istotne, można użyć dowolnej Atmegi, jednak gdy energooszczędność jest istotna – warto rzucić okiem na serię “picopower”

Druga sprawa – jak również pisałem wcześniej koniecznej będzie przeniesienie programu na “czysty” mikrokontroler – Arduino ciągnie zbyt dużo prądu.

Wersja najprostsza z najprostszych – w Arduino IDE tworzymy program, wyjmujemy z podstawki zaprogramowany układ i sprawa rozwiązana. Jeżeli chcemy zaprogramować “czysty” układ trzeba wykonać kilka prostych kroków.

 

Programowanie mikrokontrolera w zewnętrznym programatorze

Arduino może służyć jako programator zewnętrznych układów, ale mimo kilku prób nie udało mi się to osiągnąć. No nie wiem dlaczego, po prostu mi nie wychodziło i już :-) Ale kiedyś robiąc zakupy na ebay’u, oprócz mikrokontrolerów kupiłem programator USBasp – najtańszy z najtańszych chińskich programatorów, kosztował niecałego dolara z przesyłką. Baardzo fajna i uniwersalna zabawka.

Najpierw należy skonfigurować IDE Arduino, aby nie kasowało programów, które dzięki niemu się kompiluje. Po uruchomieniu IDE wybieramy Plik – Preferencje i klikamy na link do pliku preferencji. U mnie znajduje się w katalogu

C:\Users\Artur\AppData\Roaming\Arduino15\preferences.txt. Na końcu pliku należy dodać linię “build.path=scieżka_do_katalogu_gdzie_mają_ladowac_programy”, np “build.path=C:\output”, przy czym wskazany katalog musi istnieć.

Zapisujemy zmiany, restartujemy Arduino IDE i to wszystko. Teraz piszemy nasz program, kompilujemy go i zaglądamy do katalogu, który wskazaliśmy w pliku konfiguracyjnym. Oprócz śmieci znajdzie się tam najważniejszy dla nas plik, ten z rozszerzeniem .hex. Wgrywamy go do mikrokontrolera, ja używam graficznej nakładki na avrdude o nazwie avrdudess http://blog.zakkemble.co.uk/avrdudess-a-gui-for-avrdude/:

avrdudes

Wybieram z listy mój programator (USBasp, ale może być dowolny inny) i podłączamy kabelkami Atmegę w sposób następujący:

  • MOSI – pin 17
  • MISO – pin 18
  • SCK – pin 19
  • RESET – pin 1
  • VCC – pin 7
  • GND – pin 8ARDUINO_V2[1]

Ściąga do podłączeń tutaj:

(opis nóżek Atmegi: czarne, Arduino: różowe, źródło: http://jobs.arduinoexperts.com/wp-content/uploads/2013/03/ARDUINO_V2.png)5698544100_1305190000(opis nóżek programatora)

Klik-klik-klik, po podłączeniu w programie wciskamy “Detect” –  jeżeli układ jest podłączony prawidłowo i oknie programu pokaże się nazwa wykrytego typu mikrokontrolera. Jeżeli nie – mamy cały wieczór na dochodzenie co jest nie tak i jaki kabelek źle podłączyliśmy. Gdy już wszystko jest OK, klikamy w przycisk obok pola “Flash”, wskazujemy na plik .hex wygenerowany przez Arduino, klikamy “Program!” i po kilku sekundach mamy nasz program wgrany na Atmegę. Tadam!

Teraz czas na projekt układu. Od strony elektronicznej klasyka gatunku: RESET podpięty do rezystora podciągającego i mikroprzełącznika, dioda świecąca poprzez rezystor po pinu 19 (w Arduino jest to pin oznaczony jako 13, ten od migającej diody), kondensator filtrujący zasilanie – czyli absolutne minimum. Do pinu odpowiedzialnego za obsługę przerwań podłączony jest dzielnik napięciowy, złożony z potencjometru P1, czujnika wilgotności Vi-V1 i potencjometru P2. Dzielnik jeszcze jest w stadium opracowywania, ale generalna zasadza działania jest następująca: im rezystancja jest większa (czujnik w doniczce przewodzi prąd coraz słabiej), tym napięcie na potencjmetrze P2 jest niższe napięcie. Gdy spadnie do poziomu zera logiczego mikrokontroler się budzi i miga diodą. Gdy podleję kwiatek, przewodnictwo w doniczce wzrośnie, spadnie rezystancja miedzy punktami V1-V1, napięcie na P2 wzrośnie i układ przejdzie w stan czuwania. Kręcąc potencjometrami dobieram sobie punkt alarmu. Dodatkowo (“na wszelki wypadek”) dodałem kondensator C2 dla filtrowania zakłóceń. Dodałem też fotorezystor, którego rezystancja spada wraz ze zwiększeniem oświetlenia. Po co? Aby układ mi się nie włączał w nocy i nie marnował niepotrzebnie prądu – dopiero za dnia jego rezystancja spadnie na tyle, by układ się załączył.

kwiatki2

Układ zbudowałem na kawałku płytki testowej. Kilka razy próbowałem z termotransferem, ale mi nie wychodziło. Tutaj schemat jest na tyle prosty, że prosty pająk od strony ścieżek w zupełności wystarczył. Po zmontowaniu układ wygląda następująco:FILE0175

Z lewej strony dzielnik napięciowy z fotorezystorem, w środku mikrokontroler na podstawce,, przycisk reset, kondensatory filtrujące, niebieska dioda i golpiny do podłączenia programatora. Pinów dałem więcej, bo miałem trochę wolnego miejsca i stwierdziłem że lepiej jeden za dużo niż potem jeden za mało.  Te zielone elementy z prawej strony to akumulatorki pastylkowe wyciągnięte z lampki solarnej, o której wspomnę za chwile. Są podłączone do testów, dlatego nie ma ich jeszcze na schemacie, na płytce podłączone są równolegle do baterii, poprzez niewielki opór ~10Ohm. Po zmontowaniu układu okazało się że jest jeszcze sporo miejsca, więc dołożyłem jeszcze złącze 2×5 do programatora, żeby nie bawić się kabelkami. Całość jest nie większa niż dwie baterie AA. Po kilku testach potwierdziłem, że układ działa prawidłowo.

Na tym tę część planowałem zakończyć, ale w komentarzach pod poprzednim wpisem pojawił się koncept zasilnia układu z ogniw słonecznych. Krótkie poszukiwania na popularnych portalach pokazały, że można takie ogniwa kupić, ale albo są za duże, albo dają za małe napięcie, albo są za drogie. Z tego co zauważyłem, wszystkie sensowne miały ceną powyżej 10zł plus transport.

Ale skojarzyłem sobie, że już widziałem coś podobnego – są przecież lampki solarne do ogrodu. Znalazłem takie w najbliższym supermarkecie za 2,89zł (!) sztuka. Kupiłem takie trzy, rozłożyłem na części i w ten sposób stałem się posiadaczem:

  • trzech ogniw słonecznych po 1,2V, dających łącznie ok. 3,5V (bez obciążenia) przy oknie w pochmurny dzień
  • trzech pastylkowych akumulatorków o zapewne absurdalnie małej pojemności
  • i garstki pozostałości – rezystorki, przełączniki, kabelki, gniazda na akumulatorki, białe diody świecące i scalone kontrolery ładowania akumulatorków.

Lampka jest tania i beznadziejnie kiepska (nie oczekujmy cudów za tę cenę…), ale do moich potrzeb absolutnie wystarczająca. Ogniwa połączyłem szeregowo, akumulatorki również, całość złożyłem do kupy i podłączyłem do układu. Działa bez zarzutu! Moduł z podwójnym zasilaniem prezentuje się następująco:

FILE0691

Uwagi praktyczne:

  1. może się okazać, że raz zaprogramowana Atmega drugi raz zaprogramować się nie da. Powód jest prosty – częstotliwość zegara sygnału programującego nie może być niższa niż 1/4 sygnału taktującego mikrokontroler. Przy pierwszym zaprogramowaniu układ działał z zegarem 8MHz i nie było problemu. Ale po uruchomieniu programu zegar został podzielony programowo przez 256 i spadł do 32kHz. Przy tej wartości niektóre prostsze programatory (mój tak miał) mogą odmówić współpracy. Rady są dwie. Pierwsza – o ile programator ma zworkę SCK (slow clock) należy ją zewrzeć i spróbować ponownie. Rada druga: odłączyć programator, wcisnąć RESET w Atmedze, podłączyć programator, puścić RESET  i spróbować zaprogramować układ. Eksperymentując z czasami puszczania i zwalniania RESETU programator dał radę.
  2. może się też zdarzyć, że oryginalny mikrokontroler wyjęty z Arduino w ogóle nie chce ruszyć. Jest to spowodowane faktem, iż w Arduino Atmega jest skonfigurowana na 16MHz do współpracy z zewnętrznym kwarcem – i bez niego nie ruszy. Znów drogi są dwie: albo podłączyć zewnętrzny kwarc i układ od razu odżyje, albo przeprogramować mikrokontroler tak, aby nie korzystał z kwarcu. Wystarczy w programatorze ustawić fusebity na domyślne, pomocna będzie strona: http://www.engbedded.com/fusecalc. UWAGA: folgowanie sobie z fusebitami może skutecznie unieruchomić mikrokontroler, należy do tego podchodzić rozważnie. Wiem co mówię, bo sam zablokowałem sobie układ chyba parędziesiąt razy :-) Tematyka fusebtów jest zbyt obszerna by ją tu poruszać, fajnie jest to opisane tutaj: http://mikrokontrolery.blogspot.com/2011/03/avr-fusebity-zmiana-zegara.html. Moją Atmegę328P zaprogramowałem fusebitami LOW:62 HIGH:D9.

W następnej części – jak zrobić czujnik wilgotności i wykorzystać układ w praktyce.

Ocena: 4.63/5 (głosów: 35)

Podobne posty

25 komentarzy do “Marudnik do kwiatów (część druga)

  • projekt fajny, ale jestem przeciwnikiem artykułów w częściach! juz kilka znalazło sie na głównej i są już zapomniane. Nie lepiej umieścić wszystko w jednym po zakończeniu projektu ?

    Odpowiedz
      • Słusznie. Ale fajnie by było, gdyby po dodaniu kolejnych części autorzy edytowali poprzednie artykuły i dodawali do nich coś w rodzaju spisu treści z linkami do kolejnych części :)

        Odpowiedz
          • Widzę że się znasz na mikrokontrolerach. Dałbyś rade stworzyć kontroler do gier na bazie atmega?? Jeżeli tak to proszę o odpowiedź, bardzo mi na tym zależy. Nie pogardzę też jakimś linkiem.

            Odpowiedz
            • Heh, dzięki za komplement, ale uważam że ledwo co liznąłem temat mikrokontrolerów :-) Co do Twojego pomysłu: obawiam się, że to jednak za wysokie progi. Tzn. pewnie bym dał radę, ale kwestie czasowe na to (niestety) nie pozwalają. Co zaś do problematyki to proponuję przyjąć strategię którą sam stosuję: nakreślam sobie problem (typu: jaki kontroler, jak ma wyglądać, jak ma się łączyć itp), potem szukam w googlach, czy aby ktoś już tego nie zrobił – lub przynajmniej próbował. Krok po kroku i masz rozwiązanie :-)

              Odpowiedz
    • Celowo tak zrobiłem. Raz, żeby dokumentować prace na bieżąco, dwa: wydaje mi się że połączenie tego w całość dałoby duuuuży tekst. A tak tematyka oszczędzania energii w mikrokontrolerach w jednym, elektronika w drugim a w trzecim może uda mi się to wykorzystać w praktyce :-)

      Odpowiedz
      • np. fotorezystor i czujnik wilgotności podłączyć do bramki and a miganie diody zrealizować np. na N555 . Na szczęście układy elektroniczne są tak tanie że można sobie na to pozwolić. Rozwiązanie jest tylko pomysłem nie daje pełnej gwarancji żeby zadziałało

        Odpowiedz
        • Bardzo słuszna uwaga. Wydaje mi się, że realizacja pomysłu w sporej części zależy od wiedzy/umiejętności inżynierskich. Zauważ, że N555 ciągnie 2mA i wymaga 4,5V. Trzeba szukać wersji CSS555 która jest już energooszczędna (2uA) – nie wiem ile to kosztuje. Bramki to kolejny scalak – pewnie dałoby radę wykorzystać jedną bramkę do czujnika a dwie jako generator migania, i pewnie da radę znaleźć jakąś wersję low-power. I jestem prawie pewien że by zadziałało. Od strony finansowej wydaje mi się że wyjdzie na to samo. Ale urok mikrokontrolerów to właśnie możliwość dostępnych od ręki dodatkowych portów analogowo/cyfrowych, port szeregowy w układzie i tego typu zabawki. W analogówce to byłby kolejny scalak, kolejna bramka itp.

          Poza tym – samo programowanie takich
          układzików jest sexy ;-)

          Odpowiedz
    • Jest na schemacie, oznaczony jako Ph. Bocznikuje potencjometr P2, im jest ciemniej tym ma większą rezystancję. Jeżeli kwiatki będą wymagały podlania za dnia, układ zadziała (rezystancja wypadkowa to równoległe połączenie Ph i P2, która będzie mała bo Ph będzie małe). W nocy natomiast rezystancja Ph będzie duża (a więc i wypadkowa rezystancja wieksza), więc nawet jak kwiatki będą chciały pić, to układ się nie załączy – sygnał wybudzający będzie większy niż logiczne “0”. Wszystko po to, by układ nie działał niepotrzebnie w nocy.

      Odpowiedz
    • Tak, to są te małe akumulatorki-pastylki wydłubane z lampki solarnej o których pisałem w tekście. Nie ma ich na schemacie, dołączyłem je testowo. Z tego co wyczytałem w sieci mają pojemność 43mAh, w moim układzie bez oszczędzania energii wytrzymały ok 1,5 dnia, czyli z grubsza by się zgadzało (wątpię aby po leżakowaniu w sklepie miały pełną pojemność). Jeżeli sprawdzi się system ładowania akumulatorków na noc z ogniwa słonecznego to je zostawię, w przeciwnym wypadku wrócę do zasilania w stylu: ogniwa za dnia i podtrzymanie bateryjne w nocy. Rozważam też opcję potrójną: ogniwa w dzień, akumulatorki w nocy i baterie “na-wszelki-wypadek-gdyby-wszystko-inne-nie dało-rady” :-)

      Odpowiedz
  • projekcik fajny i dodatkowo przydatny dla osób wrzucających projekty na atmege.
    Sam wrzucałem kod za pośrednictwem arduino IDE, leonardo oraz USBasp i nie chciały działać zobaczymy jak ten sposób się sprawdzi z avrdude.
    aha piszac program podpinasz nóżki w atmedze według PIN MAPING czyli np. definiujesz jako 11 a podpinasz w atmedze pod 17??

    Odpowiedz
    • Z nóżkami dokładnie tak, zaktualizowałem rysunek – teraz powinno być wszystko jasne. Pin 11 to pin 17 Atmegi, 13 Arduino to 19 Atmegi itp.

      Odnośnie wrzucania kodu: bardzo ważne jest zdefiniowanie typu docelowego mikrokontrolera. Domyślnie projekt kompilowany jest pod Atmegę328, uruchomienie go na np. Atrmedze8 się nie uda (logiczne). Przed kompilacją trzeba wybrać właściwy typ mikrokontrolera (Narzędzia-Płyta) albo samemu go zdefiniować w Arduinohardwarearduinoavrboards.txt

      Odpowiedz
      • ok dzięki jeszcze pozostaje mi zapewnienie odpowiedniego środowiska dla atmegi i powinno działać. A nie wiesz pin 11 pod odbiornik IR sie nada tak??
        aha i jakbyś jeszcze mógł wrzucić jak to podłączyłeś na płytce stykowej chodzi mi głównie o podpięcie Vcc resetu itp żeby Atmega działała bo nie wiem czy wszystko robie ok do jej prawidłowego działania chyba że już to wyślesz mi na poczte

        Odpowiedz
  • cześć,

    Stary wątek ale zapytam:
    jeśli kompilujemy jakiś program w Arduino , to zauważyłem iż należy wybrać w Narzędziach płytkę z takim samym typem uC na jaki chcemy później przy pomocy USBASP wrzucić plik hex.

    Czy coś źle robię? Czy nie da się wygenerować “uniewersalnego” hexa aby dało się zaprogramować dowolny uC?

    Odpowiedz
  • Witam
    czy dalo by rade zrobic cos takiego aby mierzyc dystans np od 20 do 150cm jakims ultrasonic sensorem i wysylac poprzez bluetooth do np tel ?
    zasilanie musialo by byc z baterii najlepiej.
    Za gotowy program jestem w stanie zaplacic :)

    Odpowiedz

Odpowiedz

anuluj

Masz uwagi?