Автоматическая подсветка лестницы. Своими руками. Последний раз.

Зацепился тут случайно глазом за комментарий и стало больно (в переносном смысле) и обидно, действительно, маловато масштабных проектов на mysku. DIY какой-то грустный. Конечно, уровня самодельной машины добиться сложно, куда уж, она там аж в «топ за все время» выбралась… но расскажу вам про подсветку лестницы. Точнее про ее допеределку.

Началось всё с начальника на работе. Подошел ко мне и спросил: «а можешь сделать? А то везде денег просят каких-то неадекватных. 5000, 10000, 40000…» Ну я подумал, чего там такого сложного-то? ШИМ+сонары. Вроде просто.

Сверяемся с табличкой

6 часов – норм.

Я бы не писал здесь эту статью если бы из всех найденных в инете решений больше не понравилось вот это.

Почему-то не в разделе DIY, ну не суть…

Кстати автоматическая подсветка лестницы – это одна из немногих вещей, которая является исключением из правила «Всё что ты придумал сегодня – китайцы позавчера сделали и вчера продали» © [моё]
Автору статьи респект и уважение, все-таки дело было в 2015-ом, 20 ноября будет юбилей 4 года, но не понравилось несколько моментов:
— Софт явно требовал серьезной передоработки.
— Размер платы — жесть. Это чисто мои внутренние стремления к минимализму. Не обращайте внимания.
— Использование громадных NPN-транзисторов еще и с радиаторами. Не сколько претензия к громадным, сколько к NPN.

Ну ладно размер, уже предупредил не обращать внимания, но NPN-то зачем? TLC5940 кладет выходы на землю. Автору понадобилось городить инверторы 74LS04 там, где они в принципе не нужны, чтобы получить плюс на базе для NPN. Ну допустим, сделал из того что было под рукой, но при этом никто не задумался что все ступеньки лестницы постоянно подключены к 12в, а ШИМ дергает за минусы. Еще раз: вся лестница, каждая ступенька подключена постоянно к 12в. Даже когда ленты не горят. Ничего не смущает?

И поехали тиражировать эту плату в больших количествах по всем городам бывшего союза…

Что-то увлекся критикой. Никого не хочу обидеть. Простите. У вас уже всё работает а у меня нет. Давайте лучше меня критиковать.
В общем первый прототип на коленке получился вот так:

Та же самая Arduino Nano, та же самая TLC5940, мосфеты сдвоенные IRF7314 P-канальные 20v 5.3A, разводка питания двойная под LM7805 и под AMS1117-5.0. От последней потом отказался. Греется, не нравится, выкинул в окно.

Заказал платы на заводе, приехали. Да, кстати, размеры 48*100мм, свободного места почти нет.

По-быстрому запаял…

…и почти расслабился, не подозревая что ожидает впереди.
Ну хотя нет, конечно подозревая, поэтому заказал плат чуть больше чем нужно 🙂

Чуть-чуть транзисторов

Чуть-чуть резисторов с конденсаторами

Немного сонаров

Немного ардуин

Кстати, припаиваю к ним ножки сам. На фотке их 1500 🙂 Весьма медитативное занятие.

Из софта тут же выкинул PIR. Не по фен-шую это. Если ты хочешь использовать PIR – повесь себе лампочку над лестницей и не морщ мозг. Зачем эти ардуины, ШИМы, БП, ленты, куча проводов?

Увеличил количество градаций яркости, выкинул ресет сонаров (HY-SRF05 не припомню чтобы зависали), добавил чтение датчика освещенности temt6000, вынес всё что можно менять в структуру, причесал сомнительные моменты.

В общем начальник контроллер подключил, более-менее настроил.

Правда устал ковыряться в переменных и перезаливать прошивку, о чем мне непременно и высказал, что мол у белых людей крутилки на плате, кнопки, LCD-экранчики с менюшками а мы как негры правим код. И тут я обратил внимание на маленькую железку, торчащую сбоку Arduino Nano. Называется «разъем miniUSB». А сама ардуина в системе уже видится как виртуальный COM-порт. Бинго! Добавляем сохранение/чтение структуры в EEPROM, делаем изменение параметров через UART:

Ну да, добавил кое-чего своё. Если вдруг кто узнал имена переменных 🙂
А потом расчехляем C# и делаем утилиту настройки контроллера по USB. Подключил шнур, запустил утилиту и меняй всё что можно. Последняя версия выглядит так:

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

Маленькая сморщенная, есть в каждой женщине… Правильно, изюминка.

