Измерение температуры и влажности на 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. Тогда условно:

Dmax = 1023;

D – фактическое значение сигнала.

Тогда:

Rтермистора=R1⋅((Dmax /D)−1)

Теперь используем это для вычисления сопротивления и последующего вычисления температуры термистора с помощью бета-уравнения на языке программирования для Ардуино. Скетч будет таким:

DS18B20

Еще большую популярность для измерения температуры с помощью. Ардуино нашёл цифровой датчик DS18B20. Он связывается с микроконтроллером по интерфейсу 1-wire, вы можете подсоединить несколько датчиков (до 127) на один провод, а для обращения к ним вам придётся узнать ID каждого из датчиков.

Примечание: ID вы должны знать даже если используете всего 1 датчик.

Схема подключения датчика ds18b20 к Ардуино выглядит так:

Также есть режим паразитного питания – его схема подключения выглядит так (нужно два провода вместо трёх):

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

Цифровой датчик температуры DS18B20 состоит из целого набора узлов, как и любая другая ЦИМС. Её внутреннее устройство вы можете наблюдать ниже:

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

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

Научитесь разрабатывать устройства на базе микроконтроллеров и станьте инженером умных устройств с нуля: Инженер умных устройств

DHT11 и DHT22 – датчики влажности и температуры

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

Схема подключения довольно проста:

1 вывод – питание;

2 вывод – данные;

3 вывод – не используется;

4 вывод – общий провод.

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

Для работы нам нужна библиотека dht.h её нет в стандартном наборе, поэтому её нужно скачать и установить в папке libraries в папке с arduino IDE. Она поддерживает все датчики этого семейства:

DHT 11;

DHT 21 (AM2301);

DHT 22 (AM2302, AM2321).

Пример использования библиотеки:

Заключение

В наше время создать свою станцию для измерения температуры и влажности очень просто благодаря платформе Arduino. Стоимость таких проектов составляет 3-4 сотни рублей. Для автономной работы, а не вывода данных на компьютер, может использоваться символьный дисплей (их мы описывали в недавней статье), тогда можно построить портативный прибор для использования как дома, так и в машине. Пишите в комментариях что еще вы хотели бы узнать о простых самоделках на ардуино!

Смотрите также по этой теме:

10 причин, почему вы должны изучать электронику

Популярные датчики для Arduino - подключение, схемы, скетчи

7 учебных курсов по работе с Ардуино, онлайн обучение проектированию и конструированию электронной аппаратуры

Покупки в Aliexpress с кэшбэком

Алексей Бартош


Источник: http://electrik.info