Самодельные датчики для ардуино. Самодельные датчики движения (температуры, влажности, освещения) для «Умного Дома» на основе системы MySensors. Что такое «умный дом»

Проходил мимо, смотрю, а здесь вещи интересные о самоделках разных пишут. Я тоже недавно кое-что мастерил, дай, думаю, напишу, может кому и пригодится, ну или просто интересно будет. Речь идет о железе бюджетного DIY-датчика для встраивания в панели выключателей и розеток.

Но давайте по порядку.

Системой автоматизации для «Умного Дома» я увлекся уже сравнительно давно. Сейчас у меня здесь несколько разных систем в одно целое связаны. Тут есть и промышленные и самодельные компоненты. О последней самоделке я и хочу рассказать.

Некоторое время назад на просторах интернета натолкнулся я на систему домашней автоматизации MySensors . Довольно развитая (и постоянно развиваемая далее) беспроводная система на основе Arduino и nRF24L01+. Впрочем, речь не о том, кому интересно - посмотрит источник.

Главными достоинствами системы для меня были хорошая программная поддержка, бидирекциональность коммуникации, доступность компонентов и небольшая их стоимость.

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

Это первая сборка, последующие постараюсь сделать аккуратнее. Большая дыра (для датчика освещения) будет закрыта стержнем из оргстекла.

В полуразобранном виде выглядит это так:

Вид с другой стороны:

Все это состоит из (китайских) 8MHz/3,3V Arduino Pro Mini, радиомодуля nRF24L01+, датчика движения HC-SR510, датчика DHT22 (температура и влажность), датчика освещенности BH1750 и стандартной заглушки фирмы JUNG (наверняка можно использовать и другие, вроде Gira, Berker и т.д. я просто вял то, что было под рукой). Общая стоимость около 15$.

Печатная плата разработана в Eagle. Исходники . Заказано у ITEADStudio, сделано было хорошо (кроме шелка, надписи получились так себе).



Наверное шрифт слишком мелкий и тонкий. На гербере смотрелось неплохо.



В процессе сборки обнаружились некоторые мелкие неудобства, кое-что можно было бы улучшить, но в общем и целом плата вполне применима.

Идея этого проекта появилась и увлекла меня во время отпуска.

Мысль была примерно следующая: "Было бы классно иметь робо-руку, которая управлялась бы моей собственной!". И через некоторое время я принялся за разработку и реализацию этого проекта. Надеюсь, вам будет интересно!

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

Конструкция руки взята из open-source проекта InMoov. На странице проекта можно загрузить 3-D модели всех узлов и напечатать их на 3-D принтере.

Ниже приведены все шаги для реализации вашей собственной робо-руки с управлением от перчатки.

Необходимые материалы

Для проекта вам понадобятся:

Все! Вы можете начинать ваш проект робо-руки!

Печатаем руку

Рука является частью open-source проекта под названием InMoov. Это робот, который печатается на 3-D принтере. Рука - это лишь отдельный узел общей конструкции. Скачайте с этой страницы и напечатайте следующие детали:

Auriculaire3.stl

WristsmallV3.stl

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

RobCableFrontV1.stl

RobRingV3.stl (в этой детали пришлось сделать дополнительные отверстия, чтобы подошли мои сервы)

RobCableBackV2.stl

RobServoBedV4.stl

(Это две детали "обшивки" - они не обязательны с точки зрения жесткости конструкции и ее функционирования)


В общей сложности понадобилось около 13-15 часов для печати. Зависит от качества печати. Я использовал MakerBot Replicator 2X. Рекомендую печатать детали пальцев на стандартном или высоком разрешении, чтобы избежать нежелательного трения в конструкции.


Подключаем датчики изгиба к Arduino

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


Резисторы на фото имеют номинал 22 кОм. Цвета проводов соответствуют цветам, приведенным на схеме подключения.

Все контакты GND от датчиков соединены в общую Землю. Земля идет к пину GND на Arduino. +5V на Arduino подключается к общему контакту питания от всех датчиков. Каждый голубой коннектор сигнала подключается к отдельному аналоговому входу на микроконтроллере.




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




