토양 수분 센서(YL-69)
개요
토양 수분 센서(YL-69)는 토양의 수분 함량을 측정하는 데 사용되는 센서입니다. 농업, 원예, 환경 모니터링 등 다양한 분야에서 활용되며, 작물의 건강과 생산성을 유지하기 위해 중요한 역할을 합니다. 아두이노와 같은 마이크로컨트롤러와 함께 사용되어 실시간으로 수분 수치를 모니터링할 수 있습니다.
동작 원리
YL-69 센서는 두 개의 전극을 사용하여 토양의 전기 전도도를 측정합니다. 토양의 수분 함량이 높을수록 저항 값이 낮아지게 되고, 이에 따라 전기 전도도가 증가하게 되며 이 값을 아날로그 신호로 변환하여 마이크로컨트롤러에 전달합니다.
사양
항목 | 설명 |
---|---|
민감도 조정 | PCB에 부착된 가변저항을 돌려 민감도 조정 설정 가능 |
작동 전압 | 3.3V - 5V |
출력 모드 | 디지털 출력, 아날로그 출력을 모두 지원
디지털 출력 : 임계값 초과시 LOW, 그 외에는 HIGH를 출력 아날로그 출력 : 0 ~ 1023 사이의 값을 출력 |
설치 용이성 | 고정 볼트 구멍이 있어 설치가 용이함. |
크기 | PCB : 3cm x 1.6cm
탐침부 : 약 2cm x 6cm |
전원 및 출력 표시 | 전원 표시등(빨간색) 및 디지털 스위치 출력 표시등(녹색) |
칩 | LM393 |
활용 예제
1. 토양 수분 센서 출력값을 시리얼 모니터로 확인하기
시리얼 모니터를 통해 아날로그 출력값을 확인합니다.
1-1. 회로 구성
YL-69 토양 수분 센서는 디지털 출력과 아날로그 출력을 모두 지원하기 때문에 VCC, GND, DO, AO 총 4개의 핀으로 구성되어있습니다.
회로도의 SIG 부분에서 디지털 출력이 필요하다면 DO, 아날로그 출력이 필요하다면 AO를 아두이노와 연결하시면 됩니다.
본 예제에서는 아날로그 출력이 필요하기 때문에 AO 핀을 아두이노의 A0 핀에 연결했습니다.
YL-69 센서 핀 | 아두이노 핀 |
---|---|
VCC | 5V |
GND | GND |
AO | A0 |
1-2. 아두이노 코드
const int sensorPin = A0;
void setup() {
Serial.begin(9600); // 시리얼 통신 시작
}
void loop() {
int sensorValue = analogRead(sensorPin); // 센서 값 읽기
Serial.print("토양 수분 수치: ");
Serial.println(sensorValue); // 센서 값 출력
delay(1000); // 1초 대기
}
1-3. 실행 결과
2. 토양 수분 센서 값과 수분 공급 필요 여부를 LCD에 출력하기
토양 수분 센서의 아날로그 출력값을 LCD에 표시하고, 이 값이 얼마인지에 따라 수분 공급이 필요한지 여부 또한 LCD에 함께 출력하는 예제입니다.
LCD에 대한 자세한 정보는 LCD(Liquid Crystal Display) 문서를 참고하세요.
2-1. 회로 구성
YL-69 센서 핀 | 아두이노 핀 | LCD 핀 | 아두이노 핀 | |
---|---|---|---|---|
VCC | 5V | VCC | 5V | |
GND | GND | GND | GND | |
AO | A0 | SCA | A4(우노) / 20(메가) | |
SCL | A5(우노) / 21(메가) |
2-2. 아두이노 코드
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// I2C LCD 초기화: 주소 0x27, 열 16, 행 2
LiquidCrystal_I2C lcd(0x27, 16, 2);
// YL-69 센서 핀 정의
const int sensorPin = A0;
void setup() {
lcd.init();
lcd.clear();
lcd.backlight(); // 백라이트 켜기
Serial.begin(9600); // 시리얼 통신 시작
}
void loop() {
int sensorValue = analogRead(sensorPin); // 센서 값 읽기
Serial.print("토양 수분 수치: ");
Serial.println(sensorValue); // 시리얼 모니터에 출력
// LCD에 값 표시
lcd.clear(); // LCD 화면 지우기
lcd.setCursor(0, 0); // 첫 줄 첫 번째 열로 커서 이동
lcd.print("water : ");
lcd.print(sensorValue); // 센서 값 출력
lcd.setCursor(0, 1); // 두 번째 줄 첫 번째 열로 커서 이동
if (sensorValue > 500)
lcd.print("Please Water");
else
lcd.print("Enough Water");
delay(1000); // 1초 대기
}
2-3. 실행 결과
수분이 없을 때는 LCD에 Please Water가 표시되는 모습입니다.
반면 수분이 있을 때는 Enough Water가 표시되는 모습입니다.
3. 토양 수분 센서와 LCD, LED 함께 활용하기
2번 예제에 LED를 추가하여 수분이 충분하면 파란 불이 들어오지만 수분이 없으면 LED가 꺼져 수분이 필요함을 알리는 예제입니다.
3-1. 회로 구성
3-2. 아두이노 코드
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// I2C LCD 초기화: 주소 0x27, 열 16, 행 2
LiquidCrystal_I2C lcd(0x27, 16, 2);
// YL-69 센서 핀 정의
const int sensorPin = A0;
const int ledPin = 3;
void setup() {
lcd.init();
lcd.clear();
lcd.backlight(); // 백라이트 켜기
Serial.begin(9600); // 시리얼 통신 시작
pinMode(ledPin, OUTPUT);
}
void loop() {
int sensorValue = analogRead(sensorPin); // 센서 값 읽기
Serial.print("토양 수분 수치: ");
Serial.println(sensorValue); // 시리얼 모니터에 출력
// LCD에 값 표시
lcd.clear(); // LCD 화면 지우기
lcd.setCursor(0, 0); // 첫 줄 첫 번째 열로 커서 이동
lcd.print("water : ");
lcd.print(sensorValue); // 센서 값 출력
lcd.setCursor(0, 1); // 두 번째 줄 첫 번째 열로 커서 이동
if (sensorValue > 500) {
lcd.print("Please Water");
digitalWrtie(ledPin, LOW); // LED 끄기
}
else {
lcd.print("Enough Water");
digitalWrtie(ledPin, HIGH); // LED 켜기
}
delay(1000); // 1초 대기
}
3-3. 실행 결과
수분이 없을 때는 LCD에 Please Water가 표시되고, LED가 꺼져있습니다.
반면 수분이 있을 때는 Enough Water가 표시되고 LED가 켜지는 모습입니다.
이외에도 워터펌프 등을 함께 활용한다면 자동 급수 시스템 등 다양한 프로젝트 등에 응용될 수 있습니다.