niedziela, 19 marca 2017

Bezprzewodowy miernik wilgotności gleby z odczytem w telefonie - na poważnie cz. 1

Wiosna - cieplejszy wieje wiatr


Niestety lat nie ubyło ale za to powiało wiosennym optymizmem. Pora wrócić po zimie na ziemię i rozpocząć przygotowania do sezonu działkowego. Zapomniany trochę temat automatyki ogrodowej można już odkurzyć. Na bazie doświadczeń opisanych tu>>> i tu>>>  pierwszym elementem systemu będzie bezprzewodowy czujnik wilgotności.

Poprzednia wersja to zwykły pomiar oporności gruntu dwoma sondami wykonanymi ze srebrzanki a poprzez dzielnik napięcia - pomiar napięcia modułem ESP8266. Wszystko niby działa, jest super proste ale
 
- dokładność i powtarzalność pomiarów jest żadna - oporność gruntu zależy od wielu czynników, nie tylko od wilgotności. trzeba za każdym razem kalibrować dzielnik i co gorsza zmienia się to w czasie
- następuje powolna korozja drutu sond pomiarowych
- ESP ma jedno wejście analogowe co wyklucza pomiar wielopunktowy jednym modułem.



Literatura zaleca pomiar wilgotności metodą pojemnościową a ściślej  poprzez pomiar stałej dielektrycznej gruntu mocno uzależnionej od zawartości wody w badanej objętości.
Rozwiązanie 1 - miernik pojemności przyłączony do modułu ESP lub Arduino.
Najprostsze rozwiązanie jakie znam to genialny układ 555 w roli generatora ze zmienną częstotliwością uzależnioną od badanej pojemności. Liniowa zależność C/f dodatkowo upraszcza kalibrację i pomiar tego czujnika.

To pierwszy lepszy schemat ściągnięty z net-u. 555 + 4 elementy daje nam kompletny przetwornik C/f. Oczywiście nie mam pojęcia jakiej wartości pojemności mogę się spodziewać na wejściu - będzie to zależało także od konstrukcji elektrod pomiarowych. A te muszą być proste i odporne na warunki zewnętrzne. Padło więc na miedziany drut w izolacji PCV.

Pierwsza wersja pojemnościowego czujnika do pomiaru wilgotności gleby



Dwa izolowane przewody jako okładziny kondensatora, na górze 555 z elementami, zasilanie 5-12V.
Elementy wstępnie dobrane  z kalkulatora przy  założeniu C=100pF i f = 10 kHz.
Oporności to 1Mom i 68 kom. Powinienem otrzymać w miarę symetryczny przebieg prostokątny Działa....
Ale musiałem wyrzucić kondensator bo zmiany pojemności są porównywalne z jego wielkością. Ostatecznie układ chodzi na pojemności własnej elektrod i w powietrzu generuje częstotliwość tak na oko ok 10 kHz.


Zanurzenie sond w wodzie (symulacja maksymalnej wilgotnej gleby) zmniejsza częstotliwość 3-4 krotnie



Czyli teoretycznie powinno dać się tym coś pomierzyć.
Wada tego rozwiązania to bardzo duża czułość na zbliżenie lub dotknięcie elektrody "gorącej" tj. tej nie przyłączonej do masy. To oczywiste bo wisi w powietrzu i pojemność własna mojego palca jest porównywalna ze 100% wilgotnością gleby (70% masy ciała to woda) ale nic raczej z tym nie zrobię.

Pomiar rezystancji pomiędzy dwoma sondami zanurzonymi w wodzie na zakresie 200Mom nie wykazuje absolutnie nic. Jest więc szansa że PCV nada się jako robocza izolacja sond w terenie.

 Muszę jeszcze sprawdzić jakie maksymalne częstotliwości da się pomierzyć za pomocą Arduino (zegar 16MHz) i ESP8266 (zegar 80MHz). Lub ewentualnie wstawić jakiś dzielnik częstotliwości np CD4020  CD4024 lub CD4040. 20-50 kHz kHz to granice dla Arduino. Funkcja pulseIn działa prawidłowo jedynie do 50 kHz. Istnieje jeszcze biblioteka FreqCounte umożliwiająca pomiar do 1 MHz ale ta działa jedynie na pinie 5.

Dla rezystorów 1Mom i 68kom pomierzone funkcją pulseIn długości impulsu LOW i HIGH dla sondy w powietrzu wahają się między 4 a 6 (ok 40-60 ms) co daje częstotliwość ok 10 kHz. Zanurzenie sond w wodzie zmienia wynik funkcji pulseIn do 18-22 (ok 180 - 220 ms) tj częstotliwość 2-3 kHz.  Jest nieźle może obędzie się bez dodatkowych dzielników częstotliwości by pomierzyć f generowaną przez czujnik.

Postanowiłem więc wydłużyć nieco czas stanu wysokiego przebiegu z generatora 555 zamieniając 68k na 1 Mom. Uzyskam wypełnienie rzędu 65% i 3-4 krotny wzrost długości stanu H.

W rzeczywistości otrzymałem następujące pomiary częstotliwości funkcją pulseIn:
 dla sondy w powietrzu
stan L = 5       stan H= 21
dla sondy w wodzie
stan L = 23       stan H=60
Trochę to niezgodne z teorią bo w obu środowiskach stosunek H/L winien być podobny ale jak zawsze teoria teorią a praktyka sobie.
W innym kalkulatorze 555  spróbowałem określić wielkość pojemności sond w powietrzu i wodzie dla pomierzonych wyników. W przybliżeniu wyszło że pojemność zmienia się od 150 do 450 pF.

Na mój gust to całkiem znośny i akceptowalny wynik dla określania stanu wilgotności ziemi w ogrodowych donicach.  Teraz potrzeby jest test w prawdziwej glebie by potwierdzić  "laboratoryjne" wyniki doświadczeń. I czas poszukać ładnej wodoodpornej obudowy czujnika.

Trzeba też sprawdzić czy chłopaki z ESP zaimplementowali funkcję pulseIn w ESP8266. Wtedy będzie można zrezygnować całkowicie z użycia Arduino w projekcie.

Będzie co testować więc cdn...






3 komentarze:

  1. Cześć.
    Kiedy druga cześć?

    OdpowiedzUsuń
  2. Jak dotrze chiński czujnik działający na tej samej zasadzie.
    https://tiny.pl/thmbl
    Za 5 zł szkoda kombinować. Jeśli chińszczyzna się nie sprawdzi wrócę do mojego pomysłu

    OdpowiedzUsuń
  3. Na początek opis działania chińskiego czujnika. To bardzo ciekawy moduł
    http://100-x-arduino.blogspot.com/2018/12/bezprzewodowy-miernik-wilgotnosci-gleby.html

    OdpowiedzUsuń