Например TDA7294

РадиоКот > Схемы > Цифровые устройства > Автоматика

Контроллер освещения лестниц StairLight.

Автор: Engineer_Keen
Опубликовано 29.08.2013.
Создано при помощи КотоРед.

Здравствуйте многоуважаемые коты и их не менее уважаемые хозяева! Сегодня речь пойдет о том, как сделать ваш дом красивее, комфортнее и даже немного умнее. В данной статье я расскажу про устройство для управления подсветкой лестницы, хотя его с таким же успехом можно использовать и для длинных коридоров, а может и для чего-то другого, что вам подскажет фантазия.

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

Итак, вот основные функции и характеристики устройства:

  • От 4 до 16 каналов управления светодиодными лентами (или любыми другими источниками света с напряжением питания до 12В)
  • Два входа для подключения датчиков движения или обычных кнопок
  • Дежурный режим работы с плавным переливом света между двумя крайними каналами
  • Регулируемые скорости зажигания, гашения, перелива в дежурном режиме (от долей секунды до нескольких секунд), регулируемая задержка выключения (от секунд до минуты)
  • Датчик освещенности, с регулируемым порогом включения
  • Возможность подключения к сети RS232/RS485 для настройки и управления
  • Настройка при программировании, при подключении компьютера или энкодером с кнопкой.
  • Работа в режиме АЦП (каналы работают по принципу светящейся шкалы, в зависимости от освещенности)

Описание работы

Работает оно так: пока светло, ничего не горит (режим ожидания), как только освещенность упадет до нужного уровня, включается дежурный режим - свет медленно переливается между двумя крайними ступенями сверху и снизу, таким образом вы никогда в темноте не промахнетесь мимо первых ступеней, ну и немного видна общая обстановка вблизи лестницы. Но стоит подойти к первой ступеньке как свет начинает распространяться на все ступени до противоположного конца лестницы. Через некоторое время, если не двигаться в зоне действия датчиков, лестница начнет гаснуть в том же направлении, в котором зажигалась. Гаснут все ступени, кроме первой и последней, опять же, чтобы не было периодов, когда совсем темно. После этого лестница возвращается в дежурный режим.

Теперь рассмотрим схему устройства.

Схемотехника

Сердцем схемы является микроконтроллер DD1, самый народный из младших AVRок - tiny2313. Фьюзы заводские, кроме BOD и источника тактирования - там нужно выбрать внешний кварц на 8 МГц, если связь по RS485 не используется, то он не нужен и эту настройку можно оставить заводской. Делитель на 8 убран программно. BOD нужно включить на 4.3В (BODLEVEL=100, согласно документации Atmel), а то настройки могут попортиться.

Светодиодами контроллер управляет через регистры 74HC595 (DD2, DD3), которые в свою очередь управляют ключами - n-канальными полевыми транзисторами типа IRLML2502 (VT1-VT16). Такое включение позволяет задать 256 уровней яркости каждого из 16 каналов с частотой более 120Гц. Ключами коммутируется земля, следовательно общий провод это +12В.

Для настройки используется обычный энкодер-крутилка с кнопкой, обозначенный как SW1.

Входы датчиков движения защищены от помех обычным для таких устройств способом - RC-цепочками на элементах R1-R4 и C6,C7, а также стабилитронами VD1 и VD2 (линии могут быть до нескольких метров, в зависимости от места, где вы установите устройство и датчики).

Для определения освещенности использован встроенный в контроллер компаратор. Порог срабатывания задается либо настройками программы, либо подстроечным резистором VR1. В первом случае программа выдает на выход PB3 ШИМ сигнал с линейно изменяющейся скважностью, который после интегрирующей RC-цепочки попадает на вход компаратора. Так как на втором входе компаратора стоит светочувствительный элемент (в данном случае фототранзистор), срабатывание компаратора означает что порог пройден и значение ШИМ сигнала соответствует текущей освещенности. Для исключения мерцания на пороге освещенности, в алгоритм такого "АЦП" программно введен небольшой гистерезис. Элементы VR1 и R29 в данном случае устанавливать не нужно.

