13 мар. 2011 г.

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

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

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

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


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


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

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

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


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