13 мар. 2011 г.

Огромные изменения в разработке ядра компонентов "умного дома"

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

Во первых, ATtiny и ATMega это конечно хорошо - удобно паять и все такое. Но пора выкинуть это старье и использовать что-нибудь посовременнее при современных ценах на комплектующие проще поставить какой-нибудь стоногий ARM, вкатить на него ОС РВ и не парить себе мозг работой с железом, ручным разделением программ на несколько потоков и так далее. Такие микросхемы спокойно можно припаять вручную - на производственной линии НПО ЛМТ, что стоит на первом этаже одного из корпусов университета, так и делают. Правда не знаю, используется ли при этом паяльник или фен, но обещали все показать и научить.
Во-вторых, неплохо определиться с задачей - что мне нужно и что я конкретно хочу сделать, а не кидаться сразу же к Иглу с Топором, рьяно разводя печатные платы. Именно этим и вызваны мои предыдущие неудачи - задача, стоявшая передо мной была поставлена в слишком общем виде, ну а стремление побыстрее сделать отладочную плату, чтобы писать ПО, лишь мешало мне.

Текущие задачи
  1. Разобраться, что же мне надо.
  2. Выбрать пути достижения своей цели.
Чего я хочу?
Я разрабатываю систему "умный дом". Я хочу чтобы она выполняла за меня рутинные действия (как-то включение света, когда темно), делала мою жизнь в долбаной питерской коммуналке проще и освобождала меня от бытовых забот. Также я хочу, чтобы создание этой системы было как можно проще для меня и чтобы система начала свою работу как можно быстрее иначе меня отчислят нахрен через три месяца.


Как мне этого достичь?
Не нужно строить велосипеды. Сделать радиомодуль на ATMega8 и TR24A и пытаться запихнуть сетевой стек в 2 Кб это конечно круто, но слишком ресурсозатратно, долго и не имеет смысла при наличии рядом уже работающего велосипеда.
Схема системы должна быть максимально проста - в центре управляющий сервер, а по бокам различные датчики, управляющие механизмы и так далее... Это похоже на топологию "звезда". Внутри все может быть как угодно - хоть полносвязная топология, но для пользователя данные ходят только в двух направлениях - от сервера к исполнительным устройствам и назад.


Для передачи данных можно взять CC2530 от TI - под него уже есть готовый и работающий сетевой стек - ZStack. С помощью него можно создавать сенсорные сети, в том числе и такие, в которых устройства помогают друг другу передавать данные куда надо. Кроме того, внутри этой микросхемы есть как радиотрансивер, так и микроконтроллер - экономия однако.
Если возможностей этого камня не хватит - можно взять какой-нибудь ARM и пользоваться всеми доступными на нем прелестями, упрощающими разработку - например, ОС РВ, готовыми библиотеками и так далее.
Что самое хорошее - мне доступен отладочный набор для CC2530, то есть я смогу приступить к написанию ПО еще даже в глаза не видя своих плат - ускорение разработки налицо.

В данный момент...
В данный момент мне нужно сделать ту часть системы, которая будет заниматься передачей данных между остальными частями системы. Скорее всего она будет выполнена в виде маленькой платы с антенной, радиопередатчиком, микроконтроллером (СС2530) и интерфейсными разъемами на ней.
Эта штука должна быть взаимозаменяемой - чтобы я мог снять отказавшую плату с устройства и заменить ее другой, без перепрошивки и прочих танцев с бубном.
После создания этой части системы я должен буду забыть о сенсорных сетях, ZigBee и всем прочем. Мне должно быть безразлично, каким образом данные будут доходить от датчика до сервера, также мне должно стать безразличным то, как будут подключаться датчики к этому модулю системы.
Можно сказать, что этот модуль будет интерфейсной платой между сенсорной сетью и конечным устройством. А можно сказать, что это будет еще одним уровнем абстракции для системы - указал адрес устройства, выплюнул данные, а об их  передаче, доставке и приеме позаботятся уже эти модули.

Еще раз, но уже кратко:
  • Надежная передача данных между частями системы
  • Абстрагирование от особенностей работы исполнительных устройств и датчиков
  • Абстрагирование от особенностей работы сенсорной сети
  • Взаимозаменяемость
Теперь рассмотрим каждый пункт подробнее:
Надежная передача данных между частями системы будет достигаться средствами стека ZigBee от TI - ZStack. То есть целиком программно.
Абстрагирование от особенностей работы сенсорной сети тоже будет осуществляться целиком программно - будет написана эдакая "обертка", которая получает на входе адрес устройства (не в ZigBee сети, а в сети нашего "умного дома") и данные для него, и уже сама работает с сенсорной сетью. Адрес устройства в сети "умного дома" будет жестко зависеть от самого устройства - например он может быть прошит во флэше на плате устройства, откуда микроконтроллер CC2530 сможет его считать и использовать при получении данных от сервера. Возможно, перед отправкой данных, интерфейсная плата вначале пошлет некий широковещательный запрос адреса мота в сенсорной сети, к которому подключено устройство с таким-то адресом. А затем, по результатам ответа, сообщение будет послано уже конкретному устройству.
Абстрагирование от особенностей работы устройств "умного дома" будет достигаться за счет стандартизированного интерфейса, по которому будут подключаться наши интерфейсные платы к устройствам "умного дома". А также за счет обмена стандартными сообщениями по этому интерфейсу. То есть речь идет об использовании простенького протокола передачи данных поверх какого-нибудь SPI или I2C. Естественно, обеспечивать обмен данными между нашим интерфейсом и датчиком/исполнительным устройством будет какой-нибудь микроконтроллер (может быть даже можно будет загружать этот микроконтроллер вычислительными задачами для сервера - получится своего рода эдакий кластер).
Взаимозаменяемость будет достигаться за счет всего вышеперечисленного - адрес устройства зависит от самого устройства, стандартизированные интерфейсы и протоколы, интерфейсная плата будет заниматься только передачей и приемом данных.


Вот пока что и все...

5 комментариев:

  1. Хотел бы добавить.
    Если не стоит цель добиться возможности интеграции в zigbee-системы, а разработать систему "в себе", то лучше выбрать за базу протокол simpliciTI, ибо от z-stack плюются даже представители TI :)

    ОтветитьУдалить
  2. ZStack меня привлекает возможностью автоматического присоединения нового устройства к текущей сети и способностью передавать данные через другие оконечные устройства, если связь с центральным устройством напрямую невозможна. Впрочем, последнее вроде как есть и в SimpliciTI - "Range extenders to increase range to 4 hops" =))
    Надо посмотреть; тем более не придется городить монстров, чтобы связать мои часы, которые уже поддерживают протокол SimplciTI, и существующую сеть "умного дома".

    ОтветитьУдалить
  3. Полагаю, что реализовать свою автоматическую регистрацию будет не сложнее чем разобраться с нагромождениями з-стэка.
    С симплисити я еще активно не работал, лишь просматривал примеры, но код показался довольно прозрачным и понятным. Еще один его плюс - очень маленький футпринт, в отличие от > 120kb у з-стек.

    ОтветитьУдалить
  4. Добрый день, есть несколько интересных проектов, может Вы их и видели http://radiokot.ru/circuit/digital/automat/14/ http://www.tahina.priv.at/electronics.html#index2h1 http://das-labor.org/wiki/Rfm12usb

    ОтветитьУдалить
  5. Нет, раньше я их не видел, спасибо. Пригодится, когда займусь непосредственно созданием датчиков/управляющих устройств...

    ОтветитьУдалить