Умный дом на базе системы Ардуино – сложно ли сделать своими руками. Датчик движения своими руками на Arduino Подключаем PIR-датчик к набору Arduino

Комплексные системы управления инженерными коммуникациями жилища, известные под названием «Умный дом» набирают всё большую популярность. Широкому внедрению этих систем препятствует достаточно высокая стоимость комплектующих элементов и монтажных работ. Умный дом на базе Arduino представляет собой решение вполне доступное для всех, кто хоть немного разбирается в электронике.

Что такое Arduino

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

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

На небольшой печатной плате установлен микроконтроллер, немного дискретных элементов, кварц и различные виды разъёмов, в том числе и вертикальные штыри, с помощью которых собираются конструкции-этажерки с добавлением плат расширения. В качестве микроконтроллеров используются чипы семейства Atmega. Тип контроллера определяет функциональные возможности платы, зависящие от количества входов и выходов.

Так широко распространённый модуль Arduino Uno с микроконтроллером Atmega 328 имеет следующие характеристики:

  • Цифровые входы/выходы – 14
  • Из них 6 – ШИМ
  • Аналоговые входы – 6
  • Память – 32 Кб
  • Питание – 7-12 В
  • Цена – 950 рублей

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

Цифровые выходы могут управлять работой электромагнитных реле, которые в свою очередь включают и выключают сетевые розетки, к которым подключены различные бытовые приборы. Умный от Arduino обойдётся значительно дешевле, чем готовый промышленный комплект.

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

Самой мощной и многофункциональной платой этой линейки является Arduino Mega. На печатной плате смонтирован контроллер AT mega 2560 , дискретные элементы, порт USBконнектор для подключения питания. Плата имеет 54 универсальных контакта, которые можно запрограммировать на выполнение функций входа/выхода. 14 из них могут управлять аналоговыми устройствами при помощи широтно-импульсной модуляции. 16 аналоговых входов предназначены для подключения любых аналоговых приборов.

Плата контроллера Arduino Mega стоит в пределах 1 500 рублей. Программировать его проще всего с помощью персонального компьютера через USB-порт.

Периферийные модули для Ардуино

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

Вот только некоторые из них:

  • Газоанализатор – MQ-2
  • Датчик освещённости – 2CH-Light-2
  • Датчик температуры внешний – DS18B20-PL
  • Датчик температуры и влажности комнатный – DHT-11
  • Драйверы электродвигателя – L298N, L9110
  • Релейные модули – 1ch5V, 4ch5V
  • Модуль дистанционного управления IC2262/2272

Датчик, определяющий утечку газа в помещении, реагирует на пропан и бутан, которые являются составляющими бытового газа. Модуль имеет регулировку чувствительности и аналоговый/цифровой выходы. Датчик освещённости может являться частью автоматизированной системы управления светом. Он состоит из двух независимых каналов с индивидуальной регулировкой чувствительности. Уличный термодатчик предназначен для работы при температуре от – 55 до +125 градусов. Комнатный датчик температуры и влажности предназначен . Диапазон изменения температуры от 0 до +55 0 С и влажности от 20 до 90%.

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

Драйверы электродвигателей позволяют управлять однофазными, двухфазными, четырёхфазными и шаговыми двигателями. С помощью таких устройств можно открывать и закрывать жалюзи или шторы. Подключенные к драйверам сервоприводы позволяют регулировать поток теплоносителя в радиаторах отопления. Незаменимыми в системе «Умный дом» являются релейные ключи. Управляемые потенциалом логической единицы +5 вольт, реле допускают коммутацию нагрузок в цепях переменного тока до 10 ампер при напряжении до 250 вольт.

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

Модуль дистанционного управления состоит из пульта и приёмного устройства. Пульт оборудован четырьмя кнопками и обеспечивает передачу команд на приёмный блок на расстоянии до 100 метров. Все периферийные модули имеют одинаковое питающее напряжение и совместимы с любыми микроконтроллерами Arduino.

Организация системы «Умный дом»

Без определённых навыков, знания принципиальных схем и основ электроники за систему «Умный дом» в полном объёме лучше не браться.

Программирование микроконтроллеров линейки Ардуино осуществляется на языке С/С++.

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

Для того чтобы сделать «Умный дом» на Ардуино своими руками необходимо составить технический проект, где будет указано количество датчиков и исполнительных устройств для каждого помещения. Можно начать с одной комнаты, где будут реализованы несколько простых функций. Некоторые из них будут выполняться по сигналам от внешних датчиков, а некоторые по сигналам таймера. Когда утром человек встаёт на работу контроллер Ардуино, по сигналу таймера включит электрический чайник или кофеварку. Если на улице темно, что зафиксирует наружный датчик, в комнате плавно загорится светильник. Комфортную температуру в помещении так же можно задать как для сна, так и для просыпания.

Для небольшого числа функций подойдёт микроконтроллер Arduino Uno и набор периферийных модулей.

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

Заключение

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

Проходил мимо, смотрю, а здесь вещи интересные о самоделках разных пишут. Я тоже недавно кое-что мастерил, дай, думаю, напишу, может кому и пригодится, ну или просто интересно будет. Речь идет о железе бюджетного 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: вы можете очень быстро и за небольшие деньги собрать макет или прототип устройства, которое не только просто программируется, но и может выполнять реальные интересные задачи.

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

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

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


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