Устанавливаем сенсоры на перчатке

Можем приступать к установке датчиков и нашей монтажной платы на саму перчатку. Сначала просверлите небольшое отверстие в пластике датчиков. Отверстия сверлятся в местах, где чувствительный элемент закончился. ВАЖНО! Ни в коем случае не сверлите отверстие в чувствительном материале. После этого оденьте перчатку. Сделайте отметки карандашом или ручкой на вершине каждого сустава. Эти места вы будете использовать для крепежа сенсоров. Датчики изгиба крепятся обычной ниткой. Пришейте сенсоры к перчатке. Используйте отверстие, которые вы сделали на концах датчика. В местах, где отмечены суставы сенсоры "прихватываются" нитью поверх. Более детально все это показано на фото ниже. Монтажная плата пришивается к перчатке аналогично сенсорам. Учтите, что для движения пальцев надо оставить определенный запас длины проводников. Это надо учесть при установке нашей монтажной платы и выборе длины коннекторов от нее к датчикам.






Я не буду детально останавливаться на этом шаге. Он очень подробно раскрыт на веб-сайте InMoov (в разделе "Assembly Sketches" и "Assembly Help"):

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


Не спешите устанавливать леску. Сначала проверьте работоспособность серводвигателей.

Проверка сервомоторов

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

ВАЖНО! Не забудьте подключить контакт Arduino к рельсе с отрицательным зарядом: помните, что все контакты Земля должны быть соединены между собой. Контакт VCC может подключаться к различным источникам питания, но GND должен быть одинаковым.

Загрузите программу на Arduino (файл с программой прилагается). Убедитесь, что подключение сенсоров, сервомоторов и т.п. Было правильным. Наденьте перчатку и включите Arduino. Серводвигатели должны вращаться в зависимости от того, каким пальцем вы будете двигать. Если сервы двигаются, значит все работает!


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

Если сервомоторы отрабатывают неправильно, убедитесь, что вы их правильно подключили (например, когда я работал над этим проектом, я, как обычно, забыл соединить пин GND Arduino с GND источника питания и всех серв. В этом случае работать ничего не будет). Убедитесь, что все отрабатывает перед тем, как двигаться дальше.

Добавляем леску

Добавить леску - это, наверное, самая сложная и ответсвенная часть проекта робо-руки. На сайте InMoov есть инструкция на этот счет. Концепция простая, но реализовать ее практически не так то просто. Обратите внимание, что эта часть проекта требует сосредоточения и терпения. Единственное отличие моего варианта от конструкции на InMoov - использование клея. Благодаря этому мы можем получить возможность более губкой настройки при калибровке серв. Для этого достаточно расплавить клей и подтянуть нужные нам болты. Хотя, конечно же, надежность конструкции падает. В конце-концов, после окончательной настройки и калибровки, мы в любой момент можем использовать другой вариант фиксации.

Для калибровки сервомоторов, проверните роторы так, чтобы пальцы робо-руки лежали на столе. Подключите ваш Arduino и источник питания. Выставьте качалки приводов таким образом, чтобы в полностью "лежащем" состоянии руки натяжение было максимальным.


Объяснить процесс калибровки достаточно сложно. Кроме того, инструкция с InMoov мне, например, не подошла. То есть, при крепеже вам надо проявить фантазию и подстроиться под ваши реалии - как то: тип качалок, тип лески или ниток, погрешности конструкции и сборки, расстояние установки сервомоторов относительно суставов робо-руки.

К счастью - это последний этап проекта!

Послесловие


Несмотря на то, что существуют гораздо более сложные и точные (и дорогие в том числе) конструкции, приведенный проект очень интересен и имеет отличный потенциал для практического применения. Подобные конструкции не стоит использовать при непосредственном контакте с человеком, ввиду недостаточной точности самого концепта. Но промышленности, медицине и т.п. для задач без повышенных требований к точности перемещений суставов, наша робо-рука вполне подойдет. Ну а с точки зрения дальнейшего "апгрейда" руки - тут поле вообще непаханое. Начиная от беспроводного управления, заканчивая заменой приводов, габаритов, разработки дополнительных степеней свободы.

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

