habrahabr

Умный дом — дешево и сердито

  • среда, 14 мая 2014 г. в 03:10:28
http://habrahabr.ru/post/222571/

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

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

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

Но для начала я бы хотел вам рассказать про аппаратную часть «рабочей лошадки» дома – RC-2(room controller). Я давно пишу прошивки под AVR МК, поэтому в качестве мозга нашего контроллера будет известная Atmega 8-16PU, которая есть во всех магазинах радиодеталей. Да, ее старший брат используется в уже надоевшей всем Arduino Uno, но мы будем держаться от нее подальше.

Чего мы хотим?

А теперь определим требования к нашей лошадке: контроллеры должны стоять в каждой комнате и иметь связь с сервером, работать от напряжения питания 7-40 вольт, иметь возможность подключения датчиков температуры и влажности, всевозможных датчиков и кнопок типа «сухой контакт» (герконов, кнопок, датчиков движения), возможность управлять внешними устройствами, способность делать простейшие действия без участия сервера (включать свет по кнопке, датчику движения, геркону).

Теперь пройдемся по требованиям и выберем средства, способные обеспечить выполнение этих требований:
  • Связь с сервером. Ethernet – сложно и много проводов (от свитча до каждого из контроллеров), Bluetooth, WiFi и другие беспроводные – сложно и дорого. Вспомним о старой доброй шине RS-485 и будем использовать ее.
  • Логика у нас 5 вольтовая, нужен преобразователь. Будем использовать простой и очень эффективный блок питания на импульсном регуляторе LM2576 (схема есть в даташите на первой же странице)
  • Всевозможные датчики? Atmega8 имеет на борту все что нужно: АЦП, дискретные входы, есть даже встроенные резисторы подтяжки. Реализуем поддержку шины 1-Wire на одной из ножек для общения с датчиками (тем же самым DHT11).
  • Управление внешними устройствами? Опять же, имеем дискретные выходы и ШИМы на МК.

Молчи – за умного сойдешь

На шине RS-485 должен быть один мастер, который будет опрашивать подключенные к шине наши умные контроллеры по очереди. В один момент времени говорит один, остальные слушают. Контроллеры отвечают строго только на запрос мастера, сам по себе никто ничего не говорит, иначе будут коллизии, и никто ничего не поймет. Все строго.

Обмен данными в шине полудуплексный, то есть в один момент времени устройство может либо передавать, либо принимать данные.

Для работы с шиной будем использовать микросхему MAX485, плюс UART самой Atmega8.
image
С ней все просто: на 2 и 3 ножке логическая единица – передаем, ноль – слушаем. После переключения этих режимов важно подождать пока завершатся переходные процессы, где-то пол миллисекунды, прежде чем передавать/принимать.

Что получается?

Разведенная схемка выглядит так:

Готовый контроллер:

В ближайшем радиомагазине все это стоит:
  • Atmega8-16PU — 130р
  • MAX485 — 60р
  • LM2576 — 60р
  • Рассыпуха(текстолит, резисторы, диоды, конденсаторы, кварц, клемники) – 150р

Итого = 400р.
Получилось дешево и сердито. Протокол общения устройство-сервер бинарный, с контрольной суммой. Контроллер дергает лапками по команде сервера, в ответ на запрос состояния посылает массив состояний своих входов, выходов, АЦП и то, что удалось получить по 1-Wire. Без сервера умеет включать свет по кнопке, переключателю, датчику движения.

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