Так и в плате контроллера есть изюминка, изначально заложенная. Платы стекируемые. То есть объединив 2,3,4 платы последовательно 5pin шлейфиками, можно получить 32,48,64 ШИМ каналов соответственно, управляемые одной Arduino, установленной только в первой плате.

Запилил сдуру даже несколько контроллеров на DIP-компонентах.

На ATmega328P. Да, именно так выглядит 476 резисторов с 952 ножками, которые надо вставить в 952 отверстия, 952 раза припаять и 952 раза откусить кусачками. +784 ножки DIP-кроваток +504 ножки клеммников. Мне кажется именно после этого оттопырились какие-то неизвестные мне доселе чакры и я начал отступать от задуманного :)))))

Шаг вправо…

Параллельно я занимался одним проектом, в котором были использованы сенсорные выключатели. Не в том смысле что готовые типа Livolo или как их там… а самодельные сенсоры на микроконтроллере.

Наткнулся в инете на статью про сенсорную клавиатуру на Attiny2313. Прям готовый проект, схема, программа, всё есть. Решил побаловаться.

Конечно из авторской платы 60*50мм я сделал свою 33*40мм 🙂

Я вообще люблю уменьшать всё что можно уменьшить. Клавиатурка заработала, идея прикольная, вполне рабочая, можно делать неплохие панели управления. И тут подумалось, а чем собственно нажатие пальцем на пластину через диэлектрик отличается от наступания ногой на лестницу? Если, скажем, пластину скрытно установить под ступенькой? Правильно, отличается толщиной этого диэлектрика, причем весьма существенно. Ступенька это вам не пленка на текстолит.

И я сделал свой двухканальный сенсорный драйвер с преферансом и куртизанками… (размер платы 27.64*15.24мм) Он умеет «пробивать» 60мм дерева достаточно уверенно. Бетон сантиметра 3-4.

Да, сразу на завод, я уверен – это бомба. Это не только сенсор для ступенек, но и скрытый выключатель внутри стены, и еще куча применений. 27.64*15.24мм кстати тоже можно уменьшить и сделать 23.83*15.24 убрав клеммники. Дальше уменьшать мешает камень 🙂 Первые удобнее подключать, вторые удобнее прятать. Сложно решить какие лучше – оставил оба варианта. Микроконтроллер PIC18 в TQFP-44 если что… Мой любимый.

Ну так вот… У этого модуля (на фотке их 24шт) есть своя утилита для настройки обычным UART-USB шнурком. C# же уже расчехлен – его уже не остановить. Креатив прёт. Пишем, дебажим, наводим красоту… Переключение режимов работы, изменение/сохранение настроек/параметров, вывод в реальном времени, полный интерактив.

По работе модуля и утилиты настройки снял 3 видео, но звук плохой. Если кто осилит мое бубнение – будет в восторге от этой уличной магии.

Раз

Два

Три

https://www.youtube.com/watch?v=ihDIBB3l6Lw


В принципе модуль делался не только для лестницы. Он двухканален и весьма универсален 🙂 Работает либо в режиме UART по протоколу, либо в режиме TTL, выдавая на выходах «0» или «1» в зависимости от значения «сенсора». Сохраняет настройки в EEPROM, самокалибруется при старте. Двухбайтовые пакеты вида «<команда><аргумент>», 32МГц, прерывания, кольцевой буфер, прочий фарш. Протокол конечно свой.


Идеально настроенный сенсор под ступенькой получился в гараже. Ступеньки из доски 200*50, самой брутальной, не струганой – отличный тест.
Снимал на тапок, уж простите.


Показал сие творение знакомому – реакция была примерно такая.

Скетч контроллера подсветки лестницы позволяет использовать эти модули вместо сонаров, подключив первую и последнюю ступеньки, но не к одному сенсорному модулю. К двум разным.

Сделано это чтобы продать побольше модулей потому что проводок от пластины сенсора до сенсорного модуля должен быть максимально коротким, чтобы вся лестница не превращалась в большую антенну. А так как первая ступенька обычно далековато от последней – модулей нужно два. Ну и поскольку модуль двухканальный, закладываем перспективу подключения второй и предпоследней ступеньки, что даст однозначную информацию о направлении движения человека. Без всяких лазеров и прочих инфракрасных барьеров. Пока эти 2 канала на модулях остаются свободными. С точки зрения контроллера лестницы конечно.

Шаг влево…

Дошли руки поморгать светодиодом на ESP8266

и тут меня осенило еще раз. А собственно почему бы UART ESP-01 не соединить с UART Arduino Nano? Кто мне запрещает? Оглянулся… Никто! Соединил 🙂

