И снова здрасти. Это продолжение работы "Умный дом: первые шаги", которую я уже выкладывал на этом сайте. Сразу оговорюсь: данная статья опять-таки является незаконченный набором устройств, так как из-за моей скудной фантазии и способностей, да и по миллиону других причин, я всё ещё не могу представить и, соответственно, реализовать окончательный девайс. Мой умный дом находится (и, скорее всего, ещё долго будет находиться) на стадии разработки, поэтому в нём ещё очень много тараканов, блох и всякой другой живности, которую надо поймать, связать и безжалостно растоптать. В связи с этим не рекомендую читать статью людям, незнакомым с устройством и программированием микроконтроллеров AVR и посему неспособным на такие жестокие поступки (хорошо бы знать и программирование под windowsХР).
Продолжаем светскую беседу. Я люблю удобства. Может, потому что я лентяй. Но лень - это двигатель прогресса, как говаривал мой матанщик. И это моя новая попытка сделать жизнь удобней. Я абсолютно согласен, что не все удобства полезны, некоторые даже вредны, например компьютер: портит глаза, уменьшает подвижность: но кому он сейчас не нужен? Даже если есть такие, то сомневаюсь, что они будут это читать.
Итак, потому что я люблю удобства и потому что я лентяй, я решил сделать умный дом. Что я подразумеваю под этим словосочетанием? Умный дом в моём представлении - это компьютер; даже не компьютер, а распределённый робот с компьютерным органом управления. Т.е. стоит компьютер с операционной системой Homedos, снимает показания с датчиков и, обрабатывая их согласно моей программе, которую я записал в этот компьютер, управляет определёнными узлами. И, поверьте, скоро так и будет чуть ли не в каждом доме, потому что это удобно, потому что это многофункционально и расширяет возможности человека; это не пугает каким-либо ограничением свободы, так как программу задаёшь ты сам, да и выключить этот компьютер всегда можно. Уже сейчас, если вы наберёте в поисковике "умный дом", вывалится куча фирм, которые предоставляют эту услугу. Так что я, в общем-то, не разрабатываю ничего нового.
Ну, так о чём это я?.. А, ну да - что же я сделал. Я попытался разработать костяк умного дома: управляющий компьютер и коммуникации. Естественно, без непосредственной реализации на примерах у меня б ничего не получилось, так что в качестве базисных элементов, на которых я всё отрабатывал, были разработаны радиовыключатели нагрузки (в основном света), радиодатчики (температуры) и интерфейс управления в виде радиопультов. Может быть, здесь конечно много "радио:" и всё это можно реализовать через связь по сети питания 220В, но мне до этого далеко, да и не принципиально: думаю, если надо, то будет несложно разработать переходник из одного типа связи в другой.
Но обо всём по порядку и поподробнее.
Начну, пожалуй, с главного: с управляющего компьютера, или, как я его грозно обозвал, Центрального Процессора. ЦП состоит из микроконтроллера Atmega32, часов реального времени ds1307, конвертора USB-USART ft232 и приёмо-передатчика RFM12, работающего на частоте 433 МГц.
Как оно работает.
ЦП подключается к обычному компьютеру через USB интерфейс (комп лучше всего иметь с windows xp с установленными драйверами для ft232, без которых, конечно, ничего не заработает). После чего запускается страшно криво написанная на ассемблере программа настройки. Включая внешние устройства (датчики, пульты и исполнительные устройства) и выбирая в программе поиск новых устройств, добавляем их в систему, при этом устройству выдаётся уникальный номер (ID) и символьное имя. По ID в дальнейшем ведётся всё общение с устройством. На следующем этапе настройки можно и нужно присвоить датчикам и пультам управления ID номера исполнительных устройств, которыми они могут управлять. После этого пульт или датчик управляют нагрузкой непосредственно, минуя ЦП.
В самом конце настройки, когда все устройства уже установлены, можно задать простейшие сценарии типа "выключить всё" или "выключить но не всё":), запускающиеся с пульта управления. Сценарий состоит из набора команд, посылающихся последовательно друг за другом из ЦП. Сценарий выполняется по приходу соответствующей команды от пульта ДУ.
ЦП запоминает таблицу ID устройств, добавленных в систему, и сценарии в EEPROM. Благодаря этому, после настройки ЦП может работать и без подключения к компу. Символьные имена устройств, задающиеся на стадии регистрации, сохраняются в EEPROM конечных устройств или датчиков и в компьютерной программе. Естественно, что конечное устройство также запоминает в EEPROM свой ID и параметры, заданные при его дальнейшей настройке.
В ЦП присутствуют также часы реального времени. Эти часы можно синхронизовать с часами на компьютере. По запросу ЦП посылает соответствующему устройству реальное время с ds1307, чем успешно пользуются пульты управления с ЖКИ экранами.
Через ЦП можно задавать параметры любого устройства, зарегистрированного в системе. Т.о. можно включать и выключать любую нагрузку, что при написании нормального софта для ПК, с графическим интерфейсом и всякими кнопками, должно стать очень удобной (если не основной) опцией ЦП.
Выглядит это чудо так:
Хардварная часть относительно первой статьи осталась без изменений: Atmega32 + ds18b20 + RFM12-433 + ЖКИ + блок питания. По умолчанию, пульт отображает время, температуру собственного термодатчика (DS18B20) и температуру уличного термодатчика. После нажатия центральной кнопки "меню" мы видим настройку часов и до пяти выключателей, которые появляются в меню по мере их настройки через компьютерную программу.
Внимание: регистрация, настройка, удаление пульта осуществляются только, когда пульт находится в режиме "по умолчанию".
Используя встроенный термодатчик, можно настроить термостат, управляя, например, обогревателем в комнате (можно сделать управление открытием окна и т.д.). Термостат будет включать и выключать нагрузку, когда температура будет ниже или выше заданных пределов. Пределы можно задать как с самого пульта, так и с компьютера.
Также в качестве нагрузки можно задать выполнение сценария. Сценарии запускаются так: пульт посылает ЦПроцессору команду, после чего ЦП выполняет записанный в него соответствующий список команд.
Внешний вид относительно прошлой статьи тоже не изменился:
В данном пульте нет экрана, зато он работает на батарейках. Сделан он на любимой мною attiny2313.
Без нажатия на кнопку контроллер переходит в спящий режим, поэтому при настройке его с компьютера нужно нажать на 1 секунду любую кнопку (после этого он перейдёт в режим радиоприёмника) и не отпускать до конца настройки. В спящем режиме весь девайс потребляет около 2мкА (хотя я больше склонен думать, что на таких цифрах врёт мой китайский мультиметр). Перестаёт работать, когда напряжение питания падает до 2,95 В. У меня он работает уже полмесяца от обычной литиевой таблетки 3В (реально там было 3,2 В при покупке). На пульте вы видите 5 кнопок, на которые можно настроить управление 5 нагрузками. При нажатии на одну кнопку пульт посылает поочерёдно команды включить, выключить одной нагрузке.
Так как мне было лень делать новый термодатчик, я просто перепрограммировал старый (из первой статьи), сделанный на attiny2313+ds18b20+RFM02-433. Он не настраивается с компьютера - все данные задаются при прошивке. Он раз в 8 секунд выходит из спящего режима, измеряет температуру и посылает результат по радиоканалу. Зато я нашёл глюк в инициализации спящего режима МК и увеличил длительность работы устройства. Теперь ток потребления в спящем режиме также около 2 мкА. Работает от аккумулятора ёмкостью 600 mAh от мп3 плеера уже больше месяца.
Встроенный терморегулятор вы уже видели в пульте с ЖКИ. Я собрал также отдельный модуль из attiny2313+ds18b20+RFM12-433, который при настройке может включать/выключать модуль нагрузки в зависимости от заданных верхнего и нижнего пределов температуры.
В качестве исполнительного элемента я сделал выключатель света в комнате. Он сделан из attiny2313+RFM12-433.
Трудности возникли с малогабаритным блоком питания. Я попробовал несколько конструкций: на небольшом импульсном блоке питания, на безтрансформаторном блоке питания ROHM и на безтрансформаторном блоке питания с гасящим конденсатором (схема первоначально взята отсюда); так как основным критерием были маленькие габариты (чтобы вошло в монтажную коробку из под обычного выключателя), то выиграла схема с гасящим кондюком, которая, как оказалось, неплохо симулируется в протеусе. В качестве самого коммутатора было выбрано оптореле S202S02F. Помимо малого тока управления 8мА, достаточно большой нагрузочной способности до 8А, оно обладает тем преимуществом, что при КЗ на выходе вылетит скорее только реле, тогда как при использовании обычных симисторов сгорали все схемы выключателя (последнее проверено на опыте). Симулятор также показал, что установка гасящего конденсатора меньше 2мкФ нежелательна, так как низковольтному блоку необходимо обеспечить 30мА тока на 5ти вольтах. Я использую 2,2мкФх450В.
Схема выключателя может коммутировать до 5ти нагрузок + одна тактовая кнопка для коммутации одной нагрузки, которая легко позволяет сделать настенный выключатель света с радиоуправлением.
!ВНИМАНИЕ: Схема без гальванической развязки с сетевым питанием 220В!
В качестве полезной нагрузки я, пока что, включал только лампу 150Вт (жаба давит покупать для этих целей обогреватель за 2 тыщи).
Как вы могли заметить, все модули на attiny2313 (кроме уличного термодатчика) имеют одну универсальную печатную плату.
При настройке с компьютера в пульты записываются ID нагрузок, которыми они могут управлять, после чего при нажатии на соответствующие кнопки пульт посылает пакеты данных непосредственно выключателю, минуя ЦП. Так работают все модули.
Все платы нарисованы в Proteus'e.
Из нереализованного:
Требуется нормальный интерфейс для компьютерной программы управления.
Ведение лога событий: я думаю запрограммировать запоминание последних десяти событий в ЦП и посекундное списывание этого списка компьютером.
Необходим помехоустойчивый протокол связи (а если сосед сделает себе такой же УД - уй, что будееет! Полтергейст отдыхает).
Ну и необходимо расширять диапазон домашней автоматики - тут приветствуются всякие предложения и идеи. Хочу сделать управление увлажнителем и проветриванием квартиры, думал над созданием электронного ключа, но уж больно это ответственное дело - безопасность, пока не решился. Также размышляю над тем, чтобы управлять чайником (пусть готовить ЦД не может, ну чайник я ему доверю). Индикатор включения электроплиты (для управление такой мощной нагрузкой я ещё молод )) ). Сейчас вожусь над присоединением ЦП к мобильнику для удалённого анализа состояния УД, но нормальной связи с мобильником (siemens s55) пока сделать не удалось, так что, возможно, придётся отложить эту идею до лучших времён.
Ну и в конце вопрос того электрика из рекламы: что ж я сделал-то?
P.S.: Приглашаю всех принять участие в продолжении этой разработки.
Файлы:
Печатные платы в формате Proteus.
Прошивки МК с исходниками.
Управляющая программа для компостера с исходником.
Вопросы, как обычно, складываем тут.