Wiarygodny pomiar wilgotności gleby nie jest łatwy. Gleba składa się z wody, powietrza, minerałów, materii organicznej i czasami lodu. Objętościowa zawartość wody (VWC) jest równa objętości wody podzielonej przez całkowitą objętość gleby, przy czym rzadko osiąga ona stan nasycenia. Zadowalającą dokładność pomiaru referencyjnego wilgotności gleby daje czujnik SoilWatch 10 firmy Pino-Tech [1]. Wymaga on jednak „czystego” (pozbawionego zakłóceń) zasilania i dokładnego pomiaru napięcia.
Zakłócenia szpilkowe na szynie zasilania 3V3 płytki RPI Pico W, zastosowanej w zestawie Enviro Grow, praktycznie uniemożliwiają dokładne pomiary napięcia [4]. Wbudowany przetwornik ADC procesora RP2040 jest tylko 12-bitowy. W celu zachowania kompatybilności z arytmetyką 16-bitową odczytane słowa danych są przesuwane w lewo o 4 bity. Powoduje to duże skoki wartości przy niewielkich zmianach rzeczywistego poziomu napięcia wejściowego. Brak dokładnego napięcia odniesienia tego przetwornika powoduje również duże, skokowe, a co gorsza – przypadkowe zmiany odczytu, spowodowane impulsowymi zakłóceniami przetwornicy zasilającej procesor. Dlatego do celów eksperymentalnych został zastosowany zewnętrzny, 16-bitowy przetwornik ADC typu ADS1115.
Cyfrowy czujnik temperatury DS18B20
DS18B20 firmy Analog Devices (dawniej Maxim oraz Dallas) jest cyfrowym czujnikiem temperatury z interfejsem 1-Wire [2]. Przy zasilaniu 3…5,5 V pobiera prąd o natężeniu 1 mA w stanie aktywnym i 750 nA w stanie bezczynności. Rozdzielczość czujnika temperatury jest konfigurowana przez użytkownika na 9, 10, 11 lub 12 bitów (maksymalny czas pomiaru 750 ms), co odpowiada przyrostom odpowiednio o 0,5°C, 0,25°C, 0,125°C i 0,0625°C. Domyślna rozdzielczość po włączeniu zasilania wynosi 12 bitów. Po podaniu napięcia zasilającego układ DS18B20 włącza się i przechodzi w stan bezczynności o niskim poborze mocy. Aby zainicjować pomiar temperatury i konwersję analogowo-cyfrową, urządzenie nadrzędne musi wydać polecenie Convert T (44h). Po konwersji wynikowe dane są przechowywane w 2-bajtowym rejestrze temperatury w pamięci podręcznej, a DS18B20 powraca do stanu bezczynności.
Magistrala 1-Wire ma tylko jedną linię danych. Każde urządzenie (master lub slave) łączy się z tą linią za pośrednictwem portu typu otwarty dren lub wyprowadzenia 3-stanowego. Pozwala to każdemu urządzeniu „zwolnić” linię danych, gdy urządzenie nie przesyła żadnych informacji, dzięki czemu magistrala pozostaje dostępna do użycia przez inne urządzenie. Magistrala 1-Wire wymaga zewnętrznego rezystora pullup o wartości około 5 kΩ. W systemie opartym na szynie 1-Wire obecny jest zawsze pojedynczy master magistrali do sterowania jednym lub większą liczbą urządzeń podrzędnych.
Każdy układ DS18B20 zawiera unikalny, 64-bitowy kod zapisany w pamięci ROM. 48 bitów odpowiada za przechowywanie unikalnego numeru seryjnego, dlatego liczba urządzeń, które można zaadresować na jednej magistrali, jest w praktyce niemalże nieograniczona.
Czujnik wilgotności gleby SoilWatch 10
SoilWatch 10 firmy Pino-Tech to pojemnościowy czujnik wilgotności gleby, umożliwiający pomiar względnej zawartości wody w glebie (fotografia tytułowa). Czujnik jest wodoodporny i niewrażliwy na warunki atmosferyczne. Osłonięte elektrody i hermetyczna obudowa zabezpieczają wnętrze sensora przed korozją. SoilWatch 10 daje sygnał wyjściowy w zakresie 0…3 V (przy napięciu zasilania w zakresie 3,1…5,0 V). Czujnik zapewnia napięcie wyjściowe bliskie 0 V w powietrzu i około 3 V w wodzie, w zależności od zastosowanej wersji sensora. SoilWatch 10 ma wbudowany własny regulator napięcia, więc zmiany na szynie zasilania nie wpływają na sygnał wyjściowy czujnika. Typowy czas, po którym czujnik jest gotowy do pracy po włączeniu zasilania, wynosi mniej niż 100 ms. Dokładny opis sensora jest zamieszczony w artykule „Zestaw do kontrolowania wilgotności gleby Enviro Grow firmy Pimoroni” [1].
Zmodyfikowany moduł DFRobot I²C ADS1115
Moduł DFRobot I²C ADS1115 (DFR0553) firmy DFRobot [8] zawiera układ przetwornika analogowo-cyfrowego ADS1115. Zasilanie konwertera ADS1115 jest realizowane przez niskoszumny układ LDO typu LP5907MFX-3.3, dostarczający do 250 mA prądu przy napięciu wyjściowym równym 3,3 V. Przy spadku napięcia na tym układzie, wynoszącym 50...250 mV (przy obciążeniu 100...250 mA), układ można zasilać ze źródła napięcia o wartości około 3,55…5,5 V. Doskonale odpowiada on typowemu zakresowi napięcia zasilania z jednego ogniwa litowo-polimerowego. Układ ADS1115 obsługuje transmisję na szynie I²C. Na potrzeby opisywanych eksperymentów moduł został nieco zmodyfikowany:
- Na dolnej stronie płytki drukowanej należy przeciąć ścieżkę połączoną z pinem 4 („+”) gniazdka P1.
- Na górnej stronie płytki należy usunąć rezystory podciągające 10 kΩ (R1 i R2).
- Przewodem należy połączyć nóżkę 1 przełącznika S1 (oznaczenie 0x49) oraz katodę diody D1.
W takiej konfiguracji pin 4 („+”) gniazdka P1 oraz piny 1…4 („+”) gniazdka P4 wyprowadzają regulowane, „czyste” napięcie 3,3 V. Podciąganie linii SCL i SDA należy zrealizować zewnętrznie.
Do pracy z układem ADS115 została zastosowana biblioteka języka MicroPython [9]. Opracował ją Wolfgang (Wolle) Ewald w języku Python, w implementacji przeznaczonej na platformę ESP32.