이 튜토리얼에서는 SunFounder ESP32와 토양 수분 센서를 사용하여 토양의 수분 수준을 측정하는 방법을 배우게 됩니다. 이를 통해 관개 시스템을 자동화하는 데 도움이 될 수 있습니다. 수분 수준을 모니터링함으로써 수분이 특정 임계값 아래로 떨어지면 부저를 울려 식물에 물을 주어야 함을 알릴 수 있습니다. 이 프로젝트는 식물 건강을 유지하는 데 유용하며 다양한 환경 감지 응용 분야로 확장할 수 있습니다. (영상 00:00 시점)
토양 수분 모듈
우리는 정전용량식 토양 수분 센서를 사용할 것입니다. 이 센서는 주변 매체의 수분 함량에 따라 달라지는 두 판 사이의 정전용량 변화를 측정하여 작동합니다. 이 센서는 수분 수준을 반영하는 아날로그 출력을 제공하므로 판독값을 기반으로 결정을 내릴 수 있습니다. ESP32는 아날로그 출력을 읽고 토양이 너무 건조하면 부저를 활성화합니다.
하드웨어 설명
이 프로젝트의 주요 구성 요소는 SunFounder ESP32 마이크로컨트롤러, 정전용량식 토양 수분 센서 및 부저입니다. ESP32에는 Wi-Fi와 Bluetooth가 내장되어 있어 원격 모니터링 및 제어가 가능합니다. 토양 수분 센서는 토양의 수분 수준에 따라 변하는 정전용량을 측정하는 두 개의 판으로 구성됩니다. 이 정전용량 변화는 출력 전압을 변경하며, ESP32는 아날로그 입력을 통해 이를 읽습니다. 부저는 수분 수준이 설정된 임계값 아래로 떨어지면 경고를 울립니다.
토양 수분 모듈 회로도
데이터시트 세부 정보
제조업체
SunFounder
부품 번호
토양 수분 센서
작동 전압
3.3 ~ 5V
출력 유형
아날로그
신호 범위
0 ~ 3.3V
응답 시간
빠름
크기
약 60 x 20mm
참고 사항 / 변형
정전용량형 센서
손상을 방지하기 위해 센서가 물에 완전히 잠기지 않도록 하십시오.
안정적인 판독을 위해 필요한 경우 적절한 풀업 저항을 사용하십시오.
정확한 수분 판독을 위해 특정 토양 유형에 맞게 센서를 보정하십시오.
신호 손실을 방지하기 위해 배선 연결을 올바르게 유지하십시오.
과전압 상황을 피하기 위해 전원 공급에 주의하십시오.
배선 지침
ESP32-24-soild-moisture-wiring
토양 수분 센서를 ESP32에 배선하려면 센서의 VCC 핀을 ESP32의 3.3V 핀에 연결하십시오. 다음으로 센서의 GND 핀을 ESP32의 GND 핀에 연결하십시오. 토양 수분 센서의 아날로그 출력 핀은 ESP32의 아날로그 핀 35에 연결해야 합니다. 부저의 경우 양극 핀을 ESP32의 디지털 핀 13에 연결하고 음극 핀을 GND에 연결하십시오. 작동 중 간헐적인 문제를 방지하기 위해 모든 연결이 안전한지 확인하십시오.
코드 예제 및 설명
다음은 직렬 통신을 초기화하고 수분 센서 값을 읽는 코드의 간략한 발췌문입니다:
void setup() {
// 초당 115200비트로 직렬 통신 초기화:
Serial.begin(115200);
}
이 코드 조각은 직렬 통신을 설정하여 직렬 모니터에서 수분 센서의 판독값을 볼 수 있게 합니다.
다음으로 센서에서 아날로그 값을 읽는 메인 루프가 있습니다:
void loop() {
// 아날로그 값 읽기
int analogValue = analogRead(35);
// 값 출력
Serial.printf("아날로그 값 = %d\n",analogValue);
delay(300); // 직렬 모니터에서 명확하게 읽기 위한 읽기 사이 지연
}
이 루프에서 코드는 핀 35의 아날로그 값을 지속적으로 읽고 300밀리초마다 직렬 모니터에 출력합니다. 이를 통해 수분 수준을 실시간으로 모니터링할 수 있습니다.
시연 / 예상 결과
수분 센서를 건조한 토양에 넣으면 아날로그 값이 더 높아져 수분이 낮음을 나타냅니다. 반대로 센서를 축축한 토양에 삽입하면 값이 크게 떨어집니다. 판독값이 설정된 임계값(예: 2000) 아래로 떨어지면 핀 13에 연결된 부저가 활성화되어 식물에 물을 주어야 함을 알립니다. 플로팅 입력에 주의하고 센서가 권장 한도를 초과하여 물에 노출되지 않도록 하십시오 (영상 02:30 시점).
823-ESP32 Tutorial 24/55- Arduino code for soil moisture measurement
언어: C++
void setup() {
// Initialize serial communication at 115200 bits per second:
Serial.begin(115200);
}
void loop() {
// Read the analog value
int analogValue = analogRead(35);
// Print out the values
Serial.printf("Analog value = %d\n",analogValue);
delay(300); // delay between reads for clear read from serial monitor
}