В случае использования подстроечного резистора, напряжение с его среднего вывода подается напрямую на компаратор и сравнивается с напряжением в цепи фоточувствительного элемента (в этом случае не нужно ставить элементы C10 и R12, программа при запуске сама определяет как сделано управление по наличию именно этого резистора)

Для общения с компьютером или другими частями "умного дома", если таковые имеются используется микросхема DD4 типа MAX487, подключенная к UART-порту контроллера. Можно использовать и другие варианты (USB-UART МК, (USB)-COM-MAX232-UART МК), с соответствующими изменениями в схемной части (программе все равно, в случае RS232 даже не нужно управлять передачей).

Питание цифровой части осуществляется от обычного стабилизатора на 5В (в данном случае LM1117-5.0). Светодиод (VD3) в цепи +5В просто сигнализирует, что питание подается на схему.

Второй светодиод VD4 несет несколько функций, во-первых мигает несколько раз при включении или перезагрузке, во-вторых, изменяет свое состояние при переключении режимов во время ручной настройки энкодером, и в-третьих подмигивает при обмене данными по интерфейсу RS485.

Вот, вроде бы все, касательно схемы, перейдем к сборке.

Сборка

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

Большинство контактов обозначено на самой плате. Светодиоды подключаются к парам контактов, обозначенных как 1,2,3...E,F,G, причем внешний ряд контактов это общий +12В. Питание подается на пару рядом расположенных контактов, с обозначением "+" (слева +питания, справа земля). S1 и S2 - сюда подключаются датчики движения, средний контакт выход датчика, нижний земля, верхний - питание датчика. К группе контактов ENC подключается энкодер, верхний и нижний контакты каналы A и B, второй сверху - кнопка, остальные - земля. LUX - фототранзистор, эмиттером на землю (верхний контакт). Остается интерфейс RS485, его линии A-B так и обозначены внизу по середине платы. В прочем, в архиве есть файлы Proteus, так что если он у вас есть, то разобраться что куда подключается будет еще проще.

Почти все резисторы типоразмера 0805, кроме R3,R9 (1206) и R13,R21 (выводные, 0.125Вт) - для удобства разводки. Керамические конденсаторы C3, C4, C9 и C13 - 1206, остальные 0805. Все микросхемы, кроме MAX487 в SOIC корпусе. Полевые транзисторы в корпусе SOT-23. Для упрощения изготовления платы, я старался сделать размеры дорожек и расстояния между ними как можно больше. Самые тонкие дорожки - 0.5мм, не считая локальных утоньшений под элементами 0805, а так же некоторых необязательных элементов печати  :), поэтому ее вполне под силу изготовить в домашних условиях. Первая версия платы, которая и служила макетом для разрабатываемого устройства, была сделана по более жестким нормам и была примерно в 1.5 раза меньше по площади. Она конечно вышла не особо красивая (старый тонер, древний утюг, не очень чистая фотобумага и не совсем прямые руки), но основную свою функцию выполнила на все 100%.

Вот так она выглядела:

Плата чудом почти совпала по размерам с подходящим корпусом, пришлось только слегка подпилить торцы.

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

Так же не стоит ставить его и в помещении, освещаемом люминесцентными лампами (с лампами накаливания не проверял), т.к. АЦП успевает реагировать на частоту мерцания лампы), возможно этот недостаток будет устранен в следующей прошивке.

Датчики движения. Изначально была задумка использовать пары ИК-светодиодов и TSOP-приемников, но эксперименты доказали, что от них сложно добиться нормального срабатывания на больших (более 0.5 метра) расстояниях при работе "на отражение" и это расстояние, что логично, сильно зависит от цвета отражающей поверхности. Работа "на прерывание" луча конечно несомненно лучше, но предусматривает разнесение датчика и источника. Все это может и устроит кого-то в определенных условиях, но мне это не подошло, поэтому я взял старый добрый детектор движения с PIR-сенсором, вот такой:

Это детектор от лампы-галогенки, поэтому его нужно немного "допилить": выкинуть 220В часть (трансформатор, диодный мост, реле), вместо реле подключить вход контроллера, выкинуть регулировку "длительности горения" и "освещенности" (они уже и так есть в контроллере). Лучше всего использовать датчики от охранных систем, они уже идут с питанием 12В и без лишних "крутилок". Регулировку на освещенность нужно ставить на максимум (чтобы срабатывал всегда), на длительность - минимум (контроллер все равно сработает по фронту), чувствительность - на максимум (если нужно, можно отрегулировать зону срабатывания просто закрыв часть линзы хоть изолентой).

 

На плате предусмотрен переключатель питания датчиков (перемычка или джампер), им можно выбирать каким напряжением будут питаться датчики 5В или тем которое на входе (в данном случае 12В).

Можно вообще сэкономить в пользу обычных кнопок для звонка. Тогда не нужно тянуть линию питания датчика, а кнопки включить между входом и землей. Если есть некоторый навык в строительстве и механике, то можно сделать кнопкой всю ступеньку, тогда и датчик не нужен, и руки свободны!

Для подключения источников света я использовал разъем DB37, один из рядов отдал для общего провода, а второй для каналов.

При подборе проводов для источников света не забывайте, что на них не должно упасть много напряжения, при питании в 12В это важно. Если ток не большой (например, светодиодная полоска средней яркости длинной полметра, это примерно 150мА), и расстояние от контроллера до самой дальней ступеньки не более 3м, то хватит проводов из витой пары. Витую пару вообще удобно использовать, в нее помещается 4 канала, а 4 витые пары можно уместить в корпус разъема DB37. В этом же разъеме у меня распаяны линии к датчикам движения. Питание, фототранзистор и линии RS485 подключаются через разъем DB9.

Источник питания подбирается исходя из источников света, например для лестницы из 16 ступеней, я использовал полоски длиной по 25см (этого вполне достаточно осветить метровую ступень), в таком отрезке 5 групп светодиодов, номинальный ток группы - 15мА.

Т.е. одна ступенька на максимальной яркости потребляет 15*5=75 мА, 16 ступеней = 1200мА. Учитывая, что контроллер и датчики тоже немного потребляют (не более 100мА), нужно брать с запасом. Ближайший из доступных блоков питания был импульсный на 2А.

Все это безобразие поместилось в корпус от старого компьютерного БП (слева табличка, чтобы не забыть где в витой паре какой провод), и было закреплено под лестницей, недалеко от окна, в которое я выставил фототранзистор:

После отладки, это все конечно нужно привести в более приличный вид...

Настройка

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

Адрес EEPROM Диапазон значений Значение по умолчанию Комментарий
0* не доступно  0xA5 Идентификатор устройства
1  0x04-0x10  0x10 Количество каналов (0х10 - 16 каналов)
2  0x00-0xFF  0x04 Интервал дежурного режима (х40 мс)
3  0x00-0xFF  0x40 Скорость включения канала (х40 мс)
4  0x00-0xFF  0x10 Скорость выключения канала (х40 мс)
5  0x00-0xFF  0x20 Задержка выключения (х0.25с)
6  0x00-0xFF  0xC8 Освещенность (0х00 - ярко, 0хFF - темно)
7  0x00-0xFF  0x01 Сетевой адрес
8  0x00-0xFF  0x67 Скорость UART (см. раздел UART в документации на Tiny2313)
9* изменение значения ни на что не влияет  0x00 Сброс на значения по умолчанию
10* отображается текущая освещенность  0x00 Режим АЦП, световой столб
11* не доступно  0x81 Идентификатор устройства

