Pojemnościowy czujnik wilgotności gleby V1.2

Wprowadzanie automatyki do hodowli roślinnych nie jest niczym nowym, automatyczne zraszacze, systemy nawożenia czy też kontrola wilgotności gleby na dobre zagościły w nowoczesnych gospodarstwach. Omówimy dzisiaj pojemnościowy czujnik wilgotności gleby V1.2. Ze względu na zasadę działania różni się od powszechnie dostępnych dla hobbystów DIY czujników wilgotności gleby.

Zwykle czujniki działają na zasadzie pomiaru rezystancji. Ich sonda ma dwie elektrody wsadzone w glebę. Czujnik przepuszcza niewielki prąd przez sondę i bada zmiany rezystancji gleby. Zmiany te są związane z zmianami wilgotności. Prosta zasada działania i jak dotąd wszystko jest w porządku.

Nie wszyscy jednak pamiętają o istniejącym zjawisku elektrolizy, które pojawia się przy przepływie prądu między elektrodami. Po krótkim czasie ciągłego działania sondy, jedna nóżka ulegnie całkowitej korozji. Uniemożliwia to dalsze pomiary. Zmiana trybu pracy z ciągłej na przerywaną tylko odwleka problem w czasie, ale często jest wystarczającym rozwiązaniem.

Co pozostaje innego? Zmienić zasadę pomiaru. Zamiast badania rezystancji badamy pojemność. Nie występuje praktycznie wtedy przepływ prądu i zjawisko elektrolizy nie niszczy nam elektrody. Dziś opisywany czujnik działa właśnie na takiej zasadzie.

Podłączenie czujnika do Arduino

Aby podłączyć czujnik do płytki potrzebujemy tylko trzech przewodów, GND, VCC i AOUT. Czujnik jest o tyle łatwy w obsłudze, że komunikuje się z płytką za pomocą złącz analogowych, czyli wszelkie kwestie bibliotek czy innych pakietów odchodzą w niepamięć. Do odczytu danych z naszej sondy użyjemy pinu A0, a układ powinien wyglądać jak poniżej.

Pierwszy program, czyli testowanie czujnika

Do sprawdzenia czy czujnik działa wystarczy nam delikatnie przerobiony program “AnalogReadSerial” który przedstawiony jest poniżej.

void setup() {
  Serial.begin(9600);
}
void loop() {
  int wilg = analogRead(A0);
  int wil = map(wilg,310,570, 100, 0);
  Serial.println(wil);
  delay(500); 
}

Program ma za zadanie wyświetlić dane pobierane z czujnika, jeśli dane są podobne (na wahania w wysokości 0.5% nie mamy wpływu) znaczy to, że czujnik działa. Domyślnie program “AnalogReadSerial” zwraca wartość podanego prądu na pin A0 w zakresie 0-1024, jednak my wprowadziliśmy małą modyfikację która pozwala na wyświetlenie danych w zakresie 0-100, dzięki czemu łatwo możemy określić procentowo poziom wilgotności gleby. Czujnik też podaje zwrotnie napięcie z zakresu 0-3V, więc za pomocą funkcji map sprawnie wyodrębniliśmy tylko zakres którego używa czujnik. Moje wyniki które zostały wyświetlone w monitorze portu szeregowego prezentują się jak poniżej. Czujnik możemy bardzo prosto sprawdzić, musimy włożyć go do szklanki z wodą jeśli w Serial Monitorze widzimy wartość z zakresu 98 do 101, lub trzymamy czujnik zupełnie suchy w powietrzu i widzimy wartości z zakresu -2 do 2, znaczy to, że czujnik pracuje prawidłowo!

Jeśli sprawdziliśmy działanie czujnika możemy przejść do następnego programu, będzie to prosty układ który będzie automatycznie nawadniał glebę w doniczce w której znajduje się kwiat. Do tego celu użyjemy Arduino Pro Mini, pompy do wody, diody LED i oczywiście naszego czujnika wilgotności gleby. Oprócz wymienionych wcześniej elementów niezbędny będzie tranzystor MOSFET do wysterowania pompy Potrzebny będzie rezystor 220 Ohm dla diody oraz 10k Ohm dla tranzystora, programator FTDI do wgrania programu na Pro Mini, jako źródło zasilania posłuży panel zasilający do płytki stykowej do którego podłączymy zasilacz. 

Dlaczego jest nam potrzebne osobne źródło zasilania? Ponieważ pompa pobiera dużo więcej prądu niż Arduino i konwerter FTDI są nam w stanie dostarczyć, zasilanie całości z portu USB może skutkować spaleniem płytki, konwertera, czy nawet płyty głównej. Gdy mamy zgromadzone wszystkie elementy możemy przystąpić do budowy układu. Całość powinna wyglądać jak poniżej. Silnik musi być odłączony do czasu odłączenia programatora i podłączenia zewnętrznego źródła zasilania. 

Dla szybkiego wyjaśnienia, czujnik podłączony jest do pinu A0, tranzystor sterujący silnikiem razem z diodą LED podłączony jest do pinu 11. Programator do Pro Mini podłączony jest GND do GND, VCC do VCC, RX do TX, a TX do RX. Gdy mamy omówione podłączenie wszystkich elementów możemy przejść do samego programu. Program ma za zadanie włączyć pompę wody gdy wilgotność gleby spadnie poniżej 60%. Praca pompy sygnalizowana będzie także diodą LED, a pomiar wilgotności ma być wykonywany co 30 minut.  Program mimo delikatnego rozbudowania układu jest bardzo prosty i powinien wyglądać jak poniżej.

void setup() {
  pinMode(11,OUTPUT);//ustalenie pinu 11 jako pin wyjścia
  digitalWrite(11,LOW);
}
void loop() {
  int wilg = analogRead(A0);//zmienna dla pomiaru wilgotności
  int wil = map(wilg, 310, 570, 100, 0);//przekalkulowanie wartości na procentowe

  if(wil < 60)//jeśli wilgotność jest mniejsza niż 60%
  {
    digitalWrite(11,HIGH);//pompa wraz z ledem włącza się
    delay(5000);//na 5 sekund
    digitalWrite(11,LOW);//po czym pompa z diodą się wyłączają
  }
  else// jeśli nie
  {
    digitalWrite(11,LOW);//pompa i dioda zostają wyłączone
  }
  delay(30*60*1000);//płytka czeka 30 minut na kolejny pomiar
}

Gdy zbudowaliśmy układ i wgraliśmy program możemy odpiąć programator, podłączyć silnik i zasilacz do płytki. Pozostaje nam sprawdzenie układu, najłatwiej włożyć czujnik i wężyk od pompy do doniczki z suchą ziemią, jeśli rozpocznie się podlewanie, a dioda LED się zapali mamy pewność, że układ jak i program działają.

Jak widać zbudowanie automatycznego systemu nawadniania jest bardzo proste i przy rozbudowaniu całego układu łatwo zautomatyzować większą plantacje.

Programy i biblioteki:

  • Arduino IDE w wersji 1.8.5, Arduino Core 1.6.20

Materiały użyte w artykule: