Сайт о телевидении

Сайт о телевидении

» » Измерение температуры с помощью термистора NTC. Практическое использование термистора с Arduino Подключение ntc термистора к avr

Измерение температуры с помощью термистора NTC. Практическое использование термистора с Arduino Подключение ntc термистора к avr

В электронике всегда приходится что-то измерять или оценивать. Например, температуру. С этой задачей успешно справляются терморезисторы - электронные компоненты на основе полупроводников, сопротивление которых изменяется в зависимости от температуры.

Здесь я не буду расписывать теорию физических процессов, которые происходят в терморезисторах, а перейду ближе к практике - познакомлю читателя с обозначением терморезистора на схеме, его внешним видом, некоторыми разновидностями и их особенностями.

На принципиальных схемах терморезистор обозначается вот так.

В зависимости от сферы применения и типа терморезистора обозначение его на схеме может быть с небольшими отличиями. Но вы всегда его определите по характерной надписи t или .

Основная характеристика терморезистора - это его ТКС . ТКС - это температурный коэффициент сопротивления . Он показывает, на какую величину изменяется сопротивление терморезистора при изменении температуры на 1°С (1 градус Цельсия) или 1 градус по Кельвину.

У терморезисторов несколько важных параметров. Приводить я их не буду, это отдельный рассказ.

На фото показан терморезистор ММТ-4В (4,7 кОм). Если подключить его к мультиметру и нагреть, например, термофеном или жалом паяльника, то можно убедиться в том, что с ростом температуры его сопротивление падает.

Терморезисторы есть практически везде. Порой удивляешься тому, что раньше их не замечал, не обращал внимания. Давайте взглянем на плату от зарядного устройства ИКАР-506 и попробуем найти их.

Вот первый терморезистор. Так как он в корпусе SMD и имеет малые размеры, то запаян на небольшую плату и установлен на алюминиевый радиатор - контролирует температуру ключевых транзисторов.

Второй. Это так называемый NTC-термистор (JNR10S080L ). О таких я ещё расскажу. Служит он для ограничения пускового тока. Забавно. Вроде терморезистор, а служит в качестве защитного элемента.

Почему то если заходит речь о терморезисторах, то обычно думают, что они служат для измерения и контроля температуры. Оказывается, они нашли применение и как устройства защиты.

Также терморезисторы устанавливаются в автомобильные усилители. Вот терморезистор в усилителе Supra SBD-A4240. Здесь он задействован в цепи защиты усилителя от перегрева.

Вот ещё пример. Это литий-ионный аккумулятор DCB-145 от шуруповёрта DeWalt. Вернее, его "потроха". Для контроля температуры аккумуляторных ячеек применён измерительный терморезистор.

Его почти не видно. Он залит силиконовым герметиком. Когда аккумулятор собран, то этот терморезистор плотно прилегает к одной из Li-ion ячеек аккумулятора.

Прямой и косвенный нагрев.

По способу нагрева терморезисторы делят на две группы:

    Прямой нагрев. Это когда терморезистор нагревается внешним окружающим воздухом или током, который протекает непосредственно через сам терморезистор. Терморезисторы с прямым нагревом, как правило, используются либо для измерения температуры, либо температурной компенсации. Такие терморезисторы можно встретить в термометрах, термостатах, зарядных устройствах (например, для Li-ion батарей шуруповёртов).

    Косвенный нагрев. Это когда терморезистор нагревается рядом расположенным нагревательным элементом. При этом он сам и нагревательный элемент электрически не связаны друг с другом. В таком случае, сопротивление терморезистора определяется функцией тока, протекающего через нагревательный элемент, а не через терморезистор. Терморезисторы с косвенным нагревом являются комбинированными приборами.

NTC-термисторы и позисторы.

По зависимости изменения сопротивления от температуры терморезисторы делят на два типа:

    PTC-термисторы (они же позисторы ).

Давайте разберёмся, какая между ними разница.

Своё название NTC-термисторы получили от сокращения NTC - Negative Temperature Coefficient , или "Отрицательный Коэффициент Сопротивления". Особенность данных термисторов в том, что при нагреве их сопротивление уменьшается . Кстати, вот так обозначается NTC-термистор на схеме.

Обозначение термистора на схеме

Как видим, стрелки на обозначении разнонаправлены, что указывает на основное свойство NTC-термистора: температура увеличивается (стрелка вверх), сопротивление падает (стрелка вниз). И наоборот.

На практике встретить NTC-термистор можно в любом импульсном блоке питания. Например, такой термистор можно обнаружить в блоке питания компьютера. Мы уже видели NTC-термистор на плате ИКАР"а, только там он был серо-зелёного цвета.

На этом фото NTC-термистор фирмы EPCOS. Применяется для ограничения пускового тока.

Для NTC-термисторов, как правило, указывается его сопротивление при 25°С (для данного термистора это 8 Ом) и максимальный рабочий ток. Обычно это несколько ампер.

Данный NTC-термистор устанавливается последовательно, на входе сетевого напряжения 220V. Взгляните на схему.

Так как он включен последовательно с нагрузкой, то весь потребляемый ток протекает через него. NTC-термистор ограничивает пусковой ток, который возникает из-за заряда электролитических конденсаторов (на схеме С1). Бросок зарядного тока может привести к пробою диодов в выпрямителе (диодный мост на VD1 - VD4).

При каждом включении блока питания конденсатор начинает заряжаться, а через NTC-термистор начинает протекать ток. Сопротивление NTC-термистора при этом велико, так как он ещё не успел нагреться. Протекая через NTC-термистор, ток разогревает его. После этого сопротивление термистора уменьшается, и он практически не препятствует протеканию тока, потребляемого прибором. Таким образом, за счёт NTC-термистора удаётся обеспечить "плавный запуск" электроприбора и уберечь от пробоя диоды выпрямителя.

