105-Контроллер освещения ступеней лестницы.

Автор: | 13.03.2014

Устройство (контроллер) этой статьи предназначено для подсветки ступеней лестницы в темное время суток или в местах с плохим освещением. Устройство контролирует в зоне лестницы (коридора, элементов интерьера, …) входящих и выходящих людей и создает различные динамические световые эффекты в зависимости от положения людей (их количества, стороны захода и т.д.).

 

Теперь подробней.

Написание этой статьи задумывалась уже давно, но разного рода обстоятельства этому препятствовали. Вот наконец-то звёзды выстроились в нужной последовательности, и как результат — данная статья. Кому интересна предыстория данного устройства (с чего всё начиналось), могут почитать здесь. Огромная благодарность пользователю Mail, за предоставленное видео работы данного устройства. Без его участия, устройство бы, ещё долго «пылилось» на полке у авторов.

Данное устройство разрабатывалось совместно с Евгением (GetChiper). Он создал основу устройства, красивые эффекты зажигания и погасания каналов освещения. Мне осталось лишь дописать логику включения и отключения эффектов.

 

Устройство реализовано в двух вариантах:

1 для 14+1 каналов

Дополнительный канал включается первым и отключается последним, без эффектов. Его можно использовать как сигнал для включения, например, общего освещения над лестницей, или освещения деталей интерьера.

2 для 16 каналов

 

Краткие характеристики контроллера освещения:

Контроллер для устройства может быть выбран любой, из ATmega48P_88P_168P. Частота тактирования МК от внутреннего генератора 8 МГц.

Первый вариант устройства имеет 14 основных каналов освещения и плюс 1 дополнительный (его функции?).

Второй вариант — имеет 16 каналов освещения

Устройство предназначено для работы с четырьмя датчиками движения и одним датчиком уровня освещённости.

Датчики движения и освещённости могут быть как с дискретным, так и с аналоговым выходным сигналом. Тип датчика не имеет значения — это могут быть:
— оптические датчики приближения типа SHARP,
— или ПИР-датчики присутствия,
— или ИК-барьер,
— в самом простом варианте в роли датчиков могут выступать концевики под крайними ступенями лестницы.

Пороговое значение (логический ноль / логическая единица) для устройства составляет 3 вольта (контролируется при помощи АЦП микроконтроллера).

Устройство подсчитывает количество входящих и выходящих людей в контролируемой зоне. Максимальное количество людей (одновременно находящихся в зоне) не должно превышать 100 человек.

 

Размещение датчиков движения.

Для контроля входа/выхода людей в/из зоны работы устройства используется 4 датчика движения. Датчики движения работают попарно. Два датчика с одной стороны зоны (А1, А2), и два датчика с другой стороны зоны (В1, В2).

Важно! Расстояние между парными датчиками должно быть таким, чтобы время перехода невидимой области обзора между датчиков (при выходе из зоны видимости одного, до входа видимости другого), было менее двух секунд. А между внутренними датчиками – более двух секунд. Дальше по тексту будет описано, зачем это нужно.

 

Общая логика работы контроллера следующая:

— при подходе к «темной» лестнице человека, ступеньки лестницы начинают поочередно загораться в сторону движения человека (создавая эффект волны),

— при движении человека по освещенной лестнице, периодически будет пробегать эффект «темной ступеньки», опять-таки, в сторону движения человека,

— при выходе человека из зоны лестницы, освещение ступеней «волной» погаснет за ним.

— при входе с обеих сторон, ступеньки лестницы начинают поочередно загораться как бы на встречу. Так же по освещённой лестнице, периодически будет пробегать эффект «темной ступеньки» (с обеих сторон в центр).

 

Контроллер умеет отрабатывать следующие эффекты (по номерам):

1 и 2 – зарезервированы;
3 – плавное увеличение яркости всех каналов;
5 и 6 – поочерёдное плавное увеличение яркости каналов в соответствующем направлении;
7 и 8 – поочерёдное плавное уменьшение яркости каналов в соответствующем направлении;
9 – поочерёдное — плавное увеличение яркости каналов с обеих сторон;
10 и 11 – перемещение тёмной точки по каналам в соответствующем направлении;
12 – перемещение тёмной точки по каналам с обеих сторон.

 

