Pull to refresh

Самодельный светодиодный индикатор в slim факторе

Reading time 4 min
Views 18K

Зачем он нужен


Недавно я писал статью про самодельный bluetooth велокомпьютер. Было оживлённое обсуждение. Одним из предложений по модернизации, была идея добавить индикацию или жк экран. Идея мне понравилась. И я решил подумать как её воплотить в жизнь.


Так как велокомпьютеры уже были сделаны, корпус был практически весь занят, то вариант с жк экраном отпадал. Нужен был размер 40х30мм, с учетом всех шлейфов и проводов, и по толщине не больше 2-3мм. Также осталось немного свободных выводов. Различные светодиодные индикаторы (три цифры, шкала) не влезали. Тогда в голову и пришла очень хорошая мысль — сделать самодельный индикатор из SMD светодиодов. Взять тонкий односторонний текстолит, разместить на нём нужное количество светодиодов, в нужном порядке и получится отличный индикатор. Представив, что ко всем светодиодам нужно вести провода, я решил, что на плате поместится и дешёвый микроконтроллер, который будет сам управлять всеми светодиодами, а основной МК велокомпьютера будет управлять индикатором по одному проводу.


В итоге получился очень компактный (толщина всего 3мм) индикатор. Управление по одному проводу, и еще 2 на питание. Если у вас есть уже готовые приборы, или вы планируете сделать прибор, и нужен индикатор, то самодельный индикатор самый отличный вариант. Разберём подробнее как он работает.


20 светодиодов на 10 выводах — легко!


МК я выбрал самый не дорогой — SMT8S003, такой же как в велокомпьютере. У него всего 20 ног. Если убрать ноги питания и управления, то остаётся 14 ног. Первая задача, которую надо было решить, управлять этими ногами как можно большим количеством светодиодов.


В голову сразу пришло решение, что на одну ногу можно повесить 2 светодиода, одним выводом на GND, а вторым на VDD. На каждый светодиод по резистору. По такой схеме.




Управлять просто. Подаём на вывод 0, горит один светодиод, подаём 1 — горит второй светодиод. Переводим в третье состояние (вход) не горит ни один. Получается на 14 выводов можно повесить 28 светодиодов. Очень не плохо.


Сын нарисовал сам индикатор. Для велокомпьютера, самый полезный вид индикатора, после цифр — шкала. Индикатор состоит из 2 шкал по 8 светодиодов, и ещё 4 различных статусных светодиода. Итого 20 светодиодов. Я быстро набросал плату, протравил, запаял и начал тестировать.


Включаю МК, все выводы в третьем состоянии, ничего не должно гореть. И… Светодиоды горят. Конечно, им хватает напряжения в 5 вольт, чтобы тускло светится. Так не пойдёт, меняем схему...


Ещё больше светодиодов


Немного подумав, пришла другая идея. Подключить светодиоды не к питанию и земле, а к ещё двум выводам МК. Тогда точно можно выключить всё. Пробуем, отлично работает. За счёт динамической индикации, все красиво мигает. Можно управлять каждым светодиодом.


В итоге на будущее получилась такая схема:



Выделяем несколько управляющих выводов и рабочих. Резисторы ставим только на управляющие upr1 upr2. Таким образом, сильно упрощается схема и трассировка платы. На 14 выводах можно разместить до 96 светодиодов. 6 управляющих и 8 рабочих, плюс на каждом по 2 светодиода. Более чем достаточно, рука паять устанет.


Как оказалось можно и больше. Чарли Аллен пошёл ещё дальше, разместив по несколько светодиодов еще и между управляющими выводами. Таким образом, можно разместить на 16 выводах до 16*15 светодиодов. Но, в его схеме добавляется много резисторов, а также надо, чтобы все светодиоды были одного цвета, в общем есть небольшие проблемы. Вывод — 96 светодиодов более чем достаточно.


Управляем каждым светодиодом по отдельности


Для управления каждым светодиодом, используется метод динамической индикации. В один момент времени можно зажечь по одному светодиоду на управляющий вывод. Далее нужно перебрать все пары, это состояния индикации, и так по кругу. Так как плата уже была сделана, то я её переделал в один управляющий вывод и один резистор. Получилось 20 светодиодов на одном выводе и 10 рабочих выводов. Итого 20 состояний.




Для понижения потребления энергии, МК работает на частоте 2МГц. Чтобы перебрать 20 состояний с частотой в 50Гц хотя бы, нужен таймер с частотой в 1000Гц. Дополнительно захотелось ещё по управлять яркостью. Но получается, чтобы понизить ее в 10 раз, нужно частоту таймер 10 000Гц, а в 100 раз 100 000 Гц. При этом в обработчике прерывания нужно перебрать все варианты и зажечь нужный светодиод. В общем МК не справлялся. Пришлось перейти на вариант с PWM модуляцией.


Управляем яркостью с помощью ШИМ таймера


В итоге получилась простая программа. Используем один таймер — TIM2, с возможностью ШИМ генерации. Настраиваем частоту таймера на 1000Гц, а максимальное значение таймера 125 — разрядность ШИМ, которая будет определять градации яркости. В итоге, можно задать любое значение яркости от 0 до 125. В момент срабатывания второго прерывания таймера, по сравнению с заполнением ШИМ, выключаем все светодиоды.


В итоге получился отличный индикатор. За счёт регулирования яркости потребление в активной фазе составляет от 1 мА до 4мА.


Подключаем велокомпьютер


Сам индикатор готов, в корпусе от велокомпьютра он выглядит так:




Для управления индикатором, я выбрал протокол 1-wire. Описывать его не буду. Скажу только, что пришлось помучаться, чтобы успеть обработать прерывание и выдержать нужные тайминги, но в итоге все заработало. Велокомпьютер как Master, а индикатор как Slave. Для управления надо передать 4 байта. Первый байт — команда, яркость и один бит для перехода в спящий режим, остальные 3 байта — светодиоды, по биту на светодиод.


Первое, что пришло в голову отображать на индикаторе — это скорость и каднес. Служебные светодиоды оставить для статуса блютус, нарушения контроля скорости и каденса и еще один — контроль расстояния.


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


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


Какие ещё можно сделать индикаторы


Часы — светодиоды в два круга — часы и минуты.


Стороны света — для электронного компаса.


Шкала для инкрементного поворотного энкодера.


Несколько шкал в одном индикаторе.


Сердечко для музыкальной открытки.


Матрица 8х8 для отображения картинок.


Тонкий семисегментный индикатор на одну цифру 11 светодиодов.


В общем, идей как это можно использовать — много.


На github, как обычно плата, программа, реализация протокола 1-wire и динамической индикации. Кому нужно, можете использовать в своих проектах.

Tags:
Hubs:
+12
Comments 64
Comments Comments 64

Articles