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 — номинальное сопротивление термистора в Омах.
Модифицируем программу для Ардуино, добавив расчет температуры: #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); } Результат:
Уже лучше! Программа показывает нам температуру в градусах Цельсия. Как и ожидалось, она немного ниже 25 C°.

Задания

  1. Термометр с дисплеем. Подключим к схеме символьный ЖК дисплей, и напишем программу, которая каждые 100 миллисекунд будет выводить на него температуру.
  2. Сигнализация перегрева. Добавим в схему зуммер и напишем программу, которая будет непрерывно вычислять температуру. В программе также должно быть условие: если температура превышает 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 #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); }

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

  • Сергей Савенков

    какой то “куцый” обзор… как будто спешили куда то