В этот раз займемся «началом», значит это будет Часть 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)
greenkaktus
16.04.2015 14:03Хороший проект. Понравился. Я вот хочу собрать похожее, только хочу обеспечить для датчиков больше автономности, данные гонять по BLE на центральные девайсы (распределенная система со смартфонами).
Nizametdinov
16.04.2015 14:11Глянь вот этот проект, вчера стартовал на кикстартере
www.kickstarter.com/projects/264813863/bluz-bluetooth-made-smarter?utm_source=Spark&utm_medium=blog&utm_campaign=Bluzgreenkaktus
16.04.2015 14:35Неплохо да. Но дорого.
Я выбрал Bluno nano, + DHT датчики. CR2032 таблетки недостаточно для питания пары датчиков и борды. Планирую CR-9V.
Nizametdinov
16.04.2015 14:10habrastorage.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$
вроде бы ничего не забыл…
Jey
17.04.2015 18:08MySensors отличный проект во всех смыслах! Кстати, на mysensors описан вариант ethernet-шлюза с протоколом MQTT. Такой шлюз позволяет использовать сеть MySensors в системе MajorDoMo прямо «из коробки», чем многие и пользуются.
Verdel
А можно чуть подробнее про watchdog для ENC28J60?
hexenmeister Автор
Про Watchdog можно написать собственную статью. Если в кратце, то примерно так:
Watchdog — это аппаратное устройство в микроконтроллере. (ENC28J60 тут ни при чем.) В общем-то это просто таймер. Если он запущен, то при достижении заданного времени будет подан сигнал Reset и микроконтроллер перезапустится. Чтобы этого не происходило, нужно периодически (из программы) сбрасывать тимер. Если программа повиснет, то сброс не состоится, все перезапустится и заработает снова.
Оригинальный bootloader в Pro Mini при запуске к сожалению не деактивирует Watchdog, зато ставит время на минимальное значение. В результате сброс происходит еще до выхода из bootloader в программу. Ардуино при этом естественно зависает (характеристично быстрое мигание LED).
Optiboot такой проблемы не создает. Для записи Optiboot понадобится ISP-программер (можно в этом качестве использовать второй ардуино).