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.

UPD SVN — Вариант исходника и НЕХа для платы Arduino Nano

Проверил работу ардуиновскую версию «освещения лестниц»… в принципе всё работает нормально, но вот заметил небольшой косяк… порты подключения кварца были настроены на выход… исправил и ещё раз проверил – теперь работает как нужно.В архиве исправленный исходник.

ARDUINO_NANO_Ai_Di_V2.zip - Исправленный исходник для Nano

 

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

(Visited 9 810 times, 15 visits today)

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

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

    Можно… методом исправления некоторых процедур в программе. Исходный код программы в архиве.

  2. Bleck_S

    Доброго времени суток!
    Очень заинтересовала Ваша статья!
    Но в Proteus модель не работает. В чем может быть проблема?

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

    Proteus не всегда коректно работает с таймер-счётчиками… поэтому проверять устройства лучше на отладочных платах.

  4. Volodya215

    Не ожидал такого сумашедшнго интереса к данной идеи, тем более отрадно Респект поцаны!!!!!!

  5. Gnusmas

    Доброго времени суток. Возможна ли переделка данного проекта на Mega8A ? Просто 88 тяжело достать, а Мега 8А везде есть.

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

    Gnusmas :
    Доброго времени суток. Возможна ли переделка данного проекта на Mega8A ? Просто 88 тяжело достать, а Мега 8А везде есть.

    В этом случае всё придётся перепроверять, а времени катастрофически не хватает. Жалко его тратить на банальные повторы. В интернет-магазинах этих МК завались и не дорого. Один из примеров: http://chip-nn.ru/70.php

  7. Gnusmas

    А я вот подумал, что может и не получилось бы портировать, ведь у Меги8А всего 2 внешних прерывания (INT0 и INT1), а «упрощенных» прерываний (PCINT) на всех ногах, как у Меги 48/88/168/328 у нее нет. А ведь 5 датчиков потребуют 5 ног свнешними прерываниями, или я неправ ?

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

    По датчикам проблем нет, так как они подключены к входам АЦП МК.

  9. Gnusmas

    Сумел достать Мегу48)) Есть еще пару вопросов. мИиндикатор освещенности в зоне» горит только в темное время суток ? Просто есть лестница на 18 ступеней, и чтобы не паралелить каналы, хотел бы просто первую и последнюю ступени сделать постоянной подсветкой (типа габаритных огней). А остальные 16 будут с эффектами. Но эти ступени должны гореть только в темное время суток, чтобы в светлое зря не тратить електроэнергию. Моэно ли для этих 2 «дежурных» ступеней использовать вывод «индикатор освещенности в зоне» ? И правильно ли я понял, что вывод 25 (РС2) никуда не подключаеться (остаеться незадействованым) ?

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

    Индикатор горит когда освещенность низкая. Это определяется настройкой датчика освещенности. Вывод порта РС2 — незадействован (свободный).

  11. Gnusmas

    Подскажите по разводке платы, критических ляпов нет ? https://www.dropbox.com/s/905dhxnp9c7131d/My_RunSteps.lay6?dl=0 16 каналов подключил через ULN2803, а 2 канала индикации через сдвоеную сборку полевиков IRF7103 (буду использовать эти сигналы для освщения крайних ступеней и площадок между лестничними маршами). Также развел свой упрощенний вариант датчика движения https://www.dropbox.com/s/91zup7qqe16uv4p/My_RunSteps%20-Datchik.lay6?dl=0 Подстроечный СМД-резистор в корпусе SOT-89 нашел сдесь http://www.rcscomponents.kiev.ua/product/PVZ3A472C01-Murata%20(4.7%20kOhm%20%B130%25%2C%200.1W%2C%20SMD%3A%203.6×3.1×1.85mm)%20(%EF%EE%E4%F1%F2%F0%EE%E5%F7%ED%FB%E9%20%F0%E5%E7%E8%F1%F2%EE%F0).html Обучения датчика пульту и LED-запрет устанавливаються обычними джамперами.

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

    Не могу посмотреть… я сейчас в турции… вернусь через две недели.

  13. Gnusmas

    Приятного отдыха))

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

    Спасибо!

  15. Strannix

    @Gnusmas
    пробовал собирать по той разводке что выкладывал?? получилось работает???

  16. Gnusmas

    Да собрал уже 2 устройства, все работает как часы. Только я использую каналы индикации как каналы освещения (индикация освещения — крайние ступеньки, индикатор присутствия в зоне — площадка между этажами, потому что у меня больше 16 ступенек, и я так выкрутился, получилось классно), поэтому они подключены через полевики. Если вам надо просто 16 ступенек, то можно упростить схему и выкунуть сборку полевиков IRF7103 поставить просто светодиоды с резисторами как на оригинальной схеме.

  17. Gnusmas

    Кстатии там можно успользовать не только IRF7103, а любую сдвоеную N-канальную сборку, эта просто оказалась самой дешевой.

  18. Gnusmas

    Скачайте еще раз обновленную разводку, я там убрал неиспользуемый вывод (25 вывод, выводил просто так, на всякий пожарный) и подписал разъем для программирования. https://www.dropbox.com/s/905dhxnp9c7131d/My_RunSteps.lay6?dl=0

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

    Я вернулся! А тем временем, всё уже работает и проверять нечего! 🙂

  20. Gnusmas

    Да, но у меня появилась 1 просьба. Я в Алгоритм Билдере вообще полный ноль. Глянул в исходник и нашел только как менять выводы для индикации (16 каналов с эффектами), но они и так размещены по периметру корпуса и в этом нет необходимости. А вот датчик движения В1 (19 вывод) находиться рядом с датчиком освещения (22 вывод). Можно ли его переместить на 25 вывод ? Это бы еще упростило разводку платы и + все 4 датчика движения находились бы на 1 колодке (визуально было бы логичнее). Если это возможно, то прошу кинуть скриншот, где это можно поменять.

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

    Gnusmas :
    Да, но у меня появилась 1 просьба. Я в Алгоритм Билдере вообще полный ноль. Глянул в исходник и нашел только как менять выводы для индикации (16 каналов с эффектами), но они и так размещены по периметру корпуса и в этом нет необходимости. А вот датчик движения В1 (19 вывод) находиться рядом с датчиком освещения (22 вывод). Можно ли его переместить на 25 вывод ? Это бы еще упростило разводку платы и + все 4 датчика движения находились бы на 1 колодке (визуально было бы логичнее). Если это возможно, то прошу кинуть скриншот, где это можно поменять.

    То есть датчик В1 ( вывод 19) перекинуть на вывод 25? Если это так, то можно. Только одним скрином не обойтись. 🙂 Так как необходимо изменить настройщик АЦП, а так же изменить некоторые процедуры.

  22. Gnusmas

    Да, именно это. Не могли бы вы тогда это сделать и выложить изминенные исходники (именно исходники, а не готовые прошивки), потому что мало ли какой контроллер кто-то захочет использовать, а так выставыл свой, компильнуль и есть прошивка.

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

    Хорошо, по свободе сделаю и кину на форуме.

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

    Gnusmas :
    Да, именно это. Не могли бы вы тогда это сделать и выложить изминенные исходники (именно исходники, а не готовые прошивки), потому что мало ли какой контроллер кто-то захочет использовать, а так выставыл свой, компильнуль и есть прошивка.

    Сделал. Проверяй и отпиши… http://www.forum.getchip.net/viewtopic.php?f=9&t=301&p=8378#p8378

  25. Strannix

    @henc
    День добрый не могли бы вы скинуть ПО для данного програматора, ато заказал чуть раньше лежит без дела. a.arseniev@osnova-telecom.ru мой мейл

  26. Strannix

    @Gnusmas
    прошу прощения, а какой версией прошивки вы шили мк для вашей разводки платы??105-Stairs_ATtmega88P_out16 или 105-Stairs_ATtmega88P_V2 ато я запутался какая вторая

  27. Gnusmas

    Я сделал 2 разводки:
    1 — изначальную, под прошивку из статьи (105-Stairs_ATtmega88P_V2) https://www.dropbox.com/s/vcgxi8tdu9q1sxq/My_RunSteps.lay6?dl=0
    и 2 — под прошивку, которую SVN любезно подредактировал по моей просьбе. Там немного уппростилась плата (-1 резистор-перемычка) ну и размеры стали чуть меньше. Эту плату я выложу, только в случае, если SVN лично даст добро, потому что прошивку под нее он удалил (из-за моих не совсем адекватных действий).
    Советую не париться, скачать разводку по ссылке из пункта 1, залить стандартную прошивку и радоваться.

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

    Gnusmas :
    Я сделал 2 разводки:
    Эту плату я выложу, только в случае, если SVN лично даст добро, потому что прошивку под нее он удалил (из-за моих не совсем адекватных действий).

    Помещайте свои разводки на форуме и я верну прошивку…

  29. Strannix

    @Gnusmas
    большое спасибо за развернутый ответ!

  30. Егор-Левченко

    Круто. Функционал то что нужно. Правда мне нужно на 19 ступеней. Придется самому пробовать писать код, но так как у вас у меня врятли получится.

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

    В архиве исходники… так что переделать при желании не так уж и сложно…

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

    Algorithm Builder

  33. Егор-Левченко

    Спасибо. Буду пробовать разобраться. Не подскажите какой лучше контроллер применить? ATmega8515 подойдет?

  34. Егор-Левченко

    Охохо))) Открыл, посмотрел и закрыл(((. Я с языком СИ еще толком не разобрался, а здесь вообще темный лес для меня))) . Пока разберусь, состарюсь)). Мне будет проще мою лестницу переделать с 19 ступеней на 16)))
    Но все равно спасибо за проект! Уважаю таких людей которые способны сотворить подобное))

  35. Алексей111171

    Уважаемый SVN! прошу о помощи 🙂
    У меня неадекватно работает данное устройство 🙁 использую ардуину нано на 328 контроллере, прошил прошивкой 105—Stairs_Ar……328_V2.hex, собрано на макетке, вместо датчиков кнопки. Теперь попытаюсь понятно обрисовать проблему — при срабатывании датчиков В1,В2 — все штатно (зажглось — погасло если только В1, зажлось, побежало, погасло В1В2А2А1). А вот со стороны А — проблема 🙁 А1А2 — загорается индикатор «зона» а ступени не горят:( если в таком состоянии нажать В2В1 — ступени загораются все(плавно) и гаснут в нужную сторону а если В1В2 то ступени загораются и побежала встречная точка). Если набрать В1А1В2А2 — все как положено, разгорается с двух сторон и точка бежит навстречу к центру, ну и погаснет в сторону последнего выходящего, а если набрать А1В1А2В2, то датчик А игнорируется и отрабатывает как В1В2.
    Как то так 🙁 — Вопрос — Вышеуказанная прошивка проверялась, с ней все нормально??? или у меня проблема с ардуиной :((
    Заглядывал в исходник 🙂 — ну про барана и ворота все знают 🙂 🙁
    Спасибо

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

    Прошивка для ардуины не проверялась, так как не было ардуины. Возможно там есть подводные камни… это нужно смотреть на стенде. На данный момент плата есть, но нет времени…

  37. Алексей111171

    Добрый день! нашел свою ошибку, я не подал сигнал от датчика освещенности 🙂 видать давненько форум читал, помню что можно не ставить, а как «не ставить» забыл !! :)) при включении датчика освещенности (эмуляции) все заработало штатно!! (да и ладно, 🙂 мне он все равно не нужен, для крайне темного угла стараюсь 🙂 ). Но тогда другой вопрос, при просмотре исходника я увидел что проверка датчика освещенности идет после срабатывания датчиков движения, алгоритмы датчиков А и В внешне одинаковы, проверки заложены, ПОЧЕМУ тогда датчики В срабатывают?? и при отключенном датчике освещенности 🙂 ( ну это я так, для сужения зоны возможного поиска)
    У меня другой вопрос. По случаю достались PIR датчики SR505, Возможно ли привязать их вместо датчиков движения, (просто так поставить — не работает 🙁 больно большие у них задержки в замкнутом состоянии (15 сек выдачи лог 1)
    Спасибо

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

    Входа датчиков движения и освещённости должны быть подтянуты через резисторы (10…100 кОм) к общей шине. Тогда работать будет как положено… единственно что нужно поменять в исходнике, так это первую строку настройки портов… в место $FF -> DDRB необходимо записать #b00111111 -> DDRB.

  39. Алексей111171

    добрый день! Спасибо за ответы, датчики подтянуты 🙂 с исходником попробую справиться 🙂 кстати, я вроде умудрился искорявить PIR датчик в нужную сторону 🙂 на стенде вроде работают!! 🙂

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

    Исправленный исходник для ардуины добавлен в конце статьи.

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