Высокоточный термометр на основе arduino

Arduino: Делаем самостоятельно датчик температуры

Температура является едва ли не основным измеряемым параметром в промышленной и хозяйственной деятельности. Вместе с тем, мало просматривается экономически обоснованных реализации датчиков температуры даже в диапазоне -50 +50 Град С , столь обычном и привычным для многих применений. Известны на рынке датчики DS18B20 фирмы Dallas , заявленная точность которых около 0,5 Град. Эти датчики были рассчитаны на построение микросетей (MicroLAN) с осуществлением адресного опроса каждого датчика со стороны микроконтроллерного устройства по протоколу 1-Wire. Однако, реализаций таких сетевых решений, когда линию связи делили бы десяток и более таких устройств, практически не встречается. Аналогична ситуация и температурными датчиками протокола I 2 C фирмы Philips, например такими, как LM75. Все это вызывает определенное недоверие к проработанности схемотехники указанных датчиков температуры. Что же делать, если необходимо иметь несколько точек измерения температуры, опрашиваемых с помощью микроконтроллера?

В эпоху аналоговых электронных термометров нередко можно было встретить схемы с диодными датчиками температуры. Уместно, к примеру, привести схему из справочника радиолюбителя [1 ] . В ней, в качестве датчика температуры, используется обычный кремниевый диод, а точность измерения, при этом, составляет 0,3 Град.

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

В качестве Ардуино устройства используем плату TE-MINI328 , от московской компании «Терраелектроника» , которая на проверку оказалась совместима с Ардуино серии Nano.https://www.terraelectronica.ru/catalog_info.php?CODE=1041000

Принципиальная схема платы:

Практически в каждой реализации платы Ардуино имеется вывод источника опорного напряжения встроенного АЦП. Этот источник имеет уровень напряжения 1,1В у ардуино нано. Для других плат он может быть другим , например 2,54В, что зависит в общем от типа используемого микроконтроллера. Этот источник стабильного напряжения можно использовать как раз для питания температурного датчика, хотя и следует иметь в виду его относительно небольшой выходной ток.