Понятно, что пока импульсный блок питания включен, NTC-термистор находится в "подогретом" состоянии.

Если в схеме происходит выход из строя каких-либо элементов, то, обычно резко возрастает и потребляемый ток. При этом нередки случаи, когда NTC-термистор служит своего рода дополнительным предохранителем и также выходят из строя из-за превышения максимального рабочего тока.

Выход из строя ключевых транзисторов в блоке питания зарядного устройства привел к превышению максимального рабочего тока этого термистора (max 4A) и он сгорел.

Позисторы. PTC-термисторы.

Термисторы, сопротивление которых при нагреве растёт , называют позисторами. Они же PTC-термисторы (PTC - Positive Temperature Coefficient , "Положительный Коэффициент Сопротивления").

Стоит отметить, что позисторы получили менее широкое распространение, чем NTC-термисторы.

Позисторы легко обнаружить на плате любого цветного CRT-телевизора (с кинескопом). Там он установлен в цепи размагничивания. В природе встречаются как двухвыводные позисторы, так и трёхвыводные.

На фото представитель двухвыводного позистора, который применяется в цепи размагничивания кинескопа.

Внутри корпуса между выводами-пружинами установлено рабочее тело позистора. По сути это и есть сам позистор. Внешне выглядит как таблетка с напылением контактного слоя по бокам.

Как я уже говорил, позисторы используются для размагничивания кинескопа, а точнее его маски. Из-за магнитного поля Земли или влияния внешних магнитов маска намагничивается, и цветное изображение на экране кинескопа искажается, появляются пятна.

Наверное, каждый помнит характерный звук "бдзынь", когда включается телевизор - это и есть тот момент, когда работает петля размагничивания.

Кроме двухвыводных позисторов широко применяются трёхвыводные позисторы. Вот такие.

Отличие их от двухвыводных заключается в том, что они состоят из двух позисторов-"таблеток", которые установлены в одном корпусе. На вид эти "таблетки" абсолютно одинаковые. Но это не так. Кроме того, что одна таблетка чуть меньше другой, так ещё и сопротивление их в холодном состоянии (при комнатной температуре) разное. У одной таблетки сопротивление около 1,3 ~ 3,6 кОм, а у другой всего лишь 18 ~ 24 Ом.

Трёхвыводные позисторы также применяются в цепи размагничивания кинескопа, как и двухвыводные, но только схема их включения немного иная. Если вдруг позистор выходит из строя, а такое бывает довольно часто, то на экране телевизора появляются пятна с неестественным отображением цвета.

И конденсаторы. Маркировка на них не наносится, что затрудняет их идентификацию. По внешнему виду SMD-терморезисторы очень похожи на керамические SMD-конденсаторы.

Встроенные терморезисторы.

В электронике активно применяются и встроенные терморезисторы. Если у вас паяльная станция с контролем температуры жала , то в нагревательный элемент встроен тонкоплёночный терморезистор. Также терморезисторы встраиваются и в фен термовоздушных паяльных станций , но там он является отдельным элементом.

Стоит отметить, что в электронике наряду с терморезисторами активно применяются термопредохранители и термореле (например, типа KSD), которые также легко обнаружить в электронных приборах.

Теперь, когда мы познакомились с терморезисторами, пора .

Узнайте о термисторах и о том, как запрограммировать Arduino для измерения их данных.

Вы когда-нибудь задумывались над тем, как некоторые устройства, такие как термостаты, нагревательные площадки 3D принтеров, автомобильные двигатели и печи измеряют температуру? В этой статье вы можете это узнать!

Знать температуру может быть очень полезно. Знание температуры может помочь регулировать температуру в помещении до комфортного значения, гарантировать, что нагревательная площадка 3D принтера была достаточно горячей, чтобы такие материалы, как ABS, прилипали к ее поверхности, а также предотвратить перегрев двигателя или не допустить сжигания приготавливаемой еды.

В данной статье мы рассматриваем только один тип датчика, способного измерять температуру. Этот датчик называется термистором.

Термистор обладает сопротивлением, которое намного сильнее зависит от температуры, чем сопротивление других типов резисторов.

Мы буде использовать Arduino для измерения и обработки показаний термистора, после чего мы преобразуем эти показания в удобный для чтения формат единиц измерения температуры.

Ниже приведена фотография термистора, который мы собираемся использовать:

Необходимые компоненты

Комплектующие

  • Arduino (Mega или Uno или любая другая модель);
  • несколько перемычек;
  • паяльник и припой (возможно, понадобится, если ваш термистор не будет влезать в разъемы на плате Arduino).

Программное обеспечение

  • Arduino IDE

Теория

При типовом использовании резистора вы не хотите, чтобы его сопротивление менялось при изменении температуры. Это не реально в реальной жизни, можно лишь обеспечить небольшое изменение сопротивления при большом изменении температуры. Если бы это было не так, то резисторы странно влияли бы на работу схем, например, светодиод мог бы светиться намного ярче или тусклее по мере изменения температуры окружающей среды.

Но что, если вы действительно хотите, чтобы яркость светодиода была функцией температуры? Здесь появляется термистор. Как вы могли догадаться, у термистора сопротивление сильно изменяется при небольшом изменении температуры. Чтобы проиллюстрировать это, ниже приведена кривая изменения сопротивления термистора:

На рисунке показаны лишь единицы измерения без фактических значений, так как диапазон сопротивлений зависит от типа конкретного термистора. Как вы можете заметить, по мере увеличения температуры сопротивление терморезистора уменьшается. Это является отличительным свойством резистора с отрицательным температурным коэффициентом (Negative Temperature Coefficient), или, кратко, NTC термистора.

