Найти в Дзене
Паяльник

Двухсторонняя светодиодная матрица 8x16 с датчиками движения

Первоначально устройство разрабатывалось с целью имитации горения свечи. Задача оказалась не простой. Сразу оговорюсь, программу эффекта горения свечи выкладывать не буду, но исходник динамической работы с матрицей предоставлю. Если кто-то захочет создать эффект горящей свечи, ему будет очень интересно и увлекательно по программировать! Уверен, что Ваша свеча будет гореть более реалистично, чем моя! Матрица получилась достаточно быстрая за счет применения микроконтроллера STM32F103 и сдвиговых регистров 74HC595. Управлять получится как отдельными светодиодами, так и одновременным обновлением всего поля матрицы. Меняя светодиодные картинки на матрице можно получить множество интересных эффектов. Конструкция состоит из относительно недорогих комплектующих. Самая дорогой элемент, это сама печатная плата. Изготовление печатной платы я заказывал у профессионалов. Можно было конечно применить микросхемы типа IS31FL3728 или MAX7219, но одна дорогая, а другая очень медленная. Датчики движения

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

Матрица получилась достаточно быстрая за счет применения микроконтроллера STM32F103 и сдвиговых регистров 74HC595. Управлять получится как отдельными светодиодами, так и одновременным обновлением всего поля матрицы. Меняя светодиодные картинки на матрице можно получить множество интересных эффектов.

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

Можно было конечно применить микросхемы типа IS31FL3728 или MAX7219, но одна дорогая, а другая очень медленная.

Датчики движения – не проблема! Покупаем недорогой ИК датчик движения с рассеивателем (линзой Френеля) - модуль HC-SR501 (нужно два) и демонтируем детали с переносом на печатную плату. В импульсный стабилизатор напряжения пошли детали с модуля GW1584. Был под рукой линейный стабилизатор LM317G – поставил его. Добавил три сдвиговых регистра, 24 транзистора и 256 светодиодов желтого цвета, плюс микроконтроллер.

Микросхемы DD1-DD3 74HC595 – 8-ми разрядные сдвиговые регистры. Кроме как сдвигать последовательно поступающие импульсы на входы линии данных DS по синхроимпульсам на CHCP, сохраняя их во внутренних регистрах, они могут выставлять сохраненные данные на выходы Q0-Q7 по синхроимпульсам на входе CTCP. Регистры выталкивают сдвигаемые данные с вывода Q7S на вход следующей микросхемы, тем самым организуется цепочка последовательно соединенных регистров. Эти свойства использует программа микроконтроллера. Микросхема DD3 и транзисторы VT1-VT7 отвечают за столбцы матрицы светодиодов, а DD1 и DD2 – за строки. Например, при открытии транзисторов VT1 и VT9, зажигаются светодиоды в правом верхнем углу матрицы. Один на фронтальной панели, а другой – на противоположной тыльной стороне, под первым.

Массив «line_vert[8]» в программе отвечает за столбцы. Транзисторы VT1-VT7 открываются низким логическим уровнем. Последовательно перебирая элементы массива, организуем опрос столбцов.

uint8_t line_vert [8] = {0b01111111,0b10111111,0b11011111,0b11101111,0b11110111,0b11111011,0b11111101,0b11111110};

У меня не получилось создать такой бинарный массив. Компилятор, к сожалению, его не воспринял. Зато заработал аналогичный 16-тиричный вариант:

uint8_t line_vert[8] = {0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};

Массив «data[1][16]» организует управление светодиодами по 16 строкам. Поскольку транзисторы VT9-VT24 открываются высоким логическим уровнем светодиоды матрицы в местах, где прописана «1», будут светиться.

const uint8_t data[1][16] =

{  {

0x01,// 0b00000001

0x03,// 0b00000011

0x07,// 0b00000111

0x0f,//  0b00001111

0x11,// 0b00010001

0x21,// 0b00100001

0x41,//0b01000001

0xff,//  0b11111111

0xff,// 0b11111111

0x41,// 0b01000001

0x21,// 0b00100001

0x11,// 0b00010001

0x0f,//  0b00001111

0x07,// 0b00000111

0x03,// 0b00000011

0x01 // 0b00000001

},

};

Получили «стрелочку влево».


Рисунок 2. Тестовая прошивка
Рисунок 2. Тестовая прошивка

В тестовой программе организован простой сдвиг «стрелочки» влево.

В перспективе динамика организуется сменой матриц «data[x][16]», где «х» – количество картинок. Регулируя скорость вывода данных, получаем динамичную картинку из светодиодов.

Микросхемы D5, D6 (BISS0001) – специализированные для работы с инфракрасными датчиками движения. При подаче питания на выходах 2 – несколько секунд держат высокий логический уровень, затем переходят в режим реагирования на движение «тепловых» объектов. Дальность срабатывания до 2-х метров с рассеивателем. При правильной сборке настройки не требуют.

Подбором резистора R31 добиваемся значения напряжения питания контроллера около 3,3В. Если в схеме применить линейный стабилизатор   LM1117-3.3 в корпусе SOT-223, то резистор R31 необходимо убрать, а вместо резистора R30 установить перемычку.

Настойка схемы заключается в подборе резистора R27 в преобразователе напряжения на микросхеме DD7. При напряжении 5В часть светодиодов в матрице не штатно высвечивается. Уменьшая напряжение питания матрицы, добиваемся соотношения «яркость-качество» работы светодиодов в матрице. Тестовая программа конечно уже должна быть в микроконтроллере.  Кроме того, увеличить яркость можно уменьшением сопротивления (до 30 Ом) резисторов R57-R72.

Программа управления светодиодной матрицей написана в среде «Keil_v5.17».

Особых комментариев не требует. В ней есть функции (перечень без параметров):

  • digitalWriteFast – функция устанавливает логические уровни на выводах 39,40,41 контроллера в зависимости от параметров (номер выхода, логический уровень);
  • shiftOut_8 – функция организации опроса столбцов;
  • shiftOut_16 -  функция организации опроса строк;
  • codstolb – функция чтения столбцов данных из массива данных;
  • stroi – функция построения столбца снизу вверх с заданным номером (аппаратная);
  • stroi_border – функция (для наглядности) построения столбца снизу вверх с заданным номером;
  • MATR – функция засветки всего светодиодного поля в зависимости от данных в массиве (первый параметр – номер массива данных) с возможностью сдвига влево (второй параметр – количество разрядов на сдвиг изображения). В теле основной функции main организован опрос состояния выходов датчиков движения и задержки для оптимальной визуализации эффектов. Программа тестовая. Выводит стилизованный треугольник из массива «data» и сдвигает его в цикле влево.

Программатор – ST-LINK V2 подключается к разъему Х2.


Рисунок 3. Программатор ST-LINK V2
Рисунок 3. Программатор ST-LINK V2

Используемые радиоэлементы в схеме

  • DD1-DD3 - SN74HC595MT [TSSOP-16], 8-битный сдвиговый регистр с двойной буферизацией;
  • DD4 - STM32F103CBT6 [LQFP48] или любой STM32F103x6, STM32F103x8, STM32F103xB в корпусе LQFP48 (7 х 7 мм);
  • DD5, DD6 - BISS0001 [SOP-16] PIR-контроллер;
  • DD7 - MP1584EN [SOIC8E] ШИМ-конвертер (Vin = 7…28В, I out_max = 4,7A);
  • DD8 - LM317G [SOT-223] линейный стабилизатор напряжения с регулировкой (можно заменить на стабилизатор с выходным напряжением 3,3В в корпусе SOT-223 например LM1117-3.3 (с доработкой см. выше));
  • IC1, IC2 - RE200B – пироэлектрический инфракрасный датчик (входит в комплект ИК модуля HC-SR501);
  • VT1 – VT8 – Si2301BDS [SOT-23] транзистор полевой P-канальный (G-S) MOSFET;
  • VT9 – VT24 - BC817-40 [SOT-23] транзистор NPN (или BC817, BC817-16, BC817-25);
  • VD1 - SS34 диод Шоттки SMD;
  • LED1 – LED256 – [SMD3216] TO-3216BC-MYDF светодиоды SMD 247мКд, 120 градусов;
  • R33-R72 - резисторы SMD0804, остальные SMD0603;
  • C1, C4, C9, C18, C21, C26, C28, C33, C36 – конденсаторы танталовые «TANTAL-B»; Остальные конденсаторы SMD0804;
  • Z1 – 8 МГц - кварцевый резонатор CSTCC8M00G53A-R0 MUR.

Печатная плата выполнена в среде P-CAD 2006.  Размер 475х47мм. Заказывается на текстолите толщиной 2мм.

На печатной плате есть перемычки P1, P2, P3. P1, P2 – распаиваются согласно маркировке на печатной плате (9DD3 c 14DD1, 9DD1 c 14DD2). P3 – не распаивается. Перемычки отвечают за последовательность включения микросхем регистров сдвига.

Источник питания – сетевой адаптер ~220В->=12В, 1,5А. Можно поставить два последовательно включенных Li-Pol аккумулятора (например 18650) . При полной засветке матрица потребляет около 1А.

Один из возможных вариантов свечи представлен на видео.

Автор убрал это видео из открытого доступа

Алгоритм работы реализованный мной

При приближении к свече на 1,5-2 метра, она зажигается имитируя колебания как от порыва ветра, если движения в течении 5 секунд нет, переходит в режим «спокойного горения». При обнаружении движения опять начинает колебаться. При отсутствии движения в течении 2-х минут – свеча гаснет.

Прикрепленные файлы:

Автор: Paul_Z