Search Code

Samouczek ESP32 35/55 - Monitor roślin, gleba, temperatura i światło | Zestaw do nauki IoT ESP32 od SunFounder

Samouczek ESP32 35/55 - Monitor roślin, gleba, temperatura i światło | Zestaw do nauki IoT ESP32 od SunFounder

W tym samouczku zbudujemy monitor roślin z wykorzystaniem mikrokontrolera ESP32 z zestawu edukacyjnego SunFounder ESP32 IoT Learning Kit. Ten projekt łączy kilka komponentów do monitorowania wilgotności gleby, temperatury, wilgotności powietrza i poziomu światła. Po ukończeniu tego przewodnika będziesz mieć w pełni działający system, który może zarządzać i wyświetlać te kluczowe parametry dla pielęgnacji roślin. Aby uzyskać szczegółowe wyjaśnienie wizualne, koniecznie obejrzyj wideo (na wideo w 00:00).

Schemat ESP32-25_plant_moitor

Omówienie sprzętu

Główne komponenty użyte w tym projekcie obejmują mikrokontroler ESP32, czujnik DHT11, czujnik wilgotności gleby, fotorezystor (LDR) oraz wyświetlacz LCD do prezentacji danych. ESP32 służy jako mózg układu, obsługując przetwarzanie danych i zadania sterowania. Posiada wbudowane Wi-Fi i Bluetooth, zapewniając opcje łączności do zdalnego monitorowania.

Fotorezystor
Moduł DHT11
Moduł DHT11

Czujnik DHT11 mierzy temperaturę i wilgotność powietrza, podczas gdy czujnik wilgotności gleby wykrywa poziomy wilgotności w glebie. Fotorezystor mierzy natężenie światła otoczenia, umożliwiając wgląd w warunki oświetleniowe rośliny. Każdy komponent odgrywa kluczową rolę w zapewnieniu zdrowia rośliny, dostarczając dane w czasie rzeczywistym.

Szczegóły z karty katalogowej

Producent SunFounder
Numer części DHT11
Napięcie logiczne/IO 3,3 V
Napięcie zasilania 5 V
Prąd wyjściowy (na kanał) 20 mA
Prąd szczytowy (na kanał) 50 mA
Zalecenia dotyczące częstotliwości PWM Nie dotyczy
Progi logiczne wejściowe 0,3 VCC (niski), 0,7 VCC (wysoki)
Spadek napięcia / RDS(on) / nasycenie Nie dotyczy
Limity termiczne 0°C do 50°C
Obudowa DIP
Uwagi / warianty Kompatybilny z DHT22

 

  • Upewnij się, że poziomy napięcia dla każdego komponentu są prawidłowe (5V dla sterownika silnika, 3,3V dla czujników).
  • Użyj rezystorów podciągających do masy dla przycisków, aby zapobiec pływającym wejściom.
  • Utrzymuj okablowanie w porządku, aby uniknąć pomyłek i potencjalnych zwarć.
  • Sprawdź połączenia przed zasileniem obwodu, aby zapobiec uszkodzeniom.
  • Sprawdź okablowanie DHT11, ponieważ jest wrażliwe na nieprawidłowe połączenia.

Instrukcje okablowania

ESP32-25_plant_moitor_wiring

Aby podłączyć komponenty, zacznij od połączenia linii zasilania i masy. ESP32 powinien być zasilany baterią litową, podłączając dodatni zacisk do linii VCC, a masę do linii GND na płytce stykowej. Pin danych czujnika DHT11 łączy się z PIN 13, podczas gdy jego VCC idzie do linii 3,3V, a GND do masy. Czujnik wilgotności gleby podłącza się podobnie: jego pin sygnałowy do PIN 14, VCC do 3,3V, a GND do masy.

Dla fotorezystora podłącz jeden pin do linii 3,3V, a drugi do PIN 35, z rezystorem 10k omów podłączonym od fotorezystora do masy. Wyświetlacz LCD łączy się z linią 5V dla zasilania i używa pinów SDA i SCL podłączonych odpowiednio do PIN 21 i PIN 22. Na koniec podłącz przycisk do PIN 32 z rezystorem podciągającym do masy, zapewniając, że odczytuje stan niski, gdy nie jest wciśnięty, i wysoki, gdy jest wciśnięty.

Przykłady kodu i omówienie

Rdzeń naszego programu zaczyna się od zdefiniowania pinów dla każdego komponentu. Na przykład DHTPIN jest przypisany do PIN 13 dla czujnika DHT11, podczas gdy MOIS_PIN jest ustawiony na PIN 14 dla czujnika wilgotności. Taka organizacja pomaga śledzić, który czujnik jest podłączony do którego pinu.


#define DHTPIN 13     // Ustaw pin podłączony do pinu danych DHT11
#define MOIS_PIN 14 // Moduł wilgotności gleby
#define LIGHT_PIN 35 // Fotorezystor

Następnie inicjalizujemy czujnik DHT i wyświetlacz LCD wewnątrz funkcji setup(). Jest to kluczowe, ponieważ przygotowuje te komponenty do działania. Upewnienie się, że wywołano dht.begin(), jest niezbędne, aby czujnik DHT zaczął poprawnie odczytywać wartości.