Существуют также терморезисторы с положительным температурным коэффициентом (Positive Temperature Coefficient, PTC), сопротивление которых увеличивается по мере роста температуры. Однако, PTC термисторы имеют своего рода точку перелома и сильно меняют сопротивление при некоторой температуре. Это делает взаимодействие с PTC термисторами чуть более сложным. По этой причине в большинстве дешевых измерителей температуры предпочтительнее использовать NTC термисторы.

В оставшейся части статьи, как вы можете догадаться, мы будем говорить о терморезисторах типа NTC.

Четыре подхода к нахождению формулы для построения кривой

Теперь, когда мы лучше понимаем поведение термисторов, вы можете удивиться, как мы можем использовать Arduino для измерения температуры. Кривая на графике выше нелинейна и, следовательно, простое линейное уравнение нам не подходит (на самом деле мы можем вывести уравнение, но об этом позже).

Так что же делать?

Прежде чем продолжить, подумайте, как бы вы это сделали на Arduino или даже в схеме без микропроцессорных компонентов.

Существует несколько способов решения этой проблемы, которые перечислены ниже. Это далеко не полный список всех методик, но он покажет вам некоторые популярные подходы.

Метод 1

Некоторые производители предоставляют настолько полную информацию, что в ней содержится весь график, отображающий определенные диапазоны целочисленных значений температуры и сопротивления (типовые значения). Один такой термистор может быть найден в техническом описании от компании Vishay .

Как, имея такие подробные данные, можно было бы реализовать измерение температуры на Arduino. Вам нужно было бы жестко прописать в коде все эти значения в огромной таблице поиска или очень длинных структурах управления " switch...case " или " if...else ".

А если производитель не удосужился предоставить подробную таблицу, то вам придется самостоятельно измерить каждую точку для формирования такой таблицы. Этот день будет для программиста довольно уныл. Но этот метод не так уж и плох и имеет место в использовании. Если текущий проект проверяет лишь несколько точе или даже небольшой диапазон, этот способ может быть предпочтительным. Например, одна такая ситуация возникает, если вы хотите измерить, находятся ли значения выбранных диапазонах температур, и зажечь светодиод для индикации этого состояния.

Но в нашем проекте мы хотим измерять температуру в почти непрерывном диапазоне и отправлять показания на монитор последовательного порта, поэтому этот метод использовать не будем.

Метод 2

Вы можете попытаться «линеаризовать» реакцию термистора, добавив к нему дополнительную схему.

Одним из популярных способов выполнения этого является подключение резистора параллельно термистору. Некоторые микросхемы предлагают сделать это за вас.

Определение того, как выбрать и линеаризовать участок кривой, вместе с выбором правильного номинала резистора - это тема для отдельной статьи. Этот подход хорош, если микропроцессор не может вычислять выражения с плавающей запятой (например, PICAXE), поскольку он упрощает реакцию в некотором диапазоне температур до линейного характера. Это также упрощает проектирование схемы, в которой нет микропроцессора.

Но у нас в этой статье микропроцессор используется, и мы хотим измерять температуру во всем диапазоне.

Метод 3

Вы можете взять данные из таблицы в техническом описании или (если нравятся извращения) сформировать собственную таблицу, выполнив самостоятельные измерения и воссоздав график в чем-то типа Excel. Затем вы можете использовать функцию подгонки кривой для создания формулы этой кривой. Это неплохая идея, и вся выполненная работа даст красивую формулу, которую вы сможете использовать в программе. Но это займет некоторое время для предварительной обработки данных.

Хотя это разумный подход, мы не хотим зависеть от анализа всех этих данных. Кроме того, каждый термистор немного отличается (но, конечно, это не проблема, если допуск довольно низок).

Метод 4

Оказывается, есть общая формула для подгонки кривой, предназначенная для устройств типа термисторов. Она называется уравнением Штейнхарта-Харта. Ниже представлена его версия (в других версиях используются члены во второй и степени):

\[\frac{1}{T}=A+B\ln(R)+C(\ln(R))^3\]

где R - сопротивление терморезистора при температуре T (в Кельвинах).

Это общее уравнение кривой, подходящее для всех типов NTC термисторов. Аппроксимация связи температуры и сопротивления «достаточно подходит» для большинства применений.

Обратите внимание, что уравнение нуждается в константах A, B и C. Для разных термисторов они различаются и должны быть либо заданы, либо вычислены. Поскольку мы имеем три неизвестных, вам необходимо выполнить три измерения сопротивления при определенных температурах, которые затем могут быть использованы для создания трех уравнений и определения значений этих констант.

Даже для тех из нас, кто хорошо знают алгебру, это всё еще слишком трудоемко.

Вместо этого, есть еще более простое уравнение, которое менее точно, но содержит только одну константу. Эта константа обозначена как β, и поэтому уравнение называется β-уравнением.

\[\frac{1}{T}=\frac{1}{T_o}+(\frac{1}{\beta})\cdot\ln\left(\frac{R}{R_o}\right)\]

где R 0 - сопротивление при контрольной температуре T 0 (например, сопротивление при комнатной температуре). R - сопротивление при температуре T. Температуры указываются в Кельвинах. β обычно указывается в техническом описании; а если нет, то вам необходимо только одно измерение (одно уравнение) для расчета этой константы. Это уравнение я буду использовать для взаимодействия с нашим термистором, поскольку оно является самым простым из тех, с которыми я столкнулся, и не нуждается в линеаризации реакции термистора.

Измерение сопротивления с помощью Arduino

Теперь, когда мы выбрали метод построения кривой, мы должны выяснить, как реально измерить сопротивление с помощью Arduino, прежде чем мы сможем передать информацию о сопротивлении в β-уравнение. Мы можем сделать это используя делитель напряжения:

