Arduino термосопротивление. Измерение температуры и влажности на Arduino – подборка способов. Прямой и косвенный нагрев
Для создания домашней метеостанции или термометра нужно научиться сопрягать плату Arduino и устройства для измерения температуры, и влажности. С измерением температуры можно справиться с помощью терморезистора или цифрового датчика DS18B20, а вот используют более сложные устройства - датчики DHT11 или DHT22. В этой статье мы расскажем, как измерить температуру и влажность с помощью Arduino и этих датчиков.
Измерение терморезистором
Самым простым способом определения температуры является использование . Это вид резистора сопротивление которого зависит от температуры окружающей среды. Выделяют терморезисторы с положительным и отрицательным температурным коэффициентом сопротивления - PTC (еще называют позисторы) и NTC-терморезисторы соответственно.
На графике ниже вы видите зависимости сопротивления от температуры. Штриховой линией изображена зависимость для терморезистора с отрицательным ТКС (NTC), а жирной сплошной линией для термистора с положительным ТКС (PTC).
Что мы здесь видим? Первое что бросается в глаза - это то, что у PTC-терморезистора график ломанный и измерять ряд значений температуры будет затруднительно или невозможно, а вот у NTC терморезистора график более-менее равномерный, хоть и явно нелинейный. Что это значит? С помощью NTC терморезистора легче измерять температуру, потому что легче выяснить, функцию по которой изменяются его значения.
Чтобы перевести температуру в сопротивление вы можете вручную снять значения, но это в домашних условиях сделать сложно и вам понадобиться термометр для определения реальных значений температуры среды. В даташитах некоторых компонентов приведена такая таблица, например для серии NTC-терморезисторов от компании Vishay.
Тогда можно организовать перевод посредством ветвлений с помощью функции if…else или switchcase. Однако если таких, таблиц в даташитах не приводится и приходится вычислять функцию, по которой изменяется сопротивление с ростом температуры.
Для описания этого изменение существует уравнение Штейнхарта-харта.
где A, B и C - это константы термистора определяемые по измерениям трёх температур с разницей не менее 10 градусов Цельсия. При этом разные источники указывают, что для типичного 10 кОм NTC-термистора они равны:
Примечание:
Кто хорошо понимает технический текст на английском языке и любит вычисления может ознакомиться со следующим документом: https://www.bipm.org/utils/common/pdf/ITS-90/Guide-SecTh-Thermistor-Thermometry.pdf
Это брошюра об измерениях температуры с помощью термистора выпущенная Консультативным комитетом по термометрии (ККТ).
Однако использование такого уравнение трудоёмко и в любительских проектах неоправданно, поэтому можно воспользоваться beta-уравнением для термистора.
B - бета-коэффициент, он рассчитывается на основе измерения сопротивления для двух различных температур. Указывается либо в даташите (что проиллюстрировано ниже), либо вычисляется самостоятельно.
При этом B указывается в виде:
Это значит, что коэффициент высчитывался исходя из данных полученных при измерении сопротивления при температурах 25 и 100 градусов Цельсия, именно такой вариант распространён более всего. Тогда его высчитывают по формуле:
B = (ln(R1) - ln(R2)) / (1/T1 - 1/T2)
Типовая схема подключения термистора к микроконтроллеру изображена ниже.
Здесь R1 - это постоянный резистор, термистор подключается к источнику питания, а данные снимаются со средней точки между ними, на схеме условно указано, что сигнал подаётся к выводу A0 - это .
Для расчета сопротивления термистора можно использовать следующую формулу:
Rтермистора=R1⋅((Vсс/Vвыход)−1)
Чтобы перевести в понятный для ардуино язык нужно вспомнить о том, что у ардуино 10-битный АЦП, значит максимальное цифровое значение входного сигнала (напряжением 5В) будет равно 1023. Тогда условно:
D - фактическое значение сигнала.
Rтермистора=R1⋅((Dmax /D)−1)
Теперь используем это для вычисления сопротивления и последующего вычисления температуры термистора с помощью бета-уравнения . Скетч будет таким:
Еще большую популярность для измерения температуры с помощью. Ардуино нашёл цифровой датчик DS18B20. Он связывается с микроконтроллером по интерфейсу 1-wire, вы можете подсоединить несколько датчиков (до 127) на один провод, а для обращения к ним вам придётся узнать ID каждого из датчиков.
Примечание: ID вы должны знать даже если используете всего 1 датчик.
Схема подключения датчика ds18b20 к Ардуино выглядит так:
В таком режиме не гарантируется корректная работа при измерении температуры выше 100 градусов Цельсия.
Цифровой датчик температуры DS18B20 состоит из целого набора узлов, как и любая другая ЦИМС. Её внутреннее устройство вы можете наблюдать ниже:
Для работы с ним нужно скачать библиотеку Onewire для Ардуино, а для самого датчика рекомендуется использовать библиотеку DallasTemperature.
Этот пример кода демонстрирует основы работы с 1 датчиком температуры, результат в градусах Цельсия выводится через последовательный порт после каждого считывания.
Эти датчики популярны и часто используются для измерения уровня влажности и температуры окружающей среды. В таблице ниже мы указали их основные отличия.
Схема подключения довольно проста:
1 вывод - питание;
2 вывод - данные;
3 вывод - не используется;
4 вывод - общий провод.
Если датчик у вас выполнен в виде модуля - у него будет три вывода, а резистор не потребуется - он уже распаян на плате.
Для работы нам нужна библиотека dht.h её нет в стандартном наборе, поэтому её нужно скачать и установить в папке libraries в папке с arduino IDE. Она поддерживает все датчики этого семейства:
DHT 21 (AM2301);
DHT 22 (AM2302, AM2321).
Заключение
В наше время создать свою станцию для измерения температуры и влажности очень просто благодаря платформе Arduino. Стоимость таких проектов составляет 3-4 сотни рублей. Для автономной работы, а не вывода данных на компьютер, может использоваться (их мы описывали в недавней статье), тогда можно построить портативный прибор для использования как дома, так и в машине. Пишите в комментариях что еще вы хотели бы узнать о простых самоделках на ардуино!
Терморезистор (или термистор) — это такой резистор, который меняет свое электрическое сопротивление в зависимости от температуры. Существует два вида термисторов: PTC — с положительным температурным коэффициентом, и NTC — с отрицательным. Положительный коэффициент означает, что с повышением температуры сопротивление термистора растёт. NTC-термистор ведет себя противоположным способом. Также термисторы отличаются номинальным сопротивлением, которое соответствует комнатной температуре — 25 C°. Например, популярными являются термисторы с номиналом 100 кОм и 10 кОм. Такие термисторы часто используют в 3D-принтерах. В этом уроке мы будет использовать термистор NTC 100K в стеклянном корпусе. Вот такой:
1. Подключение термистора к Ардуино
Чтобы измерить сопротивление термистора, подключим его в качестве нижнего плеча делителя напряжения. Среднюю же точку делителя подключим к аналоговому входу Ардуино — A0. Подобный способ использовался в . Подробно об аналоговых входах Ардуино мы говорили на уроке: Принципиальная схема Внешний вид макетаКакое сопротивление должен иметь резистор в верхнем плече делителя? Как правило, используют резистор с сопротивлением, совпадающим по порядку с номиналом термистора. В нашем уроке мы используем резистор на R1 = 102 кОм, его легко получить последовательным соединением двух резисторов на 51 кОм.
2. Программа для вычисления сопротивления термистора
Первая программа, которую мы напишем, будет вычислять сопротивление термистора в Омах. #define SERIAL_R 102000 // сопротивление последовательного резистора, 102 кОм const byte tempPin = A0; void setup() { Serial.begin(9600); pinMode(tempPin, INPUT); } void loop() { int t = analogRead(tempPin); float tr = 1023.0 / t - 1; tr = SERIAL_R / tr; Serial.println(tr); delay(100); } Результат работы программы:Можно заметить, что измеренное сопротивление термистора меньше 100 кОм, значит температура окружающей среды ниже 25 C°. Следующий шаг — вычисление температуры в градусах Цельсия.
3. Программа для вычисления температуры на термисторе
Чтобы вычислить значение температуры используют формулу Стейнхарта — Харта: Уравнение имеет параметры A,B и C, которые нужно брать из спецификации к датчику. Так как нам не требуется большой точности, можно воспользоваться модифицированным уравнением (B-уравнение): В этом уравнении неизвестным остается только параметр B, который для NTC термистора равен 3950. Остальные параметры нам уже известны:- T0 — комнатная температура в Кельвинах, для которой указывается номинал термистора; T0 = 25 + 273.15;
- T — искомая температура, в Кельвинах;
- R — измеренное сопротивление термистора в Омах;
- R0 — номинальное сопротивление термистора в Омах.
Уже лучше! Программа показывает нам температуру в градусах Цельсия. Как и ожидалось, она немного ниже 25 C°.
Задания
- Термометр с дисплеем. Подключим к схеме символьный ЖК дисплей, и напишем программу, которая каждые 100 миллисекунд будет выводить на него температуру.
- Сигнализация перегрева. Добавим в схему зуммер и напишем программу, которая будет непрерывно вычислять температуру. В программе также должно быть условие: если температура превышает 70 C°, то включаем зуммер.
Ноябрь 25, 2018
Терморезистор (термистор, термосопротивление) - полупроводниковый прибор, электрическое сопротивление которого изменяется в зависимости от его температуры.
Терморезистор был изобретён Самюэлем Рубеном (Samuel Ruben) в 1930 году.
Терморезисторы изготавливаются из материалов с высоким температурным коэффициентом сопротивления (ТКС), который обычно на порядки выше, чем ТКС металлов и металлических сплавов.
По типу зависимости сопротивления от температуры различают терморезисторы с отрицательным (NTC -термисторы, от слов «N egative T emperature C oefficient») и положительным (PTC -термисторы, от слов «P ositive T emperature C oefficient» или позисторы ) температурным коэффициентом сопротивления (или ТКС). Для позисторов - с ростом температуры растёт их сопротивление; для NTC -термисторов увеличение температуры приводит к падению их сопротивления.
Условно терморезисторы классифицируют как низкотемпературные (предназначенные для работы при температуpax ниже 170 Кельвин), среднетемпературные (от 170 до 510 К) и высокотемпературные (выше 570 К). Выпускаются терморезисторы, предназначенные для работы при температурах от 900 до 1300 К.
Термисторы бывают разных видов вот например:
Конкретно мне интересен термистор по нескольким параметрам. Во первых их используют для измерения температуры в Экструдере 3Д принтеров и они давольно хорошо измеряют температуру необходимую для плавления пластика. Во вторых размер, если посмотреть на 3тий тип термистора на картинке выше, который в эпоксидной смоле, он очень маленький и его можно зацепить за любую поверхность и мерить на ней температуру. Вот по этим параметрам я и собираюсь его использовать так как хочу сделать станок для изготовления прутка для печати на 3Д принтере.
В данном примере будем использовать простейший NTC термистор c номинальным сопротивлением 100 кОм при температуре 25 градусов “С” который используется в 3Д принтерах. Данный термистор имеет маркирову 3950.
Для реализации нам понадобится:
Схема подключения всех элементов будет выглядеть следующим образом:
Чтобы вычислить значение температуры используют формулу Стейнхарта - Харта:
Уравнение имеет параметры A,B и C, которые нужно брать из спецификации к датчику. Так как нам не требуется большой точности, можно воспользоваться модифицированным уравнением (B-уравнение):
В этом уравнении неизвестным остается только параметр B, который для NTC термистора равен 3950. Остальные параметры нам уже известны:
- T0 - комнатная температура в Кельвинах, для которой указывается номинал термистора; T0 = 25 + 273.15;
- T - искомая температура, в Кельвинах;
- R - измеренное сопротивление термистора в Омах;
- R0 - номинальное сопротивление термистора в Омах.
Скетч будет выглядеть следующем образом:
#define B 3950 // B-коэффициент #define SERIAL_R 102000 // сопротивление последовательного резистора, 102 кОм #define THERMISTOR_R 100000 // номинальное сопротивления термистора, 100 кОм #define NOMINAL_T 25 // номинальная температура (при которой TR = 100 кОм) const byte tempPin = A0; void setup() { Serial.begin(9600); pinMode(tempPin, INPUT); } void loop() { int t = analogRead(tempPin); float tr = 1023.0 / t - 1; tr = SERIAL_R / tr; Serial.print("R="); Serial.print(tr); Serial.print(", t="); float steinhart; steinhart = tr / THERMISTOR_R; // (R/Ro) steinhart = log(steinhart); // ln(R/Ro) steinhart /= B; // 1/B * ln(R/Ro) steinhart += 1.0 / (NOMINAL_T + 273.15); // + (1/To) steinhart = 1.0 / steinhart; // Invert steinhart -= 273.15; Serial.println(steinhart); delay(100); }
Вот что мы увидим в мониторе порта:
Видим из показаний, что сопротивление побольше чем 100кОм и температура 23 градуса, вполне логично, формула отрабатывает правильно.
Теперь с помощью данной формулы мы уже можем строить разные условия для разных действий.
Подключим к ардуино один из доступных датчиков — датчик температуры или термистор.
Обозначение термистора на схемах
Термистор - полупроводниковый резистор , электрическое сопротивление которого существенно зависит от температуры. При повышении температуры сопротивление снижается.
Что хотим
Строим схему с термистором и меняем количество горящих диодов в зависимости от температуры.
Что понадобится
Кроме всего обычного — термистор. Мы используем B57164-K0103.
Этапы работы
- Собираем схему №1
- Определяем диапазон изменения температуры
- Совершенствуем схему и программу
- Радуемся результату
- Генерируем идеи.
Собираем схему №1
Используем резистор на 10KOm
Схема очень напоминает схему с кнопкой, но теперь вместо кнопки ставим термистор и соединяем его с аналоговым входом А2.
Аналоговый вход может различать силу сходящего сигнала. 0 - минимальный уровень, 1023 - максимальный. Говорят, 10-битная градация (2 10 =1024).
Если убрать термистор вообще, то уровень сигнала будет равен нулю, но если термистор поставить, то через него начнёт течь ток и попадать на A2 вход. Наша задача определить условное напряжение на входе, установить его минимальную и максимальную границу в зависимости от температуры термистора.
Программа:
void setup () {
pinMode(A2,INPUT); //A2 пин - на вход сигнала
Serial.begin(9600); //связь с компьютером 9600 бит/с
}
void loop () {
int t = analogRead(A2); //читаем значение с A2
Serial.println(t); //пишем это значение в //последовательный порт (для нас это USB)
delay(10); // немного ждём
}
Прошиваем программу. На экране находим кнопку «Serial Monitor», жмём.
Кнопка Serial Monitor
В открывшемся окне бегут числа - это условное значение, зависящее от температуры. Запишите минимальное число, которое вы успели заметить. Теперь аккуратно возьмитесь за резистор - от тепла Ваших рук его температура повысится и числа на экране увеличатся. Пусть это будет максимальная температура.
Совершенствуем схему.
Подсоединим к схеме 3 диода, «повесив» их на 10-12 порт платы.
Аккуратно с диодами.
Пусть при минимальной температуре горит один диод, при увеличении температуры - 2, а при максимальной температуре - все 3.
Для этого в программе проведем калибровку входящих показаний. Пусть минимальная значение равно 540, максимальное (когда мы хотим зажечь все три диода) - 600.
Определим значение переменной led следующим образом:
int led = map (t,540,600,0,3);
Таким образом при изменении показаний переменной t от 540 до 600 единиц значение переменной led будет меняться от 0 до 3.
Пишем программу
Void setup () {
pinMode(A2,INPUT); //A2 пин - на вход сигнала
Serial.begin(9600); //связь с компьютером 9600 бит/с
for (int i=10; i<=12; i++) {
pinMode (i,OUTPUT);
void loop () {
int t = analogRead(A2); //читаем значение с A2
int led = map (t,540,600,0,3);
if (led>=1) {digitalWrite(10,HIGH);}
else {digitalWrite(10,LOW);}
if (led>=2) {digitalWrite(11,HIGH);}
else {digitalWrite(11,LOW);}
if (led>=3) {digitalWrite(12,HIGH);}
else {digitalWrite(12,LOW);}
Serial.println(t); //пишем это значение в //последовательный порт (для нас это USB)
delay(10); // немного ждём
Ну, вроде, всё работает.
Подумайте, где можно применять собранную схему.
А если диоды заменить чем-то еще?
Попробуйте подсоединить еще несколько диодов для более точного отображения температуры.
Здравствуй, Хабрасообщество. После прочтения нескольких статей на хабе 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
Результат работы программы.