Пребарување код

ESP32 Упатство 35/55 - Монитор за растенија, почва, температура и светлина | SunFounder's ESP32 IoT Learning комплет

ESP32 Упатство 35/55 - Монитор за растенија, почва, температура и светлина | SunFounder's ESP32 IoT Learning комплет

Во ова упатство, ќе изградиме монитор за растенија користејќи го ESP32 микроконтролерот од SunFounder ESP32 IoT Learning Kit. Овој проект комбинира неколку компоненти за следење на влажноста на почвата, температурата, влажноста и нивото на светлина. До крајот на ова упатство, ќе имате целосно функционален систем кој може да управува и прикажува овие критични параметри за нега на растенија. За детално визуелно објаснување, задолжително погледнете го видеото (во видеото на 00:00).

ESP32-25_plant_moitor_schematic

Објаснување на хардверот

Главните компоненти користени во овој проект вклучуваат ESP32 микроконтролер, DHT11 сензор, сензор за влажност на почвата, отпорник зависен од светлина (LDR) и LCD за прикажување на податоци. ESP32 служи како мозок на системот, управувајќи со обработката на податоци и контролните задачи. Тој има вградени Wi-Fi и Bluetooth, обезбедувајќи опции за поврзување за далечинско следење.

фотоотпорник
DHT11 модул
DHT11 модул

DHT11 сензорот ја мери температурата и влажноста, додека сензорот за влажност на почвата детектира нивоа на влага во почвата. LDR ја мери амбиенталната светлосна јачина, овозможувајќи увид во условите на осветлување на растението. Секоја компонента игра клучна улога во обезбедувањето на здравјето на растението преку обезбедување податоци во реално време.

Детали од техничката документација

Производител SunFounder
Број на дел DHT11
Логички/IO напон 3.3 V
Напон на напојување 5 V
Излезна струја (по канал) 20 mA
Врвна струја (по канал) 50 mA
Насоки за PWM фреквенција N/A
Прагови на влезна логика 0.3 VCC (ниско), 0.7 VCC (високо)
Пад на напон / RDS(on) / заситување N/A
Термички граници 0°C до 50°C
Пакет DIP
Белешки / варијанти Компатибилен со DHT22

 

  • Осигурете соодветни нивоа на напон за секоја компонента (5V за драјверот на моторот, 3.3V за сензорите).
  • Користете pull-down отпорници за копчињата за да спречите лебдечки влезови.
  • Чувајте ги жиците уредни за да избегнете конфузија и потенцијални кратки споеви.
  • Проверете ги врските пред напојување на колото за да спречите оштетување.
  • Проверете го поврзувањето на DHT11 бидејќи е чувствителен на неточни врски.

Инструкции за поврзување

ESP32-25_plant_moitor_wiring

За да ги поврзете компонентите, започнете со поврзување на линиите за напојување и заземјување. ESP32 треба да се напојува со литиумска батерија, поврзувајќи го позитивниот терминал со VCC линијата и заземјувањето со GND линијата на breadboard-от. Податочниот пин на DHT11 сензорот се поврзува на PIN 13, додека неговиот VCC оди на 3.3V линијата и GND на заземјувањето. Сензорот за влажност на почвата се поврзува слично: неговиот сигнален пин на PIN 14, VCC на 3.3V, и GND на заземјувањето.

За LDR, поврзете еден пин на 3.3V линијата и другиот на PIN 35, со отпорник од 10k оми поврзан од LDR до заземјувањето. LCD екранот се поврзува на 5V линијата за напојување и ги користи SDA и SCL пиновите поврзани на PIN 21 и PIN 22, соодветно. Конечно, поврзете го копчето на PIN 32 со pull-down отпорникот поврзан на заземјувањето, осигурувајќи дека чита ниско кога не е притиснато и високо кога е притиснато.

Примери на код и објаснување

Јадрото на нашата програма започнува со дефинирање на пиновите за секоја компонента. На пример, DHTPIN е доделен на PIN 13 за DHT11 сензорот, додека MOIS_PIN е поставен на PIN 14 за сензорот за влажност. Оваа организација помага да се следи кој сензор е поврзан на кој пин.


#define DHTPIN 13     // Поставете го пинот поврзан со податочниот пин на DHT11
#define MOIS_PIN 14 // Модул за влажност на почвата
#define LIGHT_PIN 35 // Фотоотпорник

Следно, ги иницијализираме DHT сензорот и LCD екранот во setup() функцијата. Ова е клучно бидејќи ги подготвува овие компоненти за работа. Осигурувањето да се повика dht.begin() е од суштинско значење за DHT сензорот да започне правилно да чита вредности.


void setup() {
  Serial.begin(115200);
  dht.begin();  // Иницијализирај го DHT11
  lcd.init();  // Иницијализирај го LCD
  lcd.backlight();
}

Во loop() функцијата, континуирано ги читаме вредностите на температурата и влажноста, прикажувајќи ги на LCD. Ако копчето е притиснато, моторот се активира за полевање на растенијата. Оваа логика го користи дигиталното читање на пинот на копчето за да одреди дали да го вклучи или исклучи моторот.


void loop() {
  float humidity = dht.readHumidity();
  float temperature = dht.readTemperature();
  if (digitalRead(BUTTON) == HIGH) {
    digitalWrite(motor1A, HIGH); // Вклучи ја пумпата за вода
  } else {
    digitalWrite(motor1A, LOW); // Исклучи ја пумпата за вода
  }
  delay(2000);
}

Оваа структура на код овозможува јасен проток на податоци и контрола, обезбедувајќи дека мониторот за растенија функционира непречено. За повеќе детали, целосниот код се вчитува под статијата.

Демонстрација / Што да очекувате

По завршувањето на поставувањето и вчитувањето на кодот, LCD-екранот треба да прикажува отчитувања на температура и влажност наизменично со нивоата на влага и светлина. Кога ќе се притисне копчето, пумпата за вода треба да се активира, доставувајќи вода до растението. Осигурете се дека сите врски се безбедни за да избегнете проблеми како лебдечки влезови или неточни отчитувања (во видеото на 05:30).

Следењето на вредностите прикажани на LCD-екранот и серискиот монитор ќе помогне да се осигури дека системот функционира правилно. Ако наидете на проблеми, проверете ги жиците и осигурете се дека сите компоненти се напојуваат соодветно.

Временски ознаки на видеото

  • 00:00 Почеток
  • 2:23 Вовед во проектот
  • 4:02 Страница со документација
  • 7:43 1-L293D драјвер за мотор на пумпа
  • 14:30 2-Копче за пумпа
  • 16:35 3-DHT11 сензор за температура и влажност
  • 19:26 4-Сензор за влажност на почвата
  • 21:43 5-Сензор за светлина
  • 24:47 6-Сензор за влажност на почвата
  • 26:01 Целосен код за монитор на растенија Arduino
  • 29:21 Демонстрација

Слики

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
Јазик: 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);
}

Работи што можеби ќе ви требаат

Ресурси и референци

Датотеки📁

Fritzing датотека