Аналоговый датчик температуры TMP36, Подключение к Arduino

Датчик температуры на выходе которого формируется напряжение пропорционально температуре по шкале Цельсия. Датчик функционально схож с LM35 но не является его полным аналогом.

Характеристики датчика:

  • Диапазон температур: −40°C — +125°C
  • Точность температуры: типичная, в диапазоне -40°C … +125°C, ±2°C , при температуре 25°C: ±1°C.
  • Линейность: ±0.5°C.
  • Разрешение: 10.0 mV/°C
  • Напряжение на выходе при 25°C: 750мВ.
  • Напряжение питания: 2,7В — 5,5В.

Купить:

на Али: тут.


Особенности работы с датчиком:

Как и у похожего аналогового датчика LM35, на выходе формируется напряжение пропорционально температуре по шкале Цельсия, величина напряжения также 10.0 mV на 1°C, но в отличии от LM35, где отсчет начинается от 0°C и при 25°C датчик формирует напряжение 250mV, TMP36 ведет отсчет от -50°C, а при 25°C на выходе датчика будет 750mV.

TMP36 лишен основного недостатка LM35 при совместном использовании с Arduino, невозможность измерения отрицательных температур, но недостатки все таки пристукивают. При использовании встроенного в микроконтроллер источника опорного напряжения 1,1 вольт, максимальная температура датчика ограниченна 60°C но это всё еще пригодно для домашних или уличных термометров.

Крайне не рекомендуется использовать в качестве опорного напряжения для АЦП, напряжение питания или напряжение от встроенного стабилизатора на 3,3 вольта, подключенное на вход AREF, стабильность тех напряжений крайне низкая, что будет негативно сказываться на точности показаний датчика. Правильным решением будет использование встроенного источника опорного, а если верхняя граница в 60°C не достаточна, либо внешний источник опорного, например MAX6125, либо использовать другой, более подходящий, датчик температуры.


Схема подключения датчика:

Аналогична LM35.


Софт:

Датчик не требует сторонних библиотек, код с использованием встроенного источника опорного ниже. Код актуален для плат на контроллере ATmega328.


 /// истоки тут https://learn.adafruit.com/tmp36-temperature-sensor/using-a-temp-sensor
 
#define sensorPin A0                            // вход датчика
 
void setup()
{
  Serial.begin(9600);   
  // включаем встроенный источник опорного 1,1 вольт
  analogReference(INTERNAL);         
}
 
void loop()                      
{
 //забераем данные с аналогового входа
 int reading = analogRead(sensorPin);  
 
 // конвертируем в вольты с учетом встроенного источника опорного
 float voltage = (reading * 1.1) / 1024.0; 
 
 // переводим в градусы
 float temperatureC = (voltage - 0.5) * 100 ;  
                                                
  // отправляем в монитор порта
 Serial.print(voltage); 
 Serial.println(" volts");                                              
 Serial.print(temperatureC); 
 Serial.println(" degrees C"); 
 
 delay(1000);                                 //ждем секунду
}

код из видео с двумя датчиками.
float tempC;
int reading;
 
void setup()
{
  analogReference(INTERNAL);        // включаем внутрений источник опорного 1,1 вольт
  Serial.begin(9600);
}

void loop()
{
        // получаем значение с аналогового входа A0
  int reading = analogRead(A0);  
  float voltage = (reading * 1.1) / 1024.0;
  float temperatureC = (voltage - 0.5) * 100 ;
  
  tempC = analogRead(A1) / 9.31;          // переводим в цельсии 
  
  Serial.print(" LM35: ");
  Serial.print(tempC);            // отправляем в монитор порта
  Serial.print("  TMP36: ");
  Serial.println(temperatureC);            
    
  delay(1000);                     // ждем секунду
}



Видео: