Elektroda.pl
Elektroda.pl
X
Sklep HeluKabel
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Higrometr na DHT11 i Atmega168 z alarmem.

ex-or 18 Lis 2017 21:33 4026 9
  • Higrometr na DHT11 i Atmega168 z alarmem.

    Dzień dobry,

    Urządzenie powstało w celu monitorowania poziomu wilgotności w pewnej zamkniętej przestrzeni. Przekroczenie zadanego poziomu jest sygnalizowane sygnałem dźwiękowym (buzzer) i świetlnym (LED). Wartości z ostatniego pomiaru można w każdej chwili odczytać, po naciśnięciu przycisku, na wyświetlaczu siedmiosegmentowym LED. Dane z poprzednich odczytów (ostatnie 250 pomiarów) są zachowywane, dostęp do nich jest możliwy przez UART. Zasilanie z 3 baterii AAA.

    Takie są założenia, które w tej chwili nie są zrealizowane w 100%. Doprowadzenie sprawy do końca zajmie, przy czasie jakim dysponuję, jakieś 2-3 tygodnie. Dlatego pozwalam sobie na zaprezentowanie projektu niedokończonego. Hardware w każdym razie jest wykonany i przetestowany w 100%.
    Co jest zrobione?
    1. Hardware, wraz z obudową
    2. Podstawowa funkcjonalność firmware:
    - pomiar wilgotności (oraz temperatury)
    - wyświetlanie wyników na żądanie, wygaszanie wyświetlacza po upływie ustalonego czasu
    - oszczędzanie energii na podstawowym poziomie: całkowite wyłączenie nieużywanych peryferiów (ADC, UART, TWI, SPI) oraz tryb Idle dla CPU (pomiędzy wykonywanymi zadaniami oczywiście)
    3. Bootloader dla aktualizacji firmware

    Pozostało do zrobienia:
    1. Zaawansowane oszczędzanie energii (głębokie uśpienie z długim interwałem między wybudzeniami, włączanie tylko potrzebnych peryferiów i tylko na niezbędny czas, tryb Idle w pozostałym czasie: w trakcie pomiarów, wyświetlania wyników, pracy UART i in.) - najważniejsza rzecz do zrobienia.
    2. Pomiar napięcia baterii
    3. Wykrywanie oraz sygnalizowanie sytuacji alarmowych (przekroczenie wilgotności, niski poziom baterii, błędy transmisji z czujnikami, nieoczekiwany reset µC itp) z możliwością czasowego wyłączenia sygnalizacji
    4. Użycie watchdoga
    5. Logowanie pomiarów
    6. Konfiguracja niektórych parametrów (interwałów pomiarów, interwałów alarmów itd.) przez UART (opcjonalnie)
    7. Logowanie błędów (opcjonalnie)
    8. Automagiczne wykrywanie typu czujnika DHT11/DHT22 i autokonfiguracja drivera (opcjonalnie z bardzo niskim priorytetem)
    9. Wykonanie opisów na obudowie.

    Konstrukcja jest banalnie typowa: mikrokontroler Atmega168p z minimalnym niezbędnym "uzbrojeniem" sprzętowym, dwa czujniki DHT11 (jeden jako rezerwowy), dwucyfrowy siedmiosegmentowy wyświetlacz LED (również w mimimalnej konfiguracji), buzzer piezzo, dwa tact switche plus kilka złącz. Poniżej schemat ideowy i rysunek PCB.

    Higrometr na DHT11 i Atmega168 z alarmem.Higrometr na DHT11 i Atmega168 z alarmem.





    Zasilanie z trzech baterii AAA zebranych w koszyku. PCB zostało zrobione pod obudowę KM-36B, która została wybrana ze względu na wysokość pozwalającą na umieszczenie koszyka z bateriami pod płytką drukowaną.
    Czujniki są podłączone do urządzenia ok. 3m przewodami YTDY 4x0,5.

    Firmware został napisany w języku C i skompilowany avr-gcc v. 4.9.2 (AVR_8_bit_GNU_Toolchain_3.5.4_1709). W programie została wykorzystana biblioteka obsługi DHT22 autorstwa Miguela Moreto (Link) zaadaptowana przeze mnie (quick and dirty) do obsługi dwóch czujników DHT11. Program liczy 2514 linii kodu, z czego 633 to ww biblioteka po modyfikacjach. Kody źródłowe w załączniku.
    W roli bootloadera występuje Optiboot w wersji 6.2 (Link)

    Pierwsze próby wykazały, że urządzenie jest podatne na samorzutne resety przy dołączaniu/rozłączaniu niedokładnie dokręconych linii zasilania czujników, za co prawdopodobnie odpowiedzialny jest brak zabezpieczeń przed przepięciami na pinach czujników µC. Solidne umocowanie przewodów w złączach "naprawiło" problem. Przy okazji okazało się, że złącza ARK500 nie są zbyt dobrym rozwiązaniem do podłączania przewodów z drutu 0,5mm.
    Zastosowanie czujników DHT11 także okazało się nieco problematyczne, są to bardzo marne czujniki z niską ceną jako chyba jedyną zaletą.
    Wykonanie urządzenia, a raczej wykonanie PCB było dla mnie pewnym novum ze względu na wymiary niektórych ścieżek, które mają szerokość 16 mils z odstępem także 16 mils. Wcześniej nie wykonywałem ścieżek o takich wymiarach. Oczywiście generalnie 16 mils nie jest żadnym osiągnięciem w warunkach domowych, jednak z posiadaną przeze mnie drukarką atramentową jest to już nieco problematyczne - krawędzie wydruku wychodzą postrzępione (zwłaszcza krawędzie prostopadłe do kierunku poruszania się głowicy), tusz nieco się rozlewa i wsiąka w kalkę co po naświetleniu powoduje niewielkie przesunięcie krawędzi ścieżki na gotowej płytce w stosunku do projektu (oceniam je na ok 1-2 mils). Jest to prawdopodobnie granica możliwości z tym sprzętem. Poniżej kilka fotek z wykonania.

    Higrometr na DHT11 i Atmega168 z alarmem.Higrometr na DHT11 i Atmega168 z alarmem.Higrometr na DHT11 i Atmega168 z alarmem.Higrometr na DHT11 i Atmega168 z alarmem.Higrometr na DHT11 i Atmega168 z alarmem.Higrometr na DHT11 i Atmega168 z alarmem.Higrometr na DHT11 i Atmega168 z alarmem.Higrometr na DHT11 i Atmega168 z alarmem.Higrometr na DHT11 i Atmega168 z alarmem.

    I krótki film z działania:

    Link


    Koszty:
    Koszt wykonania oceniam na ok. 70zł, poniżej w tabeli wykaz kosztów (materiał plus koszty przesyłki w części przypadającej na pozycję). Wiersze z wartością 0 to pozycje które albo były zakupione dawno i trudno dojść jaka była cena (w tej pozycji Atmega168 oraz wyświetlacz) lub z demontażu.

    Higrometr na DHT11 i Atmega168 z alarmem.


    -------- Edit 30.11.2017 ---------------
    W tej chwili, z listy do zrobienia są, w dużej części, wykonane punkty 1, 4 oraz tknięty 6. I tak:
    1. Program zyskał taki kształt, że większość czasu urządzenie znajduje się z stanie głębokiego uśpienia. Pobór prądu w tym stanie to 5,2µA, co zgadza się z danymi z datasheeta µC (m168p) dla trybu Power Down. Z tego stanu µC jest (lub może być) wybudzony przez trzy eventy: przerwanie watchdoga, przerwanie od buttona lub przerwanie od UARTa. Po wybudzeniu µC wykonuje bieżące zadania, ale też w każdym możliwym momencie jest wprowadzany w tryb oszczędzania energii Idle. Z tego trybu jest wybudzany przez przerwanie timera1 pełniącego rolę SysTicka. Po wykonaniu bieżących zadań µC znów wchodzi w stan Power Down a rolę SysTicka przejmuje timer watchdoga.
    W tej chwili jest to tylko szkielet bez zasadniczych funkcjonalności. Prace trwają...


    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz pendrive 32GB.
  • Sklep HeluKabel
  • #2 19 Lis 2017 00:06
    dktr
    Poziom 18  

    Projekt ogólnie super, pomyśl nad wymianą czujnika na np BME280 - moim zdaniem jest sporo lepszy, DHT11 albo DHT22 mają jakby sporo większą bezwładność. Dla testu zamontowałem sobie w łazience 2 czujniki BME i DHT i na DHT w zasadzie na wykresie jest prosta linia, a na BME widać nawet kiedy spuściłem wodę w WC. Wykresy można pooglądać TU.

  • #3 19 Lis 2017 01:15
    22053
    Użytkownik usunął konto  
  • Sklep HeluKabel
  • #4 19 Lis 2017 11:54
    ex-or
    Poziom 16  

    dktr napisał:
    pomyśl nad wymianą czujnika na np BME280

    Tak, BME są bardzo fajne i, u skośnookich przyjaciół, niezbyt drogie jednak z punktu widzenia projektu mają tę wadę, że komunikują się przez magistralę I2C, która to jest przewidziana do użytkowania na odległości rzędu centymetrów.

    R-MIK napisał:
    Pozitiv20 czy gotowa PCB z emulsją?

    Ani to, ani to :-) Korzystam z folii z rolki do samodzielnego nałożenia na laminat. Nakładanie jest trochę upierdliwe bo trzeba bardzo uważać na czystość i by nie narobić bąbli, ale jest do opanowania. Jednak to sposób tylko na małe płytki.

    R-MIK napisał:
    Cynowanie chemiczne?

    Nie. :-) Bisan LB 3 plus gorące powietrze. To właściwie też coś co robiłem pierwszy raz, no i oczywiście popełniłem błąd, bo wcześniej powierciłem otwory. :roll:

    R-MIK napisał:
    Wiertło masz tępe

    No niestety :-( W końcu muszę się zaopatrzyć we wiertła z węglików.

  • #5 19 Lis 2017 12:01
    22053
    Użytkownik usunął konto  
  • #6 19 Lis 2017 12:28
    ex-or
    Poziom 16  

    R-MIK napisał:
    Czym nakładasz pastę?


    Załączonym pędzelkiem, ale nie da się jej położyć równo, bez smug. Następnym razem spróbuję gąbkowym wałkiem.

    R-MIK napisał:
    Jeszcze soldermaska


    Fajnie by było, ale dostępne technologie są dla mnie nie do przyjęcia.
    Kiedyś miałem niewielki kawałek soldermski w folii i to było OK, ale ostatnio jakoś nie można jej dostać w małych ilościach. Dużej ilości nie warto kupować bo bardzo szybko traci swoje właściwości.

  • #7 19 Lis 2017 18:28
    andrzejek23
    Poziom 18  

    Wreszcie porządny projekt, który przypomina mi lata świetności Elektrody... Prawdziwe DIY od początku do końca :)

  • #8 18 Gru 2017 14:17
    ex-or
    Poziom 16  

    Cześć!
    Mała aktualizacja stanu realizacji projektu. Jak zwykle trwało to dłużej niż się zakłada, ale powoli projekt zbliża się do końca. W tej chwili zasadniczo z listy "do zrobienia" skończone są punkty 1-5. Pozostała kosmetyka pt. ustalenie interwału pomiarów itp. Punktu 6 (konfig przez UART) na razie nie będę robił, może później, a punktów 7,8 nie będę robił w ogóle.
    Podczas testów wyszedł mały problemik z czujnikami, mianowicie w spoczynku pobierają one dosyć spory prąd. W nocie katalogowej jest to podane, ale jakoś mi to umknęło :-(. W sumie całe urządzenie w uśpieniu pobiera ok 149µA, co przy bateriach AAA oznacza maksymalnie niecałe pół roku pracy. Trochę słabo :-/ Możliwości poprawy sytuacji widzę trzy:
    1. Zastosowanie baterii AA (zmieszczą się w obudowie) co wydłuży czas pracy ponad dwukrotnie
    2. Włączenie na stałe tylko jednego czujnika (drugi jako rezerwowy)
    3. Włączanie zasilania czujników tylko na czas pomiarów (na szczęście jeden pin µC pozostał wolny)
    W tej chwili skłaniam się ku opcji 1. jako najmniej kłopotliwej. Ale nic nie jest jeszcze przesądzone.
    Filmu ani zdjęć z działania nie pokazuję, bo pewnie i tak nikogo to nie interesuje. :-)
    Wesołych Świąt.

  • #9 18 Gru 2017 17:40
    idepopizze
    Poziom 32  

    Oj mylisz się, interesuje i to bardzo. Śledzę temat od początku.

  • #10 03 Sty 2018 13:50
    ex-or
    Poziom 16  

    Cześć!
    Oto kolejny (i prawdopodobnie ostatni) raport z wykonania projektu.
    W tej chwili urządzenie jest wykonane i zainstalowane w miejscu pracy. Co do problemu z nadmiernym zużyciem energii, o którym pisałem poprzednio, żeby nie przedłużać realizacji (i tak już nadmiernie rozciągniętej :-() zdecydowałem się na pozostawienie sprzętu tak jak jest, jedynie założyłem baterie R6 zamiast R3. Energii teoretycznie powinno wystarczyć na niecały rok pracy, jeśli jednak się okaże, że faktyczny czas pracy jest znacznie krótszy może zdecyduję się na przeróbki.
    Przy instalacji pojawiła się oczywiście niemiła niespodzianka: przy szamotaninie z obudową z niewiadomego powodu przestał działać wyświetlacz. Urządzenie jako takie (chyba) działało: reakcja na buttony była zgodna z oczekiwaniem, UART także działał. Po resecie urządzenia wyświetlacz ożył. Ponowny blackout nastąpił w trakcie odpinania przejściówki UART-USB. Podejrzewam więc, że spowodowane to było przepięciami. Możliwe, że w pierwszym przypadku dotknąłem naelektryzowanym (plastikowa obudowa :roll: ) paluchem wejść UARTa. Zagadką jest dlaczego ewentualne przepięcie nie zresetowało procka a jedynie spowodowało wygaszenie wyświetlacza :-? . Może istota problemu leży całkiem gdzie indziej? Bez sprzętowego debuggera (niestety nie posiadam :( ) nie widzę szans na rozwikłanie zagadki. Ot zagwozdka, która będzie męczyć do końca świata :cry: W każdym razie nauka z tego płynie taka, żeby nie wystawiać portów procka bez należytego zabezpieczenia. I nie przystępować do bardziej skomplikowanych programowo projektów bez odpowiedniego sprzętu (debugger :cry: )

    Kilka fotek gotowego urządzenia:

    Higrometr na DHT11 i Atmega168 z alarmem.Higrometr na DHT11 i Atmega168 z alarmem.Higrometr na DHT11 i Atmega168 z alarmem.Higrometr na DHT11 i Atmega168 z alarmem.

    Następne fotki po podłączeniu czujników. Na zdjęciach odczyty, kolejno, wilgotności, temperatury, napięcia baterii:

    Higrometr na DHT11 i Atmega168 z alarmem.Higrometr na DHT11 i Atmega168 z alarmem.Higrometr na DHT11 i Atmega168 z alarmem.

    Na koniec trochę statystyki. Kod źródłowy (z komentarzami) zawiera 7257 linii ( z tego całkowicie mojego autorstwa: 5387) w 25 plikach. W programie wykorzystałem dwa nie swoje moduły: bibliotekę (nieco przeze mnie przerobioną) do obsługi DHT22 (autor i link podany w pierwszym poście) oraz bibliotekę do UART autorstwa Petera Fleury http://homepage.hispeed.ch/peterfleury/avr-software.html z dodatkami autorstwa Petera Thomasa (brak aktualnego linka).
    Program skompilowany zajmuje 13018 bajtów FLASH plus 512 bajtów bootloader oraz 928 bajtów RAM (z tego bufor FIFO na dane: 752), na stos pozostaje 96 bajtów (sterta nie jest wykorzystywana).