Agri-Stick - urządzenie do monitorowania parametrów gleby w rolnictwie

Agri-Stick - urządzenie do monitorowania parametrów gleby w rolnictwie
Agri-Stick to prosty zespół sensorów podstawowych parametrów gleby, które przydatne są w rolnictwie. Urządzenie to zostało opracowane przez Kavinkumara Nkl z Indii, jako sposób na proste i niedrogie zdalne monitorowanie upraw - w ten sposób rolnicy w Indiach nie muszą jeździć na pola, żeby sprawdzić, czy konieczne jest włączenie systemu nawadniającego czy nie. Rozwiązanie opisane w tym artykule może służyć jako inspiracja do opracowania dowolnego systemu akwizycji danych i monitorowania środowiska w oparciu o infrastrukturę chmurową.

Rolnicy spędzają niekończące się godziny na jazdy, po swoich polach, aby sprawdzić stan swoich upraw i ręcznie obsługiwać systemy nawadniające. Jest to czas i praca wymagające znacznych nakładów. Wykorzystanie Internetu Rzeczy (IoT) do dostarczania łatwych w użyciu i wysoce niezawodnych sensorów do precyzyjnego monitorowania i kontroli nawadniania jest jednym z potencjalnych rozwiązań tego problemu.

W poniższym artykule prezentujemy konstrukcję Kavinkumara Nkl - Agri-Stick, która jest zespołem sensorów do pomiaru czterech podstawowych, ważnych dla rolników wartości - temperatury i wilgotności gleby oraz temperatury i wilgotności powietrza. Wartości te są przechowywane w chmurze na serwerach AWS (Amazon), gdzie przesyłane są poprzez interfejs LoRa. W systemie wykorzystano komputer jednopłytkowy Raspberry Pi jako jednokanałową bramkę. Wartości zapisane w chmurze mogą być monitorowane w czasie rzeczywistym zarówno z przeglądarki internetowej, jak i telefonu komórkowego. Umożliwia to rolnikom podejmowanie decyzji na podstawie danych zebranych w terenie. W ten sposób oszczędza się czas i pieniądze.

Wykorzystując czujniki w Agri-Stick i analizując zebrane dane, można uzyskać informacje m.in. na temat nawożenia gleby, wykrywać szkodniki i planować lepiej uprawy, opryski, irygację i zbiory.  Zapobiega to nadmiernemu podlewaniu, ogranicza choroby upraw, potwierdza dostarczanie wody (działanie systemu irygacyjnego), a także oszczędza wodę i pracę ludzką.

Jakie elementy są potrzebne do budowy systemu

Agri-Stick oparty jest na module Arduino Nano z mikrokontrolerem ATMega328P i wszystkimi podstawowymi peryferiami. Do modułu tego podłączone są następujące sensory:

  • DS18B20 - termometr elektroniczny w wodoszczelnej obudowie; do pomiaru temperatury gleby,
  • pojemnościowy czujnik wilgotności gleby,
  • DHT22 - zintegrowany termometr i higrometr elektroniczny; do pomiaru temperatury i wilgotności powietrza.

Wszystkie te sensory podłączone są do Arduino. Do tegoż modułu podłączony jest także transceiver LoRa AI Thinker Ra-02, który umożliwia komunikację z bramką (opisaną w dalszej części artykułu).

Elektroniczny termometr do pomiaru temperatury gruntu

Fotografia 1. Elektroniczny sensor temperatury w wodoszczelnej obudowie

Czujnik mierzący temperaturę gleby powinien być odporny na działanie wody i na korozję. Dlatego wykorzystana jest w tym projekcie specjalna sonda, wyposażona w szczelną, metalową obudowę, jak widać na fotografii 1. We wnętrzu sondy znajduje się cyfrowy termometr DS18B20 firmy Dallas Semiconductor. Jest to kompaktowy sensor temperatury, wyposażony w interfejs 1-Wire.

Sensor ma tylko trzy wyprowadzenia - zasilanie, masę oraz linię danych. Tylko jeden przewód potrzebny jest do komunikacji z tym układem (stąd nazwa interfejsu, jaki wykorzystuje). Podłączenie sondy do modułu Arduino jest niezwykle proste - zasilanie podłączamy do 5 V, a masę do masy. Linię danych termometru łączymy z pinem D5 w module Arduino.

Pojemnościowy sensor wilgotności gleby

Fotografia 2. Pojemnościowy sensor do pomiaru wilgotności


