В этот раз займемся «началом», значит это будет Часть 0.
Умный Дом
Строго говоря, «умным» будет любой дом, который с помощью автоматики облегчает своим жителям их быт. И совсем неважно, используется ли при этом электричество, колдовство или ситема веревок и рычагов.
С другой стороны, под понятием «Умный Дом» каждый понимает нечто свое. У меня все началось с желания автоматизировать наружные жалюзи. Точнее с нежелания бегать по дому и управлять ими по отдельности. Я тогда уже выбрал и почти купил (сравнительно) простые таймеры, но что-то меня остановило. В конце концов были установлены радиоуправляемые контроллеры системы HomeMatic.
Постепенно система росла. Добавилось управление светом, отоплением, датчики открытия окон и дверей, влажности, температуры, движения, освещенности. Вместе со всем этим менялось и мое мнение о том, что должен делать «Умный Дом». Ну это как аппетит, который приходит во время еды.
В моем сегодняшнем представлении система должна быть максимально незаметной, должна помогать и поддерживать пользователя, виртуально «нажимать кнопки» как раз в тот момент, в который он бы это сделал сам.
Конечно, в основе всего лежит аппаратная часть. Но установка датчиков и сбор данных сами по себе занятие довольно скучное, гораздо более интересно их применение для реализации различных сценариев управления.
Простой пример: жалюзи.
Кажется, что все очень просто: утром открывать, вечером наоборот.
А в какое время? — Лучше всего в на основании данных наружного освещения — расчеты в зависимости от времени года не учитывает погодных условий. И еще учитывать максимальное и минимальное время — разумеется в зависимости от дня недели, праздников и факта наличия отпуска.
А насколько плотно закрывать? — В спальне я оставляю небольшую щель открытой — чтобы не было соверщенно темно.
А если окно открыто? — Значит полностью не закрывать, для притока свежего воздуха, но для первого этажа нужно предупреждать забывчивого обитателя.
А если это балкон и дверь открыта? — Не закрывать жалюзи вообще, чтобы не запереть человека снаружи (у меня в данном случаее жалюзи опускаютня на 30см — в качестве напоминания).
А если снаружи темнеет, но порог еще не достигнут, а в комнате включили свет? — Решать заново, но согласно другому порогу освещенности.
И еще защита от ослепления низкостоящим солнцем (в зависимости от интенсивности и позиции солнца), защита комнаты от жары (учитывая интенсивность солнца и температуру воздуха), на первом этаже можно еще учитывать датчик движение под окном.
Наверное можно еще много других сценариев придумать, но и этого достаточно, чтобы показать, сколько возможностей скрывается в казалось бы такой простой штуке, как жалюзи.
Но в начале всего все же лежит «железо»…
Всю техническую часть системы я грубо разделяю на исполнительные устройства (актуаторы), сенсорику и устройства пользовательского интерфейса (ввод, вывод, визуализация).
Темой данной статьи является мой первый опыт с MySensors. Здесь не будет исчерпывающего описания системы и ее возможностей, их можно найти на домашней странице.
Шлюз
Неважно, из каких компонентов состоит каждая конкретная система, одно устройство необходимо практически всегда — шлюз для связи с управляющим компьютером. Нет, конечно можно обойтись и без него, но это не будет особенно интересно.
Естественно, первым делом я собрал именно шлюз. Как всегда, для начала на макетной плате (breadboard).

Не особо аккуратно, но заработало. И даже проработало в тестовом режиме несколько недель (параллельно к тому я собрал еще парочку сенсоров).
Оригинальное описание находится, кстати, здесь: www.mysensors.org/build/serial_gateway
Так, как все работало очень даже хорошо, решил собрать как положено. Для одного экземпляра разрабатывать печатную плату было черезчур, потому ограничился стандартной макетной из гетинакса.
Принципиальная схема очень проста.

А вот и конечный результат.

Ну и соответственно «внутренности»:

Устройство было установленно стационарно и первый прототип датчика движения утоплен в стену в коридоре на первом этаже. Все работало без проблем.
Второй датчик отправился на свое место на втором этаже. А вот здесь начались проблемы. Из-за железобетонного потолка прием в месте установки был скорее от случая к случаю.
Хотя устройства MySensors можно настроить работать в режиме ретранслятора, мне это тогда ничем не помогло — у меня было всего два датчика и они не видели друг друга.
Все это меня не особо и удивило — те же самые проблемы возникли уже и раньше в отношении WLAN. Для того на втором этаже уже находился дополнительный WLAN-Router. Как раз то, что нужно, чтобы подключить Ethernet Gateway (http://www.mysensors.org/build/ethernet_gateway).
Его я собрал на основе ENC28J60, все равно валялся без дела.

К сожалению эта версия показала себя не особо стабильной — каждый день зависал как минимум один раз. Грешу на утечку памяти в библиотеке для ENC28J60. В качестве «решения» активировал Watchdog. Грубо конечно, но эффективно. Кстати, обнаружил, что Bootloader Pro Mini не поддерживает Watchdog. При активации ардуино зависал в бесконечном, Reset-цикле. К счастью для этого есть простое решение — установить Optiboot.
Первые прототипы конкретных устройств
В качестве заключения хочу еще показать несколько фотографий прототипов устройств, предшествовавших описанному в первой статье датчику движения.
Уже при первом знакомстве с библиотекой оказалось, что есть готовые примеры для практически всех доступных сенсорных модулей. И что они очень легко комбинируются друг с другом.
Собрал вот такого «монстра».

Тут датчики температуры, влажности (кстати, не используйте DHT11 — дерьмо последнее, возьмите DHT22), движения, освещенности и дистанции. Работало без проблем. С рэле было также просто, но это я быстро разобрал за ненадобностью.
Захотелось сделать нечто действительно полезное. А так, как больше всего мне не хватает датчиков движения, начал именно с них.

Собрал практически из «подножного корма».





На этом поставлю сегодня точку. Ах, да, мои исходники можно найти здесь: github.com/hexenmeister/MySensors_MyDevices
Комментарии (9)
 - greenkaktus16.04.2015 14:03- Хороший проект. Понравился. Я вот хочу собрать похожее, только хочу обеспечить для датчиков больше автономности, данные гонять по BLE на центральные девайсы (распределенная система со смартфонами).  - Nizametdinov16.04.2015 14:11- Глянь вот этот проект, вчера стартовал на кикстартере 
 www.kickstarter.com/projects/264813863/bluz-bluetooth-made-smarter?utm_source=Spark&utm_medium=blog&utm_campaign=Bluz - greenkaktus16.04.2015 14:35- Неплохо да. Но дорого. 
 Я выбрал Bluno nano, + DHT датчики. CR2032 таблетки недостаточно для питания пары датчиков и борды. Планирую CR-9V.
 
 
 - Nizametdinov16.04.2015 14:10- habrastorage.org/getpro/habr/post_images/9ca/0fa/c21/9ca0fac21a96a9433e56b93a255b6a7d.jpg — очень клево получилось, реально из «Г» конфетку замутил.  - hexenmeister Автор16.04.2015 15:36- Спасибо. 
 Делал из того, что было под рукой, прототип все таки.
 Последняя версия, уже на произведенной у китайцев PCB, выглядит профессиональнее.
  
 
 - hexenmeister Автор16.04.2015 15:46+1- Кстати, если уж разговор о ценах зашел: 
 
 SerialGateway:
 Ардуино ~2$
 Трансивер с антеной: ~5$
 USB<->UART ~2$
 Гетинакс, светодиоды, провода, кнопка, регулятор — мелочь, не знаю даже, пусть будет ~1$
 Итого: 10$
 Если брать трансивер без антены, тогда он не стоит и доллара, но может немного ухудшится радиус приема.
 
 Motion+Temp+Hum+Lux-Sensor:
 Ардуино ~2$
 Трансивер без внешней антены: ~0.8$
 DHT22 (температура+влажность) ~3$
 BH1750 (освещение) ~1.5$
 Датчик движения: ~1$
 PCB + мелочь: ~1.5$
 Итого: примерно 10$
 
 вроде бы ничего не забыл…
 - Jey17.04.2015 18:08- MySensors отличный проект во всех смыслах! Кстати, на mysensors описан вариант ethernet-шлюза с протоколом MQTT. Такой шлюз позволяет использовать сеть MySensors в системе MajorDoMo прямо «из коробки», чем многие и пользуются. 
 
           
 
Verdel
А можно чуть подробнее про watchdog для ENC28J60?
hexenmeister Автор
Про Watchdog можно написать собственную статью. Если в кратце, то примерно так:
Watchdog — это аппаратное устройство в микроконтроллере. (ENC28J60 тут ни при чем.) В общем-то это просто таймер. Если он запущен, то при достижении заданного времени будет подан сигнал Reset и микроконтроллер перезапустится. Чтобы этого не происходило, нужно периодически (из программы) сбрасывать тимер. Если программа повиснет, то сброс не состоится, все перезапустится и заработает снова.
Оригинальный bootloader в Pro Mini при запуске к сожалению не деактивирует Watchdog, зато ставит время на минимальное значение. В результате сброс происходит еще до выхода из bootloader в программу. Ардуино при этом естественно зависает (характеристично быстрое мигание LED).
Optiboot такой проблемы не создает. Для записи Optiboot понадобится ISP-программер (можно в этом качестве использовать второй ардуино).