Добавил DC-DC преобразователь LM3671MF-3.3 (2MHz ШИМ) на плату. Заново заказал платы, приехали, спаял.

Обвязка у него с дросселем, с обратной связью, ибо брать 3.3в для ESP от Arduino с костылём в виде конденсатора – это вообще не наш метод. «Н»-Надежность.

И контроллер подсветки лестницы стал выглядеть так:

А управление и настройка вот так:

А я думал нет места на плате. Ошибался 🙂

Попытка улететь…


На данный момент уже 5-ая версия ПО для контроллера подсветки лестницы.

Возможности регулировки и другие параметры:
— количество ступеней
— общая яркость (если вдруг переборщили с мощностью ленты)
— яркость первой и последней в дежурном режиме (можно и 0% поставить)
— время разжигания
— время затухания
— время ожидания
— возможность использования табличных значений ШИМ (линейная/степенная функция разжигания)
— дальность срабатывания сонара 1
— дальность срабатывания сонара 2
— возможность блокировки сонаров на время «разожглась-подождала-затухла»
— возможность использования сенсорных модулей. Установка под ступеньку (или внутрь. Уже так делали) обычной фольги, подключенной к входу модуля. Алюминиевые накладки, пороги, уголки, полосы – любой металл.
— в реальном времени в утилиту и в web выводится значение с датчика освещенности. Используются только TEMT6000.
— порог срабатывания датчика освещенности
— величина разброса значений датчика освещенности (коридор)
— количество опросов датчика освещенности для усреднения
— возможность подключить выключатель, который будет включать всё принудительно
— возможность подключить выключатель, который будет выключать всё принудительно. (Эти 2 выключателя специально для бабушки, которая против ваших высокотехнологичных замутов в на даче)
— возможность отключения всех входящих датчиков для прямого управления каналами по uart или http
— wi-fi может создавать свою точку доступа и/или подключаться к существующей

Кстати про табличные значения ШИМ…
Я провел эксперимент. Суть в том, чтобы направить свет от ленты на датчик освещенности и записать его значения при разных значениях скважности ШИМ. Тысячи измерений. Получилась такая картина:

То есть вполне себе линейная зависимость яркости свечения куска ленты от среднего напряжения, подаваемого с транзистора на ленту. Тут, конечно, играет роль то, что датчик TEMT6000 максимально приближен по параметрам к человеческому глазу, но не трудно заметить, что при малых значениях происходит скачкообразное увеличение яркости. А при больших уже не влияет на яркость. Это все из-за того, что я поделил максимальное значение 4000 (на самом деле конечно 4096, но не суть) на 100 равных отрезков, то есть +1% к яркости это +40 к значению ШИМ. Яркость меняется от 0% до 100%. 0…4000

Получается 0% это 0, а 1% это сразу 40. Данный факт достаточно сильно крадет диапазон видимого изменения яркости ленты, т.к. если разжечь ленту от 0 до 40 значений ШИМ – на глаз видно плавное изменение яркости, а вот от 3960 до 4000 вообще не заметно даже если мерять «экспериментально». Поэтому вместо линейной зависимости в настройках можно выбрать степенную. Чтобы не нагружать камень расчетами – в скетче эти значения выведены в массив, который хранится в ПЗУ, ибо не меняется в процессе работы.



И раз уж я сунул туда wi-fi – в контроллере есть возможность игнорировать логику работы лестницы (галочка «отключить все датчики») и работать просто как управляемый контроллер освещения на 16(32канала). Командами по UART с другого микроконтроллера (да, пины UART выведены отдельно) или компьютера, либо http-запросами. То есть использовать его вообще без датчиков. Шилд с esp01+ардуино нано.

Так, например, команда по UART: $ch=5,70,1000 плавно (за секунду) устанавливает 5-ый канал в 70% яркости. А команда $ch=5,0,0 мгновенно гасит его в ноль.
Те же самые действия можно осуществить запросами:

http://192.168.4.1/uart?c=$ch&a=5,70,1000
http://192.168.4.1/uart?c=$ch&a=5,0,0

, где c — команда, a — аргумент, 192.168.4.1 — IP адрес контроллера подсветки лестницы.

Все настройки можно менять или в веб-интерфейсе с помощью формы, или http-запросами типа
http://192.168.4.1/uart?c=stairsCount&a=15
или
http://192.168.4.1/uart?c=sonar2minLimit&a=90

Поскольку сенсорные модули в режиме общения с контроллером лестницы просто выдают «1» или «0» на соответствующую каналу срабатывания ножку, в этом же режиме контроллера к нему можно подключить и PIR-датчики и проходные кнопки — логика работы не нарушится.