Оставляйте Ваши комментарии, вопросы и делитесь личным опытом ниже. В дискуссии часто рождаются новые идеи и проекты!

Добрый день, сегодня я поделюсь инструкцией по изготовлению часов с комнатным термометром(Часы на ардуино своими руками ). Часы работают на Arduino UNO, для отображения времени и температуры служит графический экран WG12864B. В качестве датчика температуры - ds18b20. В отличие от большинства других часов я не буду использовать RTS (Real Time Clock), а попробую обойтись без этого дополнительного модуля.

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

Приступим.

Для создания данных часов нам понадобится:

Arduino UNO (Или любая другая Arduino совместимая плата)
- Графический экран WG12864B
- Датчик температуры ds18b20
- Резистор 4.7 Ком 0.25 Вт
- Резистор 100 ом 0.25 Вт
- Батарейный отсек для 4 батареек типа АА «пальчиковых»
- Подходящая коробка
- Мелкий напильник
- Лак для ногтей (черный или под цвет корпуса)
- Немного тонкого пластика или картона
- Изолента
- Соединительные провода
- Монтажная плата
- Кнопки
- Паяльник
- Припой, канифоль
- Двусторонний скотч

Подготовка графического экрана.
С подключение экрана, на первый взгляд, возникает много проблем и сложностей. Но если вначале разобраться с их видами, станет намного легче и понятнее. Существует много разновидностей и типов экранов на контролере ks0107/ks0108. Все экраны принято делить на 4 типа:
Вариант A: HDM64GS12L-4, Crystalfontz CFAG12864B, Sparkfun LCD-00710CM, NKC Electronics LCD-0022, WinStar WG12864B-TML-T
Вариант B: HDM64GS12L-5, Lumex LCM-S12864GSF, Futurlec BLUE128X64LCD, AZ Displays AGM1264F, Displaytech 64128A BC, Adafruit GLCD, DataVision DG12864-88, Topway LM12864LDW, Digitron SG12864J4, QY-12864F, TM12864L-2, 12864J-1
Вариант C: Shenzhen Jinghua Displays Co Ltd. JM12864
Вариант D: Wintek- Cascades WD-G1906G, Wintek - GEN/WD-G1906G/KS0108B, Wintek/WD-G1906G/S6B0108A, TECDIS/Y19061/HD61202, Varitronix/MGLS19264/HD61202

Список не полный, их очень много. Самый распространённый и, на мой взгляд, удобный WG12864B3 V2.0. Дисплей можно подключить к Arduino по последовательному или параллельному порту. При использовании с Arduino UNO лучше выбрать подключение по последовательному порту – тогда нам потребуется всего 3 выхода микроконтроллера, вместо минимум 13 линий при подключении по параллельному порту. Подключается все довольно просто. Есть еще один нюанс, в продаже можно встретить два варианта дисплеев, со встроенным потенциометром (для регулировки контраста) и без него. Я выбрал, и советую тоже сделать вам, со встроенным.


Это уменьшает количество деталей и время пайки. Также стоит поставить токоограничительный резистор номиналом 100 Ом для подсветки. Подключая напрямую 5 вольт, существует риск сжечь подсветку.
WG12864B – Arduino UNO
1 (GND) - GND
2 (VCC) - +5V
4 (RS) – 10
5 (R/W) – 11
6 (E) – 13
15 (PSB) – GND
19 (BLA) – через резистор - +5V
20 (BLK) – GND

Удобнее всего это все собрать сзади экрана и вывести от него 5 проводов подключения к Arduino UNO. В итоге должно получится примерно так:


Для тех кто все-таки выберет параллельное подключение приведу таблицу подключения.

И схема для экранов варианта B:



На одну линию связи может быть включено несколько датчиков. Для наших часов достаточно одного. Подключаем провод от контакта «DQ» ds18b20 к «pin 5» Arduino UNO.

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


Подключаем следующим образом: общий для всех трех кнопок провод подключаем к «GND» Arduino. Первую кнопку, она служит для входа в режим установки времени и переключения по времени и дате, подключаем к «Pin 2». Вторая, кнопка увеличения значения, - к «Pin 3», а третья, кнопка уменьшения значения, - к «Pin 4».