(Напряжение питания: 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

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

  1. Подключение PIR-датчика к Arduino;
  2. Как настроить взаимосвязь между датчиком и автоматической отправкой e-mail.
Необходимо для проекта:
  • Arduino UNO (выбрать можно на Aliexpress).
  • PIR-датчик.
  • Бредбоард.
  • Связка проводов.

Все перечисленные элементы для сборки можно увидеть на фотографиях:

В первую очередь нужен ПК с подключением к интернету. Мы использовали Raspberry Pi.

Подключаем PIR-датчик к набору Arduino:

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

Работа со скетчем

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

Int pirPin = 7; int minSecsBetweenEmails = 60; // 1 min long lastSend = -minSecsBetweenEmails * 1000; void setup() { pinMode(pirPin, INPUT); Serial.begin(9600); } void loop() { long now = millis(); if (digitalRead(pirPin) == HIGH) { if (now > (lastSend + minSecsBetweenEmails * 1000)) { Serial.println("MOVEMENT"); lastSend = now; } else { Serial.println("Too soon"); } } delay(500); }

« M inSecsBetweenEmails» – эта переменная может переключаться на другие значения, которые будут удобны пользователю. К примеру, можно установить интервал, который равен одной минуте – это будет означать, что следующий e-mail будет отправлен только через 60 секунд.

«LastSend» поможет отследить время, в которое было отправлено последнее сообщение. Инициализация данной переменной происходит с отрицательным числом, которое равно миллисекундам, что указаны в «MinSecsBetweenEmails» . В итоге, мы получаем гарантию того, что после запуска скетча в Arduino сразу же запустится PIR-датчик.

За счет чего мы можем высчитать миллисекунды, сравнить их число со временем последнего срабатывания датчика? Все благодаря встроенной функции под названием Millis. В том случае, если обнаружено движение, но прошло мало времени с последнего активизации датчика будет отправлено письма с текстом «Too soon» .

Эту функцию сначала надо проверить. Для этого открывается Serial Monitor . Далее рассмотрим, как он выглядит:

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

Как установить PySerial и Python:

Операционная система Linux имеет автоматически установленный Python. Система Windows не обладает такой характеристикой, поэтому программу необходимо установить самостоятельно. PySerial исполняет роль библиотеки, она поможет поддерживать связываться с Arduino.

Установка Python :

Python 3 нередко вызывает затруднения при работе с PySerial, особенно если вы используете Windows. Чтобы этого избежать, можно вместо третьей версии скачать Python 2 .

Завершив установку программы в меню «Пуск» можно обнаружить особую группу. Когда мы перейдем к процессу установки библиотеки, нам понадобится сотрудничество с Python, применив командную строку. Поэтому лучше сразу добавить к PATH нужный каталог. Далее можно увидеть вспомогательную фотографию:

Для добавления каталога нам потребуется: открыть панель управления, в ней найти раздел «System Properties». Потом нажимаем клавишу, которая называется «Переменная среда» (Environment Variabes), перед нами всплывет окно. В его нижней части должен находиться «Path», который нужно выбрать. Теперь кликнем на «Edit» – Изменение и завершаем процесс нажатием «значения переменной». Нельзя удалять текст, который получили, к нему следует дописать такую надпись – «;C:\Python27». Не забываем после каждой папки, что указана в тексте ставить «;». Теперь проверяем правильно ли осуществлен ввод «Path». Для этого в командную строку вводим слово «python». Если ошибок не возникло, то на экране появится следующая картинка:

Установить PySerial:

Независимо от используемой операционной системы, скачиваем.tar.gz установочный пакет для PySerial 2.6 с. Этот сайт может помочь это сделать – //pypi.python.org/pypi/pyserial . Получаем файл с именем pyserial-2.6.tar.gz. Если используется Windows, то будет нужна распаковка файлов в выбранную папку. Это не стандартный файл формата ZIP, придется сделать дополнительные действия – скачать 7-zip (это можно сделать здесь – //www.7-zip.org/ ). Для системы Linux необходимо воспользоваться терминальной сессией, в ней дать команду «CD», указать название той папки, в которую скачали pyserial-2.6.tar.gz. Чтобы выполнить распаковку нужно ввести:

$ tar -xzf pyserial-2.6.tar.gz

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

Sudo python setup.py install

Python

Потребуется создать отдельную программу для работы с Python. Нужно скопировать код в файл с таким именем – «movement.py». В Linux можно использовать «нано» редактор, а для системы Windows необходимо создать файл, используя редактор Python «IDLE ». Он доступен в меню «Пуск».

Import time import serial import smtplib TO = "[email protected]" GMAIL_USER = "[email protected]" GMAIL_PASS = "putyourpasswordhere" SUBJECT = "Intrusion!!" TEXT = "Your PIR sensor detected movement" ser = serial.Serial("COM4", 9600) def send_email(): print("Sending Email") smtpserver = smtplib.SMTP("smtp.gmail.com",587) smtpserver.ehlo() smtpserver.starttls() smtpserver.ehlo smtpserver.login(GMAIL_USER, GMAIL_PASS) header = "To:" + TO + "\n" + "From: " + GMAIL_USER header = header + "\n" + "Subject:" + SUBJECT + "\n" print header msg = header + "\n" + TEXT + " \n\n" smtpserver.sendmail(GMAIL_USER, TO, msg) smtpserver.close() while True: message = ser.readline() print(message) if message == "M" : send_email() time.sleep(0.5)

Это показано на следующей картинке:

После изменений, программа запуститься при помощи командной строки:

Python movement.py

Итак, установка завершена.

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

Прикрепленные файлы :

Самодельный датчик температуры и влажности DHT11 и DHT22 – подключение к Arduino Биометрический замок – сборка платы управления и программирование микроконтроллера