초급 예제

누구나 쉽게 따라해볼 수 있는 쉬운 예제들입니다. 가볍게 도전~!

토양 수분센서-수분량 측정하기

2015-01-21 19:44:28

토양 수분센서란?



토양 수분센서는 토양 내 수분함량에 따른 저항의 변화를 측정하는 센서입니다.
토양 내 수분과 토양을 구성하는 입자의 크기 및 다양성에 영향을 받으며, 토양 내 수분함량이 많으면 저항값이 작아지고, 수분함량이 적으면 저항값이 커집니다.
그러나 토양 내 수분함량이 매우 많을 때는 전기저항이 둔감하여 오차가 크다는 단점도 가지고 있습니다. 

 

 

 

 

토양 수분센서 사용방법



토양 수분센서는 토양에 직접 꽂는 센서 단자와 센서 보드, 그리고 케이블로 구성되어 있습니다. 센서 단자의 2개 핀과 센서 보드의 2개 핀을 서로 연결합니다. (+-는 구분 안해도 됩니다.) 그 다음 케이블을 센서 보드의 DO 핀을 제외한 3개의 핀 (ACC, GND, AO)을 연결합니다.

DO핀은 디지털 출력으로 0과 1만을 출력하며, AO핀은 아날로그 출력으로 토양내 수분의 양을 보다 상세하게 출력합니다. 또한, 센서보드의 파란색 가변 저항을 돌려서 기준값을 정해놓고 사용할 수 있습니다.

이 예제에서는 AO핀을 사용합니다. 측정된 값은 수분량을 나타내는 것이 아니라, 수분량에 따른 저항의 변화를 0~1023 범위내에서 환산된 결과입니다. 

 

 

 

 

 

부품 목록

NO 부품명 수량 상세설명
1 오렌지 보드 1  
2 토양 수분센서  1 YL38
3 피에조 부저 1 KPX 1203S
4 브레드 보드 1  
5 점퍼케이블 7  

 

부품명 오렌지 보드 토양 수분센서 피에조 부저 브레드 보드 점퍼케이블
파트  

 

 

 

 

 

하드웨어 making


 

1. 오렌지보드의 5V핀을 브레드보드의 +버스에 연결합니다.

2. 오렌지보드의 GND핀을 브레드보드의 -버스에 연결합니다.

3. 피에조 부저를 그림과 같이 +단자가 위로 향하게하여 세로로 꽂습니다.

4. 피에조 부저의 +단자를 오렌지보드의  D3번 핀에 연결합니다.

5. 피에조 부저의 -단자를 -버스에 연결합니다.

6. 토양 수분센서의 VCC단자를 +버스에 연결합니다.

7. 토양 수분센서의 AO단자를 오렌지보드의 A0번핀에 연결합니다.

8. 토양 수분센서의 GND단자를 -버스에 연결합니다.

 

 

 

소프트웨어 coding


  1. /*
  2.  제목    : 토양 수분센서로 수분량 측정하기
  3.  내용   : 토양 수분센서로 토양에 있는 수분량을 측정하고, 일정 수분량 이하면 소리를 내도록 만들어 봅니다.
  4.  */
  5.  
  6. // 토양 수분센서를 A0번 핀으로 선언하고 피에조부저는 디지털 3번 핀으로 선언합니다.
  7. int soil = A0;
  8. int piezo = 3;
  9.  
  10. // 음계 표준 주파수(4옥타브) : 도, 레, 미, 파, 솔, 라, 시, 도
  11. // 음계표를 참고하여 원하는 음계로 설정해도 됩니다.
  12. int tones[] = {261, 294, 330, 349, 392, 440, 494, 523};
  13.  
  14. // 실행시 가장 먼저 호출되는 함수이며, 최초 1회만 실행됩니다.
  15. // 변수를 선언하거나 초기화를 위한 코드를 포함합니다.
  16. void setup() {
  17.   // 토양 수분센서의 동작 상태를 확인하기 위하여 시리얼 통신을 설정합니다. (전송속도 9600bps)
  18.   Serial.begin(9600);
  19.   // 피에조 부저가 연결된 핀을 OUTPUT으로 설정합니다.
  20.   pinMode(piezo, OUTPUT);
  21. }
  22.  
  23. // setup() 함수가 호출된 이후, loop() 함수가 호출되며,
  24. // 블록 안의 코드를 무한히 반복 실행됩니다.
  25. void loop() {
  26.   // 토양 수분센서로부터 측정된 값을 읽습니다.
  27.   int value = analogRead(soil);
  28.   // 토양 수분센서로부터 측정된 값를 시리얼 모니터에 출력합니다.
  29.   Serial.print("read sensor value : ");
  30.   Serial.println(value);
  31.  
  32.   // 토양 수분센서로부터 측정된 값 (0~1023)을, 음계 배열 변수 값 (0~7) 범위로 변환합니다.
  33.   int ton = map(value, 0, 1023, 0, 7);
  34.  
  35.   // 변환된 음계의 주파수를 시리얼 모니터에 출력합니다.
  36.   Serial.print("output ton ");
  37.   Serial.println(tones[ton]);
  38.   Serial.print("Hz");
  39.  
  40.   tone(piezo, tones[ton]);
  41.  
  42.   // 1초 동안 대기합니다.
  43.   delay(1000);
  44. }

 

TIP 값의 변화가 너무 민감하거나 둔감해서 소리 변화의 차이를 늘이거나 줄이고 싶다면 map()함수의 내부 수치를 조절하여 바꿀 수 있습니다.

 

 

 

kocoafabeditor

항상 진취적이고, 새로운 것을 추구하는 코코아팹 에디터입니다!

토양 수분센서, 아두이노, 오렌지보드