Сборка всего воедино.
Чтобы избежать короткого замыкания, следует заизолировать экран. По кругу обматываем изолентой, а на заднюю часть крепим на двусторонний скотч, вырезанную по размеру, планку из изолирующего материала. Подойдет плотный картон или тонкий пластик. Я воспользовался пластиком от планшета для бумаги. Получилось следующее:


Спереди экрана по краю клеим двусторонний скотч на вспененной основе, желательно черный.


Подключаем экран к Arduino:


Плюс от батарейного отсека подключаем к «VIN» Arduino, минус к «GND». Размещаем его сзади Arduino. Перед установкой в корпус, не забудьте подключить датчик температуры и плату с кнопками.


Подготовка и заливка скетча.
Для датчика температуры нужна библиотека OneWire.

Вывод на экран осуществляется через библиотеку U8glib:

Для редактирования и заливки скетча надо установите эти две библиотеки. Сделать это можно двумя способами. Просто распаковать эти архивы и поместить распакованные файлы в папку «libraries», находящуюся в папке с установленной Arduino IDE. Или второй вариант установить библиотеки прямо в среде программирования. Не распаковывая скачанные архивы, в среде Arduino IDE выберите меню Скетч – Подключить библиотеку. В самом верху выпадающего списка выберите пункт «Добавить.Zip библиотеку». В появившемся диалоговом окне выберете библиотеку, которую вы хотите добавить. Снова откройте меню Скетч – Подключить библиотеку. В самом низу выпадающего списка вы должны увидеть новую библиотеку. Теперь библиотеку можно использовать в программах. Не забудьте после всего этого перезагрузить Arduino IDE.

Датчик температуры работает по протоколу One Wire и имеет уникальный адрес для каждого устройства - 64-разрядный код. Каждый раз искать этот код нецелесообразно. Поэтому необходимо вначале подключить датчик к Arduino, залить в нее скетч находящийся в меню Файл – Примеры – Dallas Temperature – OneWireSearch. Далее запускаем Инструменты - Монитор порта. Arduino должна найти наш датчик, написать его адрес и текущие показания температуры. Копируем или просто записываем адрес нашего датчика. Открываем скетч Arduino_WG12864B_Term, ищем строку:

Byte addr={0x28, 0xFF, 0xDD, 0x14, 0xB4, 0x16, 0x5, 0x97};//адрес моего датчика

Записываем адрес вашего датчика между фигурными скобками, заменяя адрес моего датчика.

Стока:

//u8g.setPrintPos(44, 64); u8g.print(sek); // Выводим секунды для контроля правильности хода

Служит для вывода секунд рядом с надписью «Data». Это необходимо для точной установки хода времени.
Если часы спешат или отстаю следует поменять значение в строке:

If (micros() - prevmicros >494000) { // поменять на другое для корректировки было 500000

Я опытным путем определил число, при котором часы идут достаточно точно. Если ваши часы спешат следует увеличить это число, если отстаю – уменьшить. Для определения точности хода и нужен вывод секунд. После точной калибровки числа, секунды можно закомментировать и таким образом убрать с экрана.

Я давно хотел автоматизировать процесс просушки ванной комнаты после купания. У меня было много обзоров, посвящённых теме влажности. Решил внедрить в жизнь (так сказать) один из методов борьбы с ней. Кстати, зимой в ванной и бельё сушим. Достаточно вытяжной вентилятор включить. Но следить за вентилятором не всегда сподручно. Вот и решил поставить автоматику на это дело. Первый опыт внедрения оказался неудачный. Обзор был. Но я не сдался…

Когда въехал в новую квартиру, почти сразу поставил в вытяжку вентилятор с обратным клапаном. Вентилятор необходим, чтобы просушивать ванную комнату после купания. Обратный клапан нужен для предотвращения попадания в квартиру посторонних запахов от соседей (когда вентилятор молчит). И такое бывает. Вентканалы у всех индивидуальные, но цемент при кладке видно экономили. Сквозь щели, вероятно, запах и проходит.
Вентиляторы у меня есть различных вариантов. Есть простые, есть с таймером (регулировкой временнОго интервала), как на фото.


Именно таким и пользовался до сего дня.
В данном конкретном случае (у кого нет вентилятора с таймером) всё можно сделать на программном уровне.
Так как живу в многоквартирном «муравейнике», то единственное место для сушки белья – это балкон. В ванной может и затухнуть. Для сушки необходима либо низкая влажность, либо циркуляция воздуха. Выполнение обоих условий – лучший вариант. Вентилятор должен был решить эту проблему. Поначалу именно так и делал. Главное не забыть его выключить. Во время работы вентилятора необходимо приоткрывать малость окошко. Про школьную задачку с бассейном и двумя трубами напоминать не надо? Чтобы воздух выходил в вытяжку, необходимо, чтобы он откуда-то входил в квартиру. У кого окна деревянные, а не пластиковые, проблем не будет. Щелей хватит. А вот с пластиковыми квартира превращается в террариум.
Тут я и задумался об автоматизации процесса. Именно для этого я и заказал датчики.
Печальным опытом реализации своей идеи я уже делился. Вот тот модуль. Он работать не может в ПРИНЦИПЕ. Но без дела не останется. И ему будет применение.


(Напряжение питания: 5В. Максимальная нагрузка: 10А 250В переменного и 10А 30В постоянного тока). Использую как блок реле. Для обычного вентилятора этого достаточно.
Схему модуля я тоже рисовал. Проблем с подключением не будет.


Красный светодиод индицирует наличие питающего напряжения. Зелёный – сработку реле. Бесполезный датчик (датчик влажности, его уже нет) я заменил на сопротивление 10кОм. А также добавил ещё сопротивление. Оно пойдёт к «умному» блоку. Оба выделил красным. Всё это должно исключить возможные недоразумения. Ведь блок реле питается от напряжения 5В, а «умный» блок от 3,3В. Управляется блок реле низким уровнем. Высокий уровень отключает реле (вентилятор). В прошивке это учтено.
В основе схемы лежит компаратор на LM393. Подстроечный резистор изначально был предназначен для настройки порога срабатывания реле влажности. Возможно, его придётся немного крутануть.
Можно использовать простые блоки реле. Они продаются. Я же буду использовать то, что осталось после прошлой неудачной попытки.
Пора смотреть, в каком виде прибыли датчики AM2302 (DHT22). Заказал сразу три. Думаю, что только ванной это не ограничится. В голове много всяких идей. Где б только найти время и желание для их реализации.


Датчики были запаяны в антистатические пакеты. Всё по уму. Пайка аккуратная. Претензий по внешнему виду не имею. Даже плата промыта.


Вот, что написано на странице магазина:

AM2302 Humicap digital temperature and humidity module is a digital output signal containing a calibrated temperature and humidity combined sensor. It uses a dedicated digital modules capture technology and the temperature and humidity sensor technology to ensure that products with high reliability and excellent long-term stability. Sensor includes a capacitive humidity sensing element and a high-precision temperature measurement devices, and with a high-performance 8-bit microcontroller connected. Therefore, the product has excellent quality, fast response, anti-interference ability, high cost and other advantages. Ultra-small size, low power consumption, signal transmission distance up to 20 meters. Making it the best choice for all kinds of applications and even the most demanding applications.
Specification:
Dimension: 40 x 23mm
Weight: 4g
Voltage: 5V
Port: digital two-way single bus
Temperature range: -40-80 °C ± 0.5 °C
Humidity: 20-90% RH ± 2% RH
Platform: Arduino, SCM
Package included:
3 x Sensor Module
На плате деталей минимум. Датчики неразборные, ломать не стал.
Пора переходить к делу. Часть того, что применю, я уже показал. Ещё мне потребуется блок питания на 5В. Его я сделаю из старой (уже ненужной) зарядки к телефону.

Эта зарядка без USB разъёма. Ну очень старенькая (рекомендую использовать более новые, у них 5В на выходе). Поэтому на выходе 7В. Пришлось припаять МС стабилизатора КРЕН5. В этом ничего сложного нет. Кто дружит с паяльником, тот знает. А кто не дружит, зря читает топик.


Сильно не пугайтесь, сделал времянку. После отладки механизма всё будет выглядеть достойно. Возможно, и зарядку поменяю. Всё зависит от того, с каким результатом приду к финишу. Устанавливать по месту (на постоянку) буду после «комплексного опробования». Возможно, придётся применять зимний/летний вариант программного обеспечения. Температурные и влажностные характеристики воздуха зимой/летом отличаются.
Ещё мне потребуется WIFI модуль из предыдущего обзора.


Пригодится кабель-конвертер (USB To RS232 TTL UART) для программирования WIFI модуля.


Блок схема моей затеи выглядит просто.


Но нюансы конечно же имеются.
Осталось составить программку управления вентилятором.
Условий несколько:
1. Вентилятор включается при достижении влажности более 68%.
2. Время работы (таймер) 5 минут.
3. Передача данных о температуре и влажности по WIFI (на всякий случай).
4. Индикация режима по WIFI.
Если остановиться на условии №1, то достаточно будет самой простой Arduino. Но Arduino у меня только одна плата, а WIFI модулей целых три:)
Лично для меня самое сложное место – составление программы, немного (мягко сказано) не моя тема. Но жизнь течёт и увлекает в своё течение всё большие массы людей. Буду постигать необъятные просторы Arduino на примере датчика влажности DHT22 и WIFI модуля. Но если у меня всё получилось, значит, получится и у вас.
Сначала некоторая информация для чайников, как я.
В программе Arduino IDE не хватает в настройках тех плат, которые я буду использовать. Например, ESP8266 надо добавить.