Fotografia 3. Sensor wilgotności i temperatury DHT22

Czujniki wilgotności gleby mierzą objętość wody, jaka znajduje się w zadanej, stałej objętości gleby. Analogicznie jak w przypadku czujnika temperatury, sensor wilgotności gleby powinien być również wodoodporny i zabezpieczony przed korozją. Wszystkie te wymagania spełnia czujnik pojemnościowy. Jest on o wiele wytrzymalszy i odporniejszy na warunki otoczenia niż czujnik rezystancyjny, jako że nie musi bezpośrednio stykać się z wilgotną glebą metalowymi elementami. Sensor tego rodzaju zaprezentowano na fotografii 2.

Czujnik taki składa się z pojedynczej sondy zawierającej oddzielne ścieżki miedziane (masa i zasilanie) pokryte izolującą maską lutowniczą. Element ten zachowuje się jak kondensator płaski. Warstwa di-
elektryczna zapobiega przepływowi prądu elektrycznego. Rolę dielektryka, pomiędzy okładkami kondensatora, odrywa w przypadku tego rodzaju sondy gleba. Zmienia się jej współczynnik przenikalności elektrycznej wraz ze zmianą poziomu jej wilgotności. W ten sposób zmiana wilgotności powoduje zmianę pojemności sensora, która może być mierzona przez moduł Arduino. Zaprezentowany na fotografii 3 sensor wyposażony jest w układ elektroniczny konwertujący pojemność do napięcia, dzięki czemu na wyjściu z sensora obecne jest jedynie napięcie (o amplitudzie od 0 V do 3 V) proporcjonalne do wilgotności.

Podłączenie opisanego sensora do Arduino jest bardzo proste. Zasilanie i masę sensora łączy się, odpowiednio, z napięciem 5 V i masą modułu, a napięcie wyjściowe podawać będziemy na wejście A1 modułu.

Scalony miernik wilgotności i temperatury powietrza

Do pomiaru temperatury i wilgotności powietrza w projekcie wykorzystany został sensor DHT22 (czasami opisywany jako AM2302) dostępny w postaci modułu. Zastosowano gotowy moduł z własną płytką drukowaną dla uproszczenia konstrukcji systemu.

DHT22 to zintegrowany cyfrowy termometr i higrometr. W jednej obudowie znajdują się dwa niezależne sensory, każdy o rozdzielczości 8 bit. Każdy z czujników w układzie ma własny model kompensacji i jest precyzyjnie skalibrowany. Parametry kalibracyjne zapisywane są w sensorze, więc wszystkie zbierane pomiary cechuje wysoki stopień dokładności - katalogowo poniżej 0,5°C i 2%RH.

Moduł wyposażony jest w interfejs 1-Wire, co umożliwia proste podłączenie sensorów do modułu Arduino. Linie zasilania i masy podłączane są odpowiednio, do zasilania i masy, a linia danych podłączana jest do pinu D4 modułu Arduino.

Łączność - dlaczego LoRa

Krytycznym składnikiem wszystkich systemów Internetu Rzeczy jest komunikacja. Zazwyczaj w systemach tego rodzaju implementuje się systemy łączności bezprzewodowej - komunikacja radiowa jest o wiele wygodniejsza w tego rodzaju implementacjach. Wykorzystuje się zazwyczaj interfejsy takie jak Bluetooth czy Wi-Fi. Ostatnio popularyzują się także interfejsy bezprzewodowe specjalnie dedykowane do systemów Internetu Rzeczy, takie jak LoRa, Sigfox czy NB-IoT.

Urządzenia takie jak Agri-Stick nie mają wielkich wymagań co do prędkości transmisji, za to wymagają często bardzo dużego zasięgu. Wymagania te spełnia system LoRa, oferując wielokilometrowy zasięg przy prędkości transmisji poniżej 50 kb/s. Dodatkowym wymaganiem jest niski pobór mocy - Agri-Stick zasilany jest z baterii, więc moduł transceivera, przesyłającego dane z sensorów do chmury, nie może konsumować zbyt wiele energii. Także to wymaganie spełniane jest przez interfejs LoRa.

LoRa (skrót od Long Range, daleki zasięg) to technika modulacji sygnału z widmem rozproszonym, wywodząca się z technologii CSS. Z technicznego punktu widzenia jest to rodzaj modulacji radiowej służący do kodowania informacji za pomocą sygnału świergotowego i wieloznakowego formatu danych. Nazwa LoRa odnosi się również do systemów, które obsługują tego rodzaju modulację, w tym układów, transceiverów i bramek.