Это будет наша схема взаимодействия с термистором. Когда термистор определит изменение температуры, это отразится на выходном напряжении.

Теперь, как обычно, мы используем формулу для делителя напряжения.

Но нам неинтересно выходное напряжение V выход, нас интересует сопротивление термистора R термистор. Поэтому мы выразим его:

Это намного лучше, но нам необходимо измерить наше выходное напряжение, а также напряжение питания. Так как мы используем встроенный АЦП Arduino, то можем представить напряжение, как числовое значение на определенной шкале. Итак, конечный вид нашего уравнения показан ниже:

Это работает потому, что не имеет значения, как мы представляем напряжение (в вольтах или в цифровых единицах), эти единицы сокращаются в числителе и знаменателе дроби, оставляя безразмерное значение. Затем мы умножаем его на сопротивление, чтобы получить результат в омах.

D max у нас будет равно 1023, так как это самое большое число, которое может выдать наш 10-разрядный АЦП. D измеренное - это измеренное значение аналого-цифровым преобразователем, которое может быть в диапазоне от нуля до 1023.

Всё! Теперь можно приступить к сборке!

Соберем это

Я использовал термистор TH10K.

Также я использовал резистор 10 кОм в качестве R баланс в нашем делителе напряжения. Константы β у меня не было, поэтому я рассчитал ее сам.

Ниже приведена полная схема устройства. Она довольно проста.

А так выглядит конечный макет:

Код программы для Arduino

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

В основном он измеряет напряжение на делителе, вычисляет температуру, а затем показывает ее в терминале последовательного порта.

Для забавы добавлены также некоторые операторы " if...else ", чтобы показать, как вы можете действовать в зависимости от диапазона температур.

//=============================================================================== // Константы //=============================================================================== // Связанные с термистором: /* Здесь у нас несколько констант, которые упрощают редактирование кода. Пройдемся по ним. Чтение из АЦП может дать одно значение при одной выборке, а затем немного отличающееся значение при следующей выборке. Чтобы избежать влияния шумов, мы можем считывать значения с вывода АЦП несколько раз, а затем усреднять значения, чтобы получить более постоянное значение. Эта константа используется в функции readThermistor. */ const int SAMPLE_NUMBER = 10; /* Чтобы использовать бета уравнение, мы должны знать номинал второго резистора в нашем делителе. Если вы используете резистор с большим допуском, например, 5% или даже 1%, измерьте его и поместите результат в омах сюда. */ const double BALANCE_RESISTOR = 9710.0; // Это помогает вычислять сопротивление термистора (подробности смотрите в статье). const double MAX_ADC = 1023.0; /* Эта константа зависит от термистора и должна быть в техническом описании, или смотрите статью, как рассчитать ее, используя бета-уравнение. */ const double BETA = 3974.0; /* Необходима для уравнения преобразования в качестве "типовой" комнатной температуры. */ const double ROOM_TEMP = 298.15; // комнатная температура в Кельвинах /* Термисторы обладают типовым сопротивлением при комнатной температуре, укажем его здесь. Опять же, необходимо для уравнения преобразования. */ const double RESISTOR_ROOM_TEMP = 10000.0; //=============================================================================== // Переменные //=============================================================================== // Здесь мы будем хранить текущую температуру double currentTemperature = 0; //=============================================================================== // Объявления выводов //=============================================================================== // Входы: int thermistorPin = 0; // Вход АЦП, выход делителя напряжения //=============================================================================== // Инициализация //=============================================================================== void setup() { // Установить скорость порта для отправки сообщений Serial.begin(9600); } //=============================================================================== // Основной цикл //=============================================================================== void loop() { /* Основной цикл довольно прост, он печатает температуру в монитор последовательного порта. Сердце программы находится в функции readThermistor. */ currentTemperature = readThermistor(); delay(3000); /* Здесь описываем, что делать, если температура слишком высока, слишком низка или идеально подходит. */ if (currentTemperature > 21.0 && currentTemperature < 24.0) { Serial.print("It is "); Serial.print(currentTemperature); Serial.println("C. Ahhh, very nice temperature."); } else if (currentTemperature >= 24.0) { Serial.print("It is "); Serial.print(currentTemperature); Serial.println("C. I feel like a hot tamale!"); } else { Serial.print("It is "); Serial.print(currentTemperature); Serial.println("C. Brrrrrr, it"s COLD!"); } } //=============================================================================== // Функции //=============================================================================== ///////////////////////////// ////// readThermistor /////// ///////////////////////////// /* Эта функция считывает значения с аналогового вывода, как показано ниже. Преобразует входное напряжение в цифровое представление с помощью аналого-цифрового преобразования. Однако, это выполняется несколько раз, чтобы мы могли усреднить значение, чтобы избежать ошибок измерения. Это усредненное значение затем используется для расчета сопротивления термистора. После этого сопротивление используется для расчета температуры термистора. Наконец, температура преобразуется в градусы Цельсия. */ double readThermistor() { // переменные double rThermistor = 0; // Хранит значение сопротивления термистора double tKelvin = 0; // Хранит рассчитанную температуру double tCelsius = 0; // Хранит температуру в градусах Цельсия double adcAverage = 0; // Хранит среднее значение напряжения int adcSamples; // Массив для хранения отдельных результатов // измерений напряжения /* Рассчитать среднее сопротивление термистора: Как упоминалось выше, мы будем считывать значения АЦП несколько раз, чтобы получить массив выборок. Небольшая задержка используется для корректной работы функции analogRead. */ for (int i = 0; i < SAMPLE_NUMBER; i++) { adcSamples[i] = analogRead(thermistorPin); // прочитать значение на выводе и сохранить delay(10); // ждем 10 миллисекунд } /* Затем мы просто усредняем все эти выборки для "сглаживания" измерений. */ for (int i = 0; i < SAMPLE_NUMBER; i++) { adcAverage += adcSamples[i]; // складываем все выборки. . . } adcAverage /= SAMPLE_NUMBER; // . . . усредняем их с помощью деления /* Здесь мы рассчитываем сопротивление термистора, используя уравнение, описываемое в статье. */ rThermistor = BALANCE_RESISTOR * ((MAX_ADC / adcAverage) - 1); /* Здесь используется бета-уравнение, но оно отличается от того, что описывалось в статье. Не беспокойтесь! Оно было перестроено, чтобы получить более "красивую" формулу. Попробуйте сами упростить уравнение, чтобы поупражняться в алгебре. Или просто используйте показанное здесь или то, что приведено в статье. В любом случае всё будет работать! */ tKelvin = (BETA * ROOM_TEMP) / (BETA + (ROOM_TEMP * log(rThermistor / RESISTOR_ROOM_TEMP))); /* Я буду использовать градусы Цельсия для отображения температуры. Я сделал это, чтобы увидеть типовую комнатную температуру, которая составляет 25 градусов Цельсия. */ tCelsius = tKelvin - 273.15; // преобразовать кельвины в цельсии return tCelsius; // вернуть температуру в градусах Цельсия }

