Strona 1 z 1

Higrometr+termometr zasilany bateryjnie.

: poniedziałek 31 lip 2017, 21:16
autor: Antystatyczny
Witam,

Ostatnie upały powodują, że mam coraz więcej niekoniecznie mądrych pomysłów. Jednym z nich jest higrometr + termometr zasilany bateryjnie, który chciałbym przedstawić oraz, niejako przy okazji, zadać kilka pytań pomocniczych.

Znaleziony w szufladzie DHT11 służy jako czujnik temperatury oraz wilgotności względnej, zaś dane odczytywane są przez mikrokontroler PIC16F716 w obudowie DIP18. Prezentacja danych realizowana jest wyświetlaczem CBS084A00-TJN. Początkowo chciałem użyć ATtiny2313, ale gdzieś się schowała, a podczas poszukiwań wpadł mi w ręce PIC. Mały, zgrabny i z wylutu (wydaje mi się, że wytargałem go z jakiegoś uszkodzonego chińskiego ekspresu firmy Zelmer). Projektu nie przeniosłem jeszcze na płytkę docelową, ale układ cały czas pracuje na płycie testowej o wdzięcznej nazwie ZEPIC. Przygotowałem już projekt płytki oraz oczywiście schemat ideowy. Tak się prezentuje schemat:
Higrometr_sch.png

Oraz płytka:
Higrometr_brd.png


Jak widać projekt jest banalnie prosty. Mikrokontroler taktowany jest zewnętrznym kwarcem o bazowej częstotliwości 12MHz. Początkowo miał być 4MHz, ale okazało się, że obróbka pomiaru szerokości impulsu nie mieściła się w reżimie czasowym ustalonym przez producenta DHT11. Nieużywane piny są zwarte do GND, by uchronić się przed stanami nieustalonymi na nich, a w efekcie zwiększonym poborem prądu.

Ogólna zasada pracy jest nieprzyzwoicie prosta. Po włączeniu zasilania układu, mikrokontroler dokonuje inicjalizacji wyświetlacza, warstwy sprzętowej odpowiedzialnej za odbiór danych z czujnika DHT11, a następnie idzie spać. Po ok. 2.3 sekundy układ jest budzony wbudowanym licznikiem "watchdog". Następuje odczyt danych, a potem ich prezentacja na wyświetlaczu. Następną operacją jest ponowne wprowadzenie mikrokontrolera w stan uśpienia. Czas pracy wynosi 0.025s, a czas snu 2.128s. Na potrzeby pomiarów wprowadziłem do układu dodatkowy pin, na którym wystawiany jest stan wysoki tuż po przebudzeniu, a przed drzemką stan zmieniany jest z powrotem na stan niski.

Zasilanie układu jest dowolne, ale pod warunkiem, że jego napięcie będzie wynosiło nieco ponad 3V. Początkowo celowałem w dwie bateryjki AA lub AAA, ale po zmianie kwarcu z 4MHz na 12MHz należy nieco podnieść napięcie (zgodnie z dokumentacją mikrokontrolera). Póki co mam jakieś trzy akumulatorki NiMH o łącznym napięciu 3.6V, więc się tym nie przejmuję. Po zakupie koszyka na dwie bateryjki AA lub AAA wykonam testy działania na napięciu 3V.

Program napisałem oczywiście w języku C, a pętla główna jest mało ciekawa, bo niemal pusta. Wygląda ona mniej więcej tak:

Kod: Zaznacz cały

/* Uncomment the following line to measure mcu wake up time on RB0 pin. */
//#define APP_DEBUG

/* Function shows data collected by DHT11 sensor. */
void ShowData(DHT_DataType  *data);

/* DHT11's data container. */
DHT_DataType dht;

int main(void)
{
#ifdef APP_DEBUG
    /* Debug pin configuration. */
    TRISB &= ~_TRISB_TRISB0_MASK;
#endif /* APP_DEBUG */
   
    /* LCD initilization. */
   CBS084A00_Init();
   
    /* Display "*C". */
    CBS084A00_SetDigitValue(2, 11);/* Degree sign. */
    CBS084A00_SetDigitValue(1, 12);/* 'C' letter. */
   
    /* Display "rH". */
    CBS084A00_SetIcons(CBS084A00_Icons_H1, CBS084A00_State_Enabled);
    CBS084A00_SetIcons(CBS084A00_Icons_R, CBS084A00_State_Enabled);
   
    /* DHT11 initialization. */
    DHT_Init();
   
    /* Enable global & peripheral interrupts. */
    INTCON = _INTCON_GIE_MASK | _INTCON_PEIE_MASK;
   
   while(true)
   {
        /* Clear watchdog. */
        CLRWDT(); /*  <--- good practice. */
       
        /* Sweet dreams... */
        SLEEP();
       
#ifdef APP_DEBUG         
        PORTB |= _PORTB_RB0_MASK;
#endif /* APP_DEBUG */
       
        /* Collect data from DHT11 sensor. */
        DHT_GetData(&dht);
       
        /* Prepare & show collected data. */
        ShowData(&dht);
       
#ifdef APP_DEBUG
        PORTB &= ~_PORTB_RB0_MASK;
#endif /* APP_DEBUG */
       
    }
}


