W tym artykule omówimy czujniki wilgotności gleby, a konkretnie modele M335 i LM393, do obydwóch zostanie zaprezentowane połączenie, następnie wyświetlimy odczytywane z nich informacje w monitorze portu szeregowego oraz na wyświetlaczu oled.
Spis tresci
- Opis czujnika wilgotności M335
- Specyfikacja czujnika wilgotności M335
- Podłączenie czujnika wilgotności M335
- Zaprogramowanie czujnika wilgotności M335
- Wyświetlanie wartości z czujnika M335 na wyświetlaczu oled
- Opis czujnika wilgotności LM393
- Podłączenie czujnika wilgotności LM393
- Zaprogramowanie czujnika wilgotności M393
- Wyświetlanie wartości z czujnika M393 na wyświetlaczu oled
Opis czujnika wilgotności M335
Czujnik wilgotności gleby M335 wykrywa pojemnościowo wilgotność gleby a nie rezystancyjne jak w innych czujnikach wilgotności. Moduł ten zawiera wbudowany regulator napięcia w zakresie 3.3V.
Specyfikacja czujnika wilgotności M335
- Napięcie robocze: 3,3 VDC
- Napięcie wyjściowe: 0 ~ 3,0 VDC
- Interfejs: PH2.54-3P
- Wymiary: 98 x 22 mm
- Waga: 12 g
Podłączenie czujnika wilgotności M335
Zacznę od omówienia połączenia czujnika M335, jest on bardzo prosty w obsłudze oraz w połączeniu, wystarczy VCC(+) podłączyć do 5V, GND(-) do GND, a ostatni pin AOUT(A) wpinamy do A0, tak jak na poniższym schemacie.
Teraz przejdziemy do napisania programu który umożliwi nam odczytywanie wartości z czujnika.
Zaprogramowanie czujnika wilgotności M335
Zaczynamy od zdefiniowania pinu A0 jako AOUT, tworzymy dwie zmienne mokry i suchy, ale na razie się nimi nie przejmujemy, następnie w funkcji setup zaczynamy transmisję do portu szeregowego i ustawiamy pin A0 jako wejście.
#define AOUT A0//zdefiniowanie pinu A0 jako AOUT const int mokry = 0; //wartosc suchego czujnika const int suchy = 0; //wartosc mokrego czujnika void setup() { Serial.begin(9600);//ustawienie monitora portów szeregowych pinMode(AOUT, INPUT);//ustawienie pinu jako wyjście }
Teraz będziemy pobierać wartość z czujnika oraz wyświetlać ją w monitorze portu szeregowego.
void loop() { int odczyt = analogRead(AOUT);//zadeklarowanie i wczytanie do zmiennej wartości z czujnika Serial.println(odczyt);//wyświetlenie w konsoli zmiennej odczyt delay(10); }
Po wgraniu programu do Arduino powinny ukazać się nam wartości w monitorze portu szeregowego chodź nie będzie ona pokazywała wartości od 0 do 100 procent, aby zrobić poprawne ukazywanie wartości potrzebujemy zobaczyć ile wynosi wartość naszego suchego czujnika, oraz kiedy jest on w pełni zamoczony. Wpisujemy nasze wartości do zmiennych które utworzyliśmy na początku (suchy – wartość suchego czujnika, mokry – wartość mokrego czujnika) i dopisujemy do naszego programu następujący kod który będzie odpowiadał za zmapowanie wartości pobieranych z czujnika na dobrze nam znane procenty.
void loop() { int odczyt = analogRead(AOUT);//zadeklarowanie i wczytanie do zmiennej wartości z czujnika int wilgotnosc = map(odczyt, suchy, mokry, 100, 0);//zmapowanie odczytywanych wartości na procenty //Zmieniamy również wyświetlaną wartość na procenty i dopisujemy znak procent. Serial.print(wilgotnosc);//wyświetlenie w konsoli procentu wilgotności Serial.println("%"); delay(10); }
Po tak napisanym i wgranym programie, w konsoli powinna wyświetlać się wilgotność w procentach.
Wyświetlanie wartości z czujnika M335 na wyświetlaczu oled
Aby wyświetlać wartość na wyświetlaczu będziemy potrzebować wyświetlacza OLED 0.96 lub 0.91, w moim wypadku będzie to 0.96, więcej o wyświetlaczach znajdziecie tutaj.
Po zapoznaniu się z artykułem o wyświetlaczach możemy przejść do jego podłączenia, robimy to tak jak na schemacie poniżej.
W celu oszczędzenia czasu przygotowałem gotowy programu który wystarczy tylko wkleić i zmienić wartości suchego i mokrego czujnika.
#include <SPI.h> #include <Wire.h> #include <Adafruit_SSD1306.h> #define AOUT A0 Adafruit_SSD1306 display(0); const int mokry = 0; //wartosc suchego czujnika const int suchy = 0; //wartosc mokrego czujnika void setup() { pinMode(AOUT, INPUT); display.begin(SSD1306_SWITCHCAPVCC, 0x3C);//definiujemy rodzaj użytego wyświetlacza oraz adres I2C display.clearDisplay();//czyścimy ekran display.setTextColor(WHITE);//ustawiamy kolor biały } int odczyt = analogRead(AOUT); void loop() { int odczyt = analogRead(AOUT);//zadeklarowanie i wczytanie do zmiennej wartości z czujnika int wilgotnosc = map(odczyt, suchy, mokry, 100, 0);//zmapowanie odczytywanych wartości na procenty display.clearDisplay();//czyścimy ekran display.setCursor(4, 0);//ustawiamy kursor na daną pozycję display.setTextSize(2);// ustawiamy rozmiar czcionki display.writeFastHLine(0, 16, 128, WHITE);//rysujemy białą linię, dwa pierwsze parametry odpowiadają za szerokość i wysokość, pozostałe dwa za szerokość lini oraz kolor display.println("WILGOTNOSC");//piszemy tekst który ma się ukazać display.setTextSize(3);// ustawiamy rozmiar czcionki display.setCursor(54, 22);//ustawiamy kursor na daną pozycję display.print(wilgotnosc);//piszemy tekst który ma się ukazać display.print("%");//piszemy tekst który ma się ukazać display.display();//wyświetlamy delay(10); }
Opis czujnika wilgotności LM393
Czujnik służący do wyznaczania wilgotności gleby. Zasilany jest napięciem od 3,3 V do 5 V. Posiada wyjście cyfrowe oraz analogowe. Produkt kompatybilny z Arduino.
Podłączenie czujnika wilgotności LM393
Zacznijmy od podłączenia, w zestawie otrzymujemy moduł do naszego czujnika, więc zacznijmy od tego, na module jest – i +, podłączamy do nich kabelki które były dołączone do zestawu i teraz wepniemy je do czujnika, ustawiamy czujnik napisem do siebie i po lewej stronie mamy plus, a po lewej minus, należy wpiąć odpowiednio kable idące z naszego modułu i teraz możemy przejść do podłączenia z arduino. GND podłączamy do GND, VCC do 5V, a pin A0 do A0 na arduino, poniżej jest ukazany schemat połączenia.
Zaprogramowanie czujnika wilgotności M393
Przechodzimy teraz do napisania programu który umożliwi nam odczytywanie wartości z tego czujnika. Zaczniemy od zdefiniowania potrzebnych pinów, oraz utworzenia zmiennych które będą nam później potrzebne.
#define AOUT A0//zdefiniowanie pinu A0 jako A0 const int mokry = 595; //wartosc suchego czujnika const int suchy = 239; //wartosc mokrego czujnika
Przechodzimy do funkcji setup w której ustawimy pin A0 jako wyjście oraz zaczniemy transmisje na porcie szeregowym
void setup() { Serial.begin(9600);//ustawienie monitora portów szeregowych pinMode(A0, INPUT);//ustawienie pinu jako wyjście }
Wczytamy i wyświetlimy teraz odczytywane wartości z czujnika oraz go skalibrujemy, zostawiamy również jedną linijkę zakomentowaną, ponieważ zajmiemy się nią później.
void loop() { int odczyt = analogRead(A0);//zadeklarowanie i wczytanie do zmiennej wartości z czujnika
Tutaj musimy się na chwilę zatrzymać i odjąć od 1023 nasz odczyt, aby wartości były wskazywane poprawnie. Jeżeli chcecie możecie sprawdzić jakie wartości są zwracane, gdy wartość ta nie zostanie odjęta.
odczyt = 1023-odczyt; //int wilgotnosc = map(odczyt, suchy, mokry, 100, 0);//zmapowanie odczytywanych wartości na procenty Serial.print(wilgotnosc);//wyświetlenie w konsoli procentu wilgotności Serial.println("%"); delay(10); }
Po wgraniu powinniśmy zauważyć w konsoli, że czujnik zwraca pewne wartości, teraz aby go skalibrować musimy zapisać wartość kiedy jest mokry do zmiennej mokry, oraz wartość kiedy jest suchy do zmiennej suchy. Następnie po zmienieniu tych wartości od komentowujemy naszą linijkę o której wcześniej wspominałem, oraz w wyświetlaniu wartości zmieniamy zmienną odczyt na wilgotność, całość powinna wyglądać tak jak poniżej.
#define A0 A0//zdefiniowanie pinu A0 jako A0 const int mokry = 595; //wartosc suchego czujnika const int suchy = 239; //wartosc mokrego czujnika void setup() { Serial.begin(9600);//ustawienie monitora portów szeregowych pinMode(A0, INPUT);//ustawienie pinu jako wyjście } void loop() { int odczyt = analogRead(A0);//zadeklarowanie i wczytanie do zmiennej wartości z czujnika odczyt = 1023-odczyt; int wilgotnosc = map(odczyt, suchy, mokry, 100, 0);//zmapowanie odczytywanych wartości na procenty Serial.print(wilgotnosc);//wyświetlenie w konsoli procentu wilgotności Serial.println("%"); delay(10); }
Wyświetlanie wartości z czujnika M393 na wyświetlaczu oled
Aby wyświetlać wartość na wyświetlaczu będziemy potrzebować wyświetlacza OLED 0.96 lub 0.91, w moim wypadku będzie to 0.96, więcej o wyświetlaczach znajdziecie tutaj.
Po zapoznaniu się z artykułem o wyświetlaczach możemy przejść do jego podłączenia, robimy to tak jak na schemacie poniżej.
W celu oszczędzenia czasu przygotowałem gotowy programu który wystarczy tylko wkleić i zmienić wartości suchego i mokrego czujnika.
#include <SPI.h> #include <Wire.h> #include <Adafruit_SSD1306.h> #define A0 A0 Adafruit_SSD1306 display(0); const int mokry = 0; //wartosc suchego czujnika const int suchy = 0; //wartosc mokrego czujnika void setup() { pinMode(A0, INPUT); display.begin(SSD1306_SWITCHCAPVCC, 0x3C);//definiujemy rodzaj użytego wyświetlacza oraz adres I2C display.clearDisplay();//czyścimy ekran display.setTextColor(WHITE);//ustawiamy kolor biały } int odczyt = analogRead(A0); void loop() { int odczyt = analogRead(A0);//zadeklarowanie i wczytanie do zmiennej wartości z czujnika odczyt = 1023 - odczyt; int wilgotnosc = map(odczyt, suchy, mokry, 100, 0);//zmapowanie odczytywanych wartości na procenty display.clearDisplay();//czyścimy ekran display.setCursor(4, 0);//ustawiamy kursor na daną pozycję display.setTextSize(2);// ustawiamy rozmiar czcionki display.writeFastHLine(0, 16, 128, WHITE);//rysujemy białą linię, dwa pierwsze parametry odpowiadają za szerokość i wysokość, pozostałe dwa za szerokość lini oraz kolor display.println("WILGOTNOSC");//piszemy tekst który ma się ukazać display.setTextSize(3);// ustawiamy rozmiar czcionki display.setCursor(54, 22);//ustawiamy kursor na daną pozycję display.print(wilgotnosc);//piszemy tekst który ma się ukazać display.print("%");//piszemy tekst który ma się ukazać display.display();//wyświetlamy Serial.println(analogRead(A0)); delay(10); }