А главная прелесть сенсорных модулей в том, что сами пластины сенсоров можно установить не только под ступеньку или внутрь ступеньки, но и под ламинат/плитку ПЕРЕД лестницей, что увеличивает вероятность корректной работы модуля до 146% ввиду меньшей толщины «диэлектрика», и передает большой привет производителям контроллеров подсветки за 5,10,40 тыс.р. с сонарами. В этом случае уже можно говорить о подключении тех двух свободных каналов на модулях для реализации подсчета людей на лестнице и выстраивании более космических алгоритмов.

Ну, например, повышать яркость дежурной ступени при подходе к лестнице и начинать разжигать остальные только при наступании на нее. Такого нет даже в лучших домах парижа и лондОна. Кто-то скажет, мол, надо быть совсем упоротым чтобы такое водрузить у себя в доме. И будет прав 🙂 Но лестницы это не только дачи и коттеджи. Это, как выяснилось, еще и кафе, рестораны. Установщики в восторге от таких возможностей – а это стимул придумывать новые фичи и улучшать имеющиеся.

Изначально хотел написать «Предпоследний…», вдруг найду время с желанием и сделаю статью про CAN-подсветку. Да, есть у меня и такая. Нечего плодить статьи – упомяну прямо здесь.
Вот такие огромные двухканальные модули 36,3*17мм:

На фотографиях по 12 модулей (вдруг кто-то не понял) Итого тут 24 канала.
Всё вроде бы ничего, но они еще и двухэтажные 🙂


С одной стороны клеммники CAN, с другой 2 выхода на ленту/лампу.

На борту STM32 + транзистор IRF7314 с обвязкой + CAN-передатчик + DC-DC сверху.

Без установленных питальников выглядят так:


CAN-модули соединяются последовательно шиной из 4х проводов: +12в(+24в), GND, CAN_H, CAN_L


На эту же шину сажаются сенсорные модули (конечно уже с CAN-интерфейсом) 2pin – 2 сенсора, 3pin – датчик освещенности. «У» — Универсальность. Спойлер: эти же 3 пина – датчик давления (водопровод) с CAN, но об этом точно в другой статье


и Wi-Fi-модули (с ним же)

Хайтек-сендвич 🙂

Модулей на шине может быть до 125, дальность шины до 250м.

ШИМ соответственно аппаратный с STM32.

Этот проект уже больше к уличной подсветке территории загородных домов с удаленным управлением и ip67 корпусами, но при желании его можно легко запилить и на лестнице, используя 4 провода вместо «количество_ступенек + 1».

Так как CAN-модули самодостаточные – на них проще реализуются всякие хитрые вещи типа разжигание лестницы одновременно с двух сторон (при заходе разных людей) и перекрытия разжигания/затухания. То есть когда следующая ступенька начинает разжигаться/затухать в момент, когда предыдущая до конца не разгорелась/затухла. С CAN на лестнице я подожду. Сейчас мир не готов к 10-иядерным лестницам :))) С сенсорными бы разобраться…

Думаю, что тему автоматической подсветки лестницы я раскрыл полностью, так сказать «дорисовал сову» :))) поэтому и «последний раз». Хотя может кто-то возьмется ее раскрасить 🙂

Да, я неправильно оценил время по табличке. Конечно этот проект не «вроде просто» а «вроде изян».

По поводу софта, политика простая. Так как часть скетча была позаимствована у товарища Vipeg, а про лицензию там ни слова, то свой скетч я НЕ выкладываю здесь же под лицензией WTFPL.

Было:

Скетч использует 5406 байт (17%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 277 байт (13%) динамической памяти, оставляя 1771 байт для локальных переменных. Максимум: 2048 байт.

Стало:

Скетч использует 12354 байт (40%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 902 байт (44%) динамической памяти, оставляя 1146 байт для локальных переменных. Максимум: 2048 байт.

Учитывая то, что с выходом сенсорных и CAN-модулей подсветка лестницы на сонарах и pir-ах постепенно переходит в разряд моветона, а алгоритмы этих модулей – мои уникальные разработки – их ПО, равно как и исходники утилит настройки и уж тем более всё ПО, касающееся CAN и Wi-Fi, позвольте оставить у себя.

Так как соединить Arduino Nano с TLC5940 можно по сути одним единственным способом – через SPI — мой скетч с большой долей вероятности подойдет для всех контроллеров, которые вы уже спаяли по статье Vipeg. Пользуйтесь на здоровье.

Спасибо, что дочитали эту портянку. Я старался быть не нудным 🙂
Если есть вопросы – задавайте.