온도는 쉽게 이해하지만, 습도는 약간 공부를 해야 한다.
위키(http://ko.wikipedia.org/wiki/%EC%8A%B5%EB%8F%84) 에 따르면 다음과 같이 상대습도를 설명하고 있다.
상대습도는, 특정한 온도의 대기 중에 포함되어 있는 수증기의 압력을 그 온도의 포화 수증기 압력으로 나눈 것을 말한다. 다시 말해, 특정한 온도의 대기 중에 포함되어 있는 수증기의 양(중량 절대습도)을 그 온도의 포화 수증기량(중량 절대습도)으로 나눈 것이다. 상대습도 100%로, 대기 중의 수증기량이 포화되어, 결로 현상을 일으킨다. 또 그때의 온도를 이슬점 온도라고 한다. |
HIH-4030 센서는 상대습도를 체크하는 센서이기 때문이다. 따라서 수증기의 양과 온도를 가지고 측정하는 센서이다. 생긴 것은 아래와 같이 생겼다.
습도 센서 HIH-4030은 5V에서 최적화되어 동작한다.
(http://www.sparkfun.com/datasheets/Sensors/Weather/SEN-09569-HIH-4030-datasheet.pdf)
특별히 저항을 넣지 않고 바로 쓸 수 있다.
(http://www.sparkfun.com/datasheets/Sensors/Weather/HIH-4030_Breakout-v10.pdf)
이 센서는 상대 습도 (Relative Humidity %RH)를 측정하고 analog output pin(위의 그림으로 OUT)으로 voltage 값을 던진다. 아두이노에서는 이 analog output pin의 값을 읽어 처리하면 된다. 오차는 +-3.5이다. -40~85 도에서 측정가능하다.
상대습도는 공기 중에 포함되어 있는 수증의 양 또는 비율을 나타낸다. (http://ko.wikipedia.org/wiki/%EC%8A%B5%EB%8F%84) 이 값을 측정하는 법이 hih 4030 datasheet에 잘 나와 있다. (http://www.sparkfun.com/datasheets/Sensors/Weather/SEN-09569-HIH-4030-datasheet.pdf)
표에 보면, 두가지 값이 나온다.
Voltage output 과 Temperature compensation 이다. 이 공식을 잘 봐둔다.
센서의 달인이 아닌 관계로 누군가의 글을 참조해야 했다.
일본사람의 블로그를 참조(http://www.eleki-jack.com/FC/2011/04/arduinohih4030.html) 하여 정리해본다.
(첫번째: Voltage output)
Vout =(Vsupply)0.0062(sensorRH) + 0.16)
sensorRH 값을 좌항으로 옮기는 식을 만드면 다음과 같다.
sensorRH =(Vout/Vsupply)×(1/0.0062)- 0.16 ×(1/0.0062) ---- (1)
Vout/Vsupply (전원대비 출력전압) 에 대해서 1/0.0062 기울기를 가진다고 볼 수 있다.
(두번째 : Temperature compensation)
공식를 그대로 적어본다. T 는 섭씨 온도이다. 즉 온도가 필요한 것이다.
RH= sensorRH /(1.0546 - 0.00216 × T) -- (2)
참고로 센서의 출력 전압은 다음 공식이다.
Vout = Vsupply × (아날로그 입력 값 /1024)
다음 식으로 치환이 된다.
Vout / Vsupply = (아날로그 입력 값 / 1024)
위의 식을 (1) 식에 적용해 본다.
sensorRH =(Vout/Vsupply)×(1/0.0062)- 0.16 ×(1/0.0062)
Vout / Vsupply = (아날로그 입력 값 / 1024)
SensorRH의 값은 다음의 값을 가지게 된다.
SensorRH = (아날로그 입력 값/1024) X (1/0.0062) – 0.16 X (1/0.0062)
테스트를 시작해 본다.
아래와 같이 셋팅한다.
코드를 업로드 한다.
void setup() { void loop() { |
Serial Monitor 창을 열어 sensor RH 값을 얻는다.
이제 진짜 RH를 구해야 할 차례이다.
이번에는 온도를 이용해서 다른 식을 구해야 한다. 이번에 습도 센서 공식 2를 다시 작성한다.
sensorRH 값과 T 온도 값을 넣어야 실제 습도를 체크할 수 있다.
RH= sensorRH /(1.0546 - 0.00216 × T)
이미 sensor RH를 구했으니 T만 구하면 된다.
온도 센서는 TMP 36을 이용한다.
(이미지 : http://www.ladyada.net/learn/sensors/tmp36.html)
OUT를 analog port 1로 연결한다.
이것을 보드에 잘 연결한다. (선이 개판이긴 하지만..)
온도 T를 구하기 위해서는 TMP 36 data sheet 과 TMP 36 튜터리얼 을 이용한다.
data sheet에 나와 있는 자료를 본다 .(http://www.analog.com/static/imported-files/data_sheets/TMP35_36_37.pdf)
The TMP36 is specified from −40°C to +125°C, provides a 750 mV output at 25°C, and operates to 125°C from a single 2.7 V supply. The TMP36 is functionally compatible with the LM50. Both the TMP35 and TMP36 have an output scale factor of 10 mV/°C.
그 다음은 튜터리얼(http://www.ladyada.net/learn/sensors/tmp36.html)을 참조했다.
먼저 Voltage를 구하고, 섭씨 온도를 구한다.
Voltage at pin in milliVolts = (reading from ADC) * (5V/1024) ----- (1)
Centigrade temperature = [(analog voltage in mV) – 0.5] / 10 –---- (2)
이제 온도 T를 구하는 공식은 다음과 같다.
T = ((input * 5 / 1024) – 0.5 ) / 10
그렇다면, 위의 T 값을 구하면 RH를 구할 수 있다.
RH= sensorRH /(1.0546 - 0.00216 × T)
이를 코드로 하면 다음과 같다.
float vdd = 5.0; void setup() { void loop() { indata1 = analogRead(1); |
온도와 습도 값이 잘 나온다.
상대 습도이니. 만약 HIH-4030 센서에 입김을 불면 확실히 값이 달라지게 나와야 할 것이다.
지금 온도가 23.73 C 이고, 20.43 습도를 가지고 있는데, 입김을 부니, 온도와 습도의 값이 올라간다.
5초에 한번씩 테스트할 때, 온도 센서인 tmp 36의 상태를 보면, 조금씩 튀는 것이 보인다. 아마도 센서이다 보니 오차가 있을 수 있다. 온도가 바뀌면 자연스럽게 상대 습도에도 영향이 받는다. 그래서 빛&감열 센서를 이용하면 좀더 정확한 값을 얻을 수 있다고 튜터리얼에 적혀 있다. (http://www.ladyada.net/learn/sensors/tmp36.html)
아래 그림을 참조했다.
온도센서 근처에 빛&감열 센서 와 저항 10k를 달고 analog 3번 input으로 받도록 했다. 그리고, 전원을 aref input으로 넣게 했다. 이렇게 하면 정확한 volt 값을 알 수 있다고 한다. 해봤는데. 크게 차이가 나지 않는다.
상대 습도계는 기본적으로 오차가 거의 없는 좋은 온도 센서가 있어야 습도 값을 구할 수 있다. 그래서 온도계를 잘 만드는 회사가 습도계를 잘 만드는 것 같다. 선물용으로 주는 이름없는 브랜드를 까보니. 온도센서의 값이 100원짜리다.. 온도 센서의 값어치를 잘 알아야 할 것 같다는 생각을 하게 되었다.
마치며…
별 것은 없지만, 생각보다 많은 시간이 소요되었다. 센서에 대한 이해라든가, 수치에 대한 이해라든가.. 이 부분에 대해서 깊은 내공이 쌓여야 할 것 같다.
다음은 온도와 습도의 값을 읽어 자바 언어를 이용해서 MRTG로 만들려고 한다. 이를 통해서 내가 있는 곳의온도/습도의 추이를 보려고 하려고 한다.
'아두이노' 카테고리의 다른 글
[펌] 아두이노를 이용한 강아지 셀프 사진 찍기 (0) | 2015.03.27 |
---|---|
New Arduino - wifi, bluetooth, usb, sd card memory 가 내장되어 판매 (2) | 2013.04.24 |
아두이노(arduino)와 연동하는 tmp36 (온도센서) (1) | 2012.01.10 |
이클립스(eclipse)에서 avr 코딩해서 아두이노(arduino) 로 이미지 업로드하기 #2 (0) | 2012.01.04 |
이클립스(eclipse)에서 avr 코딩해서 아두이노(arduino) 로 이미지 업로드하기 #1 (0) | 2012.01.04 |