void setup() {
  Serial.begin(115200);
  dht.begin();  // Inicjalizacja DHT11
  lcd.init();  // Inicjalizacja LCD
  lcd.backlight();
}

W funkcji loop() ciągle odczytujemy wartości temperatury i wilgotności, wyświetlając je na LCD. Jeśli przycisk jest wciśnięty, silnik jest aktywowany w celu podlania roślin. Ta logika używa odczytu cyfrowego pinu przycisku, aby określić, czy włączyć, czy wyłączyć silnik.


void loop() {
  float humidity = dht.readHumidity();
  float temperature = dht.readTemperature();
  if (digitalRead(BUTTON) == HIGH) {
    digitalWrite(motor1A, HIGH); // Włącz pompę wody
  } else {
    digitalWrite(motor1A, LOW); // Wyłącz pompę wody
  }
  delay(2000);
}

Taka struktura kodu pozwala na wyraźny przepływ danych i sterowania, zapewniając płynne działanie monitora roślin. Aby uzyskać więcej szczegółów, pełny kod znajduje się poniżej artykułu.

Demonstracja / Czego się spodziewać

Po zakończeniu konfiguracji i wgraniu kodu, wyświetlacz LCD powinien na przemian pokazywać odczyty temperatury i wilgotności oraz poziomy wilgotności gleby i światła. Po naciśnięciu przycisku pompa wodna powinna się uruchomić, dostarczając wodę do rośliny. Upewnij się, że wszystkie połączenia są pewne, aby uniknąć problemów, takich jak pływające wejścia lub błędne odczyty (na filmie w 05:30).

Monitorowanie wartości wyświetlanych na LCD i monitorze szeregowym pomoże zapewnić prawidłowe działanie systemu. Jeśli napotkasz problemy, sprawdź dokładnie okablowanie i upewnij się, że wszystkie komponenty są odpowiednio zasilane.

Znaczniki czasu wideo

  • 00:00 Start
  • 2:23 Wprowadzenie do projektu
  • 4:02 Strona dokumentacji
  • 7:43 1-Sterownik silnika pompy L293D
  • 14:30 2-Przycisk do pompy
  • 16:35 3-Czujnik temperatury i wilgotności DHT11
  • 19:26 4-Czujnik wilgotności gleby
  • 21:43 5-Czujnik światła
  • 24:47 6-Czujnik wilgotności gleby
  • 26:01 Pełny kod Arduino monitora roślin
  • 29:21 Demonstracja

Obrazy

DHT11 Module
DHT11 Module
5V DC water pump
5V DC water pump
soil_mositure_module
soil_mositure_module
photoresistor
photoresistor
ESP32-25_plant_moitor_schematic
ESP32-25_plant_moitor_schematic
ESP32-25_plant_moitor_wiring
ESP32-25_plant_moitor_wiring
836-ESP32 Tutorial 35/55- Arduino code for plant monitor
Język: C++
#include "DHT.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

#define DHTPIN 13     // Set the pin connected to the DHT11 data pin
#define MOIS_PIN 14 // Soil mOisture module
#define LIGHT_PIN 35 // Photoresistor
#define motor1A 27 // Pump pin
#define motor2A 26 // Pump pin
#define BUTTON 32 // Button

#define DHTTYPE DHT11  // DHT 11
DHT dht(DHTPIN, DHTTYPE);

int page = 0;

LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup() {

  Serial.begin(115200);

  // Initialize the dht11
  dht.begin();

  lcd.init();  // initialize the lcd
  lcd.backlight();
  lcd.clear();

  // initialize digital pin as an output.
  pinMode(motor1A, OUTPUT);
  pinMode(motor2A, OUTPUT);

  pinMode(BUTTON, INPUT);
}

void loop() {

  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (it's a very slow sensor)
  float humidity = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float temperature = dht.readTemperature();

  // Check if any reads failed and exit early (to try again).
  if (isnan(humidity) || isnan(temperature)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }

  lcd.clear();
  // Show message per 2 second
  if ((page++) % 2) {
    // Display temperature and humidity
    lcd.setCursor(0, 0);
    lcd.print("Humi: ");
    lcd.print(humidity);
    lcd.print("%");
    lcd.setCursor(0, 1);
    lcd.print("Temp: ");
    lcd.print(temperature);
    lcd.print("\xDF");
    lcd.print("C");
  } else {
    // Display moisture and light sensor values
    lcd.setCursor(0, 0);
    lcd.print("Mois: ");
    lcd.print(analogRead(MOIS_PIN));
    lcd.setCursor(0, 1);
    lcd.print("Light: ");
    lcd.print(analogRead(LIGHT_PIN));
  }
  // Water plant while button pressed
  Serial.println(digitalRead(BUTTON));
  if (digitalRead(BUTTON) == HIGH) {
    // Turn on water pump if button is pressed
    digitalWrite(motor1A, HIGH);
    digitalWrite(motor2A, LOW);
  } else {
    // Turn off water pump if button is not pressed
    digitalWrite(motor1A, LOW);
    digitalWrite(motor2A, LOW);
  }

  delay(2000);
}

Rzeczy, których możesz potrzebować

Zasoby i odniesienia

Pliki📁

Plik Fritzing