Волшебный контроллер
Что ж… Ща будут обещанные подопытные кошечки-мутанты в причесанном виде. Но не переживайте! Расчлененка и кишки по стенам – тоже воспоследуют. Куда тут ж без них то в таких вопросах? Расскажу все с самого нуля, как оно происходило и чего.
Итак, напомню, простая задача по оснащению нового шкафа подсветкой, мутировала в создание контроллера для “умного дома”.
Ранее были изложены изначальные требования к такому контроллеру, которые стали путеводной звездой и инструкцией ко всему происходящему в дальнейшем.
Увы, в нашем современном мире готовых модулей и контроллеров “из коробки”, в задачах описываемого уровня, не осталось места для подвигов на поприще электроники как таковой – все свелось к банальной проблеме разводки проводов.
Если кто-то ожидал каких-то божественных откровений и эпохальных открытий в области электроники, чудес навыка управления паяльником и глубин познаний в науке о контактах: можете разочаровываться прямо сейчас.
Ядром волшебного контроллера должна будет стать именно монтажная плата, а вовсе не электронно-полупроводниковый шлак, который слишком тривиален и очевиден, чтобы на него буквы тратить… Хотя, по ходу повествования – все равно потрачу, конечно…
“Это DIY, детка!“…
Готовых плат подобного рода в природе нет. Во всяком случае, в точности подходящих под мои условия и требования. Как всегда, в такого рода, вопросах, каждый гомохабилис, в итоге, оказывается сам по себе.
Ладно, поехали… Палюбасу начинать придется с простой монтажной платы “в дырочку”, на которую вручную будут собраны нужные компоненты. На удивление, даже такой прототип уже реализовывал все задуманное (более-менее), но, к сожалению, ни разу не оказался применим на практике в реальной жизни.
Я обещал кишки по стенам? Вот, пожалуйста:
Ну, на то оно и прототип…
И, кстати, спаять всю эту вермишель занимает масса времени. Какой там “за один вечер”. Даже уже устаканив пути дорожек, которые приходится напаивать по макетной плате вручную, это все равно дохрена нудной и кропотливой работы.
Ну и, естественно, этот прототип и близко не влезает в стандартную электрокоробку.
Про уровень безопасности всего этого уж и молчу. Он сильно ниже плинтуса – где-то в районе ядра нашей планеты.
Т.е. все это очень интересно на уровне экспериментов, но причесанную кошечку из этого никакими мутациями не получишь.
Пришлось засесть за компьютер.
По итогам, в некоем своем общем виде, со временем родился вот такой виртуальный макет разводки компонентов:
Тут нужно понимать, что на макете представлена некая именно общая картина. Она подразумевает некую гибкость и допускает, в той или иной степени, модификацию любого конечного изделия.
Так, например, вопрос с питанием:
Нужно питание для контроллера и питание для устройств, которыми оный управляет. В каких-то случаях оно одинаково. В других случаях оно может различаться.
В первом случае на плату устанавливается двух-контактный разъем через который подается от 5 до 9 вольт и земля. При этом, необходимо установить перемычку L-B lock. Т.о. поданное напряжение будет подаваться и на контроллер, и на его управляемые выходы . Если сделать все то же самое, но перемычку не ставить, то напряжение будет подаваться только на контроллер. На выходы ничего подаваться не будет. Иногда надо и такое…
В случае раздельного питания, когда, вам надо рулить напряжением бОльшим, чем может выдержать напрямую контроллер – устанавливайте трех-контактный разъем для раздельного питания. По одной линии пойдут 5-9 вольт контроллеру, по другой – сколько вы там хотите в разумных пределах для нагрузки. Земля общая.
Кнопки:
Здесь тоже возможны варианты.
Ну, во-первых, разумеется, если вам нужна всего одна кнопка, то вторую можно и не устанавливать.
Во-вторых, предусмотрены варианты, как с сенсорными кнопками, так и с обычными “хардварными” (на макете не изображены). В первом случае НЕ нужно устанавливать резисторы, помеченные, как hrd btn only. Потому, что на сенсорных панелях они уже и без того есть… Для обычных кнопок или тумблеров – эти резисторы придется установить.
В остальном, подключение, что таких кнопок, что других – будет одинаковым. И, разумеется, ничто не мешает использовать все вперемешку. Одна обычная кнопка и одна сенсорная, например…
Почему я заморочился сенсорными кнопками вообще… Естественно, сенсорные кнопки могут работать и, как обычная кнопка, и как обычный тумблер. Зато, если этих панелей две, то появляются новые возможности! Например, проводя по ним пальцем, скажем, сверху вниз, от одного сенсора к другому – будет уменьшаться что-нибудь. Яркость источника освещения, например. Проводя пальцем снизу вверх, будет что-нибудь увеличиваться. Одиночное касание к любому сенсору – клик. Долгое – щелк. Т.о., имея пару таких панелей вы сразу, в одном флаконе, имеете, и кнопку, и тумблер, и переменник.
Входы-выходы для сенсоров и прочего ништяка такого рода:
Два аналоговых входа-выхода и один цифровой. Потому, что у Ардуины (вы же не сомневались, что контроллер построен на Ардуине?) аналоговые входы-выходы можно программно назначить, как цифровые. Наоборот – нет.
В большинстве случаев входы-выходы будут нужны цифровые. Да и то, скорее всего – один. Вон он есть. Нужно два? Переназначить один из аналоговых в коде. Нужен аналоговый для фоторезистора какого? Все есть…
Зачем оно вообще контроллеру? Ну, например, включать свет на крыльце, когда темно стало. Понадобится фоторезистор и один из аналоговых входов-выходов на контроллере.
Или, вот, тот же шкаф, скажем… Дополнить его сенсором движения. Подошли к шкафу – в нем свет сам зажегся. Или, если не нравятся сенсоры движения – то можно заместо них использовать датчики расстояния. Инфракрасные или ультрозвуковые. Если что-то приблизилось к шкафу на расстояние меньше заданного – включится свет. Или сработает детонатор. Зависит от того, что вы повесите на управляемые выходы.
Вот они:
На макете, по умолчанию, они представлены мосфетами (обычные FDP 6030BL или аналогичные). Такими можно напрямую управлять светодиодными лентами, например. В этом случае пригодится “раздельное питание” описанное выше. Хоть Ардуина и принимает на себя до 12 вольт, все же, лучше этого не делать. Дайте ей 5, как она на самом деле хочет. А 12 подайте только на ленту. Мосфеты будут рулить только именно этими 12-ю вольтами для нагрузки, никак не затрагивая те 5 вольт, что питают контроллер и сенсоры, ежели таковые нужны.
И, в этом случае, достаточно установить двух-контактные разъемы на плату. Те, которые выведут землю и Load.
Если же вы хотите шебуршить огромную, взрослую лампищу накаливания на 110 или 220 переменных вольт. Или что-то другое в таком духе, то вам не нужно, ни раздельное питание, ни мосфеты, ни резисторы их сопровождающие. Вам понадобится соответствующее рэле. И тогда, заместо мосфетов с резисторами, нужно установить перемычку GND lock и трех-контактные разъемы с которых будет выведена только земля, питание и управляющий сигнал для реле.
При этом! Бггг… Если для срабатывания, выбранное реле хочет каких-то других вольт, нежели контроллер… Скажем, оно хочет 48 вольт… Тогда верните раздельное питание контроллеру, но оставте перемычку GND lock. Вуаля…
Три светодиода для индикации состояния контроллера. Или для подсветки выключателя на стене в темноте. Все это вот сюда:
Можно использовать до трех обычных светодиодов. Можно дохрендильон “адресных” в ленте – это отдельная тема. Можно использовать только один обычный светодиод. Можно один, но трехцветный. Можно вообще ни одного – будете сидеть в темноте и гадать, что там в голове у этого контроллера происходит. Дело вкуса. Как и резисторы для управления яркостью этих светодиодов.
Ну и, конечно, вишенка на торте – модуль связи контроллера с себе подобными:
Без согласованности в действиях своих внутренних компонентов, дом будет “умным” только наполовину. Он будет… мнэ… “полоумным”. А для этого, с моим, например, домом и вовсе ничего делать не нужно. Он уже и так… Вполне себе…
Блютуф сразу идет лесом в ту мерзкую дыру откуда эта глючная технология вылезла. Вот это, вот, все извечное-блютуфное “одно сломал, другое потерял, а третье сегодня вижу, завра не вижу” – нафиг-нафиг…
Остается вайфай или эзернет. С нормальным человеческим TCP, адресами, портами и прочими приятностями.
В силу категорического нежелания таскать провода внутри стен к каждой коробке, розетке и выключателю, выбор сокращается до модуля на базе ESP8266, сиреч – вайфай.
И тут – без универсальности и опций. Резисторы нужны обязательно. Ардуина хреначит по своим линиям 5 вольт. Модуль хочет 3.3. Пять вольт его убивают мгновенно. Обычно. От модуля зависит, конечно… Но обычно – убивают. Резисторы его спасают от смерти при связи с Ардуиной.
По той же причине ему организован свой преобразователь питания с 5 ардуиновых на 3.3 егойных.
Да, я знаю, что у ардуины на борту есть выход на 3.3 вольта. Забудьте. Его не хватает. Проверено, как мной лично, так и кучей других пользователей. В любом случае это не отменяет необходимости что-то сделать с RX-TX линией между модулем и ардуиной, по которой будут жарить все 5 ардуиновых вольтищ! Хоть сколько там чего отдельно модулю подавай.
Да и зачем мудрить? Простейший преобразователь (на базе AMS1117, например или LM3940) – и проблем с питанием модуля нет. Пара резисторов – и нет проблем с вольтами на RX-TX линии.
Про саму Ардуину и ее опции надо рассказывать? Надеюсь, что нет… А то придется сюда половину интернета переписать… Короче, вот тут одна штука Arduino NANO за два бакса, в самом центре паутины разводки:
Выходы на Ардуине я постарался использовать не абы как. Так или иначе, любая группа подключения к ней: светодиоды, входы-выходы сенсоров, кнопки и, даже, управляемые выходы – в каждой такой группе есть, как минимум один выход, который умеет PWM.
Для группы “сенсоры” это тот, который D9. Для группы “кнопки” – тот, который D5. Для группы “управляемая нагрузка” – тот который D6. Для группы “светодиоды/индикация” – D10 и D11.
Случаи разные бывают… Вдруг припрет серв какой навесить. Или управлять чем-то другим через модуляцию сигнала.
Весь изложенный функционал, это на 90% прямой функционал самой ардуины. Оставшиеся 10% – прямой функционал стандартных примитивных модулей ее сопровождающих. Поэтому я и написал в самом начале, что никакой магии из области “науки о контактах” применять не потребуется. Все это сможет собрать любая блондинка прямо на коленке и оно будет работать.
Ну и, поскольку, в плане самой электроники для описанного контроллера, делать решительно нечего, то, как, опять же, уже было сказано, ключевым элементом всего приключения становится сама монтажная плата-конструктор. Именно она соберет все на себе в желаемом объеме пространства, уберет тонну проводов и на порядок ускорит/упростит сборку каждого отдельно взятого контроллера.
Вот, на ее создание у меня и ушли вечера пары прошедших недель… Известно же, что настоящий программист за два часа напишет программу, которая за пять минут сделает то, что обычный человек вручную делал бы час… На том и стоим! 🙂
Мне понадобилось три подхода к этой штанге.
Первая версия платы-конструктора, в общем и целом, удовлетворяла требованиям, но не учитывала такие моменты, как раздельное питание, вариант с использованием хардварных кнопок и т.п.
Собственно, если промотать все промежуточные хренострадания по рисованию и заказу печати, то, вот она:
На платах этой версии нет вообще никакой “опциональности”, изложенной выше. Потому что вся эта “опциональность” и родилась благодаря результатам тестирования первой версии платы-конструктора.
И, кстати, не смотря на некоторые свои недостатки и отсутствие “опций”, плата, в общем, делает все то, что должна делать. Ее вполне можно использовать для простых вещей. Скажем, в розетках. Скажем, вот так:
Никакой “опциональности” для этой версии девайса нафиг не уперлось. Так, что первая версия платы не пропадет зазря.
Ну, а вот так выглядит первая версия платы с полным фаршем (она сейчас используется, как “полигон” для опытов):
Разумеется, в виде конечного устройства для конкретной цели, такая плата избыточна. Потому, что в реальности не нужен ВЕСЬ навешенный на нее фарш. Только те компоненты, которые необходимы для того или иного конкретного контроллера, заточенного по те или иные конкретные условия.
Во второй версии платы я попробовал добавить необходимые опции путем модификации и изменения схемы разводки первой версии. Но, мало того, что вышло коряво, так оно еще и разрослось в размерах, выйдя за габариты, допустимые к размещению в стандартной электрокоробке.
Помедитировав над практически уже готовым макетом второй версии, я решил не пробовать заказывать ее, ни на уровне прототипа, никак вообще. Все стер нахрен и начал с чистого листа, но с учетом уже полученного опыта…
Мнэ… Собственно, поэтому я не могу показать тут картинок, связанных с этой второй версией… После “стирания нахрен” в остром приступе разочарования, вся информация по ней оказалась полностью утраченной для человеческой истории.
Так родилась третья версия платы-конструктора.
Вот так она, приблизительно, выглядит в исполнении программы создания гербер-файла, пригодного для печати:
А вот так она выглядит “в исполнении художника”:
А вот так она выглядит просто “в исполнении” (китайцами с JLCPCB, в данном конкретном случае):
А вот так она выглядит в моем исполнении с неким минимальным фаршем, необходимым для “умного” шкафа:
В общем и целом, в ней пока не найдено серьезных косяков.
Безусловно, и эта версия не без недостатков. Пара несущественных моментов, все же, ускользнули от моего внимания. Так, например, вот этот резистор потенциально может конфликтовать с ближайшим к нему разъемом:
К четвертой версии (если она будет), это надо исправить… Пока, право же, куда проще просто чуток согнуть ножки резистора и впаять его чуть в стороне. Тем более, что сейчас я еще ни разу не столкнулся с необходимостью использовать все три входа-выхода с их разъемами. А поэтому и конфликтов не возникает. Но он есть на уровне симуляции. Значит он будет и в реальности… Проглядел…
Другой пример, вот, скажем… В эти отверстия могут монтироваться стойки или какие другие крепления:
Пока неясно какие, но – могут. И тогда такие стойки или крепления начинают перекрывать разъем по питанию. Провода забросить все равно можно, конечно, но… “Неаккуратненько”(с)… С этим тоже жить можно пока. Но к четвертой версии, опять же, надо будет учесть и исправить.
Возможно, в процессе, еще какие косяки вылезут. Поэтому, пока не решусь назвать эту версию совсем окончательной…
Там, я не помню, писал про это где выше или нет… Третья версия платы разводки, со всеми ее “опциями” имеет так же и некую примитивную “защиту от дурака”.
Например, в плане тех же перемычек. Скажем, в случае с мосфетами или реле. Тут можно либо установить мосфет и рулить им нагрузкой, либо перемычку и рулить нагрузкой через внешнее реле:
И мосфет и перемычка одновременно – сделать будет довольно затруднительно.
Конечно, дуракам закон не писан. При желании можно куда угодно впихнуть все невпихуемое. Но, надеюсь, что при возникновении такого конфликта, человек (или, скажем – я), как минимум насторожится: а вдруг что-то идет не так и не следует ли еще раз проверить то, что делается и в какой конфигурации.
То же самое и с другими “опциями” в виде перемычек или дополнительных полупроводников – либо одно, либо другое…
В общем, плата эволюционирует потихоньку от версии к версии. Как это и должно быть, собственно. Возможно, к своей пятой-шестой-десятой версии она превратится в чего-нибудь действительно волшебное. Посмотрим… Для текущих задач пока хватает того, что есть…
Итого… По части выполнения условий задачи, изложенных в предыдущей части цикла:
Условие “Дешево“.
Посчитаем минимальную конфигурацию для какой-нибудь одиночной “умной” розетки:
- Пять плат через китайцев на JLCPCB мне обошлись в 13 долларов вместе с доставкой. Но у меня сработали какие-то скидки. Без скидок было бы 18 долларов. Так, что будем исходить из этого. 18 / 5 ~= 3.5 доллара одна плата.
- Ардуина: 2 доллара на алибабае.
- Модуль WiFi: 1.5 доллара на амазоне
- Реле: 1 доллар на амазоне
- Резисторы/светодиоды… Сложно посчитать. Поштучно же они не покупаются… Там, вообще, и на доллар не наберется за комплект необходимый контроллеру. Но, пускай, округлим до 1 доллара.
Итого: 3.5 + 2 + 1.5 + 1 = 8 баксов
Полная версия, с несколькими сенсорами, тремя реле и прочим фаршем… Тут все будет зависеть от конкретного состава. Но, в любом случае, за установленную планку в 15 баксов оно не перевалит.
Вывод: условие выполнено.
Условие “Распределенно“.
Каждый модуль автономен. Может иметь свой источник питания, а может делить его с другими контроллерами. Будет зависеть от конкретной реализации в конкретной части дома.
Скажем, вот, в шкафу для подсветки. Там светодиодные ленты со своим БП на 12 вольт. Этот БП был бы в любом случае. С контроллером или без него. Так, что он включен в бюджет подсветки шкафа, а не контроллера. Контроллер им просто пользуется нахаляву. Другие контроллеры могут стать “паразитами” на других источниках питания в других частях дома. Могут иметь свои собственные. Могут, хоть, от девятивольтовой батарейки кормиться. На систему в целом это никак не влияет.
Каждый модуль торчит индивидуально в общей локальной сети дома. Может отдавать и принимать данные. Каждый модуль имеет свой адрес. Каждый модуль имеет свою индивидуальную программу по которой работает.
Что с этим всем делать в финале – вопрос совершенно иного порядка. Соорудить ли некий “сервер” на базе малины, которая будет всеми рулить. Или дергать каждый индивидуально хоть, прям, через смартфон. Или какие-то модули вовсе в мир не выпускать, исключив модуль связи из их состава… Все это масштабируемо, настраиваемо и в рамках каждого отдельного модуля – индивидуально.
Вывод: условие выполнено.
Условие “Компактно“.
Напомню: “чтобы влезало в стандартную электрокоробку”. Сами смотрите (первая версия платы с полным набором фарша):
Контроллер занимает ровно один условный “юнит” электрокоробки. Очевидно, что в двойной коробке можно разместить два контроллера. Или контроллер и, рядом, обычный стандартный выключатель/розетку. В тройной коробке… Ну, понятно… И так далее…
У меня в доме такого нет, но, вот, у друга в доме, на одной из стен – пять выключателей. Соответственно “пятиюнитовая” электрокоробка под ними. Пять контроллеров. Пять ардуин. По две кнопки для управления в каждой. Дохрендильон сенсоров и реле. По-ходу, в его одной этой коробке можно будет уместить ВСЕ управление домом. Но вряд ли он захочет 🙂
Последняя версия платы, не смотря более обширный функционал и “опции” – компактнее в размерах. Так, что, если в электрокоробку влезает первая версия с полным фаршем, то третья влезет и подавно. И она влезла, разумеется. Выше, там, есть фото варианта платы для подсветки шкафа. В ней используется уже последняя версия.
Короче… Мой личный вывод по габаритам: условие выполнено.
Условие “Специально-универсально“.
Весь описанный выше функционал и “опции” реализуются в полном объеме. Можно делать выбор по питанию, подгоняя его под конечную задачу. Использовать мосфеты на борту или внешние реле. Использовать без изменений разводки большинство “обычных” сенсоров, как аналоговых, так и условно “цифровых” (на самом деле они все аналоговые). Можно, путем изменения кода прошивки заставить вытворять контроллер разные трюки. И т.п.
В пределах своей узкой и конкретной задачи быть “умным” выключателем – контроллер весьма гибок.
Вывод: условие выполнено.
Условие “Легкая повторяемость, воспроизводимость, замена.“
Все компоненты легко и быстро доступны на сегодняшний день. И нет причин полагать, что в обозримом будущем это изменится. В любом случае, у меня и без того внутренних запасов мелкой примитивной электроники такого рода (включая ардуины) – на пару “умных” домов хватит.
Я засек время сборки и установки версии платы для подсветки шкафа: 1 час 12 минут.
Пол часа из этого времени ушло на отмывание готовой платы спиртом от “канифоли”. И еще не менее пятнадцати минут на эпическое согласование с женой приемлемого уровня яркости контрольных светодиодов и подбор под это дело соответствующих резисторов. Оказалось, что это – важно 🙂
Вывод: условие выполнено.
Условие “Безопасность“.
Конечно, все зависит от качества сборки, качества компонентов, качества разводки в целом и т.п. Сейчас оно мне все кажется в достаточной степени безопасным. Но у меня нет испытательного полигона для предварительной проверки всего этого… Точнее – оным является весь мой дом прямо сейчас.
Само-собой, я хочу и дальше влачить свое уставшее существование, как вообще, так и на этом “полигоне” в частности. Отсюда следует более чем личная заинтересованность в качестве изделий… Но, ведь, и про старуху бывает порнуха… Стараюсь быть внимательным к деталям и не пускать 110 вольт по проводкам 28G…
Вывод: только время покажет.
В следующих частях повествования покажу подробнее конкретные примеры реализации элементов инфраструктуры дома на базе этой платы-конструктора.
Как минимум уже есть и работает “низковольтный” шкаф с подсветкой и одна обычная “высоковольтная” розетка у меня на столе в кабинете.
Шкаф имеет немножко своего “ума” за счет сенсора движения. У розетки своего “ума” нет. Ей он и не нужен. Но то и другое могут управляться, как локально, кнопками, так и удаленно, через интернет. Равно, как и какой-нибудь условной центральной “думающей” системой в доме, буде таковая появится. Равно, как и будущей собачкой-роботом, буде она когда-нибудь построена… Равно, как могут и вовсе не управляться извне… Правда, тогда теряется весь смысл их существования. Но – могут 🙂
Будет больше областей применения в доме, будет больше конкретных примеров. Если кого-то это все заинтересует настолько, что захочется повторить, то отдам, и гербер для печати платы, и прошивки, какие готовы будут на тот момент, и буквальный список по набору деталей, и вообще все на свете, что может оказаться полезным в этой связи… Без проблем.
А пока мне надо вернуться к молотку и шпателю и продолжить реконструкцию гостиной… 🙂
Продолжение читайте в следующих частях цикла…
Комментарии:
Интересно, но ардуино там как-то лишняя выглядит. ESP32 или, если есть сильная нелюбовь к SMD компонентам, модуль на ее основе будет проще. И использовать все тот же arduino core (https://github.com/espressif/arduino-esp32).
На малинке можно поднять MQTT брокер, node-red для сценариев и т.п. (тут уже от фантазии зависит).
Не, никакой нелюбви в такого рода вещах – нет. Есть штук 20 ардуин, купленных за смешные деньги в начале этого года и глубоко порочная куркульская философия “используй то, что под рукой”, которую довольно трудно выковырять из головы 🙂
На уровне коммуникаций я вообще еще не думал. Ну, т.е. – оно протестировано и работает. Стабильно. Данные гоняются между контроллером и сервером. Пока тупо на уровне http-запроса к php-скрипту на сервере. Но я прекрасно понимаю, что это сугубо временное решение. MQTT будет правильно и адекватно. На некоем общем уровне я про него и думал. Когда доберусь до централизации – тогда буду решать, малина это будет или писюк в шкафу…