* Адреса 0 и 11 используются контроллером для определения первого запуска (и конфигуратором для идентификации контроллера), они не доступны для изменения (см. переключение режимов работы ниже). Значение по адресу 9 не используется, сброс происходит при длинном нажатии на кнопку. Адрес 10 тоже не используется.

После принятия настроек контроллер сбрасывается. И переходит в зависимости от яркости в дежурный режим или в режим ожидания.

Процесс настройки может быть выполнен следующими способами:

  • Энкодером в процессе работы устройства.
  • Создание файла .EEP при помощи программы-конфигуратора, и запись его в контроллер программатором или из самого конфигуратора, по интерфейсу RS485RS232
  • Правка таблицы EEPROM в исходном файле прошивки с последующей компиляцией и запись полученного файла .EEP в контроллер программатором.

Рассмотрим подробнее первый способ.

Если в любом режиме работы коротко нажать кнопку энкодера, то устройство будет переключать режим работы, по следующей схеме (см. таблицу настроек):

Режим ожидания/дежурный->установка количества каналов->установка интервала дежурного режима->...->сброс на значения по умолчанию->режим АЦП->режим ожидания/дежурный.

К сожалению, для настройки этим способом необходимо иметь как минимум один светодиод на каждом канале, т.к. именно так отображается текущее значение параметра. Первая половина каналов отображает адрес ячейки EEPROM (5-й бит всегда "1"), вторая значение. Знание шестнадцатеричной системы счисления тут не помешает. Например установка количества каналов будет выглядеть так ("0" - канал не горит, "1" - горит):

00011000 00010000

что это значит:

0001 - это адрес (1-й адрес, это количество каналов),

1000 - это просто означает, что вы находитесь в режиме настройки,

00010000 - это число 16 в десятичной или же 0х10 в шестнадцатеричной системе счисления, т.е. наши 16 каналов.

При этом, если покрутить ручку энкодера, то число 00010000 изменится в соответствующую сторону (но в пределах 4-16, если идет настройка количества ступеней, в другом случае можно выставить любое значение).

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

В режиме "Сброс на значения по умолчанию" ничего не регулируется, а длительное нажатие на ручку приведет все настройки к значениям по умолчанию и перезагрузит контроллер.

Такое отображение справедливо для адресов 1-9, при переключении на 10-й адрес, включается режим АЦП.

Режим АЦП - световой столб, не просто спецэффект, он позволяет оценить текущую освещенность, чтобы знать, какое примерно значение нужно ввести в настройку освещенности (6-й адрес, старшие 4 бита). Например, вы дождались времени суток, когда нужно чтобы лестница начала работать в дежурном режиме, тогда вы переключаете ее в режим АЦП (это можно сделать мгновенно, не перебирая все режимы, если при включении устройства зажать ручку энкодера) и количество зажженных ступеней покажет примерное значение. Например 10 горящих ступеней означает, что нужное значение (назовем его N) будет 1010ХХХХ, где 1010 - это 10 в двоичной системе счисления (0хА в шестнадцатеричной), а ХХХХ - значение, которое можно подобрать опытным путем. Конечно для этой настройки можно использовать измерительный инструмент - вольтметр, просто поставив его параллельно фототранзистору. Тогда значение напряжения при текущей освещенности можно легко перевести в значение порога освещенности по формуле:

N=256 * (Uф / 5В),

где Uф - напряжение на фототранзисторе в вольтах, а N - искомое значение порога.

Второй способ гораздо проще, но требует использование компьютера, а в случае загрузки параметров в контроллер прямо из программы-конфигуратора, еще и подключения по интерфейсу RS485 или RS232.

Программа-конфигуратор имеет простой интерфейс и минимум настроек:

 

Ряд черных кругов сверху не что иное, как эмуляция самих каналов, они стараются вести себя так, как при текущих настройках вели бы себя светодиодные ленты на вашей лестнице. Кнопки RUN симулируют срабатывание датчиков движения.

