본문 바로가기

Arduino/[2] Arduino Module

[Arduino Module] #19. 디지털 온도센서 모듈

728x90
반응형

디지털 온도 센서

 - 온도 센서로는 DS18B20 센서를 사용한다.
 - 55 ℃ ~ +125℃, 정확도 ±0.5℃ (-10 ℃ ~ +85℃내)이다.

 

디지털 온도 센서는 I2C 통신을 이용하여 온도 값을 받아들여며, 온도 센서에 있는 DS18B20 모듈을 사용하므로 라이브러리가 필요하다.

출처: https://www.kocoafab.cc/tutorial/view/72

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

라이브러리 다운

아두이노 > 툴 > 라이브러리 관리

 

위와 같은 경로로 들어가면 라이브러리 매니저 화면이 뜨는데, 이때 18B20을 검색한다.

18B20 검색결과. 필자는 이미 설치를 하여 INSTALLED가 뜬다.

해당 라이브러리를 다운하면 <OneWire.h> 라이브러리를 전체 다운로드 할 것인지 뜨는데 이때 ALL DOWMLOAD를 누른다.

 

oneWire 라이브러리는 온도를 측정할 때 추가해야 하는 라이브러리로 디지털 온도 센서, 방수형 온도 센서와 같은 센서에서 사용할 수 있다. 그러면 아래의 TMP 헤더 파일을 이용한 온도 파악 코드를 작성할 준비가 끝난다.

코드

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

OneWire ds(2); //2번 핀에 연결된 OneWire 개체 설정 

void setup() {
  Serial.begin(9600); //시리얼 통신 속도를 9600으로 설정
}

void loop() {
  byte i;
  byte present = 0;
  byte data[12]; //data 저장 공간 설정
  byte addr[8]; //addr 저장 공간 설정 
  float Temp; //Temp 변수 설정

  if (!ds.search(addr)) {
    ds.reset_search();
    return;
  }
  //no more sensors on chain, reset search

  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;


  Serial.print("C=");
  Serial.print(Temp);
  Serial.print(", ");
  //섭씨 온도 출력

  Temp=Temp*1.8+32; //섭씨를 화씨로 변환

  Serial.print("F=");
  Serial.print(Temp);
  Serial.println(" ");
  //화씨 온도 출력
}

코드 설명

OneWire ds(2); //2번 핀에 연결된 OneWire 개체 설정 

oneWire 라이브러리의 객체를 설정해야 합니다. 2번 줄의 코드와 같이 'oneWire ds(2): 와 같이 객체를 설정하면서 디지털 온도 센서와 연결된 핀을 작성하여 설정하도록 합니다.

 

  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

위 과정은 디지털 온도 센서 값을 읽어 오는 코드로 입력된 아날로그 신호를 디지털 신호로 변경(conversion)을 한다.

 

  for (i = 0; i < 9; i++) { 
    data[i] = ds.read();
  }

  Temp=(data[1]<<8)+data[0];
  Temp=Temp/16;

 

for 구문을 이용해 센서에서 읽어 들인 값을 data 배열 안에 저장하도록 설정하는 코드이며 'for(i= 0; i <9: it+){datalil = dt.read(:)'의 코드는 센서에서 읽어 들인 값을 data 배열 안에 저장하도록 설정한다.

 

아래의 수식은 섭씨온도값 형식으로 계산하기 위한 코드이다.

  Temp=(data[1]<<8)+data[0];
  Temp=Temp/16;

 

아래 코드는 시리얼 모니터를 통해 섭씨온도를 출력하고 화씨온도를 계산하여 출력하는 과정이다.

  Serial.print("C=");
  Serial.print(Temp);
  Serial.print(", ");
  //섭씨 온도 출력

  Temp=Temp*1.8+32; //섭씨를 화씨로 변환

  Serial.print("F=");
  Serial.print(Temp);
  Serial.println(" ");
  //화씨 온도 출력
728x90
반응형
댓글