중급 예제

약간은 익숙하시거나 익숙해지셨나요? 그렇다면 조금더 깊이 다뤄볼까요?

열적외선 온도 센서

2014-11-05 11:28:12

개요

아두이노에서 주변의 온도를 측정하려 할때
'온도 센서'를 통해 주변 온도에 따른 변화를 측정하게 됩니다.
이때 사용되는 '온도 센서'는 작동방식에 따라 다양하게 존재하는데요,
일반적으로 많이 사용되는 몇가지 소자를 살펴보겠습니다.


사진: 서미스터 (Thermister)

'서미스터'는 저항기의 일종으로,
온도에 따라 물질저항이 변화하는 성질을 이용한 전기적 장치입니다.
열가변저항기라고도 하며, 주로 회로전류가 일정 이상으로 오르는 것을 방지하거나,
회로의 온도를 감지하는 센서로써 이용됩니다.


사진: TMP 36

'TMP 36'은 IC의 일종으로 반도체형 온도센서입니다.
측정 범위가 넓고 사용이 간단하며, 영하의 온도까지 측정이 가능한 것이 특징입니다.
다소 제한적인 '서미스터'보다 널리 사용되는 소자입니다.



사진 : 열적외선 온도 센서 - MLX90614

이번 예제에서 사용할 '열 적외선 온도 센서'는 
피사체에서 방사되는 열 적외선을 감지하여 온도를 측정하는 모듈로,
비접촉 방식의 온도 측정이 가능하다는 특징이 있습니다.

 

 


사진 : 열적외선 온도계

이와 같은 열적외선 온도계에 사용되거나,


출처 : 공항 검역 - news.investors.com/PhotoPopup열적외선 카메라에 삽입되어, 공항에서 검역 장치로도 사용되고 있습니다.


그럼 본격적으로 실습을 통해 열적외선 온도 센서를 이용하여
주변 대기의 온도를 측정해 보겠습니다.

 

 

 

부품목록

NO 부품명 수량 상세설명
1 오렌지 보드 1 아두이노 호환보드 
2 열적외선 온도 센서 1 MLX90614
3 점퍼케이블 4 '암-수' 핀 점퍼케이블 필요

 

부품명 오렌지 보드 열적외선 온도 센서 점퍼케이블
파트 x1 x1 x4

 

하드웨어 Making

회로도

브레드보드 레이아웃
 


연결 방법

IR Temp 아두이노
VCC 5V
GND GND
SDA A4
SCL A5

소프트웨어 Coding

I2C 통신을 위해 라이브러리를 다운받아 설치합니다.
라이브러리 다운받기 

아래의 코드를 아두이노에 업로드 합니다.

#include  // i2cmaster 라이브러리를 불러옵니다.


void setup(){
	Serial.begin(9600);//시리얼 통신을 준비합니다.
	Serial.println("Setup...");// 초기 설정 상태를 시리얼 모니터상에 출력합니다.
	
	i2c_init(); //i2c 버스의 초기값을 설정합니다.
	PORTC = (1 << PORTC4) | (1 << PORTC5);// 풀업을 사용합니다.
}

void loop(){
    int dev = 0x5A<<1;
    int data_low = 0;
    int data_high = 0;
    int pec = 0;
    
    i2c_start_wait(dev+I2C_WRITE);
    i2c_write(0x07);
    
    // 값을 읽어들입니다.
    i2c_rep_start(dev+I2C_READ);
    data_low = i2c_readAck(); //1바이트를 읽어들이고 전송 상태를 송신합니다.
    data_high = i2c_readAck(); //1바이트를 읽어들이고 전송 상태를 송신합니다.
    pec = i2c_readNak();
    i2c_stop();
    
    //This converts high and low bytes together and processes temperature, MSB is a error bit and is ignored for temps
    double tempFactor = 0.02; // 0.02 degrees per LSB (measurement resolution of the MLX90614)
    double tempData = 0x0000; // zero out the data
    int frac; // data past the decimal point
    
    // This masks off the error bit of the high byte, then moves it left 8 bits and adds the low byte.
    tempData = (double)(((data_high & 0x007F) << 8) + data_low);
    tempData = (tempData * tempFactor)-0.01;
    
    float celcius = tempData - 273.15;//현재 측정된 tempData를 섭씨로 변환합니다.
    float fahrenheit = (celcius*1.8) + 32;//현재 측정된 tempData를 화씨로 변환합니다.

    Serial.print("Celcius: ");//섭씨를 시리얼모니터에 출력합니다.
    Serial.println(celcius);

    Serial.print("Fahrenheit: ");//화씨를 시리얼모니터에 출력합니다.
    Serial.println(fahrenheit);

    delay(1000); // 1초 동안 대기합니다.
}

 

kocoafabeditor

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

열적외선온도센서, 아두이노, 오렌지보드