Описание Подключение аналогового датчика температуры Применение
Аналоговый датчик температуры (рисунок 1), входящий в состав ARDUINO SENSOR KIT, предназначен для определения температуры воздуха окружающей среды. Чувствительный элементом модуля является терморезистор, который меняет свое сопротивление в зависимости от температуры окружающей среды. В зависимости от изменения сопротивления датчика меняется и величина сигнала, получаемого на выходе. Цифровой датчик температуры состоит из платы, на которой смонтированы 3 порта подключения к плате Arduino, терморезистор и резистор 10 кОм. Технические характеристики аналогового датчика температуры представлены в таблице.
Рисунок 1 — Аналоговый датчик температуры Arduino.
Таблица – Технические характеристики аналогового датчика температуры.
Параметр | Значение |
---|---|
Номинальное рабочее напряжение | от 3 В до 5 В |
Тип сигнала | аналоговый |
Диапазон измерения температуры | от -55 °C до +125 °C |
Габаритные размеры | 30 мм x 15 мм x 5 мм |
Следует отметить, что в зависимости от изменения сопротивления от температуры различают терморезисторы с отрицательным (NTC — Negative Temperature Coefficient) и положительным (PTC — Positive Temperature Coefficient) температурным коэффициентом сопротивления. Для PTC-терморезисторов — с ростом температуры растёт их сопротивление, для NTC-терморезисторов увеличение температуры приводит к падению их сопротивления. Это следует учитывать при выборе скетча, используемого для управления работой аналогового датчика температуры. В противном случае показания датчика не будут соответствовать действительному изменению температуры.
Распиновка аналогового датчика температуры представлена на рисунке 2.
Рисунок 2 – Распиновка аналогового датчика температуры Arduino.
Для его подключения потребуются:
Схема подключения аналогового датчика температуры к плате Arduino представлена на рисунке 3.
Рисунок 3 – Подключение аналогового датчика температуры к Arduino UNO.
Схемы подключения аналогового датчика температуры к микроконтроллерам Arduino Uno, Arduino Nano или Arduino Mega принципиально ничем не отличаются.
Подключается аналоговый датчик температуры к Arduino Uno следующим образом:
Из возможных проблем, отмечаемых пользователями при подключении данного датчика, следует отметить маркировку портов, не всегда соответствующую их действительному назначению (могут не совпадать порты GND и порт для получения данных).
После сборки электрической схемы, необходимо загрузить управляющую программу (скетч) в микроконтроллер. Затем можно открыть монитор порта и понаблюдать за получаемыми датчиком значениями.
Датчик применяется для контроля температуры воздуха в помещении. Данный датчик может использоваться в системе охлаждения воздуха, домашней сигнальной системе и других проектах. Так же датчик можно использовать для определения температуры поверхностей различных объектов (для это, необходимо механически прижать датчик к поверхности с помощью креплений, через разъемы на плате, а между поверхностью и терморезистором нанести теплопроводящую пасту).
Некоммерческое использование, DMCA Contact Us
Введение в статью
Список деталей для экспериментальной части
Аппроксимация термисторов по методу Стейнхарта-Харта
Измерение сопротивления с помощью делителя напряжения
Выбор резистора для оптимального диапазона термистора
Эксперимент с термистором на Arduino
Сравнение DHT22 и термистора
Заключение
PCBGOGO — Производитель Спонсор этого проекта
Термистор, название которого образовано от комбинации therm al и res istor , представляет собой датчик температуры, который регистрирует изменения внутреннего сопротивления в зависимости от температуры. Термисторы часто выбирают вместо термопар, потому что они более точны, имеют более короткое время отклика и, как правило, дешевле. Для большинства приложений термисторы являются разумным и простым выбором для измерения температуры ниже 300 градусов Цельсия [подробнее о разнице между термистором и термопарой здесь ]. В нашем случае мы будем использовать термистор с отрицательным температурным коэффициентом (NTC), сопротивление которого уменьшается с повышением температуры. Термисторы NTC чаще всего используются в коммерческих продуктах, работающих при температурах в десятки градусов, таких как термостаты, тостеры и даже 3D-принтеры. Будет использоваться термистор NTC 3950 100k, рассчитанный на сопротивление 100kOhm при 25 градусах Цельсия. В этом учебном пособии будут представлены методы связи сопротивления с температурой путем подгонки данных заводской калибровки. Производительность термистора также будет оцениваться с использованием платы Arduino и простого эксперимента по закону охлаждения Ньютона.
Увеличенная фотография термистора NTC 3950 100k. Дизайн стеклянных шариков можно увидеть на конце оголенного двойного провода.
Я буду использовать термистор NTC 3950 100k, как упоминалось выше, и он будет основным компонентом, используемым в этом руководстве. Кроме того, потребуется плата Arduino вместе с датчиком температуры DHT22, если пользователь планирует полностью следовать этому эксперименту. Я добавил список деталей ниже с партнерской ссылкой от amazon:
Термистор NTC 3950 100k — 8,99 долл. США (5 шт.) [Amazon]
Arduino Uno — 11,86 долл. США [Amazon]
Датчик температуры DHT22 — 4 долл. США 0,99 [Amazon]
Резисторы 220k и 10k — 10,86$ ( 525 шт. ) [Amazon]
Макетная плата — 7,86 долл. США (6 шт.) [Amazon]
Конденсатор 10 мкФ — 17,99 долл. США (500 шт.) [Amazon]
Проволочные перемычки — 5,99 долл. США (120 шт.) [Amazon]
Термисторы можно аппроксимировать, приняв функцию третьего порядка, называемую Steinhart-H. художественное приближение [источник по калибровке термистора] :
где Т — температура, рассчитанная по изменению сопротивления термистора, Р . Коэффициенты С 0 , С 1 и С 2 необходимо найти методом нелинейной регрессии. Уравнение Стейнхарта-Харта часто упрощают и переписывают как экспоненту первого порядка:
Теперь мы видим примерный способ соотнесения Т к сопротивлению, Р . Коэффициенты а, б, в можно найти с помощью метода наименьших квадратов по данным заводской калибровки, которые можно получить у производителя. Для моего термистора я нашел заводские таблицы, которые позволили мне подобрать данные, используя приведенное выше уравнение [пример таблицы данных с таблицей].
Используя Python, я смог загрузить одну из таблиц для моего термистора и подогнать данные к экспоненциальной кривой, используя приведенную выше функцию и набор инструментов scipy «curve_fit». Полученное соотношение и коэффициенты показаны ниже:
Рис. 1: Заводская калибровка соотношения температуры и сопротивления для показаний термистора.
Теперь, когда у нас есть связь между сопротивлением провода термистора и измеренной температурой, нам нужно понять, как мы можем преобразовать сопротивление в осмысленную величину, которую мы можем измерить с помощью аналого-цифрового преобразователя, а именно, нам нужно преобразовать сопротивление в напряжение. И это объясняется в следующем разделе.
Arduino имеет 10-битный аналого-цифровой преобразователь (АЦП), который измеряет значения напряжения. Поскольку наш термистор выдает сопротивление, нам нужно построить зависимость между нашим сопротивлением и напряжением, чтобы связать изменение сопротивления с напряжением. Мы можем сделать это с помощью простого делителя напряжения:
Рис. 2: Схема делителя напряжения для измерения напряжения вместо сопротивления термистора.
Для Arduino мы будем использовать 3,3 В в качестве нашего V 0 для снижения помех при измерениях термистора. Используя законы Кирхгофа, чтобы вывести соотношение между нашим входным напряжением и двумя сопротивлениями, используя следующее соотношение:
, которые мы можем переписать через сопротивление и ток общей петли:
Наконец, мы можем переписать наш ток как функцию двух сопротивлений контура:
Объединив последние два уравнения, мы можем получить представление для напряжения на втором резисторе (наш термистор):
, которое мы можем решить для В 2 , это напряжение, которое будет считывать Arduino:
а если чуть чуть:
И, наконец, классическое уравнение делителя напряжения:
Уравнение делителя напряжения чрезвычайно важно для определения сопротивления термистора, R 2 , к напряжению, считываемому Arduino. Но прежде чем мы прочитаем R 2 , мы должны сначала решить, какие R 1 мы хотим выбрать для схемы делителя напряжения. А так как мы уже знаем В 0 = 3,3В, то последним неизвестным является резистор делителя.
Это может быть неочевидно, но правильный выбор R 1 имеет решающее значение. Для этого требуется знание взаимосвязи между сопротивлением термистора и измеряемой температурой. Мы можем начать с переписывания уравнения делителя напряжения:
и если мы решим для R 1 :
Мы, конечно, можем переписать R 2 с точки зрения подходящих параметров и температуры:
И если мы предполагаем диапазон температур, мы можем взять середину диапазона температур и поставить V 2 в середине, гарантируя, что наше значение R 1 точно поместит середину температурного диапазона в середину диапазона напряжений Arduino. После того, как резистор будет рассчитан из желаемого диапазона температур, мы можем использовать следующее уравнение для прогнозирования напряжения Arduino в зависимости от температуры:
Теперь мы можем использовать параметры подгонки из уравнения термистора, полученного на заводе, и построить график, демонстрирующий реакцию напряжения на изменения температуры и сопротивление делителя напряжения, Р 1 . Используя В 0 = 3,3 В, график будет выглядеть следующим образом:
Рис. 3: Кривые отклика сопротивления делителя напряжения . Реакция напряжения термистора изменяется в зависимости от выбранного резистора делителя напряжения. Обязательно выберите резистор рядом с резистором выше для вашего конкретного желаемого диапазона температур.
Полная реализация алгоритмов и рисунков 1 и 3 реализована ниже в Python 3.6.
Теперь, когда у нас есть зависимость между напряжением, считываемым Arduino, и температурой, измеренной термистором, и мы выбрали резистор делителя напряжения, теперь мы можем проверить, работает ли система и работает ли она. наш алгоритм правильный! Правильный прогноз температуры по известным параметрам выше выглядит следующим образом:
Мы используем a, b, c из нашей подгонки выше для таблицы данных термистора. Мы также выбрали R 1 на основе желаемого диапазона температур, а V 0 устанавливается с помощью Arduino. Наконец, мы можем ввести V 2 в уравнение как переменную, которая считывается с одного из аналоговых выводов. Но прежде чем мы реализуем приведенное выше уравнение, давайте сначала подключим Arduino и термистор в сценарии с делителем напряжения:
. Рисунок 4: Arduino + Термисторная схема делителя напряжения. Также обратите внимание на внешнее опорное напряжение 3,3 В — мы выбираем 3,3 В, потому что схема делителя напряжения, скорее всего, никогда не достигнет более высоких напряжений из-за интересующего нас рабочего диапазона. Выбор 3,3 В также приводит к снижению шума для АЦП. Я также подключил конденсатор емкостью 10 мкФ к контактам 3,3 В и GND, чтобы также снизить уровень шума.
Можно сделать несколько замечаний относительно приведенной выше схемы подключения. Во-первых, между контактами 3,3 В и GND помещается конденсатор емкостью 10 мкФ. Кроме того, важно отметить, что мы будем использовать внешнее опорное напряжение с помощью контакта 3,3 В. И причина двоякая: ожидаемое напряжение от термистора будет в диапазоне 1,5 В, а во-вторых, вывод 3,3 В имеет меньше шума, поэтому наши показания напряжения будут более стабильными, что приведет к более стабильным показаниям температуры (подробнее о опорное напряжение здесь). Код Arduino для измерения температуры с использованием наших выводов выше и проводки на рисунке 4 приведен ниже:
Приведенный выше код усредняет 10 показаний температуры для более стабильного вывода и дает показания примерно каждые 500 мс как в градусах Цельсия, так и в градусах Фаренгейта. Параметры должны быть обновлены для пользовательского термистора, а среднее значение также может быть скорректировано в зависимости от желаемой пользователем стабильности.
Рисунок 5: Эффект сглаживания конденсатора на АЦП для показаний термистора.
В следующем разделе я сравниваю наш термистор с датчиком температуры и влажности DHT22.
В качестве простого теста я решил подключить датчик температуры и влажности DHT22, чтобы увидеть, насколько точно уравнение термистора аппроксимирует температуру на основе его сопротивления. DHT22 — это классический датчик Arduino, поэтому я ожидал, что они будут довольно близки при сравнении при комнатной температуре. Я также хотел увидеть их реакцию на повышение температуры окружающей среды и посмотреть реакцию во времени, чтобы понять, как датчики работают в сценариях с активно меняющейся температурой.
Схема подключения термистора и датчика DHT22 показана ниже.
Рис. 6: Подключение для сравнения между датчиком DHT22 и термистором.
Код Arduino для сравнения DHT22 и термистора также приведен ниже. Он использует библиотеку «SimpleDHT», которую можно установить через диспетчер библиотек.
Приведенный выше код вычисляет обе температуры и выводит их на последовательный монитор каждые 0,5 секунды. Он также усредняет каждые 10 показаний термистора. Код также выводит разницу между двумя методами датчика температуры. Ниже я нанес на график разницу температур, чтобы показать среднее отклонение между термистором и DHT22.
Разница между показаниями температуры термистора DHT22 и NTC
В среднем и в зависимости от фактической температуры разница может составлять 0,05 C — 1,5 C. И этот диапазон, вероятно, связан с несколькими вещами: АЦП на Arduino несколько шумит, даже с конденсатором и внешним опорным напряжением 3,3 В. — не говоря уже о том, что он всего 10-битный; уравнение термистора также содержит некоторую погрешность, поэтому для очень точных показаний интерполяция температуры за температурой будет наиболее точным способом обеспечения качественных результатов; и, наконец, DHT22 дополнительно несет с собой ошибку 0,5 C, поэтому мы можем ожидать, что ошибки между ними будут достигать 2 C. Таким образом, тот факт, что мы видим разницу между ними всего в 0,5 C, не так уж и плох!
Чтобы сравнить возможности двух датчиков, на графике ниже показана мощность термистора и слабость DHT22:
Разница между DHT22 и термистором во время горячего порыва
На приведенном выше графике легко увидеть мощность термистора и его способность справляться с быстро меняющимися сценариями. DHT22 рассчитан только на частоту обновления 0,5 с и на самом деле может обрабатывать только температуру окружающей среды, а не большие всплески тепла или холода. График ниже действительно иллюстрирует недостатки способности DHT22 справляться с резкими перепадами температуры. Термисторы довольно быстро реагируют на температуру, в то время как DHT22 снимает несколько показаний. DHT22 также требует некоторого времени для восстановления после периода нагрева, в первую очередь из-за его корпуса и медленного отклика компонентов.
Термистор и тепловые характеристики DHT22
Термистор является явным победителем, когда колебания температуры имеют большое значение для измерений. Вот почему их часто используют в экспериментах, где температура колеблется быстро и необходимы точные измерения.
Рис. 7: Термистор со стеклянными шариками рядом с датчиком температуры DHT22.
В этой статье я рассказал о термисторах и о том, как реализовать их в Arduino, подгоняя данные заводской калибровки для получения точных коэффициентов для определения температуры по сопротивлению. Я также обсудил, как использовать делитель напряжения для измерения напряжения как функции сопротивления, выдаваемого термистором. И, наконец, я использовал датчик температуры DHT22, чтобы сравнить точность и преимущества использования термистора.
Термисторы используются в самых разных областях благодаря их точности, высокой чувствительности в быстро меняющихся условиях, а также недорогому и простому в использовании аппаратному обеспечению. Одной из трудностей при использовании термисторов является их нелинейный отклик, однако с качественной калибровкой и кривыми отклика нелинейные эффекты можно устранить. Есть много других экспериментов, которые можно провести с термисторами для анализа их временных характеристик, снижения нелинейных помех и исследования эффектов самонагрева. Этот проект должен был представить термисторы и их теорию, а также улучшить понимание того, почему они являются отличным выбором по сравнению с другими методами измерения температуры.
Если вам понравился эксперимент, поделитесь проектом и перейдите на сайт pcbgogo. com, чтобы приобрести нестандартную печатную плату для своих собственных проектов в области электроники.
См. больше в разделе Arduino и датчики:
Arduino, анализ данных, инженерия, программирование, PythonJoshua Hrisko Seinhart-Hart, Термистор, NTC, NTC 3950, NTC 3950 100k, NTC 100k, Термистор Arduino, Уравнение термистора, Arduino Fit, Кривая Arduino, Подгонка термистора , Данные термистора, Термистор DHT22, DHT22, Arduino DHT22, Датчик Arduino, Датчик, Напряжение, Делитель напряжения, Сопротивление, Резистор, Python, Подгонка Python, Подгонка кривой Python, Python Scipy, Эксперимент с термистором, Проект термистора, Эксперимент Arduino, Проект Arduino, КонденсаторКомментарий
0 лайковin Учебник, Учебник
Термисторы NTC часто являются лучшим решением для измерения температуры в диапазоне от -40 °C до 100 °C благодаря их чрезвычайной чувствительности, доступности и возможности надежного изготовления в очень малых размерах. Однако термистор NTC напрямую не обеспечивает показания температуры в цифровом формате, который может быть непосредственно использован другими устройствами. Термистор NTC изменяет сопротивление в зависимости от температуры и имеет отрицательный температурный коэффициент (NTC), что означает, что при нагревании датчика его сопротивление снижается, а при охлаждении датчика его сопротивление увеличивается. Чтобы преобразовать это показание сопротивления в цифровое показание температуры, необходимо использовать аналого-цифровой преобразователь (АЦП). В этом уроке мы обсудим схему, которую будем использовать, а в следующем выпуске этого блога мы обсудим код, используемый для ее запуска. 10 = 1024 различных показания, разбросанных по заданному диапазону напряжения. В этом учебном пособии мы начнем с простого примера и попытаемся обеспечить точность всей измерительной системы ±1 °C в диапазоне от 0 °C до 70 °C. 10-битный АЦП имеет разрешение для выполнения этой задачи.
Рис. 1. Макетная схема термистора с использованием Arduino Nano, снимок экрана сделан с использованием Fritzing
Как видно из рисунка 1 выше, единственными дополнительными компонентами, которые нам нужны, являются термистор, резистор и конденсатор. Мы будем использовать термистор 10 кОм, кривая 44, термистор с точностью ±0,5 °C, резистор 10 кОм с точностью 1% и керамический конденсатор емкостью 0,1 мкФ (100 нФ). Эти компоненты при использовании с фильтром калибровки показаний сопротивления в коде, откалиброванном для этой цепи, обеспечивают точность измерения ±1 °C. (Подробнее о калибровочном фильтре в следующем выпуске этого блога.) Мы могли бы использовать более точный термистор и более точный резистор, но, поскольку для нашего приложения требуется точность только ±1 °C, это приведет к ненужным затратам. Вот более подробное объяснение схемы:
Рис. 2. Схема термистора с использованием Arduino Nano/Uno, скриншот получен из Kicad
Делитель напряжения используется с резистором (R1) и термистором (Th2). Сторона делителя напряжения, соединенная с землей, выбрана в качестве термистора, так как термистор часто более подвержен потенциальным коротким замыканиям, а, по крайней мере, потенциальные короткие замыкания защищены сопротивлением верхней части делителя напряжения. Показания АЦП снимаются с середины делителя. На входе АЦП имеется конденсатор емкостью 0,1 мкФ (C1), развязанный с землей, что помогает сгладить входной шум и обеспечивает стабильные показания без необходимости передискретизации показаний АЦП.
Контакт A1 выбран в качестве цифрового выхода или простого источника напряжения включения/выключения для подачи тока в цепь термистора. Мы будем замерять показания термистора только примерно раз в секунду, поэтому нет необходимости в постоянном протекании тока через термистор, что способствует ненужному самонагреву термистора и слегка изменяет точность показаний. В большинстве случаев этот эффект незначителен, но весьма заметен для крошечных термисторов. Для нашего приложения мы включим схему на 100 миллисекунд, чтобы позволить конденсатору стабилизироваться, запишем наши показания АЦП, а затем выключим схему на 9 миллисекунд.00 миллисекунд, чтобы свести к минимуму любой потенциальный самонагрев.
Мы хотим, чтобы наша схема имела точность ±1 °C, поэтому мы должны просуммировать все наши допуски и убедиться, что они находятся в нужном нам диапазоне. По мере повышения температуры термистора NTC не только снижается его сопротивление, но и значение отрицательного температурного коэффициента (NTC) становится немного менее выраженным. Например, термистор с кривой 44 имеет значение NTC -4,4 %/°C при 25 °C и значение NTC -3,4 %/°C при 70 °C. Поскольку мы хотели бы, чтобы наша точность считывания температуры составляла ±1 °C до 70 °C, наше ограничение на общую системную точность считывания сопротивления и преобразования в температуру будет составлять ±3,4 %.
Использование термистора ±0,5 °C, рассчитанного на 70 °C, может привести к ошибке ±3,4% / 2 = ±1,7%.
Использование резистора 10 кОм ±1% в делителе напряжения добавляет погрешность ±1%.
Это оставляет нас с ±(3,4% — 1,7% — 1%) = ±0,7% остаточной допустимой погрешности для ошибки измерения АЦП или любых других ошибок, таких как сдвиг ±1% резистора 10 кОм, если этот резистор нагревается или охлаждается вниз. Например, стандартный резистор ± 1% 10 кОм, вероятно, может иметь температурный коэффициент ± 100 ppm / ° C, что в диапазоне ± 20 ° C составляет погрешность ± 0,2% для резистора, поэтому мы остаемся с ± (0,7 % — 0,2%) = погрешность измерения ±0,5%.