본문 바로가기

Embedded System/Arduino Board

[Arduino] 아두이노 온도센서 ( LM35, DS18B20 ) 사용하기 (12)

반응형

 

안녕하세요.

이번 포스트에서는 외부 온도를 받아들이는 온도센서(LM35, DS18B20)에 대해 알아보겠습니다.

LM35와  DS18B20은 교육용으로 가장 많이 사용하는 온도센서입니다.


 

LM35는 섭씨 온도(Celsius)를 측정하는 정밀 온도 센서로, 다양한 전자 프로젝트와 산업 응용 분야에서 사용됩니다. 이 센서는 온도에 비례하는 아날로그 전압 출력을 제공하여 쉽게 온도를 측정할 수 있습니다. LM35는 다른 온도 센서와 비교하여 높은 정확도와 선형 출력을 제공하는 것이 특징입니다.

생긴것(Package Type)은 우리가 흔히 생각하는 트랜지스터의 형태와 동일합니다.

※1.  온도센서 ( LM35, DS18B20 ) 제어

1. LM35의 원리

LM35는 아날로그 온도 센서로, 온도 변화에 따라 전압 출력을 생성합니다.

작동 원리:

  1. 반도체 기술: LM35는 반도체 재료로 구성되어 있으며, 온도에 따라 전기적 특성이 변하는 반도체 소자를 사용합니다.
  2. 출력 전압: LM35는 섭씨 온도에 비례하여 아날로그 전압을 출력합니다. 출력 전압은 1°C당 10mV입니다. 예를 들어, 25°C에서는 250mV의 전압을 출력합니다.
  3. 선형 관계: 출력 전압과 온도는 선형 관계를 가지므로, 출력 전압을 읽어서 간단히 온도를 계산할 수 있습니다.

회로 구성: LM35는 3개의 핀이 있으며, 간단한 전원 공급과 출력 핀으로 구성됩니다.

  • Vout (출력 핀): 온도에 비례하는 전압을 출력합니다.
  • Vcc (전원 핀): +4V에서 +30V의 전원을 공급합니다.
  • GND (접지 핀): 접지와 연결됩니다.

 

 

 

2. DS18B20의 원리

DS18B20은 디지털 온도 센서로, 온도 값을 디지털 신호로 출력합니다.

작동 원리:

  1. 디지털 측정: DS18B20은 내부적으로 온도에 따라 변하는 반도체 소자의 특성을 이용하여 온도를 측정합니다. 측정된 온도는 디지털 데이터로 변환됩니다.
  2. 1-Wire 프로토콜: DS18B20은 1-Wire 통신 프로토콜을 사용하여 데이터 전송을 합니다. 이 프로토콜은 데이터 라인 하나로 전원 공급과 데이터 통신을 동시에 할 수 있는 특징이 있습니다.
  3. 고유 ID: 각 DS18B20 센서는 64비트의 고유 ID를 가지고 있어 여러 센서를 하나의 데이터 라인에 연결할 수 있습니다.
  4. 고해상도: DS18B20은 9비트에서 12비트의 해상도로 온도를 측정할 수 있습니다.

회로 구성: DS18B20은 3개의 핀이 있으며, 전원 공급과 데이터 핀으로 구성됩니다.

  • Vcc (전원 핀): +3.0V에서 +5.5V의 전원을 공급합니다.
  • GND (접지 핀): 접지와 연결됩니다.
  • DQ (데이터 핀): 데이터 통신과 전원 공급을 담당합니다. 풀업 저항(4.7kΩ)이 필요합니다.

 

3. 비교 요약

  1. 출력 방식:
    • LM35: 아날로그 전압 출력.
    • DS18B20: 디지털 데이터 출력.
  2. 작동 방식:
    • LM35: 온도에 따라 변하는 반도체 소자의 전압 출력을 이용.
    • DS18B20: 온도에 따라 변하는 반도체 소자의 특성을 디지털 데이터로 변환하여 1-Wire 프로토콜로 전송.
  3. 전원 공급:
    • LM35: +4V에서 +30V.
    • DS18B20: +3.0V에서 +5.5V.
  4. 통신 방식:
    • LM35: 아날로그 신호로 직접 읽음.
    • DS18B20: 1-Wire 디지털 통신.

 

 

 

※2. LM35 Wiring (배선 연결)

LM35는 아날로그 전압으로 온도를 출력합니다. ( DS18B20은 제가 따로 가지고 있지않아 테스트를 하지 못하겠네요... 배선도와 코드만 제공해 드리겠습니다.)

 

LM35

DS18B20

 

 

※3. 소스코드 및 동작

온도를 읽어 아두이노의 Serial Monitor에 출력하는 코드를 실행해 보겠습니다.

1. 소스코드

LM35를 통해 온도를 측정하는 코드를 실행해 보겠습니다. (소스코드는 첨부파일 제공해 드리겠습니다.)

12_LM35_Temperature.ino
0.00MB

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을 다루는 방법에 대한 설명을 마치겠습니다.

감사합니다.

 

반응형