안녕하세요.
이번 포스트에서는 외부 온도를 받아들이는 온도센서(LM35, DS18B20)에 대해 알아보겠습니다.
LM35와 DS18B20은 교육용으로 가장 많이 사용하는 온도센서입니다.
LM35는 섭씨 온도(Celsius)를 측정하는 정밀 온도 센서로, 다양한 전자 프로젝트와 산업 응용 분야에서 사용됩니다. 이 센서는 온도에 비례하는 아날로그 전압 출력을 제공하여 쉽게 온도를 측정할 수 있습니다. LM35는 다른 온도 센서와 비교하여 높은 정확도와 선형 출력을 제공하는 것이 특징입니다.
생긴것(Package Type)은 우리가 흔히 생각하는 트랜지스터의 형태와 동일합니다.
※1. 온도센서 ( LM35, DS18B20 ) 제어
1. LM35의 원리
LM35는 아날로그 온도 센서로, 온도 변화에 따라 전압 출력을 생성합니다.
작동 원리:
- 반도체 기술: LM35는 반도체 재료로 구성되어 있으며, 온도에 따라 전기적 특성이 변하는 반도체 소자를 사용합니다.
- 출력 전압: LM35는 섭씨 온도에 비례하여 아날로그 전압을 출력합니다. 출력 전압은 1°C당 10mV입니다. 예를 들어, 25°C에서는 250mV의 전압을 출력합니다.
- 선형 관계: 출력 전압과 온도는 선형 관계를 가지므로, 출력 전압을 읽어서 간단히 온도를 계산할 수 있습니다.
회로 구성: LM35는 3개의 핀이 있으며, 간단한 전원 공급과 출력 핀으로 구성됩니다.
- Vout (출력 핀): 온도에 비례하는 전압을 출력합니다.
- Vcc (전원 핀): +4V에서 +30V의 전원을 공급합니다.
- GND (접지 핀): 접지와 연결됩니다.
2. DS18B20의 원리
DS18B20은 디지털 온도 센서로, 온도 값을 디지털 신호로 출력합니다.
작동 원리:
- 디지털 측정: DS18B20은 내부적으로 온도에 따라 변하는 반도체 소자의 특성을 이용하여 온도를 측정합니다. 측정된 온도는 디지털 데이터로 변환됩니다.
- 1-Wire 프로토콜: DS18B20은 1-Wire 통신 프로토콜을 사용하여 데이터 전송을 합니다. 이 프로토콜은 데이터 라인 하나로 전원 공급과 데이터 통신을 동시에 할 수 있는 특징이 있습니다.
- 고유 ID: 각 DS18B20 센서는 64비트의 고유 ID를 가지고 있어 여러 센서를 하나의 데이터 라인에 연결할 수 있습니다.
- 고해상도: DS18B20은 9비트에서 12비트의 해상도로 온도를 측정할 수 있습니다.
회로 구성: DS18B20은 3개의 핀이 있으며, 전원 공급과 데이터 핀으로 구성됩니다.
- Vcc (전원 핀): +3.0V에서 +5.5V의 전원을 공급합니다.
- GND (접지 핀): 접지와 연결됩니다.
- DQ (데이터 핀): 데이터 통신과 전원 공급을 담당합니다. 풀업 저항(4.7kΩ)이 필요합니다.
3. 비교 요약
- 출력 방식:
- LM35: 아날로그 전압 출력.
- DS18B20: 디지털 데이터 출력.
- 작동 방식:
- LM35: 온도에 따라 변하는 반도체 소자의 전압 출력을 이용.
- DS18B20: 온도에 따라 변하는 반도체 소자의 특성을 디지털 데이터로 변환하여 1-Wire 프로토콜로 전송.
- 전원 공급:
- LM35: +4V에서 +30V.
- DS18B20: +3.0V에서 +5.5V.
- 통신 방식:
- LM35: 아날로그 신호로 직접 읽음.
- DS18B20: 1-Wire 디지털 통신.
※2. LM35 Wiring (배선 연결)
LM35는 아날로그 전압으로 온도를 출력합니다. ( DS18B20은 제가 따로 가지고 있지않아 테스트를 하지 못하겠네요... 배선도와 코드만 제공해 드리겠습니다.)
LM35
DS18B20
※3. 소스코드 및 동작
온도를 읽어 아두이노의 Serial Monitor에 출력하는 코드를 실행해 보겠습니다.
▶1. 소스코드
LM35를 통해 온도를 측정하는 코드를 실행해 보겠습니다. (소스코드는 첨부파일 제공해 드리겠습니다.)
const int lm35Pin = A0; // LM35 센서가 연결된 아날로그 핀 void setup() { Serial.begin(9600); } void loop() { // LM35에서 아날로그 값을 읽기 int lm35Value = analogRead(lm35Pin); // LM35 값에서 온도로 변환 float temperature = (lm35Value * 5.0) / 1024.0 * 100.0; // 시리얼 모니터에 온도 출력 Serial.print("Temperature: "); Serial.print(temperature); Serial.println(" °C"); delay(1000); // 1초간 대기 } |
DS18B20를 통해 온도를 측정하는 코드를 실행해 보겠습니다. (소스코드는 첨부파일 제공해 드리겠습니다.)
우선 [스케치] -> [ 라이브러리 포함하기] -> [라이브러리 관리]에서 "OneWire"를 검색한후 스크롤을 내려 One wire 라이브버리를 다운받아 주세요.
#include <OneWire.h> #include <DallasTemperature.h> #define ONE_WIRE_BUS 2 // DS18B20 연결된 핀 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); void setup() { Serial.begin(9600); sensors.begin(); } void loop() { sensors.requestTemperatures(); float temperatureC = sensors.getTempCByIndex(0); // 첫 번째 센서의 온도 읽기 Serial.print("Temperature: "); Serial.print(temperatureC); Serial.println(" C"); delay(1000); } |
▶2. 하드웨어 연결 및 동작 확인
온도의 변화를 줌에 따라 온도가 변화함을 확인할 수 있습니다.
이상으로 아두이노에서 LM35 및 DS18B20을 다루는 방법에 대한 설명을 마치겠습니다.
감사합니다.
'Embedded System > Arduino Board' 카테고리의 다른 글
[Arduino] 아두이노 가변저항[Potentiometer] (볼륨 저항) 사용하기 (14) (0) | 2024.07.08 |
---|---|
[Arduino] 아두이노 초음파 거리센서 ( HC-SR04 ) 사용하기 (13) (0) | 2024.06.10 |
[Arduino] 아두이노 포토레지스터 ( CDS ) 사용하기 (11) (0) | 2024.06.08 |
[Arduino] 아두이노 슬라이드 스위치로 LED제어 (10) (0) | 2024.06.07 |
[Arduino] 아두이노 택트 스위치로 LED제어 (9) (1) | 2024.06.07 |