중급 예제

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

Tmp006 Breakout 보드

2016-10-10 17:54:42

개요

 

안녕하세요! 코코아팹입니다. 

일교차 큰 요즘입니다. 이런 날씨일수록 감기에 걸리기 십상인데요.

감기에 걸리기 딱 좋은 요즘 날씨에 자주 사용되는 물건은 뭐가 있을까요? 

바로 온도계(체온계)가 아닐까 싶습니다. 오늘 소개드릴 튜토리얼도 '온도'와 관련된 센서인데요.

이번 튜토리얼에서 사용해 볼 센서는 바로 비접촉형 온도센서인 tmp006입니다.

자 그럼 tmp006에 대해 알아보도록 하겠습니다.

 

tmp006이란?

이미지 출처 : sparkfun

 

 

 

Texas Instrument사에서 개발한 tmp006은 접촉을 하지 않고 원거리에 있는 물체로부터 온도를 측정할 수 있는 온도 센서입니다.

Tmp006은 물체에서 방출되는 적외선 에너지를 흡수하기 위해 열전퇴를 사용하며, 열 전퇴 전압에서의 해당 변화를 통해서 물체의 온도를 측정하는 일종이 열전퇴 온도 센서입니다.

Tmp006의 열전퇴는 각 각의 열전대로 구성되어 있으며, 열을 감지했을 때 전압을 발생시킨다. 발생된 총 전압은 센서의 레지스터에 수치로서 저장되며, 이 수치는 물체의 온도를 측정하는데 사용됩니다.

가격은 한화로 18,000원정도에 구매하실 수 있으며, 국내에서도 구매 가능합니다.

 

* 열전퇴(thermopile, 熱電堆) : 

열전대의 재료를 다수직렬로 접속하여 약간의 열입력으로부터 큰 기전력 출력을 도출할 수 있게 한 것을 열전기 파일이라 하고, 열전기 파일은 적외선의 검출기열류 센서와 같이 아주 적은 온도차와 온도 변화를 검출하는 데 쓰이고 있다.

 

이미지 및 내용 출처 : 네이버 지식 백과

 

 

 

Tmp006 사양

 

Tmp006의 경우 낮은 전압과 낮은 전력 소비로 비교적 넓은 범위의 온도를 측정할 수 있다는 장점이 있습니다.

센서(chip)와 I2C 통신을 통해 사용 가능하며, 하나의 I2C 버스로 최대 8개의 Tmp006 센서를 사용할 수 있습니다.

 

- 측정 온도 범위 : -40°C ~ +125°C

- 구동 전압 : 3.3V ~ 5V

- 센서 전압 : 7µV/°C

- 공급 전류 : 240µA

 

 

 

부품 목록

NO 부품명 수량 상세 설명
1 오렌지보드 & USB 케이블 1 Arduino R3 Compatible
2 Tmp006 Breakout 보드 1  
3 브레드보드  1  
4 점퍼케이블 4 male to male 

 

부품명 오렌지보드 Tmp006 브레드보드 점퍼케이블
부품 사진

 

 

 

 

 

 

 

하드웨어 메이킹

 

브레드보드 레이아웃

 

*아래 그림에서 보이는 tmp006 breakout board는 Adafruit사의 제품입니다. 

sparkfun사의 제품과 핀 배치가 다름으로 아래 표를 참고하여 와이어링을 진행해주시면 됩니다.

 

VCC 5V (또는 3.3V)
GND GND
SCL A5 (또는 SCL, 아두이노 UNO 기준)
SDA A4 (또는 SDA, 아두이노 UNO 기준)

 

 

 

회로도(스키메틱)

 

 

 

 

 

여러 개의 Tmp006 센서 사용하기

 

위에서도 언급했지만 tmp006은 I2C 통신을 이용합니다.

Tmp006의 경우 하나의 I2C라인(Bus)을 이용해 최대 8개의 센서까지 사용이 가능합니다.

이 경우 Adress 핀(ADR0, ADR1)을 이용해 각 각 다른 I2C Adress를 사용할 수 있게 됩니다.

ADR1과 ADR0핀에 아무것도 연결하지 않을 경우는 두 핀이 GND와 연결된 것과 같기때문에 0x40 Adress를 갖게 됩니다. 

ADR1, ADR0 연결에 따른 I2C Adress는 아래 표를 참고하면 됩니다.

 

 

- I2C 주소 테이블

ADR1 ADR0 I2C Adress
GND GND 0x40
GND VCC 0x41
GND SDA 0x42
GND SCL 0x43
VCC GND 0x44
VCC VCC 0x45
VCC SDA 0x46
VXX SCL 0x47

 

* 만약 2개의 센서를 사용할 경우 하나의 tmp006의 경우 ADR1과 ADR0을 각 각 GND에 연결하고, 나머지 센서의 ADR1을 GND에 ADR0을 VCC에 연결해주게 되면, 첫번째 센서는 0x40을 두번째 센서는 0x41 Adress를 사용하게 되는 것 입니다. 

 

 

 

 

 

 

소프트웨어 코딩

 

tmp006을 사용하기 위해서는 아래 라이브러리를 추가해야 합니다. 