No i jeszcze efekt działania całego układu:
WP_20170731_001.jpg


A teraz pytania:

1. Czy do układu mam jeszcze dołożyć jakąś filtrację?
2. Macie jakieś sprawdzone metody obliczania zapotrzebowania układu na energię, czy do każdego projektu trzeba podchodzić indywidualnie?
3. Lepiej nieużywane piny zwierać na zewnątrz do GND lub VCC, czy raczej w programie ustalać kierunek wyjściowy pinów oraz wymuszać na nich stan? Producent mikrokontrolera wspomina jedynie, by ustalić stan, ale nie określa konkretnej metody.

Może macie jakieś sugestie, wskazówki... Chętnie je "przyjmę na klatę".

Re: Higrometr+termometr zasilany bateryjnie.

: poniedziałek 31 lip 2017, 22:15
autor: dambo
co do przeliczania czasu pracy - w cubeMX jest takie narzędzie w osobnej zakładce, ale przyznam, że nie testowałem.

Z wymuszeniem na pinach - chodzi, żeby przerzutniki na wejściach nie pobierały prądu przy zbieraniu szumów. Z punktu widzenia "miiiiiikrozysku energii" lepiej popodciągać je na PCB, chociaż wtedy się nie można dolutować kynarem żeby uzyskać dodatkowy pin :p

Re: Higrometr+termometr zasilany bateryjnie.

: poniedziałek 31 lip 2017, 22:19
autor: Antystatyczny
dambo pisze:w cubeMX jest takie narzędzie w osobnej zakładce, ale przyznam, że nie testowałem.


Tak, to wiem, ale projekt wykorzystuje zupełnie inny mikrokontroler, więc użycie cubemx jest bez sensu :)

Co do dolutowywania się do pinów... Mam tam wyprowadzony jeden pin na złącze JP1, więc teoretycznie jest do wykorzystania.
No a z tym wymuszaniem stanów na pinach to wiem, czemu ma to zapobiegać, ale zastanawiałem się, czy lepiej wrzucić trzy linijki kodu ustalającego stany, czy raczej pozwierać fizycznie piny. Jeśli z punktu widzenia szumów lepiej zewrzeć piny, pozostawię projekt tak, jak jest... No ale jeśli lepiej zrobić to mosfetami w procku, to mogę dorzucić kawałek kodu, a połączenia na druku usunąć.

Re: Higrometr+termometr zasilany bateryjnie.

: poniedziałek 31 lip 2017, 22:29
autor: ZbeeGin
Antystatyczny pisze:Może macie jakieś sugestie, wskazówki... Chętnie je "przyjmę na klatę".

Miałbym dwie co do PCB:
  • C3 i C5 niepotrzebnie są tuż obok siebie. C5 można całkowicie wyeliminować, ewentualnie zamienić na elektrolita by jego pozycja miała sens.
  • Można też wyeliminować zworki, przeciągając obie ścieżki pod scalakiem.

Re: Higrometr+termometr zasilany bateryjnie.

: poniedziałek 31 lip 2017, 22:34
autor: Antystatyczny
ZbeeGin pisze:C3 i C5 niepotrzebnie są tuż obok siebie


Nie do końca wyszło tak, jak chciałem, a chciałem jeden kondensator tuż przy procku, a drugi tuż przy lcd. Rozważę montaż kondensatora elektrolitycznego (a może tantalowego?).

Ze ścieżkami PGD i PGC miałem trochę kłopot. Jedną bez problemu zmieściłem pod prockiem, ale gdybym chciał dać jeszcze jedną, reszta musiałaby być znacznie cieńsza. Przy wykonywaniu druku termotransferem jest to nie bez znaczenia. Popróbuję jeszcze coś z tym zrobić, dzięki.

Re: Higrometr+termometr zasilany bateryjnie.

: poniedziałek 31 lip 2017, 23:45
autor: xor
Co do p.3: Nie wiem jaka jest wydajność prądowa wyjść w PIC ale w AVR na pewno nie zwarł bym nogi wprost do GND czy Vcc.

Re: Higrometr+termometr zasilany bateryjnie.

: poniedziałek 31 lip 2017, 23:51
autor: Antystatyczny
xor pisze:Nie wiem jaka jest wydajność prądowa wyjść w PIC


Dokumentacja mówi, że absolutne maksimum dla "sink" i "source" wynosi 25mA. Dlaczego nie podłączyłbyś bezpośrednio?

Re: Higrometr+termometr zasilany bateryjnie.

: wtorek 01 sie 2017, 00:07
autor: xor
Bo w razie ustawienia nogi jako wyjście może być zwarcie.

Re: Higrometr+termometr zasilany bateryjnie.

: wtorek 01 sie 2017, 00:13
autor: Antystatyczny
Nie planuję użycia tych pinów.