Добавление компонентов на примере ESP8266.

Первым делом я скачал и установил на компьютер Arduino IDE. Затем запускаю программу.
Файл→Настройки→Вставляю ссылку в доп. ссылки→нажимаю ОК. Ссылка:



При этом необходимо подключение к интернету. Обязательно!
Затем захожу в менеджер плат.
Инструменты→Плата:…→Менеджер плат.


Нахожу свой модуль. Выбираю последнюю версию. Нажимаю установить.


В скаченной программе Arduino IDE не хватает и библиотек для датчиков. Например, библиотеку DHT22 тоже надо добавить.

Подключение библиотеки на примере датчика DHT22.

Сначала с интернета скачиваю архив типа DHT.zip. Найти не проблема.
Затем запускаю программу Arduino IDE.
Скетч→Подключить библиотеку→Добавить zip библиотеку.


Появляется вкладка типа этой.


Указываю место хранения…Open.
Библиотека подключена.


Осталось дело за малым:)
Схема подключения датчика влажности может отличаться. Мои пришли в виде модуля с тремя выводами и сопротивлениями, уже установленными на плате.

Ну и, наконец, заливка скетча.

Заливка скетча.

Открываю готовый скетч. В моём случае «WiFi-DHT22_AleksPoroshin68.ino.


Arduino IDE запускается автоматически.
Затем подключаю программатор, захожу в инструменты и подключаю Com-порт. Тот, к которому подключился высвечивается. Его и активирую. На моём нетбуке их три: это com6, com8 и com10.


Изучаю прошивку. Можно изменить имя и пароль доступа.

Нажимаю кнопку для загрузки.


Происходит компиляция скетча. Достаточно долго.


В это время необходимо нажать сброс на собранной схеме модуля.

При этом GPIO 00 на нуле.
Вот сам скетч:
#include #include #include #include #include "DHT.h" #define DHTPIN 4 #define DHTTYPE DHT22 DHT dht(DHTPIN, DHTTYPE); float dhtTemp = NAN; float dhtHumidity = NAN; int ledPin = 12; //GPIO 12 /* Set these to your desired credentials. */ const char *ssid = "AleksPoroshin"; const char *password = "12345678"; ESP8266WebServer server(80); /* Just a little test message. Go to http://192.168.4.1 in a web browser * connected to this access point to see it. */ void handleRoot() { String s = "\r\nESP201"; s += ""; s += ""; //s += "Status - Actions - Config"; s += "

Модуль ESP 201