LoRa jest w istocie sprytnym sposobem na uzyskanie bardzo dobrej czułości odbiornika i niskiej bitowej stopy błędów (BER) z wykorzystaniem relatywnie niedrogich układów. Oznacza to, że aplikacje o małej szybkości transmisji danych mogą uzyskać znacznie większy zasięg przy użyciu LoRa niż przy użyciu innych porównywalnych cenowo technologii radiowych. Dodatkowo, systemy tego rodzaju charakteryzują się niezwykle niskim poborem energii z uwagi na niewielką moc nadajników potrzebnych do zapewnienia transmisji danych na duże odległości.

Technologia LoRa może być wykorzystywana przez publiczne, prywatne i hybrydowe sieci. Sieci LoRa można z łatwością podłączyć do istniejącej infrastruktury i umożliwić tanie aplikacje IoT z zasilaniem bateryjnym.

Transceiver LoRa

Fotografia 4. Transceiver LoRa wykorzystany w urządzeniu

Fotografia 5. Arduino Nano


Rysunek 6. Schemat połączenia poszczególnych modułów w Agri-Stick


Fotografia 7. Zdjęcie gotowej konstrukcji w obudowie


Rysunek 8. Schemat połączeń w bramce LoRa

Do komunikacji Agir-Stick wykorzystuje interfejs LoRa. Wykorzystano transceiver oparty na układzie scalonym SX1278 - Ai Thinker Ra-02, pokazany na fotografii 4. Wykorzystuje on częstotliwość 433 MHz do komunikacji z innymi modułami i bramką. Komunikuje się z mikrokontrolerem w systemie za pomocą interfejsu SPI (Serial Peripheral Interface).

Do modułu należy dołączyć stosowną antenę, która dedykowana jest do pracy w pasmie 433 MHz. W zależności od wykorzystanej obudowy dobrać możemy odpowiednią antenę na to dosyć popularne pasmo.

Zasilanie bateryjne i ładowarka

Zasilacz układu oparty jest na pojedynczym ogniwie jonowo-litowym do zapewnienia systemowi długiego czasu pracy przy kompaktowych rozmiarach. System zasilania w Agri-Stick składa się z:

  • Pojedynczego ogniwa litowo-jonowego w rozmiarze 18650 o pojemności 2200 mAh.
  • Przetwornicy DC-DC typu boost, która generuje napięcie zasilania dla systemu.
  • Ładowarki do ogniw litowo-jonowych, opartej na układzi scalonym TP4056.

Nominalne napięcie ogniwa litowo-jonowego wynosi 3,7 V, a maksymalne napięcie, do którego naładować można taki akumulator, wynosi 4,2 V. Z kolei minimalne napięcie, do jakiego rozładować można ogniwo wynosi 3,3 V. Nie powinno się przekraczać tych granicznych napięć z uwagi na negatywny wpływ takiego działania na ogniwo. Ładowarka i przetwornica dbają, aby ich nie przekroczyć podczas pracy.

Przetwornica DC-DC stabilizuje napięcie 5 V na swoim wyjściu. Przetwornica może pracować z szerokim zakresem napięć wejściowych, dzięki czemu jest w stanie stabilizować napięcie zasilania systemu dla dowolnego napięcia ogniwa zasilającego system.

Ładowarka TP4056 jest scalonym, kompletnym systemem ładowania pojedynczego ogniwa litowo-jonowego. Układ ten jest odpowiedzialny za kontrolę wszystkich napięć i prądów podczas ładowania ogniwa. Wejściem ładowarki jest port USB, z którego system pobiera zasilanie.

Arduino - kontroler systemu

Do sterowania całym systemem - zbierania danych z poszczególnych sensorów i wysyłania ich poprzez interfejs LoRa do bramki - wykorzystany został moduł Arduino Nano. Przykładowy moduł tego rodzaju pokazano na fotografii 5. Podłączenie poszczególnych sensorów do tego modułu opisano powyżej. Transceiver LoRa, opisany powyżej, podłączany jest do Arduino Nano poprzez interfejs SPI.

Połączenie systemu

Po skompletowaniu wszystkich elementów systemu można przystąpić do integracji wszystkich modułów ze sobą. Poszczególne moduły wyposażone są w miejsce na wlutowanie goldpinów lub bezpośrednio przewodów, do połączenia ze sobą poszczególnych elementów. Jak połączyć ze sobą poszczególne moduły, pokazano na rysunku 6.

