Search Code

ESP32 Оқулық 35/55 - Өсімдік мониторы, топырақ, температура және жарық | SunFounder ESP32 IoT оқу жиынтығы

ESP32 Оқулық 35/55 - Өсімдік мониторы, топырақ, температура және жарық | SunFounder ESP32 IoT оқу жиынтығы

Бұл оқулықта біз SunFounder ESP32 IoT Learning Kit жинағынан ESP32 микроконтроллерін қолданып өсімдік мониторын жасаймыз. Бұл жоба топырақ ылғалдылығын, температураны, ылғалдылықты және жарық деңгейін бақылау үшін бірнеше компоненттерді біріктіреді. Осы нұсқаулықтың соңында сізде өсімдік күтімі үшін осы маңызды параметрлерді басқара алатын және көрсете алатын толық жұмыс істейтін жүйе болады. Егжей-тегжейлі визуалды түсіндіру үшін бейнені міндетті түрде қараңыз (бейнеде 00:00).

ESP32-25_plant_moitor_schematic

Аппараттық құрал түсіндірмесі

Бұл жобада қолданылатын негізгі компоненттерге ESP32 микроконтроллері, DHT11 сенсоры, топырақ ылғалдылық сенсоры, жарыққа тәуелді резистор (LDR) және деректерді көрсетуге арналған LCD кіреді. ESP32 құрылғының миы ретінде қызмет етеді, деректерді өңдеу және басқару тапсырмаларын орындайды. Оның құрамында кірістірілген Wi-Fi және Bluetooth бар, бұл қашықтан бақылау үшін қосылу мүмкіндіктерін қамтамасыз етеді.

photoresistor
DHT11 Module
DHT11 Module

DHT11 сенсоры температура мен ылғалдылықты өлшейді, ал топырақ ылғалдылық сенсоры топырақтағы ылғалдылық деңгейін анықтайды. LDR қоршаған ортаның жарық қарқындылығын өлшейді, бұл өсімдіктің жарықтандыру жағдайлары туралы ақпарат алуға мүмкіндік береді. Әрбір компонент нақты уақыттағы деректерді ұсыну арқылы өсімдіктің денсаулығын қамтамасыз етуде маңызды рөл атқарады.

Деректер парағының мәліметтері

Өндіруші SunFounder
Бөлшек нөмірі DHT11
Логика/IO кернеуі 3.3 В
Қоректендіру кернеуі 5 В
Шығыс тогы (арнаға) 20 мА
Ең жоғары ток (арнаға) 50 мА
PWM жиілігі бойынша нұсқау Жоқ
Кіріс логикалық шектері 0.3 VCC (төмен), 0.7 VCC (жоғары)
Кернеудің төмендеуі / RDS(on) / қанығу Жоқ
Жылулық шектеулер 0°C - 50°C
Қаптама DIP
Ескертулер / нұсқалар DHT22-мен үйлесімді

 

  • Әрбір компонент үшін дұрыс кернеу деңгейлерін қамтамасыз етіңіз (қозғалтқыш драйвері үшін 5В, сенсорлар үшін 3.3В).
  • Қалқымалы кірістерді болдырмау үшін түймелер үшін төмен тарту резисторларын қолданыңыз.
  • Шатасуды және ықтимал қысқа тұйықталуды болдырмау үшін сымдарды ұқыпты ұстаңыз.
  • Зақымдануды болдырмау үшін тізбекті қуаттандыру алдында қосылымдарды тексеріңіз.
  • DHT11 сымдарын тексеріңіз, себебі ол қате қосылымдарға сезімтал.

Сым қосу нұсқаулары

ESP32-25_plant_moitor_wiring

Компоненттерді қосу үшін алдымен қуат пен жер сымдарын қосыңыз. ESP32 литий батареясымен қуатталуы керек, оң терминалды VCC желісіне, ал жерді макеттік тақтадағы GND желісіне қосыңыз. DHT11 сенсорының деректер түйреуіші PIN 13-ке қосылады, ал оның VCC 3.3V желісіне, ал GND жерге қосылады. Топырақ ылғалдылық сенсоры ұқсас қосылады: оның сигнал түйреуіші PIN 14-ке, VCC 3.3V-ке, ал GND жерге.

LDR үшін бір түйреуішті 3.3V желісіне, ал екіншісін PIN 35-ке қосыңыз, LDR-ден жерге 10к Ом резистор қосыңыз. LCD дисплей қуат үшін 5V желісіне қосылады және SDA және SCL түйреуіштерін сәйкесінше PIN 21 және PIN 22-ге қосады. Соңында, түймені PIN 32-ге қосыңыз, төмен тарту резисторын жерге қосыңыз, ол басылмағанда төмен, ал басылғанда жоғары оқылуын қамтамасыз етеді.

Код мысалдары және түсіндірме

Бағдарламамыздың негізі әрбір компонент үшін түйреуіштерді анықтаудан басталады. Мысалы, DHTPIN DHT11 сенсоры үшін PIN 13-ке тағайындалады, ал MOIS_PIN ылғалдылық сенсоры үшін PIN 14-ке орнатылады. Бұл ұйымдастыру қай сенсордың қай түйреуішке қосылғанын бақылауға көмектеседі.


#define DHTPIN 13     // DHT11 деректер түйреуішіне қосылған түйреуішті орнату
#define MOIS_PIN 14 // Топырақ ылғалдылық модулі
#define LIGHT_PIN 35 // Фоторезистор

Әрі қарай, біз setup() функциясының ішінде DHT сенсорын және LCD дисплейді инициализациялаймыз. Бұл өте маңызды, себебі ол осы компоненттерді жұмысқа дайындайды. DHT сенсорының мәндерді дұрыс оқуын бастауы үшін dht.begin() шақыруды қамтамасыз ету қажет.


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 файлы