Свет можно включить/выключить с телефона, в телеграм приходят нотификации об утечке воды, включении полива и бог ещё знает что.
Но вся эта система далеко не умный дом, это лишь продолжение ваших рук и ног, и единственная помощь от неё только лишь в том, что не надо вставать с кровати, чтобы выключить свет.
Эта статья посвящена тому, что может приблизить ваш дом к умному, и вы правильно догадались — это разработка датчиков. Это глаза, уши и еще немного больше для вашего дома. На основе информации с датчиков уже можно написать автоматические сценарии, которые оживят дом, и будут тихо помогать вам и делать вашу жизнь более комфортной.
На рынке сейчас большое разнообразие подобных устройств как от именитых производителей так и непонятного происхождения. И если не сильно заморачиваться то можно использовать и их, но есть одно но, или даже несколько но. Первое, большинство из них используют свои проприетарные протоколы и работают только со своими хабами. И в любой момент API этих хабов может стать закрытым, и контроль будет возможен только через апликейшн производителя (вспоминаем историю с google nest), так что вся ваша автоматизация в один момент рухнет.
Второе, все производители без исключения пытаются хоть как-то получить с этого прибыль, а поскольку явление это пока не массовое то нужно выкручиваться, вот и делают каждый датчик в своём отдельном корпусе со своей батарейкой. А теперь давайте посчитаем, у вас 5 комнат в каждой хотелось бы иметь датчик температуры, движения, освещенности и СО. Не сложные мат. вычисления приводят к 20 коробочкам на потолке. Во-первых, это не красиво, во-вторых, через год-два нужно будет пол дня с лестницей и отверткой менять батарейки в этих датчиках, скорее всего сломав пару креплений и пару раз уронив отвертку на ламинат. Да, и в третьих, когда через пару лет один из датчиков сломается, то вы уже не сможете купить такой же, и скорее всего старые хабы не будут поддерживать новые датчики(прибыль то важна) и вам придётся поменять все датчики и переинтегрировать их в вашу систему. Какой выход — смотреть на что-то из opensource, или делать самому, по крайней мере код всегда будет при вас. Так что в свете описанного, разработка своей коробочки с датчиками становится не такой уж оверкилл задачей.
Так что разрабатывая свой датчик я старался описанные выше 'но' избежать:
- Агрегируем все датчики в один корпус
- Делаем проводное питание (стройка то с нуля)
- Делаем интерфейсы по стандартным протоколам
Теперь давайте перейдем к тому, как же должен работать подобный девайс.
Есть два возможных варианта, и зависят они от того, в каком окружении использовать устройство, в системе с централизованным контролем, в распределенной системе или вообще как самостоятельное устройство.
Первый вариант проще, т.к. требуется предоставление только сырых данных с сенсоров, а далее уже центральный контроллер, который опрашивает устройство, решает что с ними делать, пример такого устройства — офисный датчик дыма. Например, пришли данные от датчика выше определенного порога, при этом центральный контроллер знает что сейчас включён режим охраны и соответственно надо поднимать тревогу.
Второй вариант предполагает, что устройство само должно знать в каком оно сейчас режиме, уметь конвертировать raw данные с сенсоров, принимать решение об информировании пользователя. Разработка такого устройства конечно же требует больше усилий как с точки зрения написания программы так и с точки зрения проработки юзабилити.
Я изначально планировал делать устройство по второму варианту, и закладывал два канала связи — mqtt и modbus. Mqtt через WIFI так на поиграться и modbus через RS-485 для подключения к домашней системе управления.
Mqtt через WIFI не сложно сделать благодаря lua библиотекам ESP8266 и алгоритм достаточно стандартен:
- при первом старте или если не получается подключиться к WIFI, надо сделать точку доступа из ESP8266
- развернуть на ней маленький вэбсервер с параметрами WIFI и параметрами mqtt сервера(можно сделать бесплатно на амазоне например)
- сохранить всё введенные данные в памяти ESP8266
- после перезагрузки пробовать подключится к mqtt уже через домашний WIFI
Однако когда стал вопрос интеграции устройства в домашнюю систему по modbus, мне стало не хватать сырых данных с датчиков, и в конечном итоге я выложил в таблицу modbus ещё и все raw данные. Например, казалось бы не нужное событие с датчика движения, в режиме снятом с охраны, очень даже можно использовать для всяких функций умного дома.
Таблица modbus получилась такой:
N type description
0. -r — state of sensortag (1 — idle mode / 2 — idle to protection / 3 — protection mode)
1. -r — bitfield reason of alarm (bit 1 — gas / 2 — temperature / 3 — motion)
2. -r — motion detection in idle and protection states (0 / 1 — no motion / motion)
3. -r — gas concentration (raw value from adc)
4. -r — temperature in C deg
5. -r — preprocessed light value (night room < 17 / dark room < 50 / twilight < 150 sunny < 250)
6. -r — light value (raw value from adc)
7. -r — number of alarm event in this life cycle
8. -r — number of sensortag restarts
9. -r — not used
10 -wr- alarm activation (0 — switch to idle / 1 — switch to alarm)
11. -wr- motion sensitivity (0 — 100%, means 0 — most sensitive)
12. -wr- gas concentration limit
Далее всё, как всегда, сводится к разработке платы и софта. И в этом случае разработка платы мне далась сложнее, т.к. присутствует аналоговая часть(питание, обвязка сенсоров движения и СО) с чем я дружу не очень, а про софт даже особо и написать нечего, потому что всё там действительно просто. Т.е. не просто, а обыденно, считал показание с АЦП, сконвертировал их, обработал(методом скользящего окна по всем каналам) и сложил в таблицу. Ещё бы не плохо сделать температурную компенсацию сигнала с PIR сенсора т.к. летом, когда температура в комнате выше +30 градусов, у сенсора гораздо слабее отклик. Так что в этой статье хотелось бы описать именно разработку самой платы и немного уделить внимания юзабилити.
Начнем с платы, вот что для этого надо бы сделать:
- выбрать микроконтроллер и датчики(пир сенсор, освещенности, температуры, СО)
- выбрать rs-485 драйвер для modbus коммуникации
- ESP8266 для mqtt коммуникации(что тут выбирать)
- выбрать RGB светодиод для визуализации состояния устройства
- разработать модули питания
- разработать принципиальную схему, развести и сделать платы
Выбор микроконтроллера особо труда не составляет, нужно лишь дотянуться до ящика с девбордами и достать одну плату — она и подойдет. А если серьёзно, то я не могу похвастаться знанием многих семейств микроконтроллеров, так что из мне знакомых STM32, ATSAM и AVR. Я выбрал последнюю и только лишь потому что у меня как раз завалялось пару Arduino Leonardo и скучающий по былым временам MK2. Не буду упоминать, что AVR дёргает ногами на частоте кварца, а это мне пригодится, и что у неё широкий набор переферии и довольно быстрый АЦП, мне гораздо важнее что корпус у неё TQFP и могу я её припаять сам, без микроскопа и танцев с бубнами. Если выбор микроконтроллера это дело десяти минут, то выбор датчиков дело не тривиальное. Надо изначально продумать как их подключать, как обрабатывать их сигналы и как они будут влиять друг на друга. Если некоторые датчики можно взять с ардуино набора и стоят они копейки, то с другими, более редкими, можно и повозиться дольше и потратить больше. К тому же на выбор датчиков вносили ограничения и мои дополнительные критерии:
- Датчики могут быть подключены как угодно, но только не через I2C. Вот как то не получалось у меня надёжной имплементации I2C на микроконтроллерах, где поддержка этой шины реализована на половину аппаратно, а на половину программно(ну как в AVR). Бывало что работает, работает месяц, а потом встряёт, и никакие рекавери последовательности не помогают, так что решено было использовать как можно больше аналоговых датчиков подключенных к АЦП и только лишь для температуры использовать SPI(с ним кстати дружба крепкая и надёжная).
- Были достаточно надёжными и не меняли своих характеристик во время срока службы(я определил его как 10 лет)
- Были доступными на нашем рынке, что бы не связываться с заказами с маузера и тд.
В результате всех изысканий получаем вот такой набор:
- PIR sensor — D203S
- Light sensor — GL5516
- Temperature sensor — LM95071
- CO sensor — TGS5141
И если с первыми тремя позициями, думаю, ни у кого не будет вопросов, то зачем нужен TGS5141 сразу не понятно. Наверно вы скажите — «зачем такая дорогая вещь, ведь есть копеечные СО сенсоры из ардуино набора типа MQ-7». Действительно, я экспериментировал и с ними, и по результату отказался от них по нескольким причинам. Во-первых, это каталитический датчик, и он греется, что сильно влияет на температуру в корпусе устройства и не даёт возможности делать температурную компенсацию для сигнала с PIR сенсора. Во-вторых, чувствительность MQ-7 оставляет желать лучшего, даже в спеке написано 10 to 1000ppmm, а в реальности всё ещё печальнее, плюс нет никакой стабильности от датчика к датчику. Третье, не понятен срок службы самого датчика, я так предполагаю что его характеристики с годами будут сильно меняться именно из-за того что он каталитический. А теперь о плюсах электрохимического TGS5141 — не греется, чувствительность 0 ~ 5000ppm(с линейной характеристикой), гарантированный срок службы 10 лет, малый размер и ещё много плюсов. Думаю выбор очевиден, если вы хотите действительно сделать стоящую вещь, а не наколенную поделку.
Выбрали мы микроконтроллер, датчики, теперь пришло время позаботиться о том, как сообщать пользователю то что мы намеряли. Как я писал ранее у меня есть два канала связи для этого, rs-485 modbus и mqtt через WIFI. Что делает возможным использование моего сенсортега как индивидуальное устройство, и поэтому, немаловажным, является индикация состояния, каким-нибудь образом, на самом устройстве, например светодиодами.
Определившись с концепцией, можно немного внимания уделить остальной элементной базе. Драйвер 485го я использую ADM2587E, микросхема включает не только сам драйвер, но и трансформаторную гальваническую развязку по RX, TX и DE, минус только в цене. Для коммуникации по mqtt через WIFI будем использовать ESP-07, тут, думаю, комментариев не нужно, т.к. только ленивый не сделал что-то на ESP8266. С визуальной индикацией пришлось повозиться больше, для этого я решил использовать RGBW светодиоды sk6812. Как оказалось с AVR управлять ими не очень то и просто, тайминги у них довольно-таки жесткие, так что пришлось дописывать некоторые части кода на асемблере, чего изначально не планировалось. Но результат себя оправдал, получилось информативно и красиво, особенно если светить этими светодиодами в торец кольца из оргстекла. Такую индикацию мне подсказал сотрудник уже съевший на этом собаку(спасибо Саша).
Немного поэкспериментировав с яркостью, стало понятно что один уровень яркости это не моё решение — днём плохо видно, а ночью сильно ярко. Поэтому пришлось сделать изменение яркости свечения этих светодиодов в зависимости от освещения в комнате. Ну вот и всё, с индикацией разобрались, подумали вы, а вот и нет, самым для меня сложным оказалось придумывание патернов свечения и таймингов для них.
Остановился на таком варианте:
- blue slow — idle, communication over wifi only (modbus missing)
- blue fast — switch from idle to alarm mode, communication over wifi only (modbus missing )
- green slow — idle (modbus communication OK)
- green fast — switch from idle to alarm mode (modbus communication OK)
- red slow — alarm mode
- red fast — motion alarm
- yellow fast — gas alarm
С индикацией разобрались, следующий раздел это питание.
Как я уже говорил ранее, у меня по дому протянута слаботочка 24В, поэтому и питание модулей будет именно такое. Забегая вперед, скажу, что после того как я сделал первую плату многое пришлось переделать по питанию. Тут то я и убедился в том что нужно внимательнее читать спеки на step-down конверторы, особенно те места, где описаны нюансы разводки. По результатам изысканий я остановился на step-down converter MCP16311 и он оказался ну очень привередливым, только после того, как я сделал в точности то, что написано в спеке — всё заработало. Но это была не самая большая проблема, как потом выяснилось, изменение яркости светодиодов давало небольшую просадку питания, которой достаточно что бы испортить сигнал с датчика D203S, эту проблему получилось побороть дополнительными конденсаторами как в схему операционника датчика так и в схему step-down конвертора. Всё отладив по mqtt(через ESP8266), я подключил rs-485 и тут опять меня ждал провал, на выходе операционника в канале датчика D203S я опять увидел мусор, и этот мусор чётко соответствовал обмену по rs-485. В общем, побороть это получилось дополнительным LDO конвертором на всю аналоговую часть и тогда наступило счастье.
И если объединить всё вместе то получится вот такая картина:
И если это всё взять и спаять то выглядит оно как-то так:
Плату спаяли, корпус напечатали, всё собрали воедино, повесили на потолок, данные приходят в систему. Так что давайте пофантазируем как можно применять эти данные в системе умного дома, помимо того, конечно, что можно присылать сигналы тревоги в телеграм. Я пока не сделал ничего, кроме первого пункта, но накидал следующие сценарии:
- включение света на лестнице, если этот свет не включен, если в любой комнате появилось движение, плюс сейчас темно, плюс ночное время
- автоматическое открытие ролет первого этажа, если они закрыты, если уже утро и обнаружено движение в гостиной первый раз за день
- открытие заслонок вентиляции, если концентрация СО превышает какой-либо уровень, и закрытие их если уровень СО упал(актуально в комнате с камином)
- открывать заслонки вентиляции, если температура превысила определённый лимит и соответственно закрывать их в обратном случае
- автоматическое закрытие ролет первого этажа, если ролеты открыты и если ночью на улице сработали датчики движения, а дом стоит на ночной охране.
Так что дополняйте, будем делать дом умнее…
Комментарии (33)
vibornoff
11.12.2019 17:55У этих всех прибамбасов для умного дома есть фатальный недостаток — они у**ищны чуть менее чем полностью.
Поскольку вы делаете неинтерактивные датчики, делайте их в форм-факторе «серая коробочка для зашкафного пространства» во избежание кровотечения из глаз ваших пользователей. И красивые светодиоды в ней ни к чему тогда, т.к. вся сложность управления все равно сгружается на приложение в смартфоне.
Но если уж так сложилось, что датчик должен быть на видном месте, у вас есть только 1 вариант исполнения такого датчика — монтаж в стандартный подрозетник с возможностью стыковки с ходовыми сериями электроустановочных изделий (valena там, и пр.)
Пожалуйста, не выпускайте свой уникальный датчик в своём уникальном дизайне. Он почти наверняка будет смотреться как метастаза в любом интерьере.antoooon Автор
11.12.2019 18:11Спасибо за совет, он очень для меня ценен :) В смартфон ничего не сгружается(но продолжайте так думать), подрозетников на потолок пока ещё не ставят(догадайтесь зачем на потолок), да и пользователь этой системы я, а мне так норм.
ermakovd
13.12.2019 07:53И потолок для датчков воздуха тоже не лучший вариант. Температура и влажность под потолком заметно выше.
ermakovd
13.12.2019 07:51Датчики воздуха в подрозетники не ставятся. В отсутствие свободного тока воздуха снизу вверх реакция на изменения серьёзно замедляется и появляется влияние конструкций дома.
safari2012
11.12.2019 17:59Автор, раз уж у тебя всё на SMD, сейчас на Али можно купить фен в районе 1000р.-1500р. И он будет отлично работать, сам проверял.
antoooon Автор
11.12.2019 18:14Я тоже проверял, отлично работает что бы выпаивать микросхемы. А тут им то что делать?
shadrap
11.12.2019 18:25MQ-7 — конечно не годится никуда. TGS5141, не пробовал, как у него с временем отклика на изменение концентрации?
Для себя я выбрал Winsen ME2-CO (ZE07), они в той же ценовой категории, один минус, тормозноваты, но имеют и цифровой и аналоговый выход. Плюс, голова съемная, что делает удобным монтаж и встройку в корпус.
Кстати, что касается СО тут, я бы сказал, наряду с качеством самого датчика, имеет значение место его расположения. Я контролировал 4-мя датчиками немецкую печку медленного горения Bullerjan, она неопасно, но «фонила», на уровне до 30ррм. Первым прирост концентрации СО ловит датчик у потолка( горячий воздух гонит все вверх), затем диффузное вниз и через какое-то время самые высокие цифры показывают датчик 30 см от пола (уровень кровати) и датчик 1.5м от пола, тот что у самого пола никогда не показывал рекордов.
Для индикации порогов — светодиоды 0-норма, один горит — внимание, два — опасно, три — шухер. Это локально. Хотел прилепить свистелку, но не нашел что б по току подходила к ЕСП и еще и слышно было.
Кстати — TGS5141 -шибко избирательный? Как датчик дыма срабатывает?antoooon Автор
11.12.2019 20:54TGS5141 не исключение, наверно задержка детктирования связана с самим электрохимическим методом. Датчик реагирует только на СО, и не работает как датчик дыма. я тоже эксперементировал с расположением и действительно самый быстрый прирост СО у потолка, так что туда и повесил. про ME2-CO не знал, нужно быдет купить на покрутить, спасибо за совет.
IgorDimitrov
12.12.2019 01:45Боюсь показаться снобом, но господа вообще используют гугл?
Первое, большинство из них используют свои проприетарные протоколы и работают только со своими хабами.
или
Второе… делают каждый датчик в своём отдельном корпусе со своей батарейкой
Смотрим Aeotec multi sensor 6 или Fibaro motion sensor.
В первом случае 6 датчиков во втором 4. Оба работают по z-wave с десятком разных хабов. И это далеко не все варианты )antoooon Автор
12.12.2019 12:55конечно пользуются, ещё как… найдите мне коробочку с подобным набором — и я куплю её. нужно проводной, rs-485, движение, температура, СО и освещенность.
IgorDimitrov
13.12.2019 00:45А зачем проводной? Зачем к каждому датчику тянуть провода? Кроме как чтобы взять денег с клиента у меня идей нет :) А ведь если ремонт раньше уже сделан то желание поставить такие датчики равно нулю. Понятно для каких-то отелей или прочих больших масштабов, но это не дом уже. В доме все обтягивать проводами вообще не вижу смысла (плюс это сразу удорожает установку в разы). А если после такой установки что-то изменить или добавить? Опять долбить штрабить тянуть и ставить короба?? Протоколы Z-Wave и Zigbee изначально и придуманы для умных домов, их умеет уже каждая лампочка, оборудования море, зачем изобретать велосипед??
antoooon Автор
13.12.2019 12:42Я вроде как описал в посте зачем. Могу ещё добавить как пользователь системы Ajax с 15ю беспроводными датчиками. Не верьте в то что они будут работать заявленные 5-7 лет. Система стоит у меня 1.5 года и в двух датчиках уже пришлось сменить батарейки, 3й на подходе, и да… в одном я уже поломал корпус пытаясь их поменять. И общаясь с другими пользователями, могу сказать что мой случай не уникальный. Так вот я хочу повесить коробочку на потолок и забыть о ней вообще, и не хочу вспоминать даже раз в 5 лет(что является или фантазией производителя, или рекламным трюком).
IgorDimitrov
13.12.2019 15:37У меня полторы сотни беспроводных устройств, все выключатели и прочие управлялки питаются сами. Датчики использую Aeotec multi sensor 6 и они могут питаться как от батарей (там батареи пол датчика занимают и сломать его нереально) так и от microusb, и если мне было ставить лень туда батареи воткнул штатный шнурочек и забыл навсегда. Шнурок от ближайшей розетки это не кабель через весь дом. Единственное устройство где частенько нужно менять батарейки это управляющие модули радиаторами отопления. Но тянуть к каждому радиатору провод еще хуже :)
antoooon Автор
13.12.2019 17:02полторы сотни… это уровень! мне до такого ещё очень далеко. Я не исключаю того, что я буду дополнять систему именно беспроводными датчиками, но поскольку на этапе постройки была заложена слаботочка, то ею грех не пользоваться.
ColdSUN
14.12.2019 01:01А зачем CO в каждой комнате нужен? Движение, освещённость и температура есть хоть в той же Fibaro Motion sensor хоть aotec multi sensor 6. Дорого только. Да и измерять температуру под потолком не показательно, желательно все же ближе к полу.
Так что я движение и освещённость измеряю xiaomi body motion sensor, а температуру и влажность их же отдельным датчиком. К тому же по факту одного сенсора движения на комнату недостаточно, и место их установки менялось несколько раз, в зависимости от остановки мебели.
ebt
12.12.2019 07:42Чем объясняется отсутствие гигрометра (т.е. датчика влажности)? Поддержка комфортного диапазона архи-важна в любом жилище.
vsergoog
12.12.2019 12:38А как ее поддерживать? Мобильными увлажнителями? Так они с нашими зимами должны быть включены постоянно. Тут и датчик никакой не нужен, точнее нужен, чтоб понять, что влажность низкая и обычный увлажнитель может и не справляться, то есть должен быть включен непрерывно.
antoooon Автор
12.12.2019 12:53всё так и есть, не придумал варианта как можно его использовать. можно было бы заложить на будущее и ждать пока появятся увлажнители с управлением. но лень поборола :)
MrMYSTIC
12.12.2019 13:07А просто вкл/выкл через реле или мосфет не получится?
Ну и я бы смотрел в сторону BME280 для измерения температуры/влажности/давления — по цене примерно то на то и выходит, что и LM95071.vsergoog
12.12.2019 13:21У меня простейший DHT-11 показывал нижнюю границу измерения в 20%. После начала использования увлажнителя, обычного, роторного, не шибко большого, влажность повысилась толи до 25%, толи до 30%. То есть, регулировать оказалось нечего — нужно просто держать постоянно включенным. При этом еще и воду доливать каждый день руками.
ermakovd
13.12.2019 07:35Года четыре уже как ставятся стационарные высоконапорные форсуночные системы увлажнения. Трубки с водой прокладываются в стенах.
vsergoog
12.12.2019 12:39А кто нибудь сравнивал TGS5141 с MH-Z19b? Ценовой диапазон на али у них почти одинаков, стоит ли менять один на другой?
totuin
Эээ, а зачем так сложно то?
Есть ESP32. Ног на всё это добро хватит, по цене дешевле получится (без отдельной Atmtga32). Да ещё и блютуз на борту (тут он конечно не нужен наверное, но вдруг… ).
Светодиоды — четыре обычных RGB выше крыши. Зачем асемблер и адресные диоды.
По моему избыточность огромная
antoooon Автор
Да конечно, 32й хватило бы. Но я же написал что ESP8266 — так на поиграться, тут в результате только мега мне нужна. Конечно избыточность огромная… я вот всегда так, гляньте на предыдущие посты :)
solderman
Нее ) вопрос состоит в том — если есть еср8266 зачем нужна атмега?
Как расширитель портов?
У меня такие штуки отлично на еср получаются. Единственная проблема еср-шки — отсутствие нормального вачдога. Ее я решаю прикрученной «дубовой» тинькой.
В результате все крутится в ресет цикле (или штатном, или от вачтиньки) с сохранением прошлой жизни на фраме. Очень стабильно и удобно.
То, что описано (соглашусь с предыдущим критиком) пока лишь протезы/удлинители органов чувств и возможно перста рабочей руки. Это есть уже много лет. Еще в далеком 93 я общался с главным разработчиком подобных систем из финки и он сказал: вот я вижу температуру в моём домике на озере (по запросу смской с классической нокии и смской ответа) и зачем мне это знать тут в Москве? Вот если бы он мог включить обогреватель, то это был бы уже глупый дом. Умный дом должен сам решать надо ли этот обогреватель включать и в каком режиме в зависимости от моих явных пожеланий. А оченьУмный дом, увидев, что я имею тенденцию к приближению, включить обогреватель и уведомить меня о случившемся. Когда я окажусь в доступе блютут, включить наружное освещение, а когда я сниму дом с автономной!!! сигнализации включить внутренний свет, теплые полы и подогрев одеял, если вечер.
antoooon Автор
думаю вы абсолютно правы и всё это можно уместить на еср8266, но как-то не было такой цели, да и не было цели экономит 3$. Когда ставил на плату еср8266 то знал что с мегой у меня всё точно получится а вот в еср8266 не был уверен (ну напрмер что ацп будет работать с нужной скоростью и что не будут пропадать байты в уарте при интенсивном обмене). да и для AVR у меня есть jtag.
И да, я абсолютно согласен с тем что эту систему нельзя называть умным домом, так автоматизацией. Но ума ему можно добавить как раз датчиками.