Zaloguje się
or
Tel +48 698 615 740

Czujnik wilgotności gleby M335 i LM393

21 października, 2021

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.

Czujnik wilgotności M335
Czujnik wilgotności LM393

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);
}

Sticky
Możliwość komentowania Czujnik wilgotności gleby M335 i LM393 została wyłączona
Adrian Wojtala

Adrian Wojtala

Ma 21 lat. Studiuje informatykę na Uniwersytecie DSW, ukończył technikum o profilu technik-informatyk. Interesuje się programowaniem i w przyszłości ma plan zostać back-end developerem. Swoją przygodę z Arduino rozpoczął podczas praktyk od września 2021 r.

Comments are closed.

Strona korzysta z plików cookies w celu realizacji usługi i zgodnie z Polityką Plików Cookies. Możesz określić warunki przechowywania lub dostępu do plików cookies w Twojej przeglądarce.