Очередной проводной "велосипед" для датчиков дома/квартиры

Озадачился малой домашней автоматизацией/управлением. Поиски что уже есть показали беспроводные (Zwave, и т.п.), проводные решения (Ethernet, 1-wire и подобное). Беспроводка — дорого, Ethernet — тоже неслабо стоит за каждое устройство. Ну, соответственно, захотелось изобрести собственные костыли.


Итак, задача:
1) Провод как базовый способ связи. Дешево, надежно, сердито.
2) Оконечные устройства предельно простые и дешевые, чтобы было проще ткнуть еще одного клиента, вместо изобретения методов как подключить что-то новое к неподалеку стоящему.
3) Независимость клиентов от центра сети.
Провод не пугал, в силу особенностей — проводка и так в коробах, добавить что-то новое несложно. Схема взята трехпроводная — общий, питание(сейчас +12в), данные. Уровень простоя линии данных +5В, подключение клиентов — как в 1-wire, подтяжка стоит у меня на центральном компьютере, можно поставить в любом месте сети в принципе. Активный уровень — зажимание клиентом линии данных на общий провод. Ну, ничего нового и революционного :)

Кодирование данных — манчестерское, скорость обмена примерно 12кбит/сек. Выглядит это примерно вот так:

Длина одного бита порядка 80мкс. Поскольку активный уровень в проводе — низкий, то наличие оного низкого уровня при передаче каким-либо клиентом в линию высокого уровня — налицо признак коллизии, в таких случаях передатчик бросает работу и ждет освобождения.
Пакет данных состоит из байта приоритета, двух байт адреса источника, двух байт адреса приемника, байта длины пакета, данных, байта контрольной суммы (рассчитывается как примитивная сумма всех байт данных). Байт приоритета введен в основном на всякий случай, чтобы коллизию передачи обнаружить побыстрее и менее важный передатчик побыстрее заткнулся. Сейчас пока все равноправные.
При выборе базового МК, учитывая желаемый фактор «подешевле» альтернатив STM8S003F3 не нашлось. Удивительно недорогой контроллер, причем с достаточно неплохой начинкой — железный I2C, SPI, UART. Все это приправлено 8КБ памяти программ, 1КБ оперативной, немного EEPROM и стоит менее 0,5$ в розницу в моей стране. Прочая обвязка — линейный стабилизатор питания L7805, немного конденсаторов, стабилитрон, транзистор, кусочек текстолита — и базовое устройство(без учета стоимости труда по сборке) получается стоимостью буквально в доллар.

На текущий момент для таких микроклиентов есть поддержка датчиков температуры DS18B20, температуры/влажности DHT22, температуры/давления BMP085. Опрос кнопок и управление оптореле и обычным реле можно не считать. А, еще на плате если нужно — ставлю полевик мелкий для управления кусочком светодиодной ленты, в качестве ночника. Также есть приемник IR кодов протокола NEC и передатчик для него.
Адаптер такой сети для большого брата — сделан тоже на STM8, поддерживающее ПО — C# (протокол адаптера примитивен, ПО можно реализовать на чем угодно, мне C# просто удобнее).

Тестовая сеть, развернутая в доме — сейчас поставляет данные о температуре, давлении, влажности на улице (заодно делится ими с проектами narodmon.ru и openweathermap.org), температуре и влажности в спальной комнате и управляет увлажнителем воздуха в той же комнате, поддерживая микроклимат. С помощью веб-интерфейса можно с телефона выключить/включить ночник (с управлением яркостью). Система управления всем этим на десктопе — Majordomo (www.smartliving.ru). Общая протяженность сегментов сети — около 40 метров.

В планах — поставить еще стопку датчиков движения, для управления автоматическим ночным освещением или для любых прочих целей, что удастся придумать. Контроль освещения, контроль температуры в доме (управление отопительным котлом). Плюс контроль доступа бесконтактными картами на заборе :)

Исходные тексты прошивок, файлы печатных плат — доступны интересующимся по запросу (во вложении — проекты для адаптера под десктоп и датчик давления, влажности). Сам протокол проверен на STM8S003 и STM32F100 серии.
  • +3
  • 20 января 2013, 00:09
  • artko
  • 2
Файлы в топике: mw_adapter.zip, mw_bmp085.zip

Комментарии (47)

RSS свернуть / развернуть
выключить/выключить ночник
а включить можно?=)
+1
можно конечно :) поправил.
0
сразу не выкладываю — модернизируется постоянно, по мере тестовой эксплуатации
Ну выложи в каком-нить VCS-репозитории — легко обновлять, легко получать обновления, всегда есть доступ к любой версии.

Алсо, чем не устроил 1-wire? Почти то же самое, все уже продумано, до 300 метров.
0
  • avatar
  • Vga
  • 20 января 2013, 03:38
в реале, без хитрого дравйвера/подтяжки 1-wire не потянет заявленные 300 метров. уже где-т на 25м подглючивал. Даж где-то у максим видел табличку, зависимости длины линии от типа используемой подтяжки(резюк, транзистор+резюк, микросхема). так что в таких случаях свой костыль весьма актуален.
По топику: artko, а почему б вам не взять Stm8 сразу с can? весьма интересный протокол, для таких целей.
0
А чем этот костыль лучше? Такая же линия на подтяжке резистором.
0
STM8 с can модулем просто дороже. И там два провода. Жалко. Из can стянул идею с разрешением коллизий.
0
честно говоря пробелм с 4 проводами не вижу. кабель 4хжильный не является чем-то дефицитным.
0
с самими кабелем проблем никаких. вот только прокладка чтобы не мозолил глаза дороже выйдет на несколько порядков.
0
К примеру КСПВ 4х0,5 в диаметре не толще провода клавиатуры, т.е. около 3,5мм. Разве это проблема спрятать такой кабель в плинтусе, за подвесным (натяжным, гипсокартонным, и пр.)потолком?
0
далеко не везде путь кабеля идет в таких удобных (под плинтусом, за потолком) местах. а ломать ремонт — геморно и дорого.
0
ТС прямо сказал — у него везде короба, так что лишний кабель не проблема. А разницы тянуть 3-жильный или 4-жильный я не вижу.
+1
В любом случае, сами МК с can модулем подороже. А кабель и сейчас взял какой под руку попался — а попался 4 х 0,22 в экране. Две линии в параллель на питание повесил и один провод оставил под данные.
0
Питание — это +12В? Я бы на GND два провода пустил.
0
Уточнение — по две линии на GND и на +12. т.е. по 0,44 получается условное сечение (если верить производителю кабеля). и одна нитка 0,22 на данные.
0
а попался 4 х 0,22 в экране.
2 провода +12, 2 провода GND, и остался один для данных. 4 = 2 + 2 + 1…
Экран вы используете как провод, выходит? Вроде как не лучшее решение.
0
Да, экран на сейчас связан с общим. Не очень правильно, но заземления в доме пока все равно нет, чтобы задействовать экран как положено.
0
Если отключишь экран от общего — то лучше на общий пустить две линии, а не на питание.
0
Надо будет поглядеть что доступно такого, а то уже сам без контроля версий путаюсь. Пока приложил два проекта под адаптер десктопа(в нем есть неустраненный баг периодический, ищу) и клиента с датчиком BMP085 + DHT22

1-wire не устроил жестким требованием наличия мастера. У меня устройство любой в произвольный момент может самостоятельно передать что угодно, как адресно, так и «для всех». Кто заинтересуется — сразу и обработает, минуя центральный компьютер.

Ну и свой велосипед всегда интереснее :)
+1
по поводу контроля версий — Git. Правда сам пользовался SNV, а git только осваиваю, но поудобнее, да и тот же sourceforge git без проблем поддерживает… Хотя если разраб один — то в общем-то пофиг :)
0
А почему бы не глянуть в сторону RS-485, в таком случае можно растягивать сегменты сети до нескольких километров(!)
0
Мне не нужно несколько километров. А стоимость приемопередатчика RS-485 больше, чем весь мой модуль.
0
MAX485 к примеру
0
Угу. а мне модуль целиком обходится немножко меньше. Ну и MAX485 в моей местности вполовину дороже, чем по указанной ссылке. И опять же — зачем? Если речь о более-менее заметных расстояниях, уже радио может оказаться удобнее.
+1
ну если посчитать все затраты на компоненты, расходные материалы, сборку, написание кода, и прочее, то я не сказал бы что он так дешево обходится, хотя если запустить в серийное производство… где нибудь в Китае в тиражах исчисляемых десятками тысяч экземпляров, то может вышло бы даже дешевле ;)
0
Компоненты и расходники автор и посчитал. А сборку и кодинг радиолюбители традиционно не считают. Тем более что RS485 тоже нужно собирать и кодить.
0
Может я чего-то не догоняю, но по моему RS-485 тот же USART, только полудуплексный и появляется еще одна нога для управления приемом-передачей
0
И что? Девайс в целом все равно запрограммировать придется. Тем более что уровни выше физического (или канального ли, не помню) все равно придется делать самому.
0
Угу, полудуплекс. Только это исключительно среда. Те же коллизии придется определять все равно программно — или ставить мастер-хост для руления. Соответственно в моих условиях небольших расстояний и идеи определения коллизии, стянутой из CAN (когда коллизия не приводит к нарушению передачи текущего пакета) — RS-485 нафиг н нужен. Кому хочется — применяет, какие проблемы :)
0
ну а с радиоканалом могут побаловаться хулиганы ...)))
0
Как-то раз прикупил микросхемы для RS-485, причем это не классические MAX, ADM etc. а какой-то VS или VC. обошлись они мне в 7р/штука, так что если поискать можно найти весьма дешевые альтернативы)
0
Ну, я писал статейку по Subversion. Хотя сейчас уже возможно лучше сразу осваивать Hg или git, но сам я юзаю SVN плюс Google Code.
0
при постройке всего этого хозяйства нужно еще учитывать стоимость проводов и цену инсталляции (штробить/заложить/заштукатурить и обклеить тоже денег стоит). Я за проводной вариант когда есть возможность (например на этапе ремонта). Когда ремонт сделан то лежащие сопли отнюдь не украшение. Конечно есть вариант с радио, к примеру RFM70 который стоит 3.5уе, но это усложнение прошивки, но зато нет затрат по проводной части.
0
Учитывается, краткую сноску в статье я оставил — насчет того, что в силу ситуации у меня сейчас и так все провода снаружи в коробах. Так что роли не играет. А там где включится в работу дальность (выносы по двору) — уже лежат несколько радиомодулей, может попробую. Ну и радиомодули — не могут быть все равно абсолютно без проводов: или есть уже питание, или батарейки(с кучей проблем по замене). Локальное питание — БП нужен, тоже не бесплатный. Так что, имхо, против проводов работает только фактор что не всегда удобно их уложить.
0
если управление нагрузкой 220В — LNK3xx наше ффсё.
0
+ сколько к цене?
+ сколько к трудозатратам?
+ сколько к размерам?
— сколько к безопасности?
0
+ сколько к цене?
около 50 рублей
+ сколько к трудозатратам?
бывают в дипе и соике. т.е. счиайте по количеству точек пайки.
+ сколько к размерам?
гоуту даташит. но в любом случае меньше банально площади прокладки кабеля.
(трудозатраты на прокладку этого самого кабеля опустим)
— сколько к безопасности?
от протокола зависит. я себе сделал плавающий с сеансовым ключем на базе диффи-хелмана.
0
Как диффи-хеллман защитят тебя от 220В или пожара?
Ну и присчитывать прокладку кабеля к габаритам устройства не совсем корректно.
+1
эм. а разве тот пункт про пожар или 220?
прокладка кабеля — это и габариты и трудозатраты. так что вполне корректно. другой вопрос, что этого обычно не делают.
0
Ну если говорить именно о источнике на LinkSwitch (а остальные пункты о нем), то «безопасность» — это электро- и пожаробезопасность. А с этим в импульсных источниках самопальных отнюдь не так-то просто.
+1
ээм, попдробнее можно? делали подобный модуль умного дома? На чем делали? Длина дключей какая? интересно ж)
0
Импульсный не ограничивается микрой. Там ещё и намотка транса/покупка готового.
Кабель — «разнесенная» площадь. И там где описанная мелкая платка уместится «в выключатель», потребуется делать дыру побольше (сверлить, долбить, пр.) для умещения БП и радиомодуля.

И просьба на будущее, рассматривайте в контексте поставленной задачи.
0
да, именно. сейчас моя платка вместе с небольшим силовым модулем на симисторе вполне помещается в корпус розетки(для наружного монтажа). Примерял туда NRF24L01 модуль — уже начинаются проблемы. А если еще и БП…
0
Посмотрел даташит — интересные микросхемы, но там в типовом включении от сети полтора десятка компонент, не считая ее самой… Что-то не хочется пока :) Позже попробую.
0
ну, или кабель тянуть к каждой розетке, или по необходимости рапаять чутка. тут уже каждый выбирает для себя по ситуации.
0
да, модули NRF2401 стоят 2,25$/штука :)
0
ну питание это да — фактор. батарейки однозначно нельзя.
кабель тоже фактор. аллюминиевый кабель это такая бомба замедленного действия. мало того что ломкий и паяется плохо. так что лучше тонкую медь чем толстый люминий. соответственно цена.
Учитывая потребляемую мощу современный мк то с питанием обычно проблем не возникает. Вплоть до солнечных батарей ).
0
Я бы делал на RS485 или CAN. Да, дороже, но зато надежнее.
Если для себя, то лишние 50 долларов роли не играют, а если для массовости, то важна надежность и возможность работы на больших расстояниях.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.