Search Code

ESP32 Tutorial 35/55 - Plantenmonitor, bodem, temperatuur en licht | SunFounder's ESP32 IoT-leerkit

ESP32 Tutorial 35/55 - Plantenmonitor, bodem, temperatuur en licht | SunFounder's ESP32 IoT-leerkit

In deze tutorial bouwen we een plantmonitor met behulp van de ESP32-microcontroller uit de SunFounder ESP32 IoT-leerset. Dit project combineert verschillende componenten om bodemvocht, temperatuur, luchtvochtigheid en lichtniveaus te bewaken. Aan het einde van deze handleiding heb je een volledig functionerend systeem dat deze kritieke parameters voor plantverzorging kan beheren en weergeven. Voor een gedetailleerde visuele uitleg, bekijk zeker de video (in video op 00:00).

ESP32-25_plant_moitor_schematic

Hardware uitgelegd

De belangrijkste componenten die in dit project worden gebruikt, zijn de ESP32-microcontroller, DHT11-sensor, bodemvochtsensor, lichtafhankelijke weerstand (LDR) en een LCD-scherm voor het weergeven van gegevens. De ESP32 fungeert als het brein van de opstelling en verzorgt gegevensverwerking en besturingstaken. Het heeft ingebouwde Wi-Fi en Bluetooth, wat connectiviteitsopties biedt voor bewaking op afstand.

fotoweerstand
DHT11-module
DHT11-module

De DHT11-sensor meet temperatuur en luchtvochtigheid, terwijl de bodemvochtsensor het vochtgehalte in de bodem detecteert. De LDR meet de omgevingslichtintensiteit, wat inzicht geeft in de lichtomstandigheden van de plant. Elk onderdeel speelt een cruciale rol bij het waarborgen van de gezondheid van de plant door realtime gegevens te leveren.

Datasheetdetails

Fabrikant SunFounder
Onderdeelnummer DHT11
Logica/IO-spanning 3,3 V
Voedingsspanning 5 V
Uitgangsstroom (per kanaal) 20 mA
Piekstroom (per kanaal) 50 mA
PWM-frequentierichtlijn N.v.t.
Ingangslogische drempels 0,3 VCC (laag), 0,7 VCC (hoog)
Spanningsval / RDS(on) / verzadiging N.v.t.
Thermische limieten 0°C tot 50°C
Behuizing DIP
Opmerkingen / varianten Compatibel met DHT22

 

  • Zorg voor de juiste spanningsniveaus voor elk onderdeel (5V voor de motordriver, 3,3V voor sensoren).
  • Gebruik pull-downweerstanden voor drukknoppen om zwevende ingangen te voorkomen.
  • Houd de bedrading netjes om verwarring en mogelijke kortsluiting te voorkomen.
  • Controleer de verbindingen voordat u het circuit van stroom voorziet om schade te voorkomen.
  • Controleer de DHT11-bedrading, omdat deze gevoelig is voor onjuiste verbindingen.

Bedradingsinstructies

ESP32-25_plant_moitor_wiring

Om de componenten te bedraden, begint u met het aansluiten van de stroom- en aardlijnen. De ESP32 moet worden gevoed met een lithiumbatterij, waarbij de positieve pool op de VCC-lijn en de aarde op de GND-lijn op het breadboard wordt aangesloten. De datapin van de DHT11-sensor wordt aangesloten op PIN 13, terwijl de VCC naar de 3,3V-lijn gaat en GND naar de aarde. De bodemvochtsensor wordt op dezelfde manier aangesloten: het signaalpin op PIN 14, VCC op 3,3V en GND op aarde.

Voor de LDR sluit u één pin aan op de 3,3V-lijn en de andere op PIN 35, met een 10k ohm-weerstand die van de LDR naar aarde is aangesloten. Het LCD-scherm wordt aangesloten op de 5V-lijn voor stroom en gebruikt SDA- en SCL-pinnen die respectievelijk zijn aangesloten op PIN 21 en PIN 22. Sluit ten slotte de drukknop aan op PIN 32 met de pull-downweerstand die naar aarde is aangesloten, zodat deze laag leest wanneer niet ingedrukt en hoog wanneer ingedrukt.

Codevoorbeelden & uitleg

De kern van ons programma begint met het definiëren van de pinnen voor elk onderdeel. DHTPIN wordt bijvoorbeeld toegewezen aan PIN 13 voor de DHT11-sensor, terwijl MOIS_PIN is ingesteld op PIN 14 voor de vochtsensor. Deze organisatie helpt bij het bijhouden welke sensor op welke pin is aangesloten.


#define DHTPIN 13     // Stel de pin in die is aangesloten op de DHT11-datapin
#define MOIS_PIN 14 // Bodemvochtmodule
#define LIGHT_PIN 35 // Fotoweerstand

Vervolgens initialiseren we de DHT-sensor en het LCD-scherm in de setup()-functie. Dit is cruciaal omdat het deze componenten voorbereidt op gebruik. Zorg ervoor dat u dht.begin() aanroept; dit is essentieel zodat de DHT-sensor correct waarden kan gaan lezen.


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

In de loop()-functie lezen we continu de temperatuur- en luchtvochtigheidswaarden en geven deze weer op het LCD. Als de knop wordt ingedrukt, wordt de motor geactiveerd om de planten water te geven. Deze logica gebruikt de digitale uitlezing van de knop-pin om te bepalen of de motor aan of uit moet.


void loop() {
  float humidity = dht.readHumidity();
  float temperature = dht.readTemperature();
  if (digitalRead(BUTTON) == HIGH) {
    digitalWrite(motor1A, HIGH); // Zet de waterpomp aan
  } else {
    digitalWrite(motor1A, LOW); // Zet de waterpomp uit
  }
  delay(2000);
}

Deze codestructuur zorgt voor een duidelijke stroom van gegevens en besturing, zodat de plantmonitor soepel functioneert. Voor meer details staat de volledige code hieronder in het artikel.

Demonstratie / Wat te verwachten

Na het voltooien van de installatie en het uploaden van de code, zou de LCD afwisselend temperatuur- en luchtvochtigheidsmetingen moeten weergeven met vochtigheids- en lichtniveaus. Wanneer de drukknop wordt ingedrukt, moet de waterpomp activeren en water aan de plant leveren. Zorg ervoor dat alle verbindingen stevig zijn om problemen zoals zwevende ingangen of onjuiste metingen te voorkomen (in video op 05:30).

Het controleren van de waarden op de LCD en de seriële monitor helpt ervoor te zorgen dat het systeem correct functioneert. Als u problemen tegenkomt, controleer dan de bedrading opnieuw en zorg ervoor dat alle componenten op de juiste manier van stroom worden voorzien.

Videotijdstempels

  • 00:00 Start
  • 2:23 Projectintroductie
  • 4:02 Documentatiepagina
  • 7:43 1-L293D Pompmotor driver
  • 14:30 2-Drukknop voor pomp
  • 16:35 3-DHT11 Temperatuur- en luchtvochtigheidssensor
  • 19:26 4-Vochtigheidssensor
  • 21:43 5-Lichtsensor
  • 24:47 6-Bodemvochtigheidssensor
  • 26:01 Volledige Plant Monitor Arduino-code
  • 29:21 Demonstratie

Afbeeldingen

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

Dingen die je misschien nodig hebt

Hulpmiddelen en referenties

Bestanden📁

Fritzing-bestand