본문 바로가기
작업/Rasp & Arduino

온도 센서 (DS18B20) 라즈베리파이 연결

 

 

 

DS18B20은 온도를 측정하는 센서 모듈입니다.

이번 글에서는 DS18B20이 내장된 방수형 프로브(수온 측정 모듈)를 라즈베리파이와 연결하겠습니다.

 

 

 

DS18B20 제품 사양(Specification) 및 회로 연결

 

수온 센서 구성

 

Supply Voltage: 3 – 5.5V 1 Wire Interface
Temperature Range: -55 – 125 ℃ 4.7K Ω Resistance

 

 

라즈베리파이 연결

VCC 3.3V
GND GND
Data GPIO4

 

 

 

연결을 위한 터미널 모듈

 

 

수온 센서 구성 중에 터미널 모듈이 포함되지 않은 경우가 있습니다.

 

라즈베리파이와 직접 연결해도 무관하지만,

터미널 모듈이 있으면 점퍼선 활용이 용이하기 때문에 추천합니다.

 

Data와 연결되는 GPIO 핀은 특별히 정해져 있지 않습니다.

특수한 핀(UART, SPI, I2C 통신 등)이 아닌 GPIO 핀 어떠한 곳이든 적용 가능합니다.

이번 글에서는 GPIO4번 핀에 연결하여 진행했습니다.

 

 


온도 센서 관련 참고 내용

 

 

1. DS18B20의 사양에서 "1 Wire Interface"가 있습니다.

 

   모듈의 통신 방식을 1-Wire로 적용한다는 것입니다.

   1-wire 통신은 데이터 전용선 1개(Data)로 송/수신을 모두 수행합니다.

 

 

 

2. 하나의 선으로 송/수신을 모두 수행하기 위해서는 신호를 구분 지어 주는 역할이 필요합니다.

   플로팅(Floating) 상태가 유지되면 신호 구분이 되지 않아서 통신이 불가하기 때문입니다.

 

 

3. 저항을 통해 풀업(Full-Up)을 시켜주면 신호의 구분이 가능하며 통신을 가능하게 합니다.

   일반적으로 온도 센서에 사용되는 풀업 저항은 4.7K입니다.

 

 

풀업(Full-Up)과 풀다운(Full-Down)은 스위칭을 통해서 신호 값을 변화시키는 방식입니다.

풀업은 저항을 VCC와 연결하며 풀다운은 저항을 GND와 연결하게 됩니다.

 

 

쉽게 설명하면 플로팅 상태일 때 값을 끌어올리는(신호 1) 것이 풀업,

값을 내려버리는(신호 0) 것이 풀다운입니다.

 

 

온도 센서는 풀업 방식을 사용하기 때문에 4.7K 저항을 VCC와 Data에 연결합니다.

 

DS18B20 연결 사진

 

회로 연결 그림

 

 

위의 그림처럼 회로를 구성하기 위해서는 브레드보드(빵판)가 필요합니다.

이 과정까지 마쳤다면 라즈베리파이에서 관련 설정을 진행하고 값을 확인해 보겠습니다.

 

 


라즈베리파이 환경 설정

 

라즈베리파이에서 관련된 설정을 하는 목적은

"1-Wire 통신을 활성화하는 것과 외부 장치를  1-wire 인터페이스로 인식하기 위함"입니다.

 

 

먼저, "Preferences" -> "Raspberry Pi Configuration" -> "Interfaces"에서 "1-Wire"를 Enable 합니다.

 

 

 

다음으로, 외부 장치를 인식하기 위해 디바이스 트리 오버레이(dtoverlay) 설정을 진행합니다.

하드웨어와 관련된 설정과 제어는 /boot/config.txt 파일에서 수행합니다.

따라서 해당 파일을 텍스트 편집기(본 글에서는 nano 편집기 사용)로 열어서 수정합니다.

 

 

sudo nano /boot/config.txt    <-   nano 편집기로 /boot/config.txt 파일 열기
맨 아래의 [all] 항목에  dtoverlay=w1-gpio  작성 후 저장
cat /boot/config.txt     <-   저장된 내용 확인

 

 

"w1-gpio"는 1-Wire Interface를 의미하며 해당 문장은 1-Wire Interface를 활성화하는 것을 의미합니다.

 

 

이후 재부팅을 진행하고, /sys/bus 경로에 "w1" 디렉터리가 존재하는지 확인합니다.

(cat /sys/bus)

 

 

만약 디렉터리가 존재하지 않는 경우, 수동으로 모듈을 적재하기 위해 modprobe 명령어를 사용합니다.

 

 

sudo modprobe w1-gpio
sudo modprobe w1-therm

 


 

온도 센서를 통해 온도 값 확인하기

 

 

1-wire 인터페이스를 통해 연결된 DS18B20은 /sys/bus/w1/devices 경로에서 확인할 수 있습니다.

"28-*" 형태의 파일명으로 존재하며 해당 경로로 이동하면 여러 정보를 확인할 수 있습니다.

"temperature"와 "w1_slave"에서 온도 데이터를 확인할 수 있습니다.

 

 

 

 

 

 

w1_slave에서 온도 내용을 확인했습니다.

첫 줄의 YES는 정상적으로 데이터를 수집했다는 의미입니다.

 

 

"t=23312" 값이 온도 데이터에 해당합니다. 측정된 값에서 1000을 나누면 섭씨온도가 됩니다.

(23312/1000 = 23.312)

 

 

 

이상으로 라즈베리파이에 온도 센서를 연결하여 값을 확인하는 과정이었습니다.

이후의 글에서 온도 데이터를 계산해서 출력하는 프로그램을 구현하겠습니다.

읽어주셔서 감사합니다.

 

 

-끝-