초급 예제

누구나 쉽게 따라해볼 수 있는 쉬운 예제들입니다. 가볍게 도전~!

디지털 온도 센서 사용하기

2014-08-06 13:29:27

개요

전 컨텐츠에서 온도센서(TMP36)에 사용법에 대해 알아 보았습니다. 이 컨텐츠에서는 디지털 온도 센서(DS18B20)를 사용하여 현재 온도(섭씨, 화씨)를 측정해 봅시다.

디지털 온도센서는 I2C프로토콜을 사용하여 온도값을 받아 옵니다.

 

미리 보기 동영상

디지털 온도 센서

 - 온도 센서로는 DS18B20 센서를 사용 했습니다.
 - 55 ℃ ~ +125℃, 정확도 ±0.5℃ (-10 ℃ ~ +85℃내) 입니다.
 - 센서를 사용하기 위한 onewire 라이브러리는 http://playground.arduino.cc/Learning/OneWire 여기에 있습니다. 

시작 전 개념 이해하기

 - 센서
 - 풀업 저항
 - 섭씨에서 화씨 전환
 - 아두이노 라이브러리 사용하기
 - I2C

부품 목록

NO 부품명 수량 상세설명
1 오렌지보드 1 아두이노
2 디지털 온도 센서(DS18B20) 1 온도 센서
3 저항 4.7KΩ 1 저항
4 브레드보드 1 브레드보드
5 점퍼케이블 4 점퍼케이블
부품명 아두이노 우노 R3 디지털 온도 센서 저항 4.7KΩ 브레드보드 점퍼케이블
파트 x1 x1 x1 x1 x4

Hardware making

회로도

브레드보드 레이아웃



센서 연결



 
센서 핀 아두이노 핀
- GND
+ 5V
S D2



소프트웨어 coding


#include <OneWire.h>  // 디지털 온도 센서를 사용하기 위해서는 이 라이브러리를 사용해야 한다.

OneWire ds(2); // 2번 핀에 연결된 OneWire 개체 생성

void setup() {
  Serial.begin(9600);
}

void loop() {
  byte i;
  byte present = 0;

  byte data[12];
  byte addr[8];
  float Temp;

  if (!ds.search(addr)) {
    ds.reset_search();
    return;
  }
  
  ds.reset();
  ds.select(addr);
  ds.write(0x44,1); // start conversion, with parasite power on at the end
  delay(1000);

  present = ds.reset();
  ds.select(addr);
  ds.write(0xBE); // Read Scratchpad

  for (i = 0; i < 9; i++) { // 센서에서 가져온 값을 정리하고 난 후 배열에 순서대로 넣어 둔다.
    data[i] = ds.read();
  }
Temp=(data[1]<<8)+data[0]; Temp=Temp/16;
// 위에서 받아온 값중에 1번 배열에 있는 값을 256배(2의 8승) 해주고 0번 배열에 있는 값과 더해준다.
// 그 값을 16으로 나누면 섭씨 온도가 된다. Serial.print("C="); Serial.print(Temp); Serial.print(", "); // 섭씨 출력
Temp=Temp*1.8+32;
// 섭씨를 화씨로 변환 Serial.print("F="); Serial.print(Temp); Serial.println(" ");
// 화씨 출력 }
 

소프트웨어 설명

 * 이 코드는 스케치를 사용하여 작성 / 업로드 합니다. 스케치에 대한 사용법은 링크를 참고하시기 바랍니다.
#include <OneWire.h>  // 디지털 온도 센서를 사용하기 위해서는 이 라이브러리를 사용해야 한다.

OneWire ds(2); // 2번 핀에 연결된 OneWire 개체 생성
디지털 온도 센서를 사용하기 위해서는 OneWire 라이브러리를 사용해야 한다.
OneWire 라이브러리를 include 시키고 2번 핀과 연결된 개체를 하나 만든다.

 
  for (i = 0; i < 9; i++) { // 센서에서 가져온 값을 정리하고 난 후 배열에 순서대로 넣어 둔다.
    data[i] = ds.read();
  }
Temp=(data[1]<<8)+data[0]; //take the two bytes from response relating to temperature Temp=Temp/16;//divide by 16 to get pure celcius readout

  Temp=Temp*1.8+32;
// 섭씨를 화씨로 변환
 
  // 위에서 받아온 값중에 1번 배열에 있는 값을 256배(2의 8승) 해주고 0번 배열에 있는 값과 더해준다.
// 그 값을 16으로 나누면 섭씨 온도가 된다.
 
센서에서 저장된 값을 정리 한 후 배열에 넣는다. 이 값에서 1번 배열에다가 256배를 해준 후 0번 배열값과 더해준 다음 16으로 나누면 섭씨가 된다. 또 섭씨 x 1.8 _+32을 하여 화씨를 구해준 뒤 출력 하면 됩니다.

기술문서 

  • 부품목록
  • 회로도
  • 브레드보드 레이아웃
  • 소스 코드

kocoafabeditor

항상 진취적이고, 새로운 것을 추구하는 코코아팹 에디터입니다!

중급, 디지털 온도 센서, 아두이노