반응형

본 블로그에서는 이제까지 LM35, DHT11, DHT22 등의 온도 또는 온습도 센서를 이용해 온도 및 습도를 측정하는 방법을 알아봤었다. 하지만 넓은 범위의 온도를 측정하기에는 부족함이 있었다. 물론 -40~80도 까지 측정이 가능한 DHT22 가 있지만 너무 비싸다. 저렴한 LM35라는 온도센서도 있지만 0~100도 까지만 측정이 가능하여 영하는 측정이 아예 불가능하다. 


이미지 출처 : sparkfun.com


그래서 찾아보니 TMP36 이라는 센서가 있다. 겉 모습은 LM35와 같은 트랜지스터 모양이다. 온도에 따른 전압의 변화(1°C 당 10mV)를 가지고 온도를 측정한다. 알리익스프레스에서 개 당 1천원 정도의 가격으로 구입이 가능하며 −40°C ~ +125°C 까지 측정이 가능하니 165도의 넓은 범위의 온도 측정이 가능하다. 동작전압은 2.7V~5.5V 이다. 저렴하고 온도 측정의 범위가 넓은 괜찮은 센서인 것 같다.


다만 정밀도는 조금 떨어져서 상온 25°C 근처에서는 ±1°C 정도의 괜찮은 오차를 보이지만 그 범위를 벗어나면 ±2°C 의 오차가 있다고 생각하면 된다. 그러므로 아주 정밀한 온도의 측정이 필요한 곳에는 사용하지 않는 것이 좋으며 그런 곳에는 DHT22 나 다른 정밀한 센서를 사용하면 된다.


■ TMP36 데이터시트

데이터시트에 적혀 있는 TMP36의 특징은 다음과 같으며 데이터시트 pdf 파일도 첨부한다.


FEATURES

  • Low voltage operation (2.7 V to 5.5 V)

  • Calibrated directly in °C

  • 10 mV/°C scale factor (20 mV/°C on TMP37)

  • ±2°C accuracy over temperature (typ)

  • ±0.5°C linearity (typ)

  • Stable with large capacitive loads

  • Specified −40°C to +125°C, operation to +150°C

  • Less than 50 µA quiescent current

  • Shutdown current 0.5 µA max

  • Low self-heating

  • Qualified for automotive applications


TMP35_36_37.pdf



이제 실제로 TMP36을 아두이노와 연결해서 온도를 측정해 보자


■ TMP36과 아두이노와의 연결


먼저 TMP36의 Pin 에 대해서 알아야 한다.


3개의 핀이 있는데 각 핀의 구성은 위와 같다. 전원공급(VCC)는 2.7V~5.5V 까지 다양한 전압이 연결이 되지만 여기서는 아두이노 5V 에 연결 하였으며 Signal 은 아두이노 Analog 0 번(A0)에 연결 하였다.


TMP36.fzz



 



■ 소스


소스에 대한 설명은 주석에 상세하게 적었으므로 참고하면 된다. 간단하게 TMP36의 Signal 핀의 온도에 따른 전압의 변화를 읽어 섭씨온도를 구하고 이를 화씨로도 변환하여 시리얼모니터에 표시해 주는 소스이다. 섭씨 온도 구하는 공식은 아래와 같다.


온도(℃) = (((TMP36출력값 x 5.0) / 1024.0) - 0.5) x 100


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 
int sensorPin = 0//Analog 0 번에 센서핀 연결
 
void setup()
{
  Serial.begin(9600);  //PC와의 시리얼 통신 속도 설정
}
 
void loop()
{
 //전압의 변화값을 센서핀으로 부터 읽음
 int reading = analogRead(sensorPin);  
 
 //전압값을 읽음, 센서에 공급되는 전압이 5V면 읽은값x5.0 이고 3.3V 이면 3.3을 곱해준다
 float voltage = reading * 5.0;
 voltage /= 1024.0
 
 //시리얼 모니터에 전압값 출력
 Serial.print(voltage); Serial.println(" volts");
 
 //전압값(mV)으로 온도 구함 (섭씨) , 시리얼 모니터 출력
 float temperatureC = (voltage - 0.5* 100 ;
 Serial.print(temperatureC); Serial.println(" degrees C");
 
 //섭씨를 화씨로 변환해서 시리얼 모니터 출력
 float temperatureF = (temperatureC * 9.0 / 5.0+ 32.0;
 Serial.print(temperatureF); Serial.println(" degrees F");
 
 delay(1000);   //1초 간격으로 측정
}
cs


위와 같이 A0 를 통해서 측정된 전압과 전압에 따라 계산된 온도가 표시된다.



TMP36은 저렴하게 범위가 넓은 온도를 측정하기에 좋은 센서 같다. 

반응형

+ Recent posts