Подключите один контакт резистора 10kΩ к контакту 5 В, второй контакт резистора 10kΩ (1%) к одному контакту термистора. Подключите второй контакт термистора к земле. Подключите «середину» двух резисторов к клемме Analog 0 на Arduino.
Измерение температуры с помощью термистора NTC
Вы когда-нибудь задумывались, как некоторые устройства, такие как термостаты, нагревательные подушки для 3D-принтеров, двигатели автомобилей и духовые шкафы, измеряют температуру? В этой статье вы сможете узнать!
Знание температуры может быть очень полезным. Знание температуры может помочь установить комфортную температуру в помещении, убедиться, что нагревательный элемент 3D-принтера достаточно теплый для прилипания к поверхности таких материалов, как ABS, и предотвратить перегрев двигателя или подгорание готовой пищи.
В этой статье мы рассматриваем только один тип датчиков, которые могут измерять температуру. Этот датчик называется термистором.
Сопротивление термистора зависит от температуры гораздо больше, чем у других резисторов.
Мы будем использовать Arduino для измерения и обработки показаний термисторов и последующего преобразования этих показаний в легко читаемую форму единиц измерения температуры.
Ниже приведена фотография термистора, который мы будем использовать:
Теория
При обычном использовании термистора нежелательно, чтобы его сопротивление изменялось при изменении температуры. В реальности это нереально, так как при большом изменении температуры можно допустить лишь небольшое изменение сопротивления. Если бы это было не так, сопротивления оказывали бы странное влияние на работу схем, например, светодиод мог бы светить намного ярче или слабее при изменении температуры окружающей среды.
Но что, если вы действительно хотите, чтобы яркость светодиода зависела от температуры? Именно здесь в игру вступает термистор. Как вы уже догадались, термистор имеет большое изменение сопротивления при небольшом изменении температуры. Чтобы понять это, ниже показана кривая изменения сопротивления термистора:
На рисунке указаны только единицы измерения, а не фактические значения, так как диапазон сопротивления зависит от типа термистора. Как вы видите, сопротивление термистора уменьшается с ростом температуры. Это характерное свойство резистора с отрицательным температурным коэффициентом (NTC), сокращенно NTC-термистор.
Существуют также термисторы с положительным температурным коэффициентом (PTC), сопротивление которых увеличивается при повышении температуры. Однако термисторы PTC имеют своего рода предопределенную точку разрыва и резко меняют свое сопротивление при определенной температуре. Это немного усложняет работу с термисторами PTC. По этой причине NTC-термисторы предпочтительны в большинстве недорогих устройств для измерения температуры.
В остальной части этой статьи, как вы уже догадались, мы поговорим о термисторах типа NTC.
Четыре подхода к нахождению формулы для построения кривой
Теперь, когда мы лучше понимаем поведение термисторов, вам может быть интересно, как мы можем использовать Arduino для измерения температуры. Кривая на приведенном выше графике не является линейной, поэтому простое линейное уравнение не подходит (мы можем вывести уравнение, но подробнее об этом позже).
Что же делать?
Прежде чем продолжить, подумайте, как бы вы сделали это с помощью Arduino или даже схемы без микропроцессорных компонентов.
Существует несколько способов решения этой проблемы, перечисленных ниже. Это далеко не полный список всех техник, но он покажет вам некоторые популярные подходы.
Метод 1
Некоторые производители предоставляют настолько полную информацию, что включают всю диаграмму с указанием конкретных значений температуры и сопротивления (типичные значения). Один из таких термисторов можно найти в листе данных компании Vishay.
Как вы могли бы реализовать измерение температуры на Arduino с такими подробными данными? Вам пришлось бы хранить все эти значения в огромной таблице поиска или в очень больших управляющих структурах «switch». case» или «if. else».
И если производитель не удосужился предоставить подробную таблицу, вам придется самостоятельно измерить каждую точку, чтобы составить такую таблицу. Это будет довольно скучный день для программиста. Но этот метод не так уж плох и имеет свое оправдание. Если текущий проект контролирует только несколько точек или даже небольшую территорию, этот метод может быть предпочтительнее. Такая ситуация возникает, например, когда вы хотите измерить, находятся ли значения в выбранном температурном диапазоне, и включить светодиод для индикации этого состояния.
Но в нашей программе мы хотим измерять температуру в почти непрерывном диапазоне и отправлять показания на последовательный интерфейс, поэтому мы не будем использовать этот метод.
Метод 2
Вы можете попытаться «линеаризовать» реакцию термистора, добавив дополнительную схему.
Обычный способ сделать это — подключить резистор параллельно термистору. Некоторые схемы предлагают сделать это за вас.
Выбор и линеаризация участка кривой, а также выбор правильного размера резистора являются темой отдельной статьи. Этот подход хорош, когда микропроцессор не может вычислять выражения с плавающей точкой (например, PICAXE), поскольку он упрощает поведение в заданном диапазоне температур до линейного характера. Это также упрощает проектирование схемы, не содержащей микропроцессора.
Однако в данной статье мы используем микропроцессор и хотим измерить температуру во всем диапазоне.
Метод 3
Вы можете взять данные из таблицы в электронной таблице или (если вы хотите извратиться) сделать свои собственные измерения и воспроизвести график в программе типа Excel. Затем вы можете использовать функцию подгонки кривой, чтобы создать формулу для этой кривой. Это неплохая идея, и в результате всей работы вы получите красивую формулу, которую можно использовать в программе. Однако предварительная обработка данных займет некоторое время.
Хотя это разумный подход, мы не хотим полагаться на анализ всех этих данных. Кроме того, каждый термистор немного отличается (но это не проблема, если допуск достаточно мал).
Измерение температуры с помощью терморезистора и Arduino
Использование термистора (калориметра) — один из самых простых и дешевых способов измерения температуры. Для точного измерения температуры с помощью термистора необходим микроконтроллер, в качестве которого в нашей программе будет использоваться плата Arduino. Значение измеренной температуры отображается на ЖК-дисплее. Такая схема может найти применение в дистанционно управляемых метеостанциях, в проектах автоматизации (умного) дома, в управлении электронным и промышленным оборудованием.
Необходимые компоненты
- Плата Arduino (любая модель) (купить на AliExpress).
- ЖК дисплей 16х2 (купить на AliExpress).
- NTC thermistor 10 кОм (терморезистор с отрицательным температурным коэффициентом) (купить на AliExpress).
- Резистор 10 кОм (купить на AliExpress).
- Соединительные провода.
Схематическое изображение устройства показано на следующем рисунке.
При изменении температуры сопротивление термистора также изменяется. Однако в нашей схеме мы не будем измерять сопротивление термистора напрямую, а воспользуемся делителем напряжения, где одним из резисторов будет хорошо известный резистор 10 кОм, а другим — наш термистор. Средняя точка делителя напряжения подключена к аналоговому входу A0 платы Arduino, поэтому мы можем использовать аналого-цифровое преобразование (АЦП) на этом соединении для определения падения напряжения на термисторе в данный момент времени и, следовательно, его сопротивления. Имея эти данные, мы можем определить значение температуры по формулам, приведенным далее в этой статье.
Терморезистор
Самым важным компонентом нашей схемы является термистор, который используется для определения температуры. Термистор — это резистор, сопротивление которого изменяется в зависимости от температуры. Существует два типа термисторов: NTC (отрицательный температурный коэффициент) и PTC (положительный температурный коэффициент). В нашем проекте мы будем использовать термистор типа NTC, сопротивление которого уменьшается с ростом температуры. На следующих рисунках показана диаграмма сопротивления такого термистора в зависимости от температуры и его типичный внешний вид.
Расчет температуры с помощью терморезистора
Схема используемого нами делителя напряжения показана на следующем рисунке.
Напряжение на термисторе в этой схеме можно определить по известному напряжению:
Значение сопротивления термистора Rt можно определить по этой формуле (R — известное сопротивление 10 кОм):
Значение Vс сайтаопределяется в программном коде путем считывания значения на выходе АЦП на пине A0 платы Arduino.
Математически сопротивление термистора можно рассчитать с помощью хорошо известного уравнения Штейна-Харта.
T = 1/(A + B*ln(Rt) + C*ln(Rt) 3 ) .
В этой формуле A, B и C — константы, Rt — сопротивление термистора, а ln — натуральный логарифм.
Для проекта мы использовали термистор со следующими константами: A = 1.009249522×1 0-3, B = 2.378405444×1 0-4, C = 2.019202697×1 0-7. Эти константы можно определить с помощью данного калькулятора, введя значения сопротивления термистора при трех значениях температуры, или взять их непосредственно из технического паспорта вашего термистора.
Таким образом, для определения значения температуры нам нужно только значение сопротивления термистора — как только оно определено, мы просто подставляем его значение в уравнение Штейнгарта-Харта для расчета значения температуры в Кельвинах. Алгоритм определения температуры в нашей программе показан на следующем рисунке.