Po połączeniu wszystkich elementów ze sobą całość układu można zainstalować w obudowie. Autor konstrukcji, jak widać na fotografii 7, umieścił cały system w plastikowej rurze, co pozwala zachować szczelność, a jednocześnie jest wygodne w użyciu - wystarczy wkopać część rury w ziemię, tak aby termometr i higrometr mogły monitorować parametry gruntu. Po złożeniu systemu i przetestowaniu montażu przystąpić można do konfiguracji środowiska w chmurze i oprogramowania samego modułu Arduino.

Bramka LoRa

Autor opisywanej konstrukcji wykorzystuje zbudowaną samodzielnie bramkę LoRa, opartą na komputerze jednopłytkowym Raspberry Pi i module z transceiverem LoRa. Na rysuku 8 pokazano schemat połączeń tych elementów.

Na Raspberry Pi uruchomiony jest prosty skrypt, kontrolujący działanie bramki. Znajdziemy go na listingu 1.

Aby skrypt ten działał poprawnie, konieczne jest utworzenie odpowiedniej bazy danych, do której mógłby on zapisywać zbierane pomiary. Aby wygenerować taką bazę danych, musimy skorzystać ze skryptu, umieszczonego w listingu 2.

Oprogramowanie dla Arduino

Aby cały system mógł działać potrzebne jest oprogramowanie dla modułu Arduino. Zajmuje się ono zbieraniem i przetwarzaniem danych z sensorów, które mogą być następnie wysłane poprzez sieć LoRa do bramki. Kod programu, odpowiedzialnego za działanie modułu Arduino, znajduje się na listingu 3.

Konfiguracja Amazon Web Service (AWS)

Rysunek 9. Przykładowa strona www prezentująca dane zbierane przez Agri-Stick. Adres IP strony został zamazany dla ochrony prywatności autora projektu

Amazon Web Services (AWS) to bezpieczna platforma usług w chmurze, oferująca moc obliczeniową, przechowywanie baz danych, dostarczanie treści i inne funkcje. Miliony klientów wykorzystują obecnie produkty i rozwiązania w chmurze AWS do tworzenia zaawansowanych aplikacji o zwiększonej elastyczności, skalowalności i niezawodności. Amazon Elastic Compute Cloud (EC2) zapewnia serwery wirtualne - zwane instancjami - dla obliczeń. Usługa EC2 oferuje dziesiątki typów instancji o różnych możliwościach i rozmiarach, dostosowanych do konkretnych rodzajów obciążeń i aplikacji, takich jak zadania wymagające dużej ilości pamięci czy przyspieszone przetwarzanie danych. AWS zapewnia także narzędzie do automatycznego skalowania, które umożliwia dynamiczne zwiększanie pojemności czy ilości instancji w celu utrzymania wysokiej wydajności systemu. Amazon oferuje roczny darmowy pakiet instancji z pewnymi ograniczeniami. Dlatego też autor opisywanej konstrukcji wybrał AWS do obsługi części przetwarzania, które realizowane jest w chmurze.

W opisywanym projekcie wykorzystano instancję Ubuntu Server 18.04 LTS (HVM), SSD Volume Type w instancji typu t2.micro. Zawiera ona jeden wirtualny procesor i jeden GB pamięci RAM. Konfiguracja ta objęta jest rocznym bezpłatnym pakietem od Amazon dla nowych użytkowników. Instancja jest skonfigurowana z zabezpieczeniami, które kontrolując ruch przychodzący do serwera. Wykorzystana konfiguracja używa SSH do zdalnego dostępu do instancji, protokołów HTTP i HTTPS dla ruchu internetowego TCP dla MQTT. Porty powiązane z tymi protokołami to odpowiednio 22, 80, 443 i 1884.

Do instancji dostęp uzyskać można np. przez putty wraz z parą kluczy SSH. Używane są one do łączenia się z instancją bezpiecznym, szyfrowanym kanałem. Uzyskuje się je podczas konfiguracji instancji w Amazonie. Jest to podstawowy mechanizm zapewniający bezpieczne uwierzytelnianie użytkownika instancji.

Subskrypcja MQTT i webowa prezentacja danych

MQTT to lekki system publikowania i subskrybowania danych telemetrycznych. Można za jego pomocą publikować i odbierać wiadomości. MQTT to prosty protokół przesyłania komunikatów, zaprojektowany dla urządzeń o niskiej przepustowości danych. Dlatego jest to idealne rozwiązanie dla aplikacji systemów Internetu Rzeczy.