Возможные следующие шаги

Всё в данной статье показывает довольно простой способ измерения температуры с помощью дешевого термистора. Есть еще пара способов улучшить схему:

  • добавить небольшой конденсатор параллельно выходу делителя. Это стабилизирует напряжение и может даже устранить необходимость усреднения большого количества выборок (как было сделано в коде) - или, по крайней мере, мы сможете усреднять меньшее количество выборок;
  • использовать прецизионные резисторы (допуск меньше 1%), чтобы получить более предсказуемые измерения. Если вам критична точность измерений, имейте в виду, что самонагревание термистора может повлиять на измерения; в данной статье самонагрев не компенсируется.

Конечно, термисторы - это только один из датчиков, используемых для измерения температуры. Другой популярный выбор - это микросхемы датчиков (пример работы с одной из них описан ). В этом случае вам не придется иметь дело с линеаризацией и сложными уравнениями. Два других варианта - это термопара и инфракрасный тип датчика; последний может измерять температуру без физического контакта, но он уже не так дешев.

Надеюсь, статья оказалась полезной. Оставляйте комментарии!

У Arduino есть два типа температурных сенсоров - цифровые и аналоговые. Аналоговые имеют в своей основе терморезистор, или термистор - полупроводниковый резистор, у которого явно выражена зависимость сопротивления от температуры, и она представляет собой гладкую функцию. Соответственно, измеряя его сопротивление, можно измерять температуру среды.


Схема измерения температуры с термистором

Мы помним, что на плате Arduino UNO есть шесть аналоговых входов, которые, по сути, являются каналами АЦП. В один из таких каналов мы и включим термистор. Однако как померить его сопротивление, если АЦП умеет измерять только напряжение? Умные ребята придумали для этого использовать схему простого делителя:

Здесь U0 - известное напряжение, R0 - известное сопротивление, RT - сопротивление, зависящее от температуры, Uизм - измеряемое напряжение. Из рисунка очевидно, что для измеряемого напряжения справедливо соотношение:

Откуда сопротивление термистора выражается так:

Однако померить сопротивление мало, нам ведь нужно получить температуру!

Уравнение Стейнхарта-Харта

Типовая зависимость сопротивления термистора от температуры выглядит так:

Уважаемые господа Джон Стейнхарт и Стэнли Харт в 1968 году опубликовали свою работу, посвященную калибровочным кривым термисторов, в которой экспериментально вывели уравнение, связывающее сопротивление и температуру полупроводниковых термисторов. Вот это уравнение:

Здесь a, b и с - калибровочные константы, так называемые коэффициенты Стейнхарта-Харта. Это уравнение аппроксимирует кривую с хорошей точностью при подобранных коэффициентах для конкретного термистора.

Коэффициенты Стейнхарта-Харта могут указываться в даташите производителем термистора. А могут вместо них указываться табличные значения температур и сопротивлений для конкретного устройства.

Я понятия не имею, какой термистор в моем сенсоре, кто его произвел, какая у него модель, какие характеристики. Поэтому коэффициенты я буду искать сам. Магазин, в котором я покупал сенсор, предлагает использовать какие-то коэффициенты, однако китайцы такие китайцы и им не стоит доверять. Тем более, я читал, что если дисковые терморезисторы калибруются партиями на заводе, то каплевидные - вообще оторви да выбрось требуют индивидуальной калибровки.

Сенсор в студию

Мой аналоговый температурный сенсор выглядит так:


Черная круглая блямба на переднем плане - и есть термистор. На нем написано "103", а это значит что при комнатной температуре он имеет сопротивление 10 КОм (103=10*10^3). Далее идет микросхемка, которая есть ни что иное, как операционный усилитель LM358P. Есть еще 2 простых резистора, на которых тоже написано 103, один из которых никуда не подключен. Еще помните формулу для RT? Вот мы и нашли для нее R0, оно равно 10 КОм. А U0 равно 5 В, я вам так скажу. Больше на плате ничего нет!

Сенсор очень просто подключается к Arduino Sensor Shield, который, в свою очередь, надевается на Arduino [в этом соль Arduino, кто еще не понял] , прям как у меня вот так:


Ну собственно все - железо готово к лабораторной работе.

Калибровочная установка

