ค้นหาโค้ด

บทช่วยสอน ESP32 35/55 - เครื่องตรวจวัดพืช ดิน อุณหภูมิ และแสง | ชุดเรียนรู้ IoT ESP32 ของ SunFounder

บทช่วยสอน ESP32 35/55 - เครื่องตรวจวัดพืช ดิน อุณหภูมิ และแสง | ชุดเรียนรู้ IoT ESP32 ของ SunFounder

ในบทช่วยสอนนี้ เราจะสร้างเครื่องตรวจสอบต้นไม้โดยใช้ไมโครคอนโทรลเลอร์ ESP32 จากชุดเรียนรู้ IoT ESP32 ของ SunFounder โปรเจกต์นี้รวมส่วนประกอบหลายอย่างเข้าด้วยกันเพื่อตรวจสอบความชื้นในดิน อุณหภูมิ ความชื้นในอากาศ และระดับแสง เมื่อจบคู่มือนี้ คุณจะมีระบบที่ทำงานได้อย่างสมบูรณ์ซึ่งสามารถจัดการและแสดงพารามิเตอร์สำคัญเหล่านี้สำหรับการดูแลต้นไม้ สำหรับคำอธิบายภาพโดยละเอียด โปรดดูวิดีโอ (ในวิดีโอที่ 00:00)

แผนผัง ESP32-25_plant_moitor

อธิบายฮาร์ดแวร์

ส่วนประกอบหลักที่ใช้ในโปรเจกต์นี้ประกอบด้วยไมโครคอนโทรลเลอร์ ESP32 เซนเซอร์ DHT11 เซนเซอร์ความชื้นในดิน ตัวต้านทานไวแสง (LDR) และจอ LCD สำหรับแสดงข้อมูล ESP32 ทำหน้าที่เป็นสมองของระบบ จัดการการประมวลผลข้อมูลและงานควบคุม มี Wi-Fi และบลูทูธในตัว ให้ตัวเลือกการเชื่อมต่อสำหรับการตรวจสอบระยะไกล

ตัวต้านทานไวแสง
โมดูล DHT11
โมดูล DHT11

เซนเซอร์ DHT11 วัดอุณหภูมิและความชื้นในอากาศ ในขณะที่เซนเซอร์ความชื้นในดินตรวจจับระดับความชื้นในดิน LDR วัดความเข้มของแสงโดยรอบ ทำให้เข้าใจสภาพแสงของต้นไม้ได้ แต่ละส่วนประกอบมีบทบาทสำคัญในการรับประกันสุขภาพของต้นไม้โดยให้ข้อมูลแบบเรียลไทม์

รายละเอียดจากเอกสารข้อมูล

ผู้ผลิต SunFounder
หมายเลขชิ้นส่วน DHT11
แรงดันไฟฟ้าลอจิก/IO 3.3 V
แรงดันไฟฟ้าจ่าย 5 V
กระแสเอาต์พุต (ต่อช่อง) 20 mA
กระแสสูงสุด (ต่อช่อง) 50 mA
คำแนะนำความถี่ PWM ไม่มี
เกณฑ์ลอจิกอินพุต 0.3 VCC (ต่ำ), 0.7 VCC (สูง)
แรงดันตก / RDS(on) / ความอิ่มตัว ไม่มี
ขีดจำกัดความร้อน 0°C ถึง 50°C
แพ็คเกจ DIP
หมายเหตุ / รุ่นต่างๆ เข้ากันได้กับ DHT22

 

  • ตรวจสอบให้แน่ใจว่าระดับแรงดันไฟฟ้าของแต่ละส่วนประกอบเหมาะสม (5V สำหรับไดรเวอร์มอเตอร์, 3.3V สำหรับเซนเซอร์)
  • ใช้ตัวต้านทานแบบดึงลงสำหรับปุ่มกดเพื่อป้องกันอินพุตลอย
  • จัดสายไฟให้เป็นระเบียบเพื่อหลีกเลี่ยงความสับสนและการลัดวงจรที่อาจเกิดขึ้น
  • ตรวจสอบการเชื่อมต่อก่อนจ่ายไฟให้วงจรเพื่อป้องกันความเสียหาย
  • ตรวจสอบการเดินสาย 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 โดยมีตัวต้านทาน 10k โอห์มเชื่อมต่อจาก LDR ไปยังกราวด์ จอ LCD เชื่อมต่อกับสาย 5V สำหรับไฟและใช้พิน SDA และ SCL เชื่อมต่อกับ PIN 21 และ PIN 22 ตามลำดับ สุดท้าย เดินสายปุ่มกดไปที่ PIN 32 โดยมีตัวต้านทานแบบดึงลงเชื่อมต่อกับกราวด์ เพื่อให้แน่ใจว่าอ่านค่าเป็นต่ำเมื่อไม่ได้กดและเป็นสูงเมื่อกด

ตัวอย่างโค้ดและคำอธิบาย

แกนหลักของโปรแกรมของเราเริ่มต้นด้วยการกำหนดพินสำหรับแต่ละส่วนประกอบ ตัวอย่างเช่น 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-เซนเซอร์ความชื้นแบบ Slild
  • 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