MQTT umożliwia wysyłanie poleceń do sterowania wyjściami, odczytywanie i publikowanie danych z sensorów i wiele innych. Do działania system ten potrzebuje brokera danych oraz klientów, którzy działają jako subskrybenci i publikatorzy danych.

W opisywanym systemie brama LoRa jest naszym publikatorem danych, a instancja AWS EC2 jest subskrybentem, a także działa jako broker MQTT. Brama Raspberry Pi publikuje wartości czujników do określonego tematu w sieci MQTT, takiego jak na przykład „agrstick1”. Jeśli korzystamy z wielu bramek, możemy publikować na różne tematy w jednej sieci. Broker MQTT przechwytuje te wartości w danym temacie i czeka, aż jakiś subskrybent będzie chciał danych na ten sam temat. Jeśli jakikolwiek klient subskrybuje ten sam temat, broker wyśle do niego zapisane wartości. Dlatego klient subskrybenta w instancji EC2 otrzyma wartości za każdym razem, gdy wydawca opublikuje wiadomość - nowe pomiary.

Dane na instancji AWS EC2 przechowywane są w postaci bazy danych SQLite, takiej samej jak lokalnie, na Raspberry Pi. Aby uruchomić na tej instancji taką bazę, musimy, podobnie jak na Raspberry Pi, uruchomić prosty skrypt. Zapisany jest on na listingu 4.

Aby system działał, potrzebna jest na instancji w AWS subskrypcja do MQTT.
Aby takową uruchomić, konieczny jest kolejny skrypt, zaprezentowany na listingu 5. Musimy go jedynie uzupełnić podstawowymi danymi, takimi jak nazwa bazy danych, z której korzystamy, tematy, jakie chcemy subskrybować w MQTT oraz numer IP serwera.

Trzecim, ostatnim skryptem, jaki trzeba uruchomić na instancji w chmurze Amazona, jest webowy panel, pozwalający na prezentację danych. Do stworzenia strony wykorzystano pythonowe biblioteki plotly oraz dash.

Dash to framework do budowania aplikacji internetowych do analizy danych. Jest to wydajne środowisko do budowania aplikacji internetowych. Napisany na podbudowie frameworku Flask oraz  Plotly.js i React.js, Dash jest idealny do budowania aplikacji do wizualizacji danych z wysoce niestandardowymi interfejsami użytkownika w czystym Pythonie. Aplikacje Dash są renderowane w przeglądarce internetowej, co pozwala udostępniać aplikacje za pośrednictwem jedynie adresów URL. Ponieważ aplikacje Dash są wyświetlane w przeglądarce internetowej, Dash jest z natury kompatybilny z wieloma platformami i urządzeniami mobilnymi.

Strona renderowana na podstawie kodu w listingu 6 pokazana jest na rysunku 9. Jest to prosty sposób prezentacji danych, bez wizualnych fajerwerków, ale w zupełności wystaczy dla opisywanego zastosowania.

Podsumowanie

Zaprezentowany system pozwala na implementację niemalże dowolnej liczby rozproszonych urządzeń z sensorami. Mogą one być wykorzystywane do monitorowania dużej wielkości pola uprawnego, sadu itp. Dodatkowo, poszerzyć można wachlarz sensorów, dostępnych w urządzeniu. Oprócz termometrów i higrometrów, system uzupełnić można o czujniki azotu, fosforu i potasu w glebie, pehametry, oksymetry, mierniki zawartości dwutlenku węgla, nasłonecznienia etc. Jedynie dostępność sensorów i ich kompatybilność z ekosystemem Arduino jest granicą. Przedstawione powyżej skrypty są doskonałym punktem wyjścia do opracowania własnego systemu monitorowania środowiska na bazie o infrastruktury chmurową, oferowaną przez Amazona oraz technologii takich jak LoRa i MQTT.

Nikodem Czechowski

Źródło: http://bit.ly/30BorbC

Artykuł ukazał się w
Elektronika Praktyczna
lipiec 2019
Zobacz też
Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik marzec 2020

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio kwiecień 2020

Świat Radio

Magazyn użytkowników eteru

APA - Automatyka Podzespoły Aplikacje marzec 2020

APA - Automatyka Podzespoły Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna marzec 2020

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Praktyczny Kurs Elektroniki 2018

Praktyczny Kurs Elektroniki

24 pasjonujące projekty elektroniczne

Elektronika dla Wszystkich kwiecień 2020

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów