Caută cod

Tutorial ESP32 35/55 - Monitor de plante, sol, temperatură și lumină | Kitul de învățare IoT ESP32 de la SunFounder

Tutorial ESP32 35/55 - Monitor de plante, sol, temperatură și lumină | Kitul de învățare IoT ESP32 de la SunFounder

În acest tutorial, vom construi un monitor pentru plante folosind microcontrolerul ESP32 din SunFounder ESP32 IoT Learning Kit. Acest proiect combină mai multe componente pentru a monitoriza umiditatea solului, temperatura, umiditatea aerului și nivelul de lumină. Până la sfârșitul acestui ghid, vei avea un sistem complet funcțional care poate gestiona și afișa acești parametri critici pentru îngrijirea plantelor. Pentru o explicație vizuală detaliată, asigură-te că urmărești videoclipul (în videoclip la 00:00).

Schema ESP32-25_plant_moitor

Hardware Explicat

Componentele principale utilizate în acest proiect includ microcontrolerul ESP32, senzorul DHT11, senzorul de umiditate a solului, rezistența dependentă de lumină (LDR) și un LCD pentru afișarea datelor. ESP32 servește ca creier al configurației, gestionând procesarea datelor și sarcinile de control. Dispune de Wi-Fi și Bluetooth integrate, oferind opțiuni de conectivitate pentru monitorizare de la distanță.

Fotorezistor
Modul DHT11
Modul DHT11

Senzorul DHT11 măsoară temperatura și umiditatea, în timp ce senzorul de umiditate a solului detectează nivelurile de umiditate din sol. LDR măsoară intensitatea luminii ambientale, permițând informații despre condițiile de iluminare ale plantei. Fiecare componentă joacă un rol crucial în asigurarea sănătății plantei prin furnizarea de date în timp real.

Detalii din Fișa Tehnică

Producător SunFounder
Număr de piesă DHT11
Tensiune logică/IO 3,3 V
Tensiune de alimentare 5 V
Curent de ieșire (pe canal) 20 mA
Curent de vârf (pe canal) 50 mA
Ghid de frecvență PWM N/A
Praguri logice de intrare 0,3 VCC (jos), 0,7 VCC (sus)
Cădere de tensiune / RDS(on) / saturație N/A
Limite termice 0°C până la 50°C
Pachet DIP
Note / variante Compatibil cu DHT22

 

  • Asigură niveluri de tensiune adecvate pentru fiecare componentă (5V pentru driverul motorului, 3,3V pentru senzori).
  • Folosește rezistențe pull-down pentru butoanele de apăsare pentru a preveni intrările flotante.
  • Menține cablurile ordonate pentru a evita confuzia și posibilele scurtcircuite.
  • Verifică conexiunile înainte de a alimenta circuitul pentru a preveni deteriorarea.
  • Verifică cablarea DHT11, deoarece este sensibil la conexiuni incorecte.

Instrucțiuni de Cablare

ESP32-25_plant_moitor_wiring

Pentru a cabla componentele, începe prin conectarea liniilor de alimentare și de masă. ESP32 ar trebui alimentat cu o baterie cu litiu, conectând terminalul pozitiv la linia VCC și masa la linia GND de pe breadboard. Pinul de date al senzorului DHT11 se conectează la PIN 13, în timp ce VCC-ul său merge la linia de 3,3V și GND la masă. Senzorul de umiditate a solului se conectează similar: pinul său de semnal la PIN 14, VCC la 3,3V și GND la masă.

Pentru LDR, conectează un pin la linia de 3,3V și celălalt la PIN 35, cu o rezistență de 10k ohmi conectată de la LDR la masă. Afișajul LCD se conectează la linia de 5V pentru alimentare și folosește pinii SDA și SCL conectați la PIN 21 și, respectiv, PIN 22. În final, conectează butonul de apăsare la PIN 32 cu rezistența pull-down conectată la masă, asigurându-te că citește nivel jos când nu este apăsat și nivel sus când este apăsat.

Exemple de Cod & Explicații

Miezul programului nostru începe cu definirea pinilor pentru fiecare componentă. De exemplu, DHTPIN este atribuit la PIN 13 pentru senzorul DHT11, în timp ce MOIS_PIN este setat la PIN 14 pentru senzorul de umiditate. Această organizare ajută la urmărirea care senzor este conectat la care pin.


#define DHTPIN 13     // Setează pinul conectat la pinul de date DHT11
#define MOIS_PIN 14 // Modul de umiditate a solului
#define LIGHT_PIN 35 // Fotorezistor

În continuare, inițializăm senzorul DHT și afișajul LCD în interiorul funcției setup(). Acest lucru este crucial, deoarece pregătește aceste componente pentru funcționare. Asigură-te că apelezi dht.begin() este esențial pentru ca senzorul DHT să înceapă să citească valorile corect.


void setup() {
  Serial.begin(115200);
  dht.begin();  // Inițializează DHT11
  lcd.init();  // Inițializează LCD
  lcd.backlight();
}

În funcția loop(), citim continuu valorile de temperatură și umiditate, afișându-le pe LCD. Dacă butonul este apăsat, motorul este activat pentru a uda plantele. Această logică folosește citirea digitală a pinului butonului pentru a determina dacă să pornească sau să oprească motorul.


void loop() {
  float humidity = dht.readHumidity();
  float temperature = dht.readTemperature();
  if (digitalRead(BUTTON) == HIGH) {
    digitalWrite(motor1A, HIGH); // Pornește pompa de apă
  } else {
    digitalWrite(motor1A, LOW); // Oprește pompa de apă
  }
  delay(2000);
}

Această structură de cod permite un flux clar de date și control, asigurând că monitorul pentru plante funcționează fără probleme. Pentru mai multe detalii, codul complet este încărcat mai jos în articol.

Demonstrație / Ce să te aștepți

După finalizarea configurării și încărcarea codului, LCD-ul ar trebui să afișeze citirile de temperatură și umiditate alternativ cu nivelurile de umiditate a solului și lumină. Când butonul este apăsat, pompa de apă ar trebui să se activeze, livrând apă plantei. Asigură-te că toate conexiunile sunt sigure pentru a evita probleme precum intrări flotante sau citiri incorecte (în video la 05:30).

Monitorizarea valorilor afișate pe LCD și pe monitorul serial va ajuta să te asiguri că sistemul funcționează corect. Dacă întâmpini probleme, verifică din nou cablajul și asigură-te că toate componentele sunt alimentate corespunzător.

Marcaje video

  • 00:00 Început
  • 2:23 Introducerea proiectului
  • 4:02 Pagina de documentație
  • 7:43 1-Driver motor pompă L293D
  • 14:30 2-Buton pentru pompă
  • 16:35 3-Senzor de temperatură și umiditate DHT11
  • 19:26 4-Senzor de umiditate a solului
  • 21:43 5-Senzor de lumină
  • 24:47 6-Senzor de umiditate a solului
  • 26:01 Cod Arduino complet pentru monitorul plantei
  • 29:21 Demonstrație

Imagini

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

Lucruri de care ai putea avea nevoie

Resurse și referințe

Fișiere📁

Fișier Fritzing