SW

9일차. 방수형 온도센서로 물온도 측정하기

S.Zinlee 2015. 11. 27. 01:13

첫번째 알아볼 모듈은 어항의 물 온도를 측정하기 위한 방수형 온도센서이다.


필자가 구매한 센서는 DS18B20이다.


이 모듈을 사용하기 위해서는 DS18B20센서, 10k 저항, 빵판(브레드보드), 라즈베리파이가 필요하다.



구성은 다음과 같이 하면 된다.



(검정 빵판을 준비 했지만 사진빨을 잘 받지 못하여 노란 빵판으로 교체 하였다.)

빨간선은 DC선이며 3.3v에 연결해 주고,

노란선은 센서로부터 데이터를 받는 선이며 GPIO4번에 연결해 주면된다.

검정선은 ground이기 때문에 아무 GND에 연결해 줘도 상관없다.


주의할 점은 노란선과 빨간선 사이를 10k저항으로 연결해 줘야 한다.

보통 3.3v에는 4.7k~10k 옴의 저항을 사용하는데 집에 10k밖에 없었다.


회로 구성이 완료 되었으면 이제 라즈베리파이에 전원을 연결하도록 한다.

부팅이 완료 되고 /sys/bus/w1/devices/ 경로를 확인해 보면 28-xxxxxxxx로 시작하는 device가 하나 잡힌 것이 보인다.(원래는 없다. 믿을 수 없다면 센서를 뽑고 확인해 보도록 한다.)


이 방수형 온도센서는 device처럼 인식되기 때문에 연결만 하면 usb처럼 자동으로 인식이 된다.

그리고 이 센서는 디지털 신호로 데이터를 보내기 때문에 라즈베리파이에서 바로 사용가능하다.

아날로그로 신호를 보내는 온도센서를 구매했다면 별도의 ADC(analog to digital conversion) 장치가 필요하다.

라즈베리파이엔 analog신호를 받아서 digital로 변환해 줄 칩이 없기 때문이다.


다시 본론으로 들어가서 만약 /sys/bus/w1/devices 밑에 28-xxxxxx로 시작하는 device가 인식되지 않았다면

/boot/config.txt 파일을 열어 dtoverlay=w1-gpio 정보를 추가해 주자.


pi@raspberrypi ~ $ sudo vi /boot/config.txt


dtoverlay 항목을 찾아 보고 없으면 맨 아래쪽에 다음 정보를 추가.

dtoverlay=w1-gpio


재부팅을 한다.

pi@raspberrypi ~ $ sudo reboot


온도가 잘 나타나는지 확인해 보자. 

확인 방법은 /sys/bus/w1/devices 밑에 28-xxxxxxx 폴더로 들어가서 w1_slave 정보를 읽어 보면된다. 

(필자는 28-0215529be4ff라는 이름의 device가 잡혔다.)

pi@raspberrypi ~ $ cat /sys/bus/w1/devices/28-0215529be4ff/w1_slave
 50 01 80 80 1f ff 80 80 d2 : crc=d2 YES
 50 01 80 80 1f ff 80 80 d2 t=21000


아래 정보 중 t=21000이란 정보가 온도이다. 

실제로 사용하기 위해서는 1000으로 나눠서 사용하면 되겠다.


이제 온도 센서를 물에 담가서 온도 변화를 측정해 보면 온도가 변하는 것을 볼 수 있을 것이다.

근데 필자는 센서가 0.5도 단위로 변한다. (21000 => 21500)

원래 이런건가(?) 모르겠지만 변화는 잘 나타나니 우선은 넘어 가도록 하자.


다음 시간에는 nodejs에서 이 온도 센서를 가지고 실제 물의 온도를 측정 해 보도록 하겠다.