Описание алгоритма работы контроллера.

— при входе в зону видимости датчика А1 или В1, включается эффект 5 или 6 (поочерёдное — плавное увеличение яркости каналов в соответствующем направлении), а так же разрешает работу двухсекундного таймера.

— после завершения работы эффекта 5 или 6, включается эффект 10 или 11 (перемещение тёмной точки по каналам в соответствующем направлении).

— если при прохождении в одном направлении происходит вход на встречу, то при работе эффектов 5 или 6, происходит переключение на эффект 9 (поочерёдное — плавное увеличение яркости каналов с обеих сторон), а при работе эффектов 10 или 11, происходит переключение на эффект 12 (перемещение тёмной точки по каналам с обеих сторон).

— двухсекундный таймер начинает отсчёт времени, только после выхода человека и зоны видимости датчика. И сбрасывается при входе в зону видимости другого датчика.

—  при прохождении парных датчиков (А1, А2 или В1, В2), после завершении отсчёта 2 секунд, контроллер прибавляет 1 к количеству находящихся в контролируемой зоне.  При прохождении парных датчиков (А2, А1 или В2, В1), после завершении отсчёта 2 секунд, контроллер отнимает 1 от количества находящихся в контролируемой зоне.

— если после выхода из контролируемой зоны, количество находящихся окажется равно нулю, включается эффект 7 или 8 (поочерёдное — плавное уменьшение яркости каналов в соответствующем направлении).

— количественный подсчёт ведётся даже тогда, когда датчик освещённости запрещает работу каналов освещения.

— если при входе или выходе, до завершения отсчёта двухсекундного таймера, вернутся обратно, то количественный подсчёт не производится.

— если при нахождении в зоне, поступит сигнал запрета работы каналов от датчика освещённости, контроллер будет игнорировать данный запрет до выхода последнего из контролируемой зоны.

—  если при нахождении в зоне, поступит сигнал на включения работы каналов от датчика освещённости, контроллер включит эффект 3 (плавное увеличение яркости всех каналов), по завершении этого эффекта, включится эффект 12 (перемещение тёмной точки по каналам с обеих сторон).

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

 

Подробно о работе алгоритма парных датчиков на примере датчиков А1 и А2.

1 Дежурное состояние датчиков — A1(OFF), A2(OFF);

2 Подходим к первому датчику — А1(ON), A2(OFF), включается эффект работы данного направления, взводится таймер (2 сек.) и флаг датчика А1. Пока находимся в зоне видимости датчика А1, таймер не считает. Так можно стоять сколько угодно долго, а устройство будет ожидать дальнейших действий.

3 Выходим с поля зрения первого датчика — A1(OFF), A2(OFF), запускается таймер (2 сек.). Так как устройство не знает в какую сторону движение то по истечении  2 сек, произойдёт сброс флага  датчика А1 и устройство вернётся в дежурный режим.

4 Если менее чем за 2 сек, подошли ко второму датчику  — A1(OFF), A2(ON), устройство сбросит таймер в 0, взведёт общий флаг датчиков А1 и А2. Так можно стоять сколько угодно долго, а устройство будет ожидать дальнейших действий.

5 Если продолжить движение далее по направлению, выйдя из зоны датчика А2 — A1(OFF), A2(OFF), запустится вновь таймер на 2 сек. После завершении отсчёта таймера, устройство проверяет взведенные флаги. По конфигурации данных флагов, устройство определяет, что вход в зону лестницы осуществлён корректно. Происходит количественный подсчёт (+1) и сброс взведённых флагов.

4а Если же от датчика А2 (пункт 3), переходим за мене чем 2 сек, к датчику А1 —  А1(ON), A2(OFF), устройство сбросит таймер в 0, сбросит общий флаг датчиков А1 и А2 и будет ожидать дальнейших действий.

