본문 바로가기

아두이노/IoT 아두이노 프로젝트!

[Part 2] 쉽게 화분 키우기 !!(스마트 농장)

저번에 이어 다른 센서를 구현해보는 시간을 갖도록 하겠습니다.


 Component List

 1. WizArduino

 2PM1001, 먼지센서

 3DHT22, 온습도 센서

 4레인 센서

 5모이스처(수분) 센서

 6DWP-385 WATER PUMP

 7LAMP (Light)

 8. Transistor

 9. Relay

 10. DC Motor

 11. FAN motor

 12. 12V DC power Adaptor or Power Supply


1. Moisture (수분) 센서(YL-69, FC-28)

- Moisture 수분 센서는 전극이 부착된 수분 측정용 프로브를 이용하여 저항 값을 측정한다.

사실 수분센서를 설명하기 이전에 먼저 설명할 것이 있다.

물의 저항에 대해서이다. 우리들은 영화의 영향인지.. 혹은 다른 주입식교육인지는 모르겠으나 다들 물의 저항은 0옴이라고 생각하고 있다.

근데, 사실 물의 저항은 0R이 아니다. (전기가 잘 통하지 않는다.)

일반적인 물의 경우 전기저항이 수백R ~ 수십 K옴이다. 증류수의 경우에는 저항이 0에 가깝지만 일반 물은 0옴이 아니다.

실제로 측정해보면, 수십K옴이 측정되는 것을 확인하였다.(사진상 52K옴이다.)

그리고 수분센서의 정식명칭은 토양수분측정 센서이다.

즉, 토양(흙)의 수분(물의 함량)을 측정하여 그 값을 나타낸 것이다.

<물의 저항 측정>

<흙의 저항 측정>

위 이론을 토대로 수분센서에 대해 깊이 분석해보자.

아래 사진의 네모난 모듈이 제어모듈, 그리고 2개의 다리로 구성된 부분이 센서 프로브이다.


위 센서 프로브를 흙에 꽂게 된다. (2 개의 다리는 전극으로 VCC, GND로 연결이 된다.) 흙에 꽂게 되면 그 흙의 수분 함유량으로 인해 센서자체가 저항이 된다.

자세한 설명은 아래 회로도를 보고 하겠다.


아래 회로는 제어모듈이다. 제어모듈의 k1부분이 센서 프로브를 부착하는 곳이다. 

위 회로를 보면, LM393이라는 IC를 사용하고 있는데 위 IC는 OPAMP 이다. 여기서 OPAMP를 비교기로 사용하였다.

수분 센서의 제어 모듈은 총 4가지를 출력할 수 있다.

1. VCC

2. GND

3. DO(digital output)

4. AO(Analog output)

여기서 OPAMP 비교기는 DO(digital output)에 사용되었다.

INA-에 기준전압(Ref Voltage)를 지정하고 INA+가 기준전압보다 높으면 OUTA에 '1'이 출력되고, INA+가 기준전압보다 낮으면 OUTA에 '0'이 출력된다.

단순 IC는 DO을 출력하기 위한 용도로만 사용되었으며, AO(Analog output)은 단순히 저항치에 의한 전압의 출력으로 측정하는 것이다.


제어모듈부의 기본상태는 open 상태이다.(저항이 무한대) 

그런데, 2개의 전극에 물 혹은 습도로 인해서 전류가 통하게 되면서 무한대인 저항이 수십K옴으로 변하게 된다. (물의 저항은 수십K옴)

이 때, R1의 10K와 k1의 저항치로 인해 AC에 전압이 전달되게 된다.

센서 프로브를 물에 푹 담궜을 때, 프로브의 저항이 수십K옴이 나왔으니

만약 흙에 꽂아서 사용할 때 흙에 함류된 수분이 적다면 그만큼 저항이 낮아 질테니 그러면 AC에 출력되는 전압이 높을 것이다.

즉 다시말하자면 센서 프로브의 저항치에 의해 AC에 전달되는 전압을 계속 변하겠고, 이를 아두이노가 anlaogRead()함수를 사용해서 전압을 받으면 그 전압을 0 ~ 1023(MCU의 ADC가 10bit일 때) 만큼을 변환해서 나타낸다.


혹여나 다른 블로그를 보고 이해가 안된다는 분들이 계실 수도 있다. 

내 판단으로 보았을 때 다른 블로그들에서 설명한 내용들은 다 거짓이다.