Для калибровки понадобится печка, которая показывает свою температуру, и держит ее при этом (!). Нет проблем - пошел в ИНХ СО РАН, их там в каждой лабе по несколько штук. Выбирай по цвету, что называется. Приглянулась мне вот такая:

Вообще это типа нагревательный столик (30...300 градусов Цельсия), который суют под микроскоп и рассматривают всякие штуки, нагревая их. Вот почему такой странный дизайн.

Собираем установочку: Arduino в комп, сенсор в крышечку с водой, крышечку на печку, хвостик под лавочку, накрываем печку колпачком из кварца.


Ваши варианты проведения эксперимента прошу оставлять в комментариях. Сразу скажу, что без воды получается куда отстойнее, чем с водой.

Методика калибровки

Пристально смотрим на уравнение Стейнхарта-Харта и видим в нем три неизвестных. Это означает, что нам достаточно провести три измерения и получить, таким образом, три уравнения.

Выбираем три точки на температурной шкале. Мне нравятся, например, 30, 40 и 50 градусов Цельсия. Нагреваем печку до одной из температур, ждем 10 минут, чтобы все термодинамические процессы произошли и энтропия вселенной увеличилась, замеряем сопротивление. Потом повторяем все для второй и третьей температур.

Составляем три уравнения и решаем систему (линейных кстати) уравнений. Нам лениво и мы заставим это делать Mathcad, который нам таки-выдаст коэффициенты Стейнхарта-Харта.

Думаю, тут все понятно.

Serial Communication

Есть у Arduino такая классная штука - serial communication . Это есть явление общения компа с Arduino во время выполнения программы. Происходит это через USB-порт, который эмулирует COM-порт. Это позволяет мониторить состояние платы в реальном времени и даже посылать на нее команды с компа.

Чтобы вызвать Serial monitor , выберите в меню Tools->Serial Monitor или нажмите хитрую комбинацию из трех клавиш ctrl+shift+M во время выполнения программы.

Чтобы заставить Arduino вывести что-то в последовательный поток, просто воспользуйтесь функцией Serial.println(число) или Serial.println("текст") .

Последовательный обмен необходимо инициализировать в setup(){} , всунув туда команду Serial.begin(бодрейт) . Бодрейт (baudrate) - количество информации, передаваемой в единицу времени (не путать с битрейтом). Arduino предлагает на выбор: 300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, 115200 бод. Вот что бывает, если не согласовать бодрейт в своей программе и в мониторе последовательного порта:


У вас это и должно произойти, когда вы впервые откроете монитор. Не пугайтесь.

Кодим

Напишем коротенький код, чтобы мониторить измеряемое значение напряжения и вычисляемое значение сопротивления:

void setup () {
Serial .begin (115200);
}


void loop () {
double rt; //измеряемая величина
Serial .println ("voltage:" ); //пишем в поток слово для красоты
rt=(analogRead (0)); //читаем значение с сенсора
Serial .println (rt); //выводим значение с сенсора в поток
rt = ((10240000/rt) - 10000); //вычисляем сопротивление по формуле
Serial .println ("resistance:" ); //пишем в поток еще одно слово для красоты
Serial .println (rt); //выводим значение сопротивления в поток
delay (5000); //ничего не делаем 5 секунд
}


В результате все красиво:

Вычисляем коэффициенты Стейнхарца-Харца

По описанной выше методике выписываем на листочек три значения сопротивления при трех разных температурах. Подставляем их попарно в три уравнения Стейнхарца-Харца и решаем систему. Вот фотка моего маткадовского файлика:

Обратите внимание, что я вместо коэффициента "c" написал "се" [цэ], потому что маткад не дает использовать символ "с" кроме как в значении скорости света.

Нижний вектор-столбец и есть наши искомые коэффициенты.

Еще раз кодим

Теперь напишем скетч, который позволит Arduino измерять температуру.

#include //подключаем свою библиотеку с блэкджэком и логарифмами


double Steinhart(int value) {
double Temp; //в итоге эта переменная станет температурой
Temp = log ((10240000/value-10000)); //считаем логарифм
//считаем температуру из уравнения Стейнхарта-Харта
Temp = 1/(0.001768+0.00005719*Temp+0.000001354*Temp*Temp*Temp);
Temp = Temp-273.15;//переводим температуру в градусы Цельсия
return Temp; //передаем температуру обратно в loop
}


void setup () {
Serial.begin(115200); //стартуем последовательное соединение
}


void loop () {
//передаем в функцию Steinhart измеренное значение и выводим температуру, которую она вернет
Serial .println (int (Steinhart(analogRead (0))));
delay (2000); //ничего не делаем 2 секунды
}


Резюме

Температура меряется все равно корявенько, дает расхождение до трех градусов. Процесс калибровки - сложная штука в плане правильного нагрева термистора и поддержания определенной температуры. Улучшение методики калибровки - подключение дополнительных термопар, создание термостатированной камеры, возможно, сильно изменят результаты в лучшую сторону. Кстати, неплохая темя для курсовой физика-второкурсника. Если у вас есть знакомый физик-второкурсник, посоветуйте ему эту идею!

Совет всем - покупая терморезистор, убедитесь в том, что вы правильно знаете его марку и модель и можете найти в даташите его параметры и таблицу.

Термистор (терморезистор) – твердотельный электронный элемент, внешне напоминающий постоянный резистор, но обладающий выраженной температурной характеристикой. Этот вид электронных приборов, как правило, используются для изменения аналогового выходного напряжения с учётом изменения окружающей температуры. Другими словами – электрические свойства термистора и принцип действия напрямую связаны с физическим явлением — температурой.

Термистор — термочувствительный полупроводниковый элемент, изготовленный на основе полупроводниковых оксидов металлов. Обычно имеет форму диска или шара с металлизированными или соединительными выводами.

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