Платформа Ардуино удобна тем, что на ней легко реализуются базовые принципы структурного программирования: наследование, полиморфизм и инкапсуляция. В качестве прародителя целесообразно взять готовую работающую программу (Sketch) и , на ее основе, дополнить необходимым функционалом, который может присутствовать также во встроенном пакете библиотек. В качестве базы в данном примере была использована программа выложенная в открытый доступ коллегами из фирмы OLIMEX (Болгария) , которая реализует часы реального времени на базе микросхемы PCF8563, являющаяся наиболее дешевой из однокристальных часов реального времени (https://www.olimex.com/Products/Duino/AVR/OLIMEXINO-328/resources/OLIMEXINO_328_MOD_RTC_Demo.zip) [2]. Далее эта программа была дополнена функцией работы с LCD индикатором известной системы команд HD44780 c четырех проводной шиной команд/данных (имеется во встроенной библиотеке Ардуино). Имея в системе этот индикатор, нам легче будут в дальнейшем провести калибровку нашего температурного датчика, и наблюдать за температурой и временем даже не используя монитор последовательного порта, который встроен в среду Ардуино.

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

РИС 2

Для изготовления диодного температурного датчика возьмем популярный импортный диод 1N4148, хотя подойдут и аналогичные отечественные, например КД521 или Д220. По нашим наблюдениям хорошей линейностью вольт- температурной характеристикой обладают и многие германиевые диоды, например Д9, у которых падение напряжения при прямом смещении оказывается раза в 2 меньше, чем у кремниевых. Поскольку работать диодный датчик будет в области малых токов, примерно 100 МкА, следует тщательно изолировать проводные выводы с помощью виниловой трубки, торцы которой следует оплавить, например, с помощью промышленного фена или загермитизировать силиконовым герметиком или применив клеевый пистолет. Воспользоваться можно и термоусадочной трубкой соответствующего диаметра. Все это необходимо для того, чтобы вода ни в коем случае не могла попасть внутрь изоляции, что неизбежно привело бы к искажениям результатов измерений. Также в расчет следует взять и тот факт, что диоды со стеклянным корпусом могут реагировать на попадание света внутрь корпуса, отчего определенным преимуществом будут обладать экземпляры с корпусом, покрытым черной краской (например КД503 Д220 и т.п.) Как указывалось выше для Ардуино Nano уровень опорного напряжения составляет 1,1 В. Поскольку падение напряжения на кремниевом диоде при комнатной температуре и току смещения 100МкА составляет прмерно 500мВ диапазон использования встроенного АЦП микроконтроллера ATMega328 , перекрывает диапазон температур от -50 до +50 Град С, так как падение напряжения на диоде не выйдет за пределы 0—1,1 В. Правда точность измерений в этом случае лучше чем 1 град ожидать не приходится. Для указанной схемы питания датчика, вольт- температурная характеристика будет иметь вид рис2. Т.е. , с повышением температуры, падение напряжения уменьшается. Зависимость температуры Т от напряжения Ud очевидно описывается уравнением вида:

Читайте также:
Как заменить CD-плеер на телефон в автомобиле.

Для нахождения неизвестных коэффициента пропорциональности В и коэффициента смещения А необходимо произвести по крайней мере два калибровочных измерения температуры в точках этой характеристики, отстоящей как можно дальше друг от друга. Измерение Т получают отсчетом калибровочного термометра (в качестве которого можно взять ртутный, спиртовой или электронный)( В моем случае удобно было использовать для калибровки более современный , измеряющий одновременно комнатную и “уличную” температуру фото1 ) Фото 1

Фото 1

, а Ud –есть отсчет АЦП для этой температуры . Получим, в результате, два уравнения вида 1.1, для разных измеренных температур. Разрешая пару этих уравнений относительно неизвестных А и В – получаем нужные нам калибровочные значения, которые будем использовать в программе для перевода отсчета АЦП к значению реальной температуры. Вышесказанное закрепим теперь практическим примером:

1. Помещаем датчик в среду с температурой Т1 (19,9 ГрадС)и записываем значение цифрового отсчета Ud1 (450)

2. Помещаем датчик в среду с температурой Т2 (-2,8 ГрадС) и записываем значение цифрового отсчета Ud2 (503) для этой температуры

3. Получив систему линейных уравнений : Т1=A-B*Ud1 и T2=A-B*Ud2

Разрешая их относительно неизвестных A и B получаем А=0,46, а В=229,5

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

Возникает попутно интересный вопрос: Можно ли эту процедуру вычисления калибровочных коэффициентов А и В провести и без использования Ардуино? Если в распоряжении имеется лишь цифровой тестер, то наверное да. При этом следует учесть, максимальному цифровому отсчету Udmax равному 1024 (для десяти разрядного АЦП AVR микроконтроллера будет соответствовать уровень опорного напряжения (1,1V) . Откуда следует вычислить поправку к показаниям тестера для вычисления соответствующих значений Ud.

Аналогично следует поступить и с другими диодными датчиками температуры (Коэффициенты А и В для каждого экземпляра будут очевидно отличаться!) , если предполагается их использование, например, на соседних каналах аналогового ввода А1, А2, А3, А4, А5. При необходимости расширить группу температурных датчиков выше числа аналоговых каналов у Ардуино (обычно 6) возможно применение аналоговых мультиплексоров.

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

При работе с другими видами Ардуино необходимо руководствоваться DataSheets применяемого микроконтроллера в части использования АЦП, где последний, необходимо настроить на работу с выбранным каналом аналогового ввода, с использованием встроенного источника опорного напряжении, к которому предполагается подключение блокировочного конденсатора. Кстати такой конденсатор, емкостью 0,1 МкФ необходимо установить также параллельно диодному датчику, т.к. при малых токах диоды имеют свойство формировать «белый шум» из-за которого показания будут искажаться и «прыгать».

РИС 4 (плата Ардуино на схеме не показана)

А как поступать если от от датчика потребуется точность выше одного градуса, например, для измерения температуры внутри инкубатора или в качестве медицинского термометра ?

В этих случаях неплохим решением может быть последовательное соединение подобных диодов, что неизбежно приведет к увеличению крутизны вольт –температурной характеристики температурного датчика, и , следовательно, разрешению по температуре. Не следует забывать, что в некоторых моделях микроконтроллеров предусмотрена настройка АЦП для работы с дифференциальным входом при одновременном увеличении коэффициента усиления входного усилителя, что может и должно привести передаточную характеристику схемы в желаемую область интереса. При отсутствии подобных опций можно применить внешний дифференциальный усилитель на отдельной специализированной микросхеме (например LM358 и т.п.), который, скорее всего, может быть общим для всех температурных каналов. Можно, наконец, настроить АЦП на работу с напряжением питания (+5В или + 3В) в качестве опорного , сделав датчик из нескольких, последовательно соединенных кремниевых диодов. Правда, подключать эту «гирлянду» лучше все же не напрямую к питающему напряжению, а лишь к той его части, что подводится к выводу для питания АЦП и развязана, как правило, индуктивно-емкостным фильтром.

Читайте также:
Удаляем клапан EGR, делаем эмулятор

Полностью скетч проекта приведен во вложении. Его реализация привела к идее изготовления универсального измерительного прибора на платформе Ардуино, что достигалось бы сменой датчиковых элементов (плат) с помощью встроенного разъема МРН22-2. См. Фото2,3. и рис4 Часы реального времени понадобятся при превращении такого прибора в логгер измеряемых данных с привязкой ко времени измерений и выгрузки, например, на ПК целью последующего анализа. Показание датчика температуры на индикаторе – в нижней строке справа, а уровня поля – на верхней строке справа. Получается весьма современный прибор, ведь входное сопротивление канала АЦП AVR микроконтроллеров составляет 100Мом, а это почти как у современных мультиметров!

ФОТО 2

Фото 3

1. Чистяков Н.И. Справочная книга радиолюбителя-конструктора М. «Радио и связь» (1990)

Ethernet термометр на основе Arduino

Arduino

О цифровых термометрах на основе Arduino было сказано немало. Все они либо подключались к компьютеру, либо выводили температуры сразу на дисплей.
Но мне был нужен уличный термометр, который автономно и отправляет данные на сайт. Итак, приступим.

Что нам понадобится:
  • Arduino Duemilanove (Freeduino 2009)
  • Ethernet Shield v2
  • цифровой датчик температуры — DS18B20
  • вентилятор для корпуса (120 мм)
  • банка от водоэмульсионки или клея ПВА (2 литра)
  • светодиод
  • витая пара
Задачи

Опрашивать датчик температуры по шине 1-Wire и каждые 3 секунды самостоятельно отправлять результаты на Web-сервер, на котором они будут храниться.

Алгоритм работы устройства:
  1. присваиваем нашему Ethernet Shield`у MAC адрес и ip-адрес
  2. инициализируем соединение с сервером на 80 порт
  3. получаем данные с цифрового датчика температуры, по 1-Wire шине
  4. формируем GET запрос
  5. отправляем GET запрос
  6. разрываем соединение
Исходный код скетча:

Комментарии по ходу кода должны внести ясность.

include
// Библиотеки ниже нет в стандартной поставке среды разработки Arduino.
// придётся её скопировать.
include

// MAC-адрес нашего устройства
byte mac[] = < 0x00, 0x3A, 0xF1, 0x19, 0x69, 0xFC >;
// ip-адрес устройства
byte ip[] = < 192, 168, 1, 156 >;
// ip-адрес удалённого сервера
byte server[] = < 79, 140, 28, 20 >; // измените на свой
char temp[6];
byte isdata=0;

Client client(server, 80); // 80-порт.
DallasTemperature tempSensor;

void setup()
Ethernet.begin(mac, ip); // Инициализируем Ethernet Shield
tempSensor.begin(7); // Датчик температуры на 7-й пин
Serial.begin(9600); // Скорость консольного порта 9600 (пригодится для отладки)
>

void loop()
delay(3000); // задержка в 3 сек.
// Соединяемся
if (client.connect()) Serial.println( “connecting. ” ); // Serial.println для отладки. Лучше его оставить, на всякий случай, потом будет легче понять, в чём проблема.
// Обработчик ошибок датчика
switch (tempSensor.isValid())
case 1:
Serial.println( “Invalid CRC” ); // ошибка контрольной суммы
tempSensor.reset(); // сбросить девайс
return ;
case 2:
Serial.println( “Invalid device” ); // какой-то “левый” датчик :)
tempSensor.reset(); // сбросить девайс
return ;
>

Serial.println( “connected” );
char buf[80];
float f=tempSensor.getTemperature(); // получаем температуру

// Ниже извращения с отделением дробной части и целой. Почему-то Arduino не хочет работать с float.
// Вместо числа вставляет вопросик. Наверное, виной тому отсутствие аппаратной поддержки работы с
// числами с плавающей запятой в Arduino. Буду рад увидеть более красивое решение в комментариях.
int temp1 = (f – ( int )f) * 100; // выделяем дробную часть
// Составляем GET запрос. Переменная code нужна для того, чтобы вражеский термометр не слал какие попало значения.
// проверяется на стороне Web-сервера.
sprintf(buf, “GET /class/backend/meteo.php?temp=%0d.%d&code=123456 HTTP/1.0” , ( int )f, abs(temp1));

Читайте также:
Включение двигателя одним хлопком

Serial.println(buf);
client.println(buf); // Отправляем GET запрос
client.println( “Host: opck.info” ); // Указываем, какой конкретно host на данном ip нас интересует.
client.println();

> else Serial.println( “connection failed” );
>

while (client.available()) isdata=1;
char c = client.read(); // Читаем, что нам ответил Web-сервер
Serial.print(c);

if (!client.connected()) isdata=0;
Serial.println();
Serial.println( “disconnecting.” );
client.stop(); // Завершаем соединение
>
>

Сборка устройства:
  1. первую «ногу» датчика цепляем на «минус» GND
  2. вторую «ногу» (DQ) на 7-й пин
  3. третью на «плюс»
  4. вторую и третью нужно соединить резистором на ~ 4,7 К. Но я заменил резистор на светодиод и получил индикатор обращения к шине датчика (ВНИМАНИЕ! Без резистора или светодиода работать ничего не будет. Не забудьте!)

По идее, вот и всё. Должно работать.
Работает, но боевые условия показали, что когда падает солнечный свет на датчик, тот может нагреваться и показывать температуру гораздо выше реальной. Всё правильно — он покажет температуру на солнце. А нам нужна температура воздуха.

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

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

Делаем корпус для датчика

Подходящей по размеру оказалась банка от водоэмульсионной краски (такие же бывают из-под клея ПВА, объёмом 2-3 литра). В нижней части банки делаем отверстие под вентилятор. И прикрепляем его к банке. В центре банки размещаем площадку под датчики, диаметром немного меньшим самой банки, чтобы воздух мог циркулировать.
Несколько фото:

Банка от водоэмульсионки

Детали и банка с проделанным отвестием

Банка от водоэмульсионки

Детали и банка с проделанным отвестием

Установка датчика в корпус

Установка датчика в корпус

Датчик в корпусе, вид сверху

Датчик в корпусе, вид сверху

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

Корпус, вид сбоку

Корпус, вид сбоку

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

Корпус для Arduino я сделал из пластмассовой коробки от mp3-плеера Explay C360.

Arduino

Arduino

Backend, принимающий данные:

На стороне сервера работает скрипт, к которому обращается термометр. Скрипт проверяет правильность секретного кода, чтобы показания нельзя было подменить.
А затем добавляет новую запись в таблицу MySql. Потом эти данные можно выводить как угодно. При этом каждую минуту данные за прошедшую минуту усредняются и добавляются в другую таблицу.
Нужно это для того, чтобы:
1. проще было делать выборки в базе (не правда ли, удобнее указать конкретную минуту и получить результат)
2. выборки были быстрее (за год ~500 000 записей вместо 10 000 000)

Во время длительной работы датчика обнаружилась проблема, иногда он самопроизвольно (раз в 3-4 часа) выдаёт рандомное значение. Поэтому я добавил проверку на изменение температуры больше чем на 1 градус в течении 15 секунд. Такие значения игнорируются.

Что из этого всего вышло:

На своём сайте я разместил страничку с термометром и добавил график температуры за последние сутки.
Посмотреть можно тут: Ethernet термометр.

Недостатки:

Точность датчика 0.5* С, что для меня недостаточно. Но есть способ улучшить его характеристики. Понадобится ещё один, или более датчиков (желательно из разных партий). Получаем данные со всех датчиков и считаем среднее арифметическое. Так можно добиться точности до сотых градуса.

Планы на будущее:
  • датчик влажности
  • датчик давления
  • датчик скорости ветра
  • датчик освещённости
  • поставить несколько таких в городе и делать свои прогнозы погоды
  • питать Arduino по Power over Ethernet
  • автоматизировать включение и частоту вращения вентилятора в зависимости от освещения
  • удалённое управление
  • сброс данных на случай отсутствия связи (для меня это критично)
Известные мне недостатки:

— высокая цена — 2180 руб. (Freeduino 2009 (800 р.) + Ethernet Shield v2 (1300 р.) + 1 датчик (80 р.))
— если вентилятор включить слишком быстро, то он сам вносит погрешность в температуру, обдувая датчик. Он не должен сдувать, а лишь проталкивать воздух.

Читайте также:
Делаем автоматическое открывание багажника

Arduino и термометр DS18B20

DS18B20 – высокоточный цифровой датчик температуры. Основные характеристики:

  • Диапазон: -55.. 125 °C
  • Точность: 0.5 °C
  • Разрешение: 9.. 12 бит (0.48.. 0.06 °C)
  • Питание: 3-5.5V
  • Период выдачи результата:
    • 750 мс при точности 12 бит
    • 94 мс при точности 9 бит

    В наборе идёт датчик в герметичном исполнении со стандартным гнездом (шаг 2.54 мм) для подключения

    Подключение

    Датчик имеет следующие назначения пинов:

    Датчик подключается к любому цифровому пину Arduino, но пин должен быть подтянут к питанию резистором 4.7 кОм. На один пин можно подключить несколько датчиков DS18B20.

    В рамках набора GyverKIT резистор на 4.7 кОм можно заменить двумя резисторами на 10 кОм (есть в комплекте), подключенными параллельно:

    Библиотеки

    Для этого датчика есть несколько библиотек:

    • “Официальная” библиотека DallasTemperature.h, для работы которой также понадобится библиотека OneWire.h.
    • Наша библиотека microDS18B20

    В примерах на этом сайте мы будем использовать microDS18B20, так как она в несколько раз легче и проще в использовании, чем официальная. Библиотека идёт в архиве к набору GyverKIT, а свежую версию всегда можно установить/обновить из встроенного менеджера библиотек Arduino по названию microDS18B20. Краткая документация находится по ссылке выше, базовые примеры есть в самой библиотеке.

    Работа с microDS18B20

    Без адресации

    В этом режиме на один пин МК подключается один датчик, для работы с ним не требуется предварительного чтения адреса и записи его в программу. Можно подключить несколько датчиков, каждому указать свой пин, см. пример one_pin_one_sensor.

    С адресацией

    В этом режиме можно подключить сколько угодно датчиков на один пин МК, но для работы с ними понадобится занести в программу уникальные адреса датчиков. В момент чтения адреса к пину должен быть подключен только один датчик! Пример – address_read. Для дальнейшей работы адреса хранятся в массивах на стороне программы и передаются датчикам при инициализации, пин указывается один и тот же:

    Также адрес можно сменить во время работы программы, см. документацию.

    Чтение температуры

    Чтение температуры делится на два этапа – запрос и получение данных. Запрос делается функцией requestTemp() . После получения запроса датчик начинает измерение температуры, которое длится от 90 до 750 мс в зависимости от настроенной точности (по умолчанию точность максимальная, преобразование длится 750 мс). Если прочитать температуру до окончания преобразования – датчик вернёт результат предыдущего измерения, поэтому в примерах используется задержка или опрос по таймеру на 1 секунду. Получить температуру можно при помощи getTemp() [float] или getTempInt() [int]. Если принятые данные повреждены или датчик отсутствует на линии – функция вернёт предыдущее успешно прочитанное значение температуры.

    Примечание: при повторных вызовах getTemp() не запрашивает с датчика новую температуру (долгое выполнение функции), вместо этого она просто возвращает предыдущий результат до тех пор, пока не будет сделан новый запрос requestTemp().

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

    где readTemp() запрашивает данные с датчика и возвращает true , если они прочитаны корректно. После этого можно забрать текущую температуру из getTemp() , которая уже не запрашивает температуру с датчика, а отдаёт прочитанный в readTemp() результат.

    Примеры

    Библиотека позволяет работать по схеме “один датчик – один пин”, в которой адрес датчика получать не нужно. Достаточно подключить и использовать:

    Создаем беспроводной термометр на Arduino

    Узнайте, как использовать RF модуль 433 МГц совместно с ATMega328P-PU. В данной статье мы соберем схему из датчика DHT11 и радиочастотного передатчика. А также соберем приемное устройство с радиоприемником 433 МГц и LCD дисплеем.

    Что нам потребуется

    • компьютер с установленной Arduino IDE (я использую версию 1.6.5);
    • библиотека VirtualWire (ссылка ниже); ;
    • ATMega328P;
    • программатор AVR MKII ISP; ; ; ; ; ;
    • компоненты из перечня элементов, приведенного ниже.

    Введение

    В данной статье я покажу вам, как собрать устройство, которое измеряет температуру и относительную влажность воздуха и посылает измеренные значения с помощью стандартного радиочастотного модуля 433 МГц. Датчик температуры и влажности, используемый в устройстве, – это DHT11.

    Существует множество способов передачи небольшого объема данных с помощью Arduino или контроллеров ATMega. Один из них использует уже готовую библиотеку, подобную RCSwitch, Radiohead или VirtualWire. Кроме того, можно отправить необработанные данные с помощью встроенного в микроконтроллер модуля UART. Но использовать встроенный модуль UART не рекомендуется, так как приемник будет собирать и все помехи, и микроконтроллер будет работать не так, как предполагалось. В данной статье для передачи и приема данных я использую библиотеку VirtualWire. Эта библиотека работает с Arduino IDE 1.6.2 и 1.6.5.

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

    Аппаратная часть

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

    Передатчик

    Передающая часть беспроводного термометра

    • способ прошивки микроконтроллера → ISP;
    • датчик для измерения температуры и влажности → DHT11;
    • микроконтроллер для обработки данных → ATMega32p;
    • способ беспроводной передачи данных → радиочастотный модуль 433 МГц.

    Приемник

    Приемная часть беспроводного термометра на Arduino

    • способ приема радиосигнала → радиочастотный модуль 433 МГц;
    • способ обработки принятых данных → Arduino Mega;
    • способ отображения температуры и влажности → 16×2 LCD.

    Принципиальные схемы

    Передатчик

    Передающая часть беспроводного термометра на ATmega328 и Arduino

    Передающая часть беспроводного термометра на ATMega328p
    (для увеличения масштаба можно кликнуть по картинке правой кнопкой мыши и выбрать «Открыть ссылку/изображение в новой вкладке/новом окне»)

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

    Приемник

    Приемная часть беспроводного термометра на Arduino Mega

    Приемная часть беспроводного термометра на Arduino Mega
    (для увеличения масштаба можно кликнуть по картинке правой кнопкой мыши и выбрать «Открыть ссылку/изображение в новой вкладке/новом окне»)

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

    Перечень элементов

    Передатчик

    Перечень элементов передающей части беспроводного термометра на ATMega328p и Arduino Mega

    Перечень элементов передающей части беспроводного термометра на ATMega328p
    (для увеличения масштаба можно кликнуть по картинке правой кнопкой мыши и выбрать «Открыть ссылку/изображение в новой вкладке/новом окне»)

    Приемник

    Перечень элементов приемной части беспроводного термометра на Arduino Mega

    Перечень элементов приемной части беспроводного термометра на Arduino Mega
    (для увеличения масштаба можно кликнуть по картинке правой кнопкой мыши и выбрать «Открыть ссылку/изображение в новой вкладке/новом окне»)

    Программа

    Программа передатчика

    Сперва рассмотрим программу передающей части:

    Для передачи влажности и температуры в одном сообщении я соединяю их вместе. Сначала данные считываются в переменную как целые числа, потом целые числа преобразовываются в массив символов, а затем они соединяются друг с другом. На приемной стороне данные будут разделены на отдельные символы. Делая это, я ограничиваю себя двумя цифрами градусов. Если датчик находится в среде с температурой менее 10°C, я буду получать на дисплее символы мусора. Например, если температура составляет 20°C, а влажность – 45%, то будет передаваться сообщение 2045, и всё хорошо. Если температура равна 9°C, а влажность – 78%, то передастся сообщение 978x, где «x» – случайный символ. Поэтому, если вы будете собирать данный беспроводной термометр, я советую вам изменить программу для передачи правильных данных, когда температура будет меньше 10°C.

    Программа приемника

    Интересный способ использования библиотеки LiquidCrystal – это создание пользовательских символов. С помощью createChar я создал символ градусов. Таким же способом вы можете создать и свои собственные символы. Чтобы создать пользовательский символ или значок, вам необходимо объявить его, как массив из восьми байт, и «нарисовать», какие пиксели будут включены (1 – включен, 0 – выключен).

    В функции setup() вы создаете его с помощью createChar . createChar принимает два аргумента: номер позиции для хранения символа и массив байт, в котором определено, какие пиксели будут отображаться. В нашем случае это lcd.createChar(1, degreesymbol) . Затем символ выводится на LCD с помощью функции lcd.write .

    Заключение

    В данной статье я использовал датчик температуры и влажности DHT11. Температура и влажность были преобразованы в массив символов, а затем переданы с помощью передатчика 433 МГц. На приемной стороне массив символов был разделен на пары и выведен на LCD. Для получения символа градусов я использовал функцию createChar библиотеки LiquidCrystal.

    Загрузки

      (библиотека для Arduino для организации связи через радиомодули с использованием амплитудной манипуляции). .

    Фото и видео

    Передатчик

    Передающая часть беспроводного термометра на ATMega328p и Arduino

    Передающая часть беспроводного термометра на ATMega328p

    Приемник

    Приемная часть беспроводного термометра на Arduino

    Приемная часть беспроводного термометра на Arduino

    Термометр с модулем DS18B20 на основе платы Arduino

    Как выглядит готовый термометр с модулем DS18B20 на основе платы Arduino

    Обзор посвящён методике создания термометра на основе платы Arduino и модуля DS18B20. Мы узнаем, как собирать термометр и прописывать программный код для него.

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

    Характеристика температурного модуля DS18B20

    Прежде всего, следует помнить, что данный модуль является одним из наиболее точных устройств своего рода. Он удобен для большинства пользователей, так как температура измеряется в привычных всем градусах Цельсия. Кроме того, для него можно прописывать функцию тревоги (в этом случае при программировании устанавливается верхняя и нижняя триггерная точка). Еще одним важным свойством DS18B20 является то, что для обмена данных он задействует лишь одну шину (1 Wire). Эта шина требует только одну линию передачи (не считая заземления) для связи с центральным процессором системы. В довершение ко всему, рассматриваемый модуль способен выводить энергию прямо из линии передачи (это так называемая паразитная мощность). Таким образом, устраняется необходимость в обустройстве стороннего источника питания.

    Схематическое изображение модуля DS18B20

    Нельзя не упомянуть о ещё одном преимуществе модулей DS18B20. Каждый датчик данного типа использует для работы уникальный последовательный 64-битный код. Это значит, что все подобные компоненты могут функционировать на одной шине типа 1 Wire, по которой, как отмечалось выше, передается вся информация. Таким образом, для управления несколькими модулями понадобится всего один микропроцессор, причем сами температурные датчики могут быть разбросаны по солидной площади.

    Детали для работы над термометром с DS18B20 на основе Arduino

    Чтобы собрать качественный аналоговый термометр, нужно подготовить:

      электросхему типа Arduino (желательно новую);

    Создание электрической цепи для термометра с DS18B20 на основе Arduino

    Здесь алгоритм работы довольно простой, так что соединить все компоненты в единую цепь сможет даже новичок. Для начала на модуле DS18B20 необходимо найти отрицательный контакт (если смотреть на сенсор сверху, данный контакт будет слева). Отрицательный штырек надо соединить с нижней точкой заземления на плате Arduino (она будет обозначаться аббревиатурой GND). Штырь с положительным зарядом (правый) надо подключить к контакту питания на 5 В (тоже располагается внизу платы). Далее делается сигнальный вывод на цифровой контакт 2 (находится вверху платы), чтобы стало возможным измерение температуры (в этом случае используется центральный штырек сенсора).

    Чтобы при работе обеспечивалось управление вольтметром, нужно соединить его положительный контакт с цифровым выводом под номером 9. Отрицательный контакт вольтметра подключается к верхней точке заземления платы (она также обозначается сокращением GND). Чтобы поменять цифровую шкалу вольтметра, необходимо просто распечатать заранее подготовленную картинку с градусами Цельсия. Эта картинка либо приклеивается поверх старой шкалы, либо вставляется вместо неё.

    Соединение всех составляющих в единую электрическую цепь

    Описание широтно-импульсной модуляции

    Если коротко, широтно-импульсная модуляция является методом получения аналоговых результатов (таких, как температура) при помощи цифровых средств. Она хороша тем, что даже очень высокие либо очень низкие значения передаются по каналам связи одним импульсом. Весь процесс широтно-импульсной модуляции проходит так: датчик отправляет процессору сигнальный импульс, а сам процессор уже проводит его обработку, после чего выдает значение на термометр. Чтобы иметь возможность получать информацию таким образом, необходимо задействовать специальные контактные штыри на плате Arduino. Распознать эти контакты предельно просто — рядом с ними есть вот такой значок «~». Кстати, данный значок присутствует и возле контакта под номером 9, с которым мы соединяем положительный штырь вольтметра. 9-й вывод был задействован только в качестве примера; при желании можно использовать любой другой контакт, рядом с которым стоит значок «~».

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

    Прописывание кода для работы термометра с DS18B20 на основе Arduino

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

    При создании кода нужно будет прописать три основные команды:

    1. Чтение температурных значений, поступающих от датчика.
    2. Преобразование температуры методом широтно-импульсной модуляции.
    3. Вывод значений на термометр.

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

    Вот как выглядит весь код, необходимый для настройки работы термометра:

    Программный код для настройки работы термометра

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

    ARDUINO Термометр & гигрометр с E-INK на nRF52 – или то чего еще не выпустили производители.

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

    Идея девайса с таким функционалом «бродила» в голове давно, первая попытка была это сделать на atmega328. И впринципе это было реализовано, но хотелось большей энергоэфективности, более красочного вывода информации на дисплей.

    версия на atmega 328

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

    Датчик был реализован на двух платах, за основу схемы для дисплея была взята схема от распостраненных дисплеев Waveshare | Даташит. Правда позднее были внесены незначительные изменения. Дисплеи прибретались пустыми здесь. Мозгом датчика является чип nRF52832 в модульной реализации от HOLYIOT. Сами модули заслуживают отдельного внимания, это самая беспроблемная реализация в плане работы в Ардуино IDE. В устройстве использованы модули — YJ-16048.

    За основу програмной реализации работы с диплеем был взят экземпл распостраняемый на сайте Waveshare Electronics. Правда и тут не обошлось без доработки. Замеры потребления дисплея соответствуют заявленным в даташите, самое главное что этот дисплей может спать а на экране остаются данные. Правда переводить в сон дисплей получилось не сразу, реализация от Waveshare этого не позволяла.
    Питание в модуле реализовано на двух батарейках cr2450, понижает до рабочих 3.3V микра TPS62745DSSR1 c довольно неплохими характеристиками | даташит. На данный момент можно уверенно сказать что работать устройство способно 1 год точно.

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

    Но и эту проблему удалось. В итоге получилось так:





    Данная реализация не является заключительной, этот проект оставлен для повторения в виде Ардуино модуля. Корпус к нему не планируется. Сейчас из этого проекта родилось сразу несколько как логичесое продолжение. Основные отличия будующей V2 это питание от одной батарейки, трехцветный дисплей, наличие корпуса.

    Проект является открытым. Библиотека с кодом доступна на моем личном гугл драйве — drive.google.com/file/d/13wmxCt9XehJr1E2eyG1RnYsQTMb9A2LR/view Настоятельно рекомендуется к прочтению моя тема на форуме Mysensors по этому проекту (На английском). Так как эта ссылка так же не прошла модерацию то попробую описать некоторые трудности здесь, итак поехали:

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


    Процесс конвертации текстов в C массивы:

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

    Список компонентов:
    PCB 2 pcs.
    SW1, SW2 Buttons clocks cm 2 pcs.
    J5 Connector 2×3 P6 1.27mm 1 pcs.
    C1, C7, C13, C15, Condenser 100NF X7R 10% 50V 0603 4 pcs.
    NRF52832, YJ-16048 1 pcs.
    200×200, 1.54inch E-Ink raw display 1 pcs.
    D1, LED SIDE SMD 1204 (2012) 1 pcs.
    U5, FPC Pitch 0.5mm 24 pins 1 pcs.
    L1, CD43 SMD Power Inductor 68uh 1 pcs.
    U4, SI1304BDL N-Channel 30 V (D-S) MOSFET 1 pcs.
    U2, U3, U6, MBR0530 Schottky Power Rectifier 3 pcs.
    C2, C3, C4, C5, C6, C8, C9, C10, C11, Condenser 1UF X5R 10% 16V 0603 9 pcs.
    C14, Condenser 10uf 10v 0805 1 pcs.
    R7, Resistors 24K 1% 0805 1 pcs.
    R5, R6, Resistors 4,7K 1% 0805 2 pcs.
    R3, R4, Resistors 10K 1% 0805 3 pcs.
    R1, Resistors 1K 1% 0805 1 pcs.
    R2, Resistors 3R0 1% 0805 1 pcs.
    J1, J2, J3, J4, 2.54mm Connectors Header 4 pcs.
    U1, SHT20 Temperature And Humidity Sensor 1 pcs.
    U1, U3 Battery holder 2 pcs.
    TPS62745DSSR1, TPS62745DSSR 1 pcs.
    C2, Condenser 10uf 25v 1206 XTR7 1 pcs.
    C1, Condenser 10uf 16v 1206 XTR5 1 pcs.
    L1, Inductance 4.7uh 1210
    U2, Micro Slide Toggle Switch 1P2T 1 pcs.
    R2, Resistors 1M 1% 0805 1 pcs.
    R1, Resistors 160K 1% 0805 1 pcs.

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

    Необходим програматор Програматор J-Link или ST-Link V2 (ссылки на Али)

    Скачать последнюю версию ARDUINO IDE(Windows Installer) — линк гуглится.
    (не рекомендуется скачивать Windows app Requires Win 8.1 or 10)

    Запустить ARDUINO IDE.

    Перейти в настройки (файл –> настройки)

    В открывшемся окне настроек найти пункт «Дополнительные ссылки для менеджера плат»
    Ввести ссылку №1
    Ввести ссылку №2

    Перейти в менеджер плат (инструменты –> плата — > менеджер плат)

    В открывшемся окне менеджера плат спустится вниз списка и найти Nordic Semiconductor nRF5 boards by Sandeep Mistry

    Нажать на кнопку «установить» (Необходимо набратся терпения, тк в какой-то момент покажется что установка зависла. Не прерывать процесс установки. )

    Теперь найти плату MySensors nRF5 boards by MySensors, нажать на кнопку «установить»

    Установить библиотеку MySensors v2.3.0 — ссылка гуглится

    Закрыть ARDUINO IDE

    Скачать программу для установки USB драйверов — zadig — ссылка гуглится

    Подсоеденить программатор (J-Link или ST-Link) к usb порту компьютера, Запустить программу zadig

    Открыть «Options», установить галку «List All Devices»

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

    Ниже под списком устройств, в правой части выбрать устанавливаемый драйвер — WinUSB (v6. 1. 7600. 16385)

    Нажать на кнопку «INSTALL»

    Желательно перезагрузить компьютер.

    Запустить ARDUINO IDE

    Подключить програматор в плате NRF5

    Выбрать плату (инструменты –> плата –> MySensors nRF5 boards(MyBoardNRF5 nRF51822 или MyBoardNRF5 nRF52832))

    Выбрать програматор (инструменты –> програматор) J-Link или ST-Link V2

    Открыть скетч репитера MySensors (Файл –> Примеры –> MySensors — Repiter Node)

    В скетче закоментировать — // #define MY_RADIO_NRF24 и раскоментировать #define MY_RADIO_NRF5_ESB

    Заргузить скетч на плату NRF5 (Скетч –> Загрузить через програматор или просто нажав на иконку — загрузить)

    Процесс компиляции достаточно длинный.


    Проверено в Windows7 и Windows10

    Необходим програматор — Програматор J-Link (ссылки на Али)

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

    Далее необходимо скачать драйвер JLINK WINDOWS V640(не гуглится) — dropmefiles.com.ua/file?source=18112314190081213094

    Установите драйвер JLINK WINDOWS V640 на компьютер.

    Далее скачиваем программу nRFGO STUDIO — гуглится

    Устанавливаем. ВАЖНО. при установке програмы будет предложена установка драйверов для JLINK(более рання версия, нам не подходит), — ОТКАЗЫВАЕМСЯ от установки драйверов, тк ранее мы поставили правильные драйвера

    Подключаем програматор к модулю nRF52832 по очень простой схеме:

    VDD — VDD
    GND — GND
    SWDIO — SWDIO
    SWDCLK — SWCLK
    (названия могут немного отличатся, но общий смысл такой, плюс к плюсу, земля к земле, IO к IO, CLK к CLK)

    Подключаем програматор к USB компьютера, запускаем програму nRFGO STUDIO

    В открывшейся програме должен быть активен пункт — nRF5x Programming (не серого цвета, это произойдет если установили правильные драйвера V640)

    Нажимаем на кнопку — Recover

    После востановления на следуюшей открывшейся странице можно полностью очистить чип — Erase all

    На этом все, модуль разблокирован.

    C радостью помогу всем в чате(установка плат, работа с микроконтролерами nRF5 в среде arduino ide, советы по работе с протоколом — @mysensors_rus

    Измерение температуры и влажности на Arduino – подборка способов

    Для создания домашней метеостанции или термометра нужно научиться сопрягать плату Arduino и устройства для измерения температуры, и влажности. С измерением температуры можно справиться с помощью терморезистора или цифрового датчика DS18B20, а вот для измерения влажности используют более сложные устройства – датчики DHT11 или DHT22. В этой статье мы расскажем, как измерить температуру и влажность с помощью Arduino и этих датчиков.

    Измерение температуры и влажности на Arduino – подборка способов

    Измерение терморезистором

    Самым простым способом определения температуры является использование терморезистора. Это вид резистора сопротивление которого зависит от температуры окружающей среды. Выделяют терморезисторы с положительным и отрицательным температурным коэффициентом сопротивления – PTC (еще называют позисторы) и NTC-терморезисторы соответственно.

    На графике ниже вы видите зависимости сопротивления от температуры. Штриховой линией изображена зависимость для терморезистора с отрицательным ТКС (NTC), а жирной сплошной линией для термистора с положительным ТКС (PTC).

    График зависимости сопротивления от температуры

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

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

    Даташит TC-терморезисторов от компании 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 – бета-коэффициент из даташита

    При этом B указывается в виде:

    бета-коэффициент

    Это значит, что коэффициент высчитывался исходя из данных полученных при измерении сопротивления при температурах 25 и 100 градусов Цельсия, именно такой вариант распространён более всего. Тогда его высчитывают по формуле:

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

    Типовая схема подключения термистора к микроконтроллеру изображена ниже.

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

    Здесь R1 – это постоянный резистор, термистор подключается к источнику питания, а данные снимаются со средней точки между ними, на схеме условно указано, что сигнал подаётся к выводу A0 – это аналоговый вход Ардуино.

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

    Для расчета сопротивления термистора можно использовать следующую формулу:

    Чтобы перевести в понятный для ардуино язык нужно вспомнить о том, что у ардуино 10-битный АЦП, значит максимальное цифровое значение входного сигнала (напряжением 5В) будет равно 1023. Тогда условно:

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

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

    Скетч

    DS18B20

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

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

    Цифровой датчик DS18B20

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

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

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

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

    Схема подключения датчика к ардуино

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

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

    Цифровой датчик температуры DS18B20

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

    Скетч

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

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

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

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

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

    DHT11 DHT22
    Определение влажности в диапазоне 20-80% 0-100%
    Точность измерений 5% 2-5%
    Определение температуры от 0°C до +50°C от -40°C до +125°C
    Точность измерений 2,5% плюс-минус 0,5 Градусов Цельсия
    Частота опроса 1 раз в секунду 1 раз в 2 секунды

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

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

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

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

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

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

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

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

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

    DHT 22 (AM2302, AM2321).

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

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

    Заключение

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

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: