아두이노 실시간 토양 수분 모니터링: LCD 디스플레이 DIY 키트
프로젝트 동기
매일 식물 물주기를 잊어버려 할머니께서 상기시켜 주시던 경험에서 시작되었습니다. Circuito.io를 활용해 토양 수분 센서와 I2C LCD를 빠르게 연동, 언제든 수분 상태를 확인할 수 있는 간단하면서도 실용적인 모니터링 장치를 제작했습니다.
시스템 구성
| 구성요소 |
모델 |
연결 핀 |
| 메인 보드 |
Arduino UNO |
- |
| 토양 수분 센서 |
SparkFun (스크류 터미널) |
Sig → A3, VCC → 5V, GND → GND |
| LCD 디스플레이 |
Adafruit 16x2 I2C (백색/청색) |
SDA → A4, SCL → A5, VCC → 5V, GND → GND |
| 브레드보드 |
범용 |
프로토타이핑용 |
센서 동작 원리
SparkFun 토양 수분 센서는 두 전극 간의 저항 변화를 측정합니다. 토양이 젖어 있으면 저항이 낮아져 아날로그 출력 전압이 높아지고, 건조하면 저항이 높아져 전압이 낮아집니다. 아두이노의 10비트 ADC(0~1023)로 이 값을 읽어 상대적인 수분도를 나타냅니다.
소스 코드
#include <LiquidCrystal.h>
// I2C LCD: SDA=A4, SCL=A5 (LiquidCrystal_PCF8574 라이브러리 권장)
// 여기서는 간이 버전으로 LiquidCrystal 사용 (핀 5, 4)
LiquidCrystal lcd(5, 4);
const int analogInPin = A3; // 토양 수분 센서 신호 핀
int sensorValue = 0;
void setup() {
lcd.begin(16, 2);
delay(100);
}
void loop() {
lcd.clear();
lcd.print("Soil Moisture:");
sensorValue = analogRead(analogInPin);
lcd.setCursor(0, 1);
lcd.print(sensorValue);
delay(300); // ADC 안정화 대기
}
판독값 해석 가이드
| ADC 값 (0~1023) |
토양 상태 |
조치 |
| 0 ~ 300 |
매우 건조 |
즉시 물주기 필요 |
| 300 ~ 600 |
약간 건조 |
물주기 권장 |
| 600 ~ 800 |
적정 습도 |
양호 |
| 800 ~ 1023 |
과습 |
배수 확인, 물주기 중단 |
회로도 연결 상세
토양 수분 센서
- GND 핀 → 아두이노 GND
- Sig 핀 → 아두이노 A3
- Vin 핀 → 아두이노 5V
I2C LCD
- GND → GND
- SCL → A5
- SDA → A4
- VCC → 5V
개선 및 확장 제안
- 자동 급수 시스템 연동: 릴레이 모듈 + 워터 펌프 추가로 임계값 이하 시 자동 급수
- 데이터 로깅: RTC 모듈(DS1307) + SD 카드로 시계열 데이터 저장
- 무선 모니터링: ESP8266/ESP32로 교체 후 WiFi/블루투스 앱 연동
- 다중 센서 지원: 멀티플렉서(CD74HC4067)로 여러 화분 동시 모니터링
- 딥슬립 모드: 배터리 구동 시 소비 전력 최소화 (초저전력 설계)
주의사항
- 센서 전극 부식 방지를 위해 지속 전원 인가 대신 측정 시에만 파워 온 권장 (트랜지스터 스위칭)
- 센서 종류에 따라 아날로그 값 범위가 다를 수 있으므로 실제 환경에서 보정 필요
- I2C LCD 사용 시
LiquidCrystal_PCF8574 라이브러리 사용이 더 안정적