Но этот же эффект видится удачным при построении многих электронных схем, требующих определения температуры.

Таким образом, будучи нелинейным электронным устройством с переменным сопротивлением, терморезистор успешно подходит для работы в качестве терморезистора-датчика. Такого рода датчики широко применяют для контроля температуры жидкостей и газов.

Выступая твердотельным устройством, изготовленным на основе высокочувствительных оксидов металлов, терморезистор работает на молекулярном уровне.

Валентные электроны становятся активными и воспроизводят отрицательный ТКС либо пассивными и тогда воспроизводят положительный ТКС.

В результате электронные приборы – термисторы, демонстрируют очень хорошую воспроизводимую резистивность, сохраняя эксплуатационные характеристики, позволяющие продуктивно работать в диапазоне температур до 200ºC.

Применение терморезисторов на практике

Базовым направлением применения, в данном случае, являются резистивные температурные датчики. Однако эти же электронные элементы, принадлежащие семейству резисторов, можно успешно использовать включенными последовательно с другими компонентами или устройствами.

Простые схемы включения терморезисторов, показывающие работу приборов в качестве температурных датчиков — своеобразных преобразователей напряжения за счёт изменения сопротивления

Такая схема включения позволяет контролировать ток, протекающий через компонент. Таким образом, термисторы, по сути, выступают ещё и токоограничителями.

Производятся термисторы разного типа, на основе различных материалов и отличаются по размерам в зависимости от времени отклика и рабочей температуры.

Существуют герметичные модификации приборов, защищённые от проникновения влаги. Есть конструкции под высокие рабочие температуры и компактные по размерам.

Следует выделить три наиболее распространенных типа терморезисторов:

  • шариковые,
  • дисковые,
  • инкапсулированные.

Работают приборы в зависимости от изменения температуры:

  1. На уменьшение резистивного значения.
  2. На увеличение резистивного значения.

То есть существует два типа приборов:

  1. Обладающие отрицательным ТКС (NTC).
  2. Обладающие положительным ТКС (PTC).

Отрицательный коэффициент ТКС

NTC-термисторы с отрицательным ТКС уменьшают собственное резистивное значение по мере увеличения внешней температуры. Как правило, именно эти приборы чаще выступают датчиками температуры, поскольку идеально подходят практически к любому типу электроники, где требуется контроль температуры.

Относительно большой отрицательный отклик термистора NTC означает, что даже небольшие изменения температуры способны значительно изменить электрическое сопротивление прибора. Этот фактор делает модели NTC идеальными датчиками точного измерения температур.


Схема калибровки (проверки) терморезистора: 1 — источник питания; 2 — направление тока; 3 — испытуемый электронный элемент термистор; 4 — калибровочный микроамперметр

Терморезисторы NTC, снижающие сопротивление с повышением температуры, по исполнению доступны с различными базовыми сопротивлениями. Как правило, базовым сопротивлениям при комнатной температуре.

Например: 25ºC берётся за контрольную (базовую) температурную точку. Отсюда выстраиваются значения приборов, допустим, следующих номиналов:

  • 2,7 кОм (25ºC),
  • 10 кОм (25ºC)
  • 47 кОм (25ºC)….

Другой важной характеристикой является значение «В». Величина «В» представляет собой постоянную константу, которая определяется керамическим материалом, из которого изготовлен термистор.

Этой же константой определяется градиент кривой резистивного отношения (R/T) в определенном температурном диапазоне между двумя температурными точками.

Каждый материал термистора имеет различную материальную константу и, следовательно, индивидуальную кривую отношения сопротивления и температуры.

Так, константа «B» определяет одно резистивное значение при базовой T1 (25ºС), и другое значение при Т2 (например, при 100ºC).

Следовательно, значение B определит постоянную константу материала термистора, ограниченную диапазоном T1 и T2:

B * T1 / T2 (B* 25 / 100)

p.s. значения температуры в расчётах берутся в градуировке Кельвина.

Отсюда вытекает, что имея значение «В» (из характеристики производителя) конкретного прибора, электронщику останется только создать таблицу температур и сопротивлений, чтобы построить подходящий график при помощи следующего нормированного уравнения:

B (T1/T2) = (T 2 * T 1 / T 2 – T 1) * ln(R1/R2)

где: T 1 , T 2 – температуры в градусах Кельвина; R 1 , R 2 – сопротивления при соответствующих температурах в Омах.

Так, например, термистор NTK, обладающий сопротивлением 10 кОм, имеет значение «В» равным 3455 в рамках температурного диапазона 25 — 100ºC.

Очевидный момент: термисторы экспоненциально меняют сопротивление с изменениями температуры, поэтому характеристическая нелинейная. Чем больше контрольных точек устанавливаются, тем точнее получается кривая.

Применение термистора в роли активного датчика

Поскольку прибор является активным типом датчика, для работы требуется сигнал возбуждения. Любые изменения сопротивления в результате изменения температуры преобразуются в изменение напряжения.


Промышленностью выпускаются термисторы разного исполнения, в том числе высокоточные, надёжно защищённые для применения в системах высокого уровня

Самый простой способ добиться подобного эффекта — использовать термистор как часть схемы делителя потенциала, как показано на рисунке ниже. Постоянное напряжение подаётся в цепь резистора и терморезистора.

К примеру, используется схема, где термистор 10 кОм включен последовательно с резистором 10 кОм. В этом случае выходное напряжение при базовой Т = 25ºC составит половину напряжения питания.

Таким образом, схема делителя потенциалов является примером простого преобразователя сопротивления в напряжение. Здесь сопротивление термистора регулируется температурой с последующим формирования величины выходного напряжения, пропорциональной температуре.

