Аналоговый датчик температуры TMP36 компании Analog Devices позволит вам легко получать достаточно точные показания температуры в диапазоне от -40 до +150°C. К тому же его очень просто подключить к Arduino.
Датчик температуры TMP36
Этот датчик температуры является твердотельным, то есть для измерения температуры в нем не используется ртуть как в термометрах или термисторы (резисторы, чувствительные к температуре).
Вместо этого в нем используется тот факт, что при возрастании температуры напряжение на диоде возрастает в известной пропорции. Технически, на самом деле это падение напряжения между базой и эмиттером (Vbe) транзистора. После усиления такого изменения напряжения легко получить аналоговый сигнал, который будет прямо пропорционален температуре.
Датчик температуры TMP36
Поскольку эти датчики не имеют движущихся частей, они точны, никогда не изнашиваются, не нуждаются в калибровке и могут работать в жестких условиях окружающей среды. Кроме того, они очень дешевые и очень просты в использовании.
Выходной диапазон напряжения TMP36 составляет от 0.1В (-40°C) до 2.0В (150°C), но после 125°C точность измерения уменьшается. Подаваемое напряжение от 2.7В до 5.5В, потребление тока всего 0.05 мА.
Как измерять температуру
Использовать TMP36 для измерения температуры достаточно просто, нужно соединить его левый контакт с напряжением 2.7-5.5В, а правый с землей. Тогда на среднем выводе будет присутствовать напряжение, линейно пропорциональное температуре.
Датчик температуры TMP36 и его подключение к Arduino
Чтобы перевести напряжение в температуру просто воспользуйтесь следующей формулой (Vout измеряется в милливольтах):
Температура в °C = [Vout — 500] / 10
Например, выходное напряжение составляет 1 В, это значит, что температура равна ((1000 мВ — 500) / 10) = 50 °C.
Если вы используете датчики температуры типа LM35 и ему подобные, то ориентируйтесь на линию ‘a’ графика, показанного выше. Формула тогда будет следующая:
Температура в °C = Vout / 10
Проблема при использовании нескольких датчиков
Если вы используете несколько датчиков температуры, то можете заметить, что показания температуры непостоянны. Это значит, что датчики влияют друг на друга, когда цепь считывания аналогового сигнала переключается с одного вывода на другой. Вы можете исправить это, организовав задержку между двумя считываниями.
Подключаем датчик температуры к Arduino, Подключение датчика довольно простое
В данном случае мы подключили датчик к напряжению 5 В, но также можно его подключать к 3.3 В. Не важно к какой линии питания вы его подключите, его выходное напряжение все равно не превысит 2 В. С учетом того, что АЦП в Arduino 10-и разрядный, то будет справедлива следующая формула:
Напряжение на выводе в мВ = (показания АЦП) * (5000/1024)
Эта формула преобразует число от 0 до 1023 с АЦП в 0-5000мВ (= 5В). При использовании питания 3.3 В формула будет следующая:
Напряжение на выводе в мВ = (показания АЦП) * (3300/1024)
Далее, чтобы перевести милливольты в температуру, нужно воспользоваться формулой:
Температура в цельсиях = [(аналоговое напряжение в мВ) — 500] / 10
Простой термометр на Arduino
Нижеприведенный пример кода показывает, насколько просто можно сделать термометр на Arduino. В данном случае в последовательный порт выводятся показания температуры в цельсиях и фаренгейтах.
int sensorPin = 0; //аналоговый ввод для выхода датчика TMP36 //разрешение 10 мВ / градус цельсия со смещением на 500 мВ //для отрицательной температуры void setup() { Serial.begin(9600); } void loop() { //считываем напряжение датчика int reading = analogRead(sensorPin); // преобразуем показания в напряжение, для 3.3v используйте значение 3.3 float voltage = reading * 5.0; voltage /= 1024.0; // выводим напряжение Serial.print(voltage); Serial.println(" volts"); // теперь выводим температуру float temperatureC = (voltage - 0.5) * 100 ; //исходя из 10 мВ на градус со смещением 500 мВ 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); //ждем секунду }
Повышаем точность измерения температуры
Для получения более точного результата с меньшим уровнем шумов можно задействовать опорное напряжение 3.3V с ARef. На рисунке ниже показана схема соединения. Следует отметить, что TMP36 в этом случае подключен к аналоговому вводу A1. Также не следует забывать, что при использовании вывода 3.3v в качестве опорного в коде нужно прописывать analogReference(EXTERNAL).
#define aref_voltage 3.3 // подтягиваем 3.3V к ARef int tempPin = 1; // подсоединяем датчик теперь к аналоговому вводу 1 int tempReading; void setup(void) { Serial.begin(9600); analogReference(EXTERNAL); } void loop(void) { tempReading = analogRead(tempPin); Serial.print("Temp reading = "); Serial.print(tempReading); // сырые данные // преобразуем эти данные в напряжение относительно опорного напряжения float voltage = tempReading * aref_voltage; voltage /= 1024.0; // выводим напряжение Serial.print(" - "); Serial.print(voltage); Serial.println(" volts"); // выводим температуру 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); }
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.