안녕하세요.
식물 키우기 시작하면서 불편했던 것이 언제 물을 언제 주어야 좋은지 모르는 것이었습니다. 그래서 시중에 파는 토양습도 센서를 구매해서 테스트해 보기로 하였습니다.
토양습도 센서라 하기도 하고 토양수분 감지 센서라고 부르고 있는 듯합니다. 1,000 원대 제품을 구매하려고 했는데 후기를 보니 부식이 된다고 하는 분들이 계셔서 부식을 조금이나마 방지할 수 있는 제품을 선택했습니다.
부식 방지되는 것은 가격이 조금 비쌌습니다. 그중에서 저항방식이 아닌 정전용량 방식으로 수분을 측정하는 싼 제품을 구매해서 테스트해 보았습니다. 이 제품도 부식이 되겠지만, 기존 저항방식보다 긴 수명을 제공한다고 합니다.
(the capacitive soil moisture sensor is made of a corrosion resistant material, which will provide a long service life.)
1. 토양수분 감지 센서 원리
토양수분 센서는 저항값을 읽어 계산하는 방식으로, 물은 전기가 잘 통하는 전도체이므로 토양 속에 수분이 많이 포함되어 있으면 저항치가 낮아지고 수분이 없으면 저항값이 높게 측정되는 것을 활용하는 방식으로 되어 있습니다.
두 번째로는 수분 변화에 따라 정전용량이 변화되는 것을 가지고 측정하는 방식이 있습니다.
그리고 토양 내 수분함량이 매우 많을 때는 전기저항이 둔감하여 오차가 크다는 단점도 가지고 있다고 합니다.
2. Crowtail-Capacitive Moisture V2.0 제품 스펙
1) Features
- Corrosion resistant
- Soil moisture sensor based on soil capacitive measurement
- Easy to use
- High sensitivity
2) Specifications
- Operating voltage: 3.3V~5V
- Crowtail compatible interface
- Interface: PH2.0 - 4Pin
- Size: 23 (W)*102(L)*7(H) mm
3. Crowtail-Capacitive Moisture V2.0 회로
회로도를 공개하고 있으니 참고하시면 도움이 될 것입니다.
4. 아두이노 나노와 연결
현재는 아두이노 나노로 데이터를 받지만 향후 아두이노 IoT 버전으로 바꿔서 웹 혹은 블루투스로 값을 받아볼 예정입니다.
아두이노 나노 | 5V | GND | A0 | |
Moisture Sensor | VCC | GND | SIG | NC |
- NC (Not Connect)
5. 프로그램하기
사이트에서 제공해 주는 소스를 참고하여 조금 수정하였습니다.
const int AirValue 변수는 물에 넣지 않고 현재 공기 중에 수분량을 입력하면 됩니다. 물에 넣지 않고 값을 읽었을 때 값을 넣어줍니다. 초기 600으로 되어 있는데 가지고 있는 것으로 해보니 615가 나와 변경하였습니다.
const int WaterValue 변수는 흰색 선까지 물을 담갔을 때 나타나는 값입니다. 초기 360으로 되어 있는데 실제 물에 담갔더니 284까지 나와서 수정해 주었습니다.
int intervals 변수는 3단계로 나눌 경우 간격으로 생각하면 됩니다. (나중에 섬세하게 숫자를 높여 단계를 세밀하게 나눌 수 있습니다)
위의 변수들을 수정함으로써 좀 더 정확한 센서 값으로 사용할 수 있습니다. 그리고 향후 수분이 어느 정도일 때 수중 모터 몇 초간 작동시키고 정지시켜야 할지 토양 종류나 특징에 따라서 조정해야 하지 않을까 합니다.
//you need to change this value that you had recorded in the air
const int AirValue = 615; //600;
//you need to change this value that you had recorded in the water
const int WaterValue = 284;//340;
int intervals = (AirValue - WaterValue)/3;
int soilMoistureValue = 0;
void setup() {
Serial.begin(9600); // open serial port, set the baud rate to 9600 bps
}
void loop() {
soilMoistureValue = analogRead(A0); //put Sensor insert into soil
// Serial.print("soilMoistureValue : ");
// Serial.println(soilMoistureValue);
if(soilMoistureValue > WaterValue && soilMoistureValue < (WaterValue + intervals)) {
Serial.print("soilMoistureValue : ");
Serial.print(soilMoistureValue);
Serial.println(" Very Wet");
} else if(soilMoistureValue > (WaterValue + intervals)
&& soilMoistureValue < (AirValue - intervals)){
Serial.print("soilMoistureValue : ");
Serial.print(soilMoistureValue);
Serial.println(" Wet");
} else if(soilMoistureValue < AirValue
&& soilMoistureValue > (AirValue - intervals)) {
Serial.print("soilMoistureValue : ");
Serial.print(soilMoistureValue);
Serial.println(" Dry");
}
delay(500);
}
6. 테스트 영상
7. 주의할 점
토양수분 센서의 테스트 값을 물에 담가 값을 구할 때도 회로 물이 튀지 않도록 주의해야 합니다. 실수할 경우 쇼트(합선)되어 새로 구매해야 할 수 있기 때문입니다.
상단은 회로가 다 보이기 때문에 실제 화분에서 사용하려면 글루건 혹은 절연테이프로 회로 부분에 물이 들어가는 것을 막아야 합니다.
센서 측면이 거칠어서 잘못하면 상처 입을 수 있으니 조금 신경 쓰시면 좋을 것 같습니다.
참고) 위와 같은 제품 말고 좀 더 돈을 더 준다면, 전극을 부식시키지 않는 스테인리스 봉 또는 흑연 막대 등으로 교체해서 적용하시면 오래 사용하실 수 있습니다.
감사합니다.
<참고 사이트>
1. Crowtail-Capacitive_Moisture_V2.0
https://www.elecrow.com/wiki/index.php?title=Crowtail-Capacitive_Moisture_V2.0
2. 토양수분센서 종류 및 사용법
3. 토양 수분센서-수분량 측정하기
https://kocoafab.cc/tutorial/view/369
'Embedded > Arduino' 카테고리의 다른 글
아두이노 나노를 이용한 5V 수중 펌프 모터 제어(SZH-GNP155) (0) | 2024.03.20 |
---|---|
Arduino Nano + OSTSen-T007(TMP007) (MEMS) thermopile sensor Test (0) | 2024.03.17 |
아두이노 나노를 이용해서 DHT11 온도 습도 센서 값 받아오기 (0) | 2024.03.07 |
초음파 센서 NT-TS601를 이용한 초음파 자(Ruler) 제작하기 (0) | 2024.02.22 |
아두이노 나노 + SZH-RFBB-019 (433MHz RF무선송수신 모듈) 테스트 – 여러 개 송수신 테스트 (0) | 2024.02.20 |