"; s += " "; if (isnan(dhtTemp)) s += " Температура: Ошибка чтения"; else { s += " Температура: "; s += dhtTemp; s += " C"; } if (isnan(dhtHumidity)) s += " Влажность: Ошибка чтения"; else { s += " Влажность: "; s += dhtHumidity; s += " %"; } if(digitalRead(ledPin) == HIGH) s += " Вытяжка: Откл."; else s += " Вытяжка: Вкл."; s += " "; server.send(200, "text/html", s); } void setup() { delay(1000); Serial.begin(115200); Serial.println(); Serial.print("Configuring access point..."); /* You can remove the password parameter if you want the AP to be open. */ WiFi.softAP(ssid, password); IPAddress myIP = WiFi.softAPIP(); Serial.print("AP IP address: "); Serial.println(myIP); server.on("/", handleRoot); server.begin(); Serial.println("HTTP server started"); dht.begin(); Serial.println("DHT22 init success"); pinMode(ledPin, OUTPUT); } void loop() { getDHT(); server.handleClient(); } void getDHT() { dhtTemp = dht.readTemperature(); dhtHumidity = dht.readHumidity()+5; if (dhtHumidity < 68) { digitalWrite(ledPin, HIGH); Serial.println("ledPin HIGH"); } else { digitalWrite(ledPin, LOW); Serial.println("ledPin LOW"); } }
Сильно не ругайте. Я только учусь.
После заливки скетча для подтверждения программирования GPIO подключаю к +3,3В. Затем отключаю. Прошивка залита.


Собираю схему на макетнице. Всё проверяю. Работает. Но не всё так хорошо, как хотелось. В нужном мне диапазоне китайские датчики занижают показания на 5-6%.


Немецкому логгеру у меня доверия больше. Да и цена у него в несколько десятков раз больше. А самое главное, он прошёл поверку.
Ввёл поправку в программу (добавил 5 единиц). Я согласен, что это неправильно. Но в диапазоне 40-70% показывает точно. Более правильно снять характеристику и исправить библиотеку. К этому я не готов:). Остальные датчики тоже врали. Хотя все показывали приблизительно одинаково.

Вот так выглядит интернет страничка, если подключится к моему WIFI модулю:


Пароли и явки указаны в скетче.
Переключение происходит на 68% влажности. Всё чётко.


Но есть один нюанс. И его не учитывать нельзя. На границе в 68% влажности вентилятор может циклить, то включаясь, то выключаясь. Для решения этой проблемы нужен таймер. У меня вентилятор с таймером. Т.е. проблемы нет. У кого обычный вентилятор, придётся решать эту проблему на программном уровне.
Дальнейшая моя задача всё это собрать согласно схеме, но уже не на макетнице и протестировать в течение месяца. Все изменения можно вносить в процессе эксплуатации. Что делать и куда вставлять, я всё написал.
Несколько слов по поводу монтажа датчика. Засовывать его в вентканал не советую. Причина проста. Даже в самой чистой и ухоженной квартире присутствует пыль, которая при включении вентилятора именно туда и устремляется (в ветканал). А ведь год назад я вентилятор вынимал и тщательно чистил.


Чтобы не менять часто датчики из-за их порчи, рекомендую найти им более подходящее место, где-нибудь рядом. Дополнительно можно обернуть для защиты от пыли салфеткой из нетканого материала или чем-то подобным. И будет вам счастье.
Совсем забыл сказать, что если вы хотите сами выставлять «коэффициенты» управления влажностью, вам необходимо хоть немного быть в теме. Если у вас дома не стоят приборы типа этих…


Без них вам будет очень сложно что-то делать по этой теме.
На этом всё.
Как правильно распорядиться сведениями из моего обзора каждый решает сам. Кому что-то неясно, задавайте вопросы. Надеюсь, хоть кому-то помог. Возможно, кто-то захочет помочь мне. Я буду очень благодарен.
Удачи всем!
Проверка на работоспособность:


Продолжение следует…

Товар предоставлен для написания обзора магазином. Обзор опубликован в соответствии с п.18 Правил сайта.

Планирую купить +51 Добавить в избранное Обзор понравился +26 +65