Простыми словами: чем теплее корпус термистора, тем ниже напряжение на выходе.

Между тем, если изменить положение последовательного резистора, R S и термистора R TH , в этом случае уровень выходного напряжения изменится на противоположный вектор. То есть теперь чем больше нагреется термистор, тем выше будет уровень выходного напряжения.

Использовать термисторы допускается и как часть базовой конфигурации с использованием мостовой схемы. Связью между резисторами R1 и R2 устанавливается опорное напряжение до требуемого значения. Например, если R1 и R2 имеют одинаковые значения сопротивления, опорное напряжение равно половине напряжения питания (V/2).

Схема усилителя, построенная с использованием этой мостовой схемы с термозондом, может выступать в качестве высокочувствительного дифференциального усилителя или в качестве простой схемы запуска Шмитта с функцией переключения.


Включение терморезистора в мостовую схему: R1, R2, R3 -обычные постоянные резисторы; Rт — термистор; А — измерительный прибор микроамперметр

Существует проблема, связанная с термистор (эффект «самонагрева»). В таких случаях рассеиваемая мощность I 2 R достаточно высока и создаёт больше тепла, чем способен рассеять корпус прибора. Соответственно, это «лишнее» тепло влияет на резистивное значение, что приводит к ложным показаниям.

Одним из способов избавления от эффекта «самонагрева» и получения более точного изменения сопротивления от влияния температуры (R/T), видится питание термистора от постоянного источника тока.

Термистор как регулятор пускового тока

Приборы традиционно используются в качестве резистивных чувствительных к температуре преобразователей. Однако сопротивление термистора изменяется не только под влиянием окружающей среды, но также изменения наблюдаются от протекающего через прибор электротока. Эффект того самого «самонагрева».

Разное электрооборудование на индуктивной составляющей:

  • двигатели,
  • трансформаторы,
  • электролампы,
  • другое,

подвергается чрезмерным пусковым токам при первом включении. Но если в цепь последовательно включить термистор, можно эффективно ограничивать высокий начальный ток. Такое решение способствует увеличению срока службы электрооборудования.

Терморезисторы с низким ТКС (при 25°C) обычно используются для регулирования пускового тока. Так называемые ограничители тока (перенапряжения) меняют сопротивление до очень низкого значения при прохождении тока нагрузки.

В момент первоначального включения оборудования пусковой ток проходит через холодный термистор, резистивное значение которого достаточно велико. Под воздействием тока нагрузки термистор нагревается, сопротивление медленно уменьшается. Так осуществляется плавная регулировка тока в нагрузке.

Термисторы NTC достаточно эффективно обеспечивают защиту от нежелательно высоких пусковых токов. Преимущественной стороной здесь является то, что этот тип приборов способен эффективно обрабатывать более высокие пусковые токи по сравнению с резисторами стандартного образца.

Здравствуй, Хабрасообщество. После прочтения нескольких статей на хабе Arduino я загорелся заполучить эту игрушку. И вот недавно получил посылку с платой. Затем побаловался со светодиодами и захотел чего-нибудь посерьёзнее. Решил сделать простейший термометр, используя всего термистор, резистор на 10 кОм и LCD дисплей. Кому интересно что получилось - прошу под кат.

Начало

Термистор - это переменный резистор, меняющий своё сопротивление в зависимости от температуры окружающей среды.

Нам потребуются следующие детали:
Arduino Uno - 1 шт
Термистор - 1 шт
Резистор c сопротивлением 10 кОм - 1 шт
LCD дисплей HJ1602A - 1 шт
Соединительные перемычки - несколько штук

Всё это у меня было, поэтому я сразу начал проектирование на breadboard.

Ножки к экрану я еще припаял в день покупки.

Затем присоединяем экран к выходам Arduino. У моего экрана распиновка такая.

1 (GND) GND - Земля
2 (VDD) 5v - Питание(+)
3 (VO/Contrast) - Управление контрастностью (сюда я подключил переменный резистор)
4 (RS) - 12 - Канал данных
5 (RW) - 11 - Канал данных
6 (E) - 10 - Канал данных
11 (DB4) - 5 - Канал данных
12 (DB5) - 4 - Канал данных
13 (DB6) - 3 - Канал данных
14 (DB7) - 2 - Канал данных
15 (BL1/Backlight1) - 13 - Питание подсветки(+)
16 (BL2/Backlight2) - GND - Земля(-)

Получилась вот такая картина.

Далее подключим одну ногу термистора к аналоговому входу A4 и резистор на 10 кОм в землю, а вторую ногу термистора к 5V.

В общем то и всё. Аппаратная часть готова. Вот схема.

Программирование

С программированием тут всё понятно. Исходный код скетча:

// подключаем две библиотеки для работы с LCD и математических вычислений #include #include LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2); // инициализируем LCD int backLight = 13; void setup(void) { pinMode(backLight, OUTPUT); digitalWrite(backLight, HIGH); lcd.begin(16, 2); lcd.clear(); lcd.setCursor(0,0); } // создаем метод для перевода показаний сенсора в градусы Цельсия double Getterm(int RawADC) { double temp; temp = log(((10240000/RawADC) - 10000)); temp = 1 / (0.001129148 + (0.000234125 * temp) + (0.0000000876741 * temp * temp * temp)); temp = temp - 273.15; return temp; } // создаем метод для вывода на экран показаний сенсора void printTemp(void) { double temp = Getterm(analogRead(4)); // считываем показания с сенсора lcd.clear(); lcd.setCursor(0,0); lcd.print("Temperature is:"); lcd.setCursor(0,1); lcd.print(temp); lcd.print(" C"); } void loop(void) { printTemp(); // вызываем метод, созданный ранее delay(1000); }

Результат работы программы.