Re: Higrometr+termometr zasilany bateryjnie.

: wtorek 01 sie 2017, 00:15
autor: dambo
taki dokument od microchipa "Microcontroller Low Power Tips ‘n Tricks" - tam są fajne rzeczy opisane i tez jest o pinach. link: http://ww1.microchip.com/downloads/en/d ... er%202.pdf

w skrócie - zalecają albo softwarowy output i ustawienie dowolnego stanu, albo danie go jako input i zewnętrzne podciągnięcie.

Re: Higrometr+termometr zasilany bateryjnie.

: wtorek 01 sie 2017, 00:21
autor: Antystatyczny
Dambo, super, dzięki. Jakoś umknął mi ten dokument, a w nim jest znacznie więcej informacji. Zaraz zmodyfikuję schemat i program.

Re: Higrometr+termometr zasilany bateryjnie.

: wtorek 01 sie 2017, 08:37
autor: Nefarious19
Zawsze można piny dać przez rezystorki 0805 smd np 0 Om a w razie potrzeby je wylutowac. Ewentualnie zworke smd

Re: Higrometr+termometr zasilany bateryjnie.

: wtorek 01 sie 2017, 09:04
autor: xor
Nie chodzi o ewentualne wykorzystanie tylko pomyłki w software. Zawsze można się machnąć np. w masce konfiguracji. Albo jak się program wykrzaczy może coś zmodyfikować. Może mało prawdopodobne, ale IMHO teoretycznie możliwe.

Re: Higrometr+termometr zasilany bateryjnie.

: wtorek 01 sie 2017, 12:15
autor: dambo
no ale też weźmy pod uwagę, że to zalecenia bardziej dla końcowych wersji komercyjnych/masowych produktów - tam już wszystko byłoby dopięte na ostatni guzik i można dać nieużywane piny do masy

Re: Higrometr+termometr zasilany bateryjnie.

: wtorek 01 sie 2017, 21:10
autor: Antystatyczny
No dobra, naniosłem kilka zmian oraz poprawek. Usunąłem testowy pin, na którym mierzyłem czas pracy i snu układu. Zmieniłem obudowę kwarcu na pionową, bo znalazłem pionowy niskoprofilowy w gratach. Przy okazji poprawiłem ekranowanie okolic kwarcu i kondensatorów 22pF. Kilka zmian prowadzenia ścieżek, usunięte obie zworki oraz zamiana C5 z 100nF na tantalowy 22µF/25. Nieużywane piny wysterowane są programowo i utrzymują stan logicznego zera.

Schemat:
Higrometr_sch.png

Płytka:
Higrometr_brd.png

Re: Higrometr+termometr zasilany bateryjnie.

: wtorek 01 sie 2017, 23:47
autor: ZbeeGin
Jeszcze ten zawijas koło R2. :D
Higrometr_brd.png

Re: Higrometr+termometr zasilany bateryjnie.

: wtorek 01 sie 2017, 23:50
autor: Antystatyczny
Który?

Re: Higrometr+termometr zasilany bateryjnie.

: piątek 11 sie 2017, 17:59
autor: dambo
Co do pytania odnośnie wyliczania czasu pracy - artykuł z dziś:
http://mikrokontroler.pl/2017/08/10/obl ... cjach-iot/

Re: Higrometr+termometr zasilany bateryjnie.

: sobota 12 sie 2017, 19:51
autor: Antystatyczny
Ciąg dalszy:
WP_20170812_001.jpg

WP_20170812_002.jpg

WP_20170812_003.jpg

WP_20170812_004.jpg

WP_20170812_005.jpg


Jak widać układ działa i teraz pozostaje mi poczekać, aż padną bateryjki. Wypadałoby jeszcze przeszlifować brzegi płytki, bo wyglądają nieestetycznie. Póki co traktuję ten układ jako testowo-badawczy, bo nigdy dotąd nie projektowałem niczego, co byłoby napędzane bateryjką/akumulatorem.

Dzięki wszystkim za porady.

Re: Higrometr+termometr zasilany bateryjnie.

: niedziela 13 sie 2017, 17:53
autor: dambo
Sprawdzałeś może pobory prądu/wyliczyłeś ile mniej więcej układ będzie mógł działać?

Re: Higrometr+termometr zasilany bateryjnie.

: środa 20 wrz 2017, 17:45
autor: Antystatyczny
dambo pisze:Sprawdzałeś może pobory prądu


Sprawdzałem jakieś (niecałe) dwa miesiące temu, ale gdzieś posiałem kartkę z notatkami. W każdym razie sytuacja nie przedstawia się różowo. Mija 50 dni, a ja zaczynam zauważać, że wyświetlacz blednie, czyli bateryjki już ledwie zipią. Przypomnę, że bateryjki są firmy Varta, a ich model to AAA "Longlife". Nawet jeśli dociągnę do 60 dni, to i tak wynik ogólny jest kiepski. Kupię nowe baterie i przeprowadzę ponowne pomiary, by ustalić źródło "wycieków prądu".