Ниже идут те самые настройки, которые описаны в таблице:

  • количество ступеней (количество кругов будет изменяться соответствующим образом)
  • порог освещенности (число в окне рядом и есть то самое число N)
  • скорости включения и выключения ступеней, задержка выключения, скорость перелива в дежурном режиме
  • ну и то, что касается связи - адрес и скорость

Все что ниже доступно только после установки соединения (значок с красным крестиком на проводе между компьютером и лестницей) и носит чисто диагностический характер:

  • освещенность - переводит контроллер в режим АЦП и отображает текущую освещенность (в процентах)
  • датчики - служит для проверки датчиков движения. Флаг сбрасывается каждый раз после опроса, а так как опрос идет постоянно, то его можно не засечь. Это сделано для возможности использования контроллера в качестве компонента охранной системы (как-никак 2 лишних датчика движения). Чтобы точно засечь срабатывание датчика, нужно сначала помаячить перед ним, а уже потом включить опрос датчика, и если он исправен, то соответствующая галочка моргнет.
  • РУ - ручное управление, можно включать и выключать "ступеньки", щелкая прямо по кружкам в верхнем ряду.

Как подключить?

Первым делом, понятно надо подключить контроллер к компьютеру, далее в меню Options выбираем COM Settings и там выставляем нужный COM порт (скорость в текущей версии одна - 9600). Если компьютеру удастся соединиться, то окно выбора порта исчезнет, а со значка соединения, исчезнет крест:

Теперь можно управлять контроллером, а так же считывать и записывать в него настройки! В том же меню есть пункт connect, если у контроллера отключалось питание во время работы конфигуратора, а так же сброс контроллера, чтобы применить некоторые настройки.

Пара команд open-save работает с файлами .eep, на случай, если настройки нужно загрузить в контроллер программатором, по структуре это тот же самый hex, но предназначенный для записи EEPROM атмелевских контроллеров.

Для прямой записи или чтения настроек есть пара команд read-write, которые становятся доступны только после установки соединения.

Пункт Exit, думаю в описании не нуждается.

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

Что касается третьего способа, то он доступен только тем, у кого есть исходный код и кто имеет опыт работы с AVR Studio, и описывать его здесь, думаю, не имеет смысла.

Кратко опишу протокол работы по интерфейсу RS485. Формат команды имеет следующий вид:

_ALFxxxC

_ - просто символ "_", означает начало команды,

А - байт адреса, естественно должен совпадать с адресом контроллера,

L - общая длина команды (1 байт),

F - код функции (1 байт),

хххх - некоторое количество (а может и ни одного) данных, в зависимости от функции,

С - контрольная сумма, рассчитывается как XOR (исключающее ИЛИ) всех байтов команды.

Например для чтения флагов контроллера с адресом 1 нужно подать следующую последовательность символов (печатные символы в кавычках, остальные - кодами):

"_" 01 05 01

На что ответом будет что-то вроде:

"#" 01 08 01 06 00 00 2D

Где "#" - признак начала ответной посылки, а 06 00 00 - те самые данные, конкретно  2-й и 3-й биты первого байта - означают, что сработали оба датчика движения.

Более подробное описание протокола получится очень большим и здесь я его приводить не буду. Если что, всегда можно обсудить устройство в целом и протокол в частности на форуме.

Вот так оно работает у меня на даче:

Ну вот вроде бы и все, успехов в сборке!

Дополнение: как показала практика, интерфейс RS485 не востребован, зато нужна регулировка яркости, эти и кое-какие другие изменения включены в новую версию прошивки, подробности в соответствующей теме форума (ссылка на конкретный пост - http://radiokot.ru/forum/viewtopic.php?f=25&t=96071&start=116).


Файлы:
Прошивка и файлы симуляции Proteus
Плата


Все вопросы в Форум.


ID: 1746

Как вам эта статья?

 Нравится
 Так себе
 Не нравится

Заработало ли это устройство у вас?

 Заработало сразу
 Заработало после плясок с бубном
 Не заработало совсем

13 1
4 1
Подробно