프로젝트 08: 🌱 식물 집사: 토양 수분 자동 알리미
화분의 갈증을 아두이노가 읽어내어 물 줄 시간을 정확히 알려줍니다.
1. 프로젝트 원리: 흙의 저항 측정
흙 속에 물이 많으면 전기가 잘 통하고(저항이 낮음), 물이 적으면 전기가 잘 통하지 않습니다(저항이 높음). **토양 수분 센서**는 두 개의 전극을 흙에 꽂아 그 사이의 전기 흐름을 측정합니다.
아두이노는 이 아날로그 값을 읽어 다음과 같이 판단합니다.
- 값이 클 때 (약 800 이상): 흙이 아주 말랐음 ➡ 🔴 빨간 LED (물 줘!)
- 값이 중간일 때 (약 400~700): 적당함 ➡ 🟢 초록 LED (상태 좋음)
- 값이 작을 때 (약 300 이하): 물이 너무 많음 ➡ 🔵 파란 LED (충분함)
▲ 작동 원리: 흙 속의 수분함량에 따라 변하는 전기 신호를 감지합니다.
📦 준비물
아두이노 우노 x 1
토양 수분 센서 x 1
LED (빨강, 초록) 각 1개
피에조 부저 x 1
220Ω 저항 x 2
화분 (실제 식물)
2. 상세 회로 결선도 (Wiring Diagram)
센서의 신호선은 아날로그 A0에 연결합니다. 알림용 LED는 9번, 10번 핀에, 경보용 부저는 8번 핀에 연결합니다.
▲ 식물 알리미 결선도: 센서와 출력 부품들을 올바른 핀에 연결하세요.
3. 코드 작성하기
공기 중(매우 마름)일 때와 물속(매우 젖음)일 때의 값을 먼저 측정하여 기준값을 정하는 것이 중요합니다.
int sensorPin = A0;
int buzzer = 8;
int redLed = 9;
int greenLed = 10;
void setup() {
pinMode(redLed, OUTPUT);
pinMode(greenLed, OUTPUT);
pinMode(buzzer, OUTPUT);
Serial.begin(9600);
}
void loop() {
int moisture = analogRead(sensorPin);
Serial.print("토양 수분 수치: ");
Serial.println(moisture);
// 1. 아주 마른 상태 (기준: 800 이상)
if (moisture > 800) {
digitalWrite(redLed, HIGH);
digitalWrite(greenLed, LOW);
tone(buzzer, 1000, 200); // 짧은 경고음
}
// 2. 적당한 상태 (기준: 400 ~ 800)
else if (moisture <= 800 && moisture > 400) {
digitalWrite(redLed, LOW);
digitalWrite(greenLed, HIGH);
noTone(buzzer);
}
// 3. 물이 충분한 상태 (기준: 400 미만)
else {
digitalWrite(redLed, LOW);
digitalWrite(greenLed, HIGH); // 혹은 파란 LED가 있다면 파란색
noTone(buzzer);
}
delay(1000); // 1초마다 확인
}
4. 프로젝트 핵심 팁
💡 센서의 부식 방지하기
저렴한 토양 수분 센서는 전극이 노출되어 있어 흙 속에서 계속 전기가 흐르면 빠르게 부식됩니다. 수명을 늘리려면 loop() 내에서 센서의 전원을 필요할 때만 켜도록(디지털 핀 제어) 코드를 수정해 보세요!
- 보정(Calibration): 화분의 종류와 흙의 성분에 따라 수치가 다릅니다. 실제 흙을 만져보며 "이 정도면 물을 줘야겠다" 싶을 때의 수치를 시리얼 모니터로 확인하여 코드의 숫자를 수정하세요.
5. 🎯 심화 챌린지: 워터 펌프 연결 (자동 급수)
알려주는 것을 넘어, 물이 부족할 때 아두이노가 직접 물을 주게 만들 수 있습니다! 7장에서 배운 트랜지스터 제어 방식을 이용해 작은 워터 펌프를 작동시켜 보세요. 진정한 '자동 식물 케어 시스템'이 완성됩니다.