4б Продолжая движение на выход, выйдя из зоны видимости датчики А1 — A1(OFF), A2(OFF), устройство по окончании отсчёта таймера, сбросит флаг датчика А1, и выключит подсветку. Далее перейдёт в дежурный режим (пункт 1).

 

Конструкция устройства, его прошивка.

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

 

Для случая если Вы собираетесь повторить конструкцию не имея опыта работы с МК (или не имея программатора) драйвер дополнительно реализован для плат типа Arduino с микроконтроллером ATmega328p. В этом случае Вы получаете готовое устройство буквально за пару минут! Как прошить в Arduino HEX-файлом драйвера читайте в этой статье.

Все файлы для сборки устройства (схемы, прошивки, исходники, фьюзы) собраны в одном архиве:
105-Stairs.zip - Материалы для сборки драйвера подсветки ступеней

Напоминаю, для Algorithm Builder и UniProf галочки ставятся как на картинке.

Для PonyProg, AVR Studio, SinaProg галочки ставятся инверсно.
Как программировать микроконтроллеры читаем в FAQ.

 

Дополнительные материалы можно найти в соответствуещей ветке форума

(Visited 8 420 times, 2 visits today)

105-Контроллер освещения ступеней лестницы.: 87 комментариев

  1. ZiB

    Молодцы, хорошая штука получилась!

  2. Kolini

    Я тоже хочу похвалить автора. Труд действительно проделан достойный. В качестве эволюции этого устройства предлагаю подумать над тем, чтобы сделать его более универсальным задействуя в качестве выходов не ноги МК, а сдвиговый регистр 74HC595. В этом случае по количеству ступеней ограничений не будет, а программно останется возможность регулировать их количество.

  3. SVN Автор записи

    Согласен, идея хорошая. Надеюсь кто ни будь это реализует в виде мода.

  4. GUBERNATOR

    Классный девайс, делал подобный проект на pic16f873a, в качестве датчиков установил HC-SR501, так же имеется датчик освещенности для отключения устройства в светлое время, имеет 11 каналов нагруженых на полевики, имеется опто развязка входных шин от датчиков.Алгоритм работы:зажигание ступеней от движения объекта, погасание в той же последовательности, все с временной задержкой примерной скорости среднего шага.Работа подсветки до тех пор пока хоть один человек находится в зоне действия датчика присутствия.Девайс сделан как опытный образец и показал свою полную работоспособность.Интересно и то, что его можно установить не только в качестве подсветки лестницы, к примеру подсветка подъезда к гаражным воротам, подсветка дорожек и т.д.

  5. mcmega

    Kolini :
    Я тоже хочу похвалить автора. Труд действительно проделан достойный. В качестве эволюции этого устройства предлагаю подумать над тем, чтобы сделать его более универсальным задействуя в качестве выходов не ноги МК, а сдвиговый регистр 74HC595. В этом случае по количеству ступеней ограничений не будет, а программно останется возможность регулировать их количество.

    Ограничение всё же есть, я уже делал на 595, но до 32 каналов работает безотказно. Позже выложу мод.

  6. GUBERNATOR

    А практически сколько в принципе необходимо каналов?Думаю не так уж и много.

  7. mcmega

    GUBERNATOR :
    А практически сколько в принципе необходимо каналов?Думаю не так уж и много.

    Оно тот так в большенстве случаев)), но можно ещё сделать подсветку не только на лестницы, но и ходовые дорожки и коридоры, где реально может понадобиться на порядок больше каналов. Я работаю сейчас над контроллером, который имеет 32 канала, с возможностью настройки целой кучи эффектов и параметров в них через ЖКИ, а так же с поддержкой 2 независимых зон контроля (это на случай 2 лестниц в доме, например с цоколя на первый этаж и с первого этажа на второй). Благо ресурсов в МК достаточно, использовать буду Mega328. Упростить всегда можно)) с помощью настроек. Кстати я отказался от регистров 595 при большом количестве каналов к тому же с димированием (управлением яркостью) очень много времени МК тратит на формирование этих каналов, в результате обновление на экране были заторможены.

  8. GUBERNATOR

    Очень интересно посмотреть твой проект.

  9. henc

    Автору огромное спасибо за интересный проект. К сожалению я совершенно не разбираюсь в программировании, каюсь. Сообщу свое видение , прошу не кидать шапками. Возможно лучше поставить после МК драйвера светодиодов типа TM1638 http://tronixstuff.com/2012/03/11/arduino-and-tm1638-led-display-modules/ резко уменьшится количество задействованных ножек МК и появляется возможность наращивать количество каналов кратно 16 по шине SPI. Датчик освещенности наверное должен быть регулируемый , т к неизвестно где его будут ставить и подстройка чувствительности наверно нужна. Есть смысл добавить еще один вход для контактов проходного выключателя, для отключения и включения подсветки лестницы вручную.
    Вот как то так.
    А свободные ножки МК использовать для подключения к примеру MT-08S2A-2FLB будет вообще круто.

  10. henc

    Спасибо, очень интересно.

  11. Maik

    Большое Вам спасибо! Очень интересное и занимательное устройство! Попытался его повторить с Arduino NANO,- что то оно не работает так, как нужно. На одну группу датчиков реагирует, а на другую нет. Потом вот что ещё… второй и предпоследний каналы вообще не работают (светодиоды не светятся). Если я правильно понял из схемы, то первый канал это — Out0(PD0) нога на Arduino RX0? Поправьте пожалуйста, если я не прав… Теперь с прошивкой. Если я опять правильно понял, то в Arduino нужно залить только НЕХ файл и ничего более… Ни какие фьюзы не выставляются, так как,- Бут Лоудер в Arduino уже есть… ведь так??? Может я не тот файл прошивки выбрал? А может быть существует какой то определённый алгоритм действий,- будьте так любезны, опишите его. Подскажите пожалуйста, что я не так делаю! Очень надеюсь и рассчитываю на помощь!!!

  12. SVN Автор записи

    Что касается Arduino – к сожалению прошивка для этого устройства не проверялась на железе, из-за отсутствия Arduino. Первый канал определили верно. Фьюзы выставлять, думаю нужно обязательно. Надеюсь GetChiper подскажит как это делается.

  13. Maik

    Спасибо большое, что откликнулись! Если действительно фьюзы нужно выставлять в Arduino, то хотелось бы узнать,- как это можно сделать?! В статье, как прошить НЕХ файл в Arduino, про фьюзы не сказано ровным счётом ни чего…

  14. SVN Автор записи

    В статье не сказано – согласен. А вот в архиве они указаны. Arduino – это ATmega328P.

  15. Maik

    Спасибо! Всё понял и нашёл… Буду ковырять дальше… О результатах обязательно отпишусь…

  16. SVN Автор записи

    В статье как прошить фьюзы указанно — вот цитата «Для правильной работы нужно установить фьюзы следующим образом Low: FF High: DA Ext: 05» это как раз для МК ATmega328

  17. GetChiper

    @Maik
    Фьюзы для ардуины трогать не нужно (иначе теряется весь смысл ее применения), поэтому нужно просто залить прошивку (специальную для ардуины) по стандартному USB шнурку. А вот по поводу работоспособности программа для ардуины сделана с расчетом на ее доводку, так как в железе не испытывалась. нужно больше отзывов о проблемах позже будем править.

  18. Maik

    Большущее Вам спасибо! Хорошо, что появились другие дела, а то сейчас на ворочал бы… А вообще,- это реально отладить для Arduino??? Буду ждать, может что-то появится…

  19. Maik

    Господа, я тут платку развёл в формате Sprint LayOut под Arduino. Кому интересно,- могу выложить…

  20. Maik

    Дошли наконец-то руки и повторил устройство на 14 каналов. В схеме использовал ATmega168. Сделал всё так, как прописано в «нотах»… Что-то не работает так, как должно быть по описанию. На 17 ноге процессора (это надо понимать,- выход первого канала) всего лишь 0,3 вольта и соответственно светодиод не работает, когда на других выходах по 4,6 вольт. Облазил всё, ошибки в монтаже нет… Потом вот ещё: реагирует только на световой датчик и первую пару датчиков, а вторая пара просто мертва. Подскажите пожалуйста, что может такое быть? Что я не так делаю? Посоветуйте что делать…???

  21. Maik

    Да, вот ещё что… Имеется файл самой прошивки ATtmega88_168_V2.hex, а что это за файл такой EE_ATtmega88_168_V2.hex, он там же в той же папке лежит…???

  22. SVN Автор записи

    Тестировал программу именно на МК ATmega168. Если МК исправный и прошит правильно, то работать должен без проблем.
    При написании библиотеки для графического ЖКИ МТ-12864, столкнулся не так давно с похожей проблемой бракованных МК. У всей партии из 10 штук (ATmega32), не работали 4 вывода. Думал ошибка в программе, а оказалось глючный МК. Обнаружил засаду только с помощью тестовой прошивки. Может у Вас тот же случай.
    Файл EE_ATtmega88_168_V2.hex, прошивать не нужно.

  23. Maik

    Благодарю Вас за отклик. Не спорю, такое встречается очень часто, может быть и мне попался дырявый процессор. Но вот что интересно, на Arduino всё происходит по тому же сценарию… Попробую поставить другой процессор, хотя они все из одной партии…

  24. comrat

    Начал собирать ..вот проблема только..ступеней у меня 17..

  25. Maik

    А Вы 17-ю ступеньку подсветите первым каналом, включите параллельно… Как Вам такой вариант…?

  26. comrat

    придётся….первая засада..не могу прошить ATmega48PA-AU, TQFP32 SP200s не видит

  27. comrat

    а можно сделать чтобы первая и последняя ступень мерцали постоянно ?..а то при спуске у меня темень и их вообще не видно а отодвинуть датчики нет возможности и нельзя ли использовать по одному датчику..вверху и внизу ?

  28. SVN Автор записи

    comrat :
    а можно сделать чтобы первая и последняя ступень мерцали постоянно ?..а то при спуске у меня темень и их вообще не видно а отодвинуть датчики нет возможности и нельзя ли использовать по одному датчику..вверху и внизу ?

    Используйте вариант 14+1… +1, это канал который загорается первым и гаснет последним. Его удобно использовать как первую и последнюю ступени параллельно.

  29. comrat

    а нельзя что бы он постоянно светился?..просто расположение лестницы таково что первый датчик можно разместить только на первой ступени..

  30. GetChiper

    Так а зачем отдельный вывод от устройства? просто их постоянно подсвечивай. Если не хочешь чтобы они светились и в светлое время суток, есть вывод «индикатор освещенности в зоне» — его задействуй в качестве сигнала для освещения этих ступеней.

  31. tatar007

    Добрый день.
    Не могу в архиве найти прогу для 14+1 каналов. Помогите пожалуйста может чота недопонимаю?
    И еше хочу использовать тиню, но в корпусе PDIP. Как я понял для 14 каналов подойдет, а на 16- не хватает ног. Так ли это. Спасибо

  32. SVN Автор записи

    tatar007 :
    Добрый день.
    Не могу в архиве найти прогу для 14+1 каналов. Помогите пожалуйста может чота недопонимаю?
    И еше хочу использовать тиню, но в корпусе PDIP. Как я понял для 14 каналов подойдет, а на 16- не хватает ног. Так ли это. Спасибо

    Прошивка 14+1 для соответствующего МК является второй версией, то есть для МК ATmega48 файл с названием — ATmega48_V2.hex
    Да, ДИП для 14+1 подойдёт.

  33. A_L

    Добрый день.
    Собрал схему по Вашей статье у меня какая-то непонятка
    с работой схемы (схема 14+1 Мега 48)
    Все работает только со стороны датчиков В1 и В2 ,а со стороны
    А1 и А2 загорается только индикатор присутствия ,но не
    подсветка лестницы ,хотя при встречном движении (сначала в1,в2 затем а1,а2 все работает корректно по описанному алгоритму)
    Не могли бы ВЫ посмотреть программу на наличие ошибки при включении
    подсветки со стороны датчиков А.
    Спасибо.

  34. SVN Автор записи

    Подключите в место датчиков кнопки. Как с кнопками будет себя вести устройство? В алгоритме ошибок нет. Алгоритм проверен мной на железе, а также подтверждено другими пользователями (видео в статье подтверждает данное утверждение).

  35. A_L

    Добрый день.
    Спасибо за ответ.
    Разобрался ,косяк с моей стороны.В общем подтверждаю схема и
    алгоритм полностью работоспособны.
    При работе схемы необходимо что-бы на входе датчика освещенности
    был высокий уровень (+5В) ,тогда все работает корректно.
    И еще небольшое пожелание ,неплохо бы осуществить индикацию
    включения датчиков (можно даже вместо индикатора освещенности)
    было бы намного удобнее при отладке.

  36. SVN Автор записи

    Посмотрел… в статье есть неточность… за лог. единицу устройство принимает сигнал от всех датчиков, равное или более 4 вольт (в статье написано 3 вольта). Но можно это значение корректировать в исходнике для своих нужд.

  37. henc

    Доброго дня.
    Многие типы датчиков выдают 3,3v максимум, может есть смысл сразу исходник откорректировать, ведь не все в коде разбираются.
    Многие ведь и не поймут разницу в лог уровнях подключая готовый датчик.
    Заранее спасибо.

  38. SVN Автор записи

    Да, наверное так и нужно сделать… по свободе заменим архив с изменёнными прошивками.

  39. SVN Автор записи

    Архив заменён… пороговое значение от датчиков теперь соответствует значению 3 вольта и более…

  40. tatar007

    Здавствуйте CVN
    Имеется просьба. Не могли бы вы упростить программу (14+1 Atmega48)до двух датчиков, назавем их А с одной стороны и В с другой, которая работала бы по следующему алгоритму:
    1.Проходим датчик–А(ON)включается эффект работы данного направления (1-14)и взводится таймер на отключение, ну скажем на 1 мин. При прохождении датчика В или при повторном пересечении А во время работы таймера, последний обновляется. По истечении времени освешение плавно выключается в направлении 1-14.
    2.Проходим датчик–В(ON)включается эффект работы в направлении 14-1 и взводится таймер на отключение. При прохождении датчика А или при повторном пересечении В таймер обновляется. По истечении времени происходит плавное выключение в направлении 14-1.
    Большое бам спасибо.

  41. SVN Автор записи

    Почему не нравится данный вариант?
    Сделаю по свободе, но без переделок в дальнейшем. Уж больно постой вариант, который реализуется просто, как забить гвоздь… без интереса.

  42. tatar007

    Во первых хочу извениться за ошибки в тексте. Пишу через Parawin латинскими буквами.
    Ваш вариант нравится. Собрал на макетке, работает. Но очень большая заморочка с датчиками, очень трудно правильно установить. Иногда датчики зоны не срабатывают и приходится их по новой проходить.
    Ну а также стараюсь жить по девизу- всё что просто, то гениально.
    Большое вам спасибо за понимание и помощь.
    С уважением Геннадий

  43. SVN Автор записи

    tatar007 :
    Здавствуйте SVN
    Имеется просьба. Не могли бы вы упростить программу (14+1 Atmega48)до двух датчиков, назавем их А с одной стороны и В с другой, которая работала бы по следующему алгоритму:
    1.Проходим датчик–А(ON)включается эффект работы данного направления (1-14)и взводится таймер на отключение, ну скажем на 1 мин. При прохождении датчика В или при повторном пересечении А во время работы таймера, последний обновляется. По истечении времени освешение плавно выключается в направлении 1-14.
    2.Проходим датчик–В(ON)включается эффект работы в направлении 14-1 и взводится таймер на отключение. При прохождении датчика А или при повторном пересечении В таймер обновляется. По истечении времени происходит плавное выключение в направлении 14-1.
    Большое бам спасибо.

    Сделал. Прошивка не проверялась… http://www.forum.getchip.net/viewtopic.php?f=9&t=301&p=8047#p8047

  44. WZV

    Можно ли отключить перемещение тёмной точки?

Добавить комментарий