Search Code

ESP32 튜토리얼 35/55 - 식물 모니터, 토양, 온도 및 빛 | SunFounder의 ESP32 IoT 학습 키트

ESP32 튜토리얼 35/55 - 식물 모니터, 토양, 온도 및 빛 | SunFounder의 ESP32 IoT 학습 키트

이 튜토리얼에서는 SunFounder ESP32 IoT 학습 키트의 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 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).
  • 플로팅 입력을 방지하려면 푸시 버튼에 풀다운 저항을 사용하세요.
  • 혼란과 잠재적 단락을 방지하려면 배선을 깔끔하게 유지하세요.
  • 손상을 방지하려면 회로에 전원을 공급하기 전에 연결을 확인하세요.
  • 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에서 접지로 10k 옴 저항을 연결합니다. LCD 디스플레이는 전원용 5V 라인에 연결하고 SDASCL 핀을 각각 PIN 21PIN 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);
}

필요할 수 있는 것들

자원 및 참고자료

파일📁

프리징 파일