Я живу в своем доме. До недавнего времени мы всей своей большой дружной семьей ютились на первом этаже двухэтажного дома. Время шло, а этаж так и не хотел превращаться в жилой. Всегда находились другие, более важные дела. И долго бы это так тянулось (наверное), если бы супруга в один прекрасный момент не сказала – хочу свою комнату! Как нетрудно догадаться через некоторое время этаж стал оживать. И как только это произошло, встал вопрос о том, как сделать освещение лестницы. Варианты поставить проходные выключатели или подсвечивать дежурным освещением мне не понравились сразу. Слишком просто и очевидно. А как-же выпендреж? А где здесь вау-эффект? Хотелось сделать что-то необычное. Лучше всего подходило решение сделать подсветку с помощью светодиодных лент. Вот где свобода творчества при наличии фантазии!
Выбор решения
Подобные решения существуют достаточно давно и в самых разных вариациях. Покупать то, что можно сделать самому – удар по самолюбию. Сроки у меня не горят (домашние вообще не в курсе, что я задумал), желание есть, так что – вперед. Прежде всего, необходимо было изучить то, что сделано другими и убедить себя, что можно сделать лучше. По результатам поиска по просторам инета я для себя разделил все подобные устройства на три основных вида:
устройство выполнено в виде моноблока с определенным количеством каналов. Все необходимые датчики (пересечения и освещенности) также подходят к этому блоку. Устройство фактически коммутирует куски светодиодных лент определенного цвета.
второй тип повторяет по конструктиву первый, но отличается только тем, что управляет адресными светодиодными лентами. Здесь возникает возможность получить более красивые эффекты и цвета.
многоканальные устройства комбинированного типа, позволяющие управлять и обыкновенными и адресными лентами.
Однако, при всем кажущемся многообразии, все подобные устройства крайне однотипны. В большинстве решений схема следующая: ультразвуковые датчики + ардуино + светодиодная лента. Есть решения (в основном коммерческие), где в этой схеме вместо ардуино используется свой контроллер. Я даже случайно наткнулся на статью на Хабре, где как раз рассматривался вариант с одноцветной светодиодной лентой, управляемой ардуинкой.
Не то, чтобы я был ярым противником ардуино-подобных решений. И они для каких-то применений (в основном быстрое макетирование, проверка гипотез) имеют право на существование, но в «боевые» устройства я бы их не ставил. Но это мое личное мнение. И я готов к тому, что разнесут и мою реализацию.
Итак, что не понравилось мне в решениях, которые в основном представлены в сети. Во-первых, замкнутая система в виде моноблока имеет несколько недостатков:
система «заточена» на конкретный объект (лестницу) с определенными характеристиками (число ступеней). Из этого следует, что система практически не допускает расширения или какой либо серьезной модернизации.
датчики пересечения подводятся длинными проводами минимум с двух точек (концы лестницы).
Во-вторых, мне не понравились в принципе датчики пересечения на основе ультразвуковых датчиков. Это же мрак как смотрится, как минимум! И их не спрятать. Тут, правда, у всех своё мнение.
Можно сказать так, что я решил пойти своим путем. Идея была в следующем. Зачем делать один громоздкий блок управления со своими ограничениями, когда можно собрать требуемую конфигурацию подсветки из относительно универсальных блоков? Что я имею ввиду. Рассмотрим блок-схему этой универсальной единицы.
Это практически готовое одно-канальное решение подсветки. А дальше возможны вариации:
блок - это готовый одно-канальный светильник (и не только для лестницы)
два блока, расположенные с разных концов, обслуживают всю лестницу. Эту конфигурацию можно считать основной. При этом эти же блоки обслуживают датчики пересечения и освещения. И никаких длинных проводов!
каждый блок обслуживает свою ступень и имеет свой датчик пересечения. Это самый дорогой, но и самый универсальный вариант. В этом случае можно реализовать красивый эффект перемещения подсветки вместе с человеком.
Как видно из способов реализации основное преимущество – универсальность. Никогда не возникнет ситуации, когда каналов не хватает или наоборот – есть лишние. Если возникнет необходимость, то всегда можно изменить конфигурацию. Да, универсальность всегда дороже, но она дает больше возможностей для творчества.
А теперь к деталям. Разберемся, как это все можно реализовать.
1. Датчик пересечения
Очень хотелось получить компактный, дешевый датчик, который легко спрятать за элементами декора. Перебрав варианты, я остановился на Time-of-Flight (TOF) датчике VL53L0x. Он очень маленький и позволяет определять дистанцию до 2-х метров. В реальности же столько не надо, так как ширина ступени в среднем 1-1.2м. А про цену и говорить нечего. Сейчас на AliExpress его можно купить рублей за 150.
.
2. Датчик освещенности
Очень мне понравился в своё время датчик MAX44009. Классный датчик с автоматическим выбором диапазона. Жаль, что сам датчик сняли с производства, но модулей на его основе еще вполне достаточно на там-же AliExpress. Например, GY-49.
.
3. Микроконтроллер
Тут особого выбора и не было. Просто так уж вышло, что с прошлого проекта у меня осталась целая норма-упаковка контроллеров LPC11C14. Долго я не знал, куда их приспособить, а тут проявилась такая возможность!
.
4. LED-лента
Как же без нее. На сегодняшний день это самый популярный вид подсветки чего либо. Можно было использовать простые одноцветные варианты, но это больно скучно. Если уж делать подсветку, то делать ее универсальную. Поэтому я решил использовать адресную светодиодную ленту. В любом случае ее всегда можно «превратить» в обыкновенную одноцветную.
.
5. Канал связи между модулями
Я немного слукавил, когда говорил, что выбор микроконтроллера был предопределен. Основная фишка этой микросхемы – наличие встроенного CAN-контроллера. Да-да, именно CAN интерфейс будет связывать в единое целое все модули. Это очень удобно и надежно. Если есть другие мнения, как организовать надежную realtime связь между модулями – буду рад выслышать.
6. Монтаж
Не последнее значение имеет удобство монтажа. В данном случае модули будут соединяться последовательно друг за другом (если их много).
Макетирование
Единственным элементом, с которым я раньше не работал и который требовал проверки, был датчик TOF VL53L0x. Для этого был собран по древокальной технологии макет.
Сие изделие было закреплено поперек лестницы. Как показали ходовые испытания - пересечь барьер безнаказанно не получается. Дальности надежного обнаружения объекта (человека) вполне достаточно. Дальше даже и не надо. Ровно для ступеньки лестницы! Поскольку луч у данного сенсора достаточно узкий (25 градусов) – достаточно поднять датчик примерно на 50 см и никакие кошки и собаки с поднятым хвостом не вызовут ложного срабатывания. А вот ребенок точно не проскочит! Любого размера. Также этот датчик можно спрятать за стеклом и тогда вообще его не будет заметно. Этого никак нельзя сказать про ультразвуковые датчики. А поскольку датчики очень компактные, есть вариант расположить рядом два датчика и тогда появится возможность определять направление движения по лестнице.
Хотелось немного сказать про софт для датчика. Несмотря на все плюсы с информацией по нему очень даже не очень. Описание регистров нет в доступе в принципе, а существует только библиотека от STM. Несмотря на утверждение специалистов из STM - их библиотека далеко не «simple». Перелопатив просторы инета я нашел разные варианты софта для работы с датчиком, но они все представляют из себя упрощенную версию фактически только для оценки работы с vl53l0x. Но поскольку моя задача заключалась лишь в определении факта пересечения границы и мне не требовалось точное измерение расстояний, то для меня этот вариант вполне подходил. Взяв один из этих вариантов драйвера за основу, я переделал его для работы с микроконтроллером LPC11C14.
Итого, короткий вывод из эксперимента – датчик просто огонь!
Принципиальная схема
Основным критерием при проектировании схемы было использование максимально дешевых комплектующих. Концепция «каждой ступеньке - свой модуль» потребовала сделать этот самый модуль как можно дешевле.
Основу модуля составляет микроконтроллер LPC11C14. Элемент DA1 – внешний сторожевой таймер (ну есть у меня пунктик по надежности внутренних сторожевиков). DD2 – преобразователь уровня для работы с LED-лентой. SW1 – выбор адреса устройства в сети CAN. Это сделано для того, чтобы модули, имея одинаковую прошивку, могли быть аппаратно сконфигурированы. DA4 – драйвер CAN-линии. XP14 – разъем для подключения внешних датчиков (датчик пересечения, датчик освещенности).
Приблизительная стоимость основных компонентов модуля (цены Чип-Дип):
LPC11C14 – 200р
TPS3828-33DBVR – 47р
AMS1117-5.0 – 16р
AMS1117-3.3 – 21р
TJA1042T/3 – 55р
PESD1CAN – 12р
TXB0102DCU – 80р
15EDGRC-3.81-04 – 21р
15EDGK-3.81-04 – 35р
ABM8G-12.000MHZ-18-D2Y – 170р
Мелочевка – 50р
Итого: 707р
Трассировка платы
Было желание сделать простую дешевую двухслойную плату, но… дело было перед Новым Годом и у китайских друзей случилась акция. Четыре слоя х10штук почти бесплатно (500р)! Получатся плата выходила 50р.
И я не удержался и сделал по-человечески. Извините…
Что по итогу на данный момент. Платы заказаны, софт готовится. Продолжение следует…
ionicman
А можно уточнить, зачем для такой достаточно простой задачи используются такие сложные датчики?
Фоторезистор чем не устроил, как датчик освещенности?
Датчик пересечения — ИК-диод с ИК приемником. Зачем тут TOF?
Если хочется — то можно элементарный PIR поставить, причем один на всю лестницу, если она более-менее прямая.
Вы вроде-бы как максимально дешевле хотели, нет?
Зачем «каждой ступеньке свой модуль»?
У вас что, кто-то заходит на лестницу до 3 ступеньки и там остается?
По итогу у вас 32-битный процессор ARM-процессор, работающий на частоте до 50Мгц, TOF-датчик и 4-х слойная плата… минимум на двух ступеньках (начальной и конечной) ради простой подсветки лестницы… Я даже не могу назвать это оверинжинирингом. Это просто дохеринжиниринг какой-то, ИМХО.
tmin10
С датчиками на каждой ступеньке можно анимацию делать, подсвечивая 2-3 ступеньки вперёд или меняя яркость разных ступенек.
ionicman
Мегаполезная весч…
А если серъезно — это можно сделать и без датчиков на каждой ступеньке, используя адресные диоды (которые и так используются) и 2 TOF-датчика (которые тоже используются) — хоть использоваться по назначению будут.
Wshadow Автор
Хотелось бы узнать как имея всего 2 TOF-датчика обеспечить определение положения человека на лестнице? Я надеюсь не имеется ввиду ситуация, когда датчики "смотрят" вдоль лестницы? Этот вариант не удобен по монтажу, требует "ровных" лестниц, более дорогих дальнобойных датчиков и вообще на практике не работает. Проверено!
ionicman
Обычный TOF дает 2 метра — этого выше крыши.
Крепят их под небольшим углом навстречу друг-другу. Поверьте — если лестница не винтовая — и в ней один-два пролета (а это большинство лестниц) — этого хватает с лихвой.
Wshadow Автор
Не поверю — не работает. Во-первых, сделать скрытую, аккуратную установку такой конструкции очень сложно (если вообще возможно). Во-вторых, луч у датчиков достаточно узкий и получить гарантированное срабатывание можно, наверное только теоретически. Проверено!
ionicman
Ну видимо у вас либо датчики другие, либо с умением что-то — без обид.
Скрытно установлено (в балясинах), отлично работает и нет ни ложно-положительных, ни ложно-отрицательных срабатываний, если говорить именно о взрослом человеке или ребенке.
JohnDoe_71Rus
экономия на проводах, для одного из датчиков придется тянуть к другому концу ступеньки.
ionicman
Зачем что-то куда-то тянуть?
В зависимости от типа поверхности (и диодов) либо вообще ничего не понадобится с другой стороны — если отражения будет хватать, либо понадобиться 5мм кружочек из фольги. Это если по прерыванию отраженного сигнала делать, а есть возможность сделать наоборот — по появлению отраженного сигнала от проходящего.
Или, как я уже выше писал — PIR, один на лестницу сверху.
Ну и с противоположной стороны есть конец адресной ленты и там есть питание, если уж про провода.
Wshadow Автор
А в чем сложность этих датчиков? Они добавляют в систему универсальности для дальнейшей реализации алгоритмов. Давайте пройдемся по датчикам. Характеристика датчика освещенности соответствует характеристики человеческого глаза. То есть он воспринимает свет так, как видим мы. Какой фотодиод это может? Спросите зачем. А вот, например, я захотел спрятать его за темным стеклом (для внешней эстетики). Видимый свет ослабляется, а вот ИК излучение проходит через такое стекло спокойно. Как обеспечить работу датчика освещенности в виде фоторезистора? Да никак. Очень жаль, что его сняли с производства. Но у китайцев этот датчик продается вовсю. А Вы говорите — сложные датчики. Для кого-то это уже старье. Теперь датчик пересечения. Какая разница, какая технология там используется, если эта технология на данный момент вполне доступна? Я могу достаточно точно настроить барьер, чтобы не было "недолета или перелета". Также появляется возможность определять направление движения. И все это без танцев с бубнами на дискретных элементах. Оба датчика подключаются к плате по шине I2C максимально короткими проводами. Никаких аналоговых цепей (фоторезистор) и наводок. Если захочу, к этой шине я смогу подключить другие датчики или еще что полезное.
Про PIR я надеюсь это была шутка. Его инерционность, специфическая диаграмма направленности, зависимость от скорости движения и перемещения воздушных масс (форточку открыли) делают его очень неподходящим для таких применений. И вы правы, пожилой человек действительно поднявшись на один пролет лестницы может остановиться чтобы отдохнуть.
Это самый затратный (ну и маловероятный) вариант для организации красивого перемещения света вместе с человеком. Причем честный вариант, а не так как часто показывают в инете, когда человек просто идет с определенным темпом, а перед ним "расстилается" лестница.
ionicman
У вас там что-то в ИК диапазоне светит? Можно узнать, что?
Элементарно — копеечным ИК-фильтром.
Чем вам не угодили аналоговые цепи с таким разрешением АЦП у процессора?
Какие наводки, если он у вас распаян на плате рядом с процессором?
Какой барьер, если он у вас работает в режиме пересечения?
Вы изиваетесь чтоли? Датчики сигнализаций видели? Везде применяются. Да, зависимость есть, здесь вы ее даже почувствовать не сможете. Ну или мы о разных вещах гвоорим. Я говорю о шторочном или объемном датчике, например такого типа:
Час? :) Это решается элементарно небольшой задержкой.
Офигенно нужный режим. Примерно как те датчики, что вы используете для данной задачи.
Вот с этого бы иначали.
А с такой задачей вполне справится ATTINY85 стоимостью меньше бакса и по размерам меньше вашего АРМа. Единственный вопрос — это CAN.
Но зависит от того, как реализовать CAN, базовые возможности можно реализовать и битбэнгом, или поставить специализированный контроллер в крошечном корпусе — все равно платы заказывали. В этом случае его можно ставить разным для разных имплементаций — выж универсально хотели, нет? Но тут да, это единственный спорный момент.
Wshadow Автор
Я так понимаю у нас разный подход. Я не люблю городить из того, что есть в соседнем магазине в данный момент, а потом в случае чего все переделывать. Эту стадию я в свое время проходил — тупиковая ветвь. Мне проще сделать некую базу, на основе которой я могу потом реализовывать все, что захочу. И не так дорого это выходит. Все остальное — экономия на спичках.
ionicman
Ну да, поэтому будем мигать светодиодом с помощью 50-мегагерцового АРМа.
Тупиковые подходы оба, описанные вами. И ко мне они никакого отношения не имеют.
Мой подход — использовать подходящее решение под конкретную задачу.
И если под нее подходит АРМ — я возьму его, сколько бы он не стоил.
А под мигалку я возьму слабенькую тиньку (или вообще пару транзисторов).
И не должно быть такого, чтобы потом из мигалки я решу делать контроллер умного дома, ибо это означает, что вы не инженер, а черти знает кто, и решаете не задачи, а сферического коня в вакууме.