토양 수분 센서(YL-69)

From Arduwiki


가운데|class=coders100

개요

토양 수분 센서(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

가운데|class=coders100

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. 실행 결과

가운데|class=coders100


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(메가)

가운데|class=coders100

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가 표시되는 모습입니다.

가운데|class=coders100


반면 수분이 있을 때는 Enough Water가 표시되는 모습입니다.

가운데|class=coders100


3. 토양 수분 센서와 LCD, LED 함께 활용하기

2번 예제에 LED를 추가하여 수분이 충분하면 파란 불이 들어오지만 수분이 없으면 LED가 꺼져 수분이 필요함을 알리는 예제입니다.


3-1. 회로 구성

가운데|class=coders100

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가 꺼져있습니다.

가운데|class=coders100


반면 수분이 있을 때는 Enough Water가 표시되고 LED가 켜지는 모습입니다.

가운데|class=coders100


이외에도 워터펌프 등을 함께 활용한다면 자동 급수 시스템 등 다양한 프로젝트 등에 응용될 수 있습니다.


구매 링크

공집사몰