토양습도센서는 화분 등에 꼽아서 토양의 습도가 어느정도인지 판단할 때 쓰는 센서이다. 두 개의 전극부분을 토양에 꼽도록 되어 있으며 수분함량에 따라 달라지는 저항의 변화를 감지한다. 즉, 토양의 수분 함량이 높을 수록 전류가 잘 흐르므로 저항이 낮아지게 되고 수분이 적으면 저항값이 높아지게 된다. 이 글에서는 토양의 수분함량에 따른 저항값의 변화를 아두이노로 보내 저항값이 설정치보다 높을 때 알람을 울릴 수 있게 해 보려고 한다.
내가 가지고 있는 토양수분센서(Soil Moisture Sensor)는 아래와 같이 생겼다. 인터넷 쇼핑몰 등에서 쉽게 구입할 수 있다. 개당 2000~3000원 정도면 구입이 가능하니 가격또한 저렴하다.
구입 시 포함되어 있는 구성품이다. 암-암 케이블, 토양센서부, 센서보드로 구성되어 있다. 토양센서부는 두 가닥의 암-암 케이블을 이용하여 센서보드에 연결된다. 센서보드에 보면 +, - 표시가 있지만 아무데나 연결해도 상관 없다. 센서보드에는 감도조절을 위한 가변저항이 붙어있다.
센서보트의 핀이다. 좌측 4개의 핀은 아두이노에 연결되고 우측 2개의 핀은 토양센서부에 연결이 된다. A0 는 아날로그 아웃으로 토양수분에 따른 저항값의 변화를 0~1023의 숫자로 표현한다. 값이 낮아질수록 수분이 많은 것이다. D0는 디지털 아웃으로 수분 있음/없음만 표현되므로 여기에서는 사용되지 않는다.
연결
1. 토양수분센서부와 센서보드를 2가닥의 연결선을 이용해 연결한다. (극성은 없다.)
2. 센서보드를 아두이노와 연결
센서보드 |
아두이노 |
VCC |
5V |
GND |
GND |
AO |
A0 |
3. 아두이노와 스피커(Piezzo Speaker) 연결
스피커 |
아두이노 |
+ |
디지털 13 |
- |
GND |
연결된 모습
소스
13행의 if 문의 값은 자신의 센서감도에 맞도록 적절하게 조절하여야 한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | const int soilSensorPin = A0; //토양습도센서 아웃을 아두이노 A0로 설정 void setup() { Serial.begin(9600); //시리얼포트 설정 } void loop() { Serial.println(analogRead(soilSensorPin)); //센서값을 시리얼모니터로 전송 if (analogRead(soilSensorPin) > 780) // 토양습도 값에 따른 경고음 울리기(자신의 센서 감도에 알맞게 조절필요) { tone(13,5000,100); // 피에조 ON (주파수 5000으로 0.1초간 울리기) } delay(5000); //반복Term 5초 } | cs |
우선 센서부를 화분에 꼽지 않을 경우 시리얼모니터를 통하여 값을 확인해 보았다.
예상대로 전류가 전혀 통하지 않는 상태라서 최대값인 1023이 출력된다.
그리고 집에 있는 화분에 센서를 꼽아 보았다. 물을 안준지 꽤 오래된 화분이며 물을 줘야겠다고 판단되는 흙이 꽤 말라있는 화분이다.
화분에 센서부를 꼽으니 왔다갔다 하지만 대략 780정도 나오는 것 같다. 그러므로 저항값이 780 이상으로 올라가면 부저를 울리면 될 것 같다.
그 다음 화분에 물을 주어 보았다. 물을 주니 즉시 알람이 멈추고 시리얼모니터를 보니 저항값이 낮아진 것을 볼 수 있다.
780대이던 저항값이 400대로 낮아졌다.
이번에는 경고음만 내 보았지만 작은 어항용 워터펌프를 이용하면 자동으로 화분에 물을 주는 장치도 충분히 만들 수 있을 것 같다.
'아두이노' 카테고리의 다른 글
[아두이노] 적외선(IR) 장애물 감지 센서 (0) | 2016.04.05 |
---|---|
[아두이노] 이더넷모듈(ENC28J60)의 사용 - 설정,웹서버,트위터,웹클라이언트 (29) | 2016.03.28 |
[아두이노] DC 모터의 속도제어(모터드라이버 L298N) 2편 (32) | 2016.03.23 |
[아두이노] MQ-2 센서를 이용한 가스탐지 및 알람 (22) | 2016.03.22 |
[아두이노] DC 모터의 제어(모터드라이버 L298N) 1편 (28) | 2016.03.21 |