내가 측정한대로 한다면 실제로 수분센서에 물이 닿으면 오히려 저항이 증가해서 전압이 떨어진다.

물에 저항성분이 수십KR이 된다는 전제하에 회로를 분석하고 아두이노에 연결해서 값을 확인해보면 이해가 될 것이다.

첨언으로 말하자면, 아두이노의 ADC는 5V를 사용 시 0 ~ 5V를 0 ~ 1023(10bit)로 변환해서 받게 된다.

이 말은 5V전압이 아두이노의 analogRead()로 읽으면 1023이 출력되야 한다는 것을 말한다.


내가 여기서 사용한 센서는 YL-69이다. 다른 수분 센서는 TR을 이용하여 구동한 것도 있고 종류가 많다.

내가 분석한 것은 YL-69이니 꼭 자신이 갖고 있는 센서를 확인해서 사용하길 권장한다.



2. 레인센서 (빗물감지센서) 

 - 레인센서는 수분 센서와 완전히 동일하다. 다만 "어디에" 사용할지가 좀 다르다.

수분 센서의 경우 정확한 명칭은 "토양 수분 측정 센서" 라고 언급했다. 그리고 레인센서의 정확한 명칭은 "빗물 감지 센서" 다른 말로는 물 감지 센서이다.

하드웨어적으로 다른점은 2개의 다리모양이 넓은 판처럼 바뀌었다는 점빼곤 없다.

제어 모듈의 회로도 동일하다.

위 센서는 빗방울이 센서판으로 떨어지면 이를 인식하여 동작한다.

보통 DO으로 많이 사용할 것이다. 빗방울이 많이 떨어진다면 그만큼 저항치가 높아질테니 그에 따라서 전압이 다르게 출력되면서 OPAMP 비교기가 동작하여 그에 맞는 동작을 하는 것이다.

그렇다면 사용자는 이를 이용하여 빗방울이 떨어지면 창문을 닫게 하거나 하는 어떠한 이벤트성 동작으로 구현한다면, 하나의 프로젝트가 된다.


3. 온/습도 센서(DHT22(센서), AM2302(모듈형))

보통 온/습도로 가장 많이 사용되는 것이 DHT11과 DHT22이다.
동작 코드는 동일하며, DC 3.3 ~ 5.5V까지 사용이 가능하다.
DHT11과 DHT22는 측정 범위와 오차가 다르다.
DHT11 = 0 ~ 50도의 측정범위, 약 2도의 오차와, 20~80%의 습도 측정범위에 약 5%의 오차로 동작.
DHT22 = -40 ~ 80도의 온도 측정범위, 약 0.5도의 오차와 0~100%의 습도 측정범위에 약 2%의 오차로 동작.

하지만, 최소 측정 시간 간격이 DHT11은 1초, DHT22는 2초 간격으로 동작한다.
DHT11이 좀 더 자주 측정이 가능하다.
가격 측면으로 봐도 DHT11이 더 저렴하다.

필자는 DHT22의 모듈형인 AM2302모듈을 구입하였다.(케이블도 함께 들어있음)

만약 DHT22 센서만 구매했다면, 아래 회로대로 구성하여 동작하면 된다.
R1의 저항은 Pull up으로 동작하고 C1은 bypass capacitor로 동작한다.
Led는 단순 전원들어오면 LED가 점등되는 용도로 사용되었다.

DHT22-Temperature-Humidity-Sensor-User-Manual-1.gif


코드는 2가지 방법이 있습니다.

1. 직접 코딩하여 구현하는 방법
 - 아래 블로그에 정말 자세하게 설명되어 있습니다. 동작원리는 아래 블로그만 보셔도 이해됩니다.
 - http://blog.naver.com/nkkh159/220604500053

2. 라이브러리를 사용해서 구현하는 방법
 - 제작사에서 제공하는 라이브러리를 사용해서 구현하는 방법입니다.
 - http://www.dfrobot.com/wiki/index.php/DHT22_Temperature_and_humidity_module_SKU:SEN0137
 - 근데.. 제작사에서 만든 코드는 정상동작하지 않더라구요.. 저의 경우에는 !!

물론 다른 분들은 그냥 코드만 갖다쓰시고 싶기 때문에 그냥 갖다쓰면 되는 코드는 아래 경로에서 받아주세요.
http://www.waveshare.com/wiki/DHT22_Temperature-Humidity_Sensor


원하시는 것을 선택하여 코드 구현까지 하시면 됩니다.