(라이브러리를 추가하는 방법은 본문의 '관련 튜토리얼'을 참고해주시면 됩니다)

아래 링크를 통해 라이브러리를 다운로드 받으시면 됩니다. 

 

- tmp006 라이브러리

- sensor 라이브러리

 

/***************************************************
  이 예제는 tmp006을 활용해 온도를 측정해 볼 수 있는 예제입니다.

  원문 링크는 아래와 같습니다(thanks to adafruits)
  ----> https://www.adafruit.com/products/1296

  tmp006(breakout module)의 경우 I2C 통신을 사용합니다.

  Written by Limor Fried/Ladyada for Adafruit Industries.
  Limor Fried(adafruit industries)가 작성하였고, kocoafab에서 용도에 맞게 번역 작업을 진행하였습니다.
 ****************************************************/

// library 추가
// - sensor
// - tmp006
// - wire
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include "Adafruit_TMP006.h"


/****************************************************
연결 방법

1. VCC -> 5V 또는 3.3V
2. GND -> GND
3. SCL -> A5
4. SDA -> A4
****************************************************/

// TMP006 객체 선언
// 여러 개의 센서 사용시 Adafruit_TMP006(I2C Adress)로 다중 선언 가능
//
Adafruit_TMP006 tmp006;


void setup() {
  // 9600bps의 속도로 시리얼 통신 시작
  Serial.begin(9600);
  // 시리얼 모니터에 Adafruit TMP006 example 출력
  Serial.println("Adafruit TMP006 example");

  // tmp.begin(TMP_CFG_1SAMPLE) 또는 2SAMPLE / 4SAMPLE / 8SAMPLE로 사용 가능
  // 높은 속도(낮은 정확성)로의 추출을 원할 경우 16SAMPLE로도 사용 가능
  // 4초당 16 SAMPLE 추출

  // tmp006이 동작하지 않을 경우(시작되지 않을 경우) 시리얼 모니터에 No sensor found 출력
  if (! tmp006.begin()) {
    Serial.println("No sensor found");
    while (1);
  }
  Serial.println("Send s to enter sleep mode, or w to wake up.  Measurements are not updated while asleep!");
}

void loop() {
  // sleep & wake 커멘드 (시리얼 모니터를 통해 전송)
  // s -> sleep mode : 동작 대기 상태
  // w -> wake mode : 동작 실행 상태
  while (Serial.available() > 0) {
    char c = Serial.read();
    if (c == 'w') {
      Serial.println("Waking up!");
      tmp006.wake();
    }
    else if (c == 's') {
      Serial.println("Going to sleep!");
      tmp006.sleep();
    }
  }

  // tmp006 모듈을 통해 온도를 읽어와 objt에 저장합니다.
  // 시리얼 모니터에 온도값(objt)을 출력합니다.
  float objt = tmp006.readObjTempC();
  Serial.print("Object Temperature: "); Serial.print(objt); Serial.println("*C");

  // 직접 회로의 온도(tmp006의 온도)를 읽어와 diet에 저장합니다.
  // 시리얼 모니터에 직접 회로 온도값(diet)을 출력합니다.
  float diet = tmp006.readDieTempC();
  Serial.print("Die Temperature: "); Serial.print(diet); Serial.println("*C");

  // 4초 대기
  delay(4000);
}

 

 

 

 

소스 코드 업로드가 완료되었다면, 시리얼 모니터 창을 통해서 온도 값이 잘 측정되는지 살펴보도록 하겠습니다. 

시리얼 입력 창에 s 입력 : sleep mode -> 온도 측정을 대기합니다. 따라서 온도를 측정하지 않기때문에 온도 값이 변화하지 않는 것을 확인할 수 있습니다. 

시리얼 입력 창에 w 입력 : wake mode -> 온도를 측정합니다. 따라서 온도 값이 변화하는 것을 확인할 수 있습니다. 

물체로부터 측정된 온도와 직접 회로에 대한 온도 값이 정상적으로 출력되는 것을 확인할 수 있습니다. 

 

 

 

 

 

마치며...

 

이로서 비접촉형 온도센서에 대해 알아보고, 간단한 실습을 진행해보았습니다. 

비접촉형 온도 센서를 가지고 어떤 재미난 프로젝트를 만들어 볼 수 있을까요? 

아이디어의 열쇠는 바로 '비접촉'이 아닐까 싶습니다. 

일상 생활 속에서는 직접 손이나 온도계를 대지 않고 실시간으로 온도를 측정해야 할 상황이 분명 존재합니다. 

그런 상황 속에서 현재의 불편함(문제점)을 찾아보고, 비 접촉형 센서를 이용해 창의적으로 문제를 풀어가는 것이 중요하지 않을까 생각이 됩니다. 

가령 온도는 눈으로 쉽사리 보이지 않기 때문에 무심코 뜨거운 물체를 잡아 화상을 입는 경우가 많죠? 화상 방지 장갑을 만들어보는 것도 좋은 생각이지 않을까요? 

 

tmp006에 대한 튜토리얼은 이상으로 마치겠습니다.

메이커 분들이 tmp006을 이용해 어떤 재미난 프로젝트들을 제작하실지 기대하고 있겠습니다!

kocoafabeditor

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

tmp006, 아두이노, 오렌지보드