Лампа настроения с сенсорным управлением

Лампа настроения!

Лампа настроения (mood lamp) является RGB лампой, которая меняет цвет в случайном порядке. Была зеленая, плавно стала голубой, потом фиолетовой… какого цвета она станет в следующий момент времени не знает никто)

Купить такую проблематично, сделаем ее сами!)

Данная лампа проста по устройству и станет отличным сувениром. Использованные компоненты:
Лампа GRONO из магазина IKEA. (299р.)
микроконтроллер ATMEGA8-16PU (66р.)
RGB светодиод KAD1-9090BRGC-01/3 star (273р.)
транзистор BUZ11 (3*27р)
различная мелочевка (три 1W резистора, один 10К подтягивающий резистор, колодка для ISP, микросхема-стабилизатор 7805)

В качестве источника света использован мощный RGB светодиод. Мощность каждой цветовой составляющей 1Вт. Подробности можно посмотреть в даташите. Светодиод был найден и куплен в Промэлектронике (promelec.ru).

Для упрощения линии питания, стабилизатор и колодка ISP на схеме не показаны. Транзисторы подключены к выходам каналов ШИМ. Таких каналов в микроконтроллере три.

Алгоритм работы следующий. Генерируется случайным образом цвет (три char переменные). Если все три значения примерно одинаковы, то на выходе у нас будет белый цвет, что неинтересно, поэтому процесс случайного выбора цвета повторяется. Когда получен цвет с вероятностью 0,5 будет погашен один из каналов (что бы чаще появлялись чистые R, G или B цвета.) Затем вычисляется величина прибавки, что бы за 255 шагов прийти к заданному цвету. После этого случайным образом выясняется скорость ухода к новому цвету (от 5 до 10 сек). Ну а затем за счет приращения значения в регистрах ШИМ плавно приходим к сгенерированному цвету. Подержав цвет какое то время цикл повторяется. И так до бесконечности.

Лампа в действии:

Исходный код можно посмотреть тут (Написан в CodeVisionAVR)

У микроконтроллера переключить FUSE биты что бы тактовая частота была 8 МГц от встроенной RC цепочки.

Что бы я исправил:
1) вынес бы стабилизатор за пределы лампы, он греется и требует крупного радиатора
2) использовал бы мелкие транзисторы и микроконтроллер бы запаивал бы сразу в плату. Тогда бы уменьшились габариты платы и она влезла бы в нишу под лампой.

Простор для творчества:
У микроконтроллера осталось много неиспользованных ног, а также не задействован USART. Можно добавить в плату конвертер уровней MAX232 и можно будет подключить лампу к COM порту компьютера. (А если использовать FT232 то к USB). Тогда написав соотвествующее ПО можно сделать так что бы например при поступлении новой почты лампа мигала красным. Или например сделать продвинутую ambilight.

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

Источник

Лампа настроения с регулировкой скорости смены цветов и функцией стоп-цвет

Приветствую всех. Однажды приглянулся мне стеклянный шар, который в темноте испускает свет, накопленный за день, да и к тому же в подставке к нему была RGB подсветка. Однако подсветка эта была настолько халтурная (8 цветов, да и те скачком менялись), что было решено сделать свою, да еще и с плюшками. Основа схемы — микроконтроллер AVR Attiny13. Хотя он поддерживает только 2 канала аппаратного ШИМ (широтно импульсная модуляция), а RGB светодиод требует 3, не проблема — реализуем программный ШИМ. Плюшки следующие помимо ШИМ регулирования RGB светодиодов: регулировка скорости смены цветов от 1 секунды на цикл смены цветов до 1000 секунд, а также возможность остановить световые эффекты нажатием кнопки и заморозить текущий цвет. Назвал я эту функцию «Стоп-цвет». О количестве цветов: здесь также реализована фишка — изменение цветов происходит не только линейно от красного до фиолетового по цветам радуги, но и по сочетанию нулевых и максимальных значения цвета — то есть от 100 процентной насыщенности до нулевой насыщенности цветов, то есть до белого цвета. Программа изменения цвета линейная, строго задана программой. Флэш память Attiny13 не позволила реализовать рандомное непредсказуемое изменение цвета. Может это и к лучшему.

Читайте также:  Нарушение месячных после стресса

Схема получилась вот такой:

Что да как делалось. Регулировка скорости. Начнем с задержек функцией _delay_ms(); , обычное ее использование сводится к записи в скобки какого-то значения, в течении которого должна проходить задержка, но если же в скобочки поставить переменную, то размер программы резко увеличится. Это совсем не годится, ведь уже рискуем не влезть в память Attiny13. Выход прост — организуем цикл вызова конечного числа раз функции задержки длительностью, скажем 1 мили секунда. Размер программы для контроллера снова в норме. Теперь эту функцию можно использовать для регулировки скорости выполнения светового эффекта. Далее откуда брать динамическое изменение переменной задержки? Тоже все просто, тинька имеет на борту АЦП (аналого цифровой преобразователь) 10 бит, значение от 0 до 1024 — отлично сгодится для значения задержки. То есть выходит, что задержка между увеличением или уменьшением яркости будет от 1 мили секунды до 1 секунды. От 1 потому, что при нулевой задержке будет просто мельтишение, некрасиво, поэтому ноль исключен. Итак, берем значение из АЦП и толкаем в значение переменной задержки. Также значение АЦП можно брать как 10 бит, то есть 1024 отсчета, так и просто поделить это значение на 2, 4, 8 и так далее и получится более узкий диапазон регулировки. Аппаратно регулировка будет производиться потенциометром или переменным резистором, подключенным крайними выводами к плюсу и минусу питания, а средним ко входу АЦП микроконтроллера. R3 для защиты порта, токоограничительный. R1 ограничивает напряжение таким образом, чтобы максимальное значение АЦП было 1000, остальные 24 отсчета планировалось для подключения еще одной кнопки, но внятного функционала она не получила, поэтому осталось так для возможности в будущем что-нибудь «допилить». Источником опорного напряжения АЦП выбрано напряжения питания 5 вольт микроконтроллера. Что касательно остановки эффекта изменения цвета, то при нажатии кнопки S2 происходит перебрасывание из основного бесконечного цикла со световым эффектом в другой пустой бесконечный цикл, повторное нажатие кнопки перебрасывает выполнение программы обратно в основной бесконечный цикл. Простенько и сердито.

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

Между прочим, подобную палитру можно посмотреть в любом графическом редакторе, например, Paint.

Программно дело получается так (программный код на gcc):

Переменная k отвечает за остановку изменения цвета, перекидывает в разные циклы программы.
Переменная n отвечает за переход от 100% насыщенности цветов до размытия их до белого, не может быть больше чем 1/2 от pwm
Переменная pwm — значение дискретизации ШИМ

Это вся главная программа работы микроконтроллера для данного устройства.

В качестве RGB светодиода использовалась светодиодная лента на этих самых RGB светодиодах. Конкретной марки или модели ленты не знаю, вроде что-то от RoHS. Лента имеет в себе уже токоограничительные резисторы, баланс белого хорошо настроен. Так как лента требует питания 12 вольт, в схеме был использован повышающий DC-DC преобразователь на микросхеме MC34063. Сделано это для того, чтобы была возможность питать схему от трех пальчиковых аккумуляторов или просто от USB порта. Ясное дело АА аккумуляторы придется часто заряжать, зато красиво и ярко. При замене питания на 12 вольтовое, преобразователь можно заменить на обычные линейные преобразователи типа 7805 и соответственно перерасключить питание в схеме. Для управление светодиодами используется микросхема ULN2003. По сути это просто 7 транзисторов в корпусе микросхемы (7 сборок дарлингтонов), заменить можно на обычные транзисторы подходящей мощности и габаритов. Выводы микросхемы ULN2003 соединены попарно для увеличения мощности выходов. Каждая ножка по даташиту имеет предел по току в 0,5 А, а в сумме по всем значение составляет 2,5 А. Это стоит учитывать, если предусматривается нагрузка побольше, чем 1 юнит светодиодной ленты в моем случае. Для регулировки скорости эффекта смены цветов используется потенциометр R2, можно применить любой, подходящий по вкусу. Кнопка S1 осуществляет сброс контроллера (reset). На всякий случай. Конденсатор C8 для большей надежности, им можно пренебречь.

Читайте также:  Что говорить девушке когда у нее плохое настроение

Готовое устройство получилось вот такого вида ( собрано с применением макетной платы собственного производства для tiny13 ):

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

Фьюз биты для программирования микроконтроллера Attiny13:

К статье прилагаются проект протеус, макетная печатная плата, на которой построена схема, прошивка для микроконтроллера, а также небольшое видео, хоть и не совсем хорошо, но демонстрирующее работу устройства (в реальности устройство получилось намного более красочное)

Источник

Лампа настроения с сенсорным управлением на Attiny13

Дата публикации: 02 февраля 2016 .

Лирическое вступление

Наконец-то я закончил свой первый, однажды заброшенный, проект на микроконтроллере! Когда я начинал, то замахнулся на повторение одной поделки с «хабрахабр», но так и не смог отладить инфракрасный сенсор (ИК-светодиод + ИК-приемник). Поделка та была на ATmega8 и, как я сейчас понимаю, это было очень жирно для такой задумки. Сейчас я все реализовал на ATtiny13A, как всегда еле все уместил, но тем интереснее. Приступим.

Техническое задание

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

Алгоритм работы

Лампа имеет два основных режима работы и два настроечных режима, которые идут друг за другом по кругу и переключаются с помощью сенсора. При срабатывании сенсора лампа вспыхивает белым на 400 миллисекунд.

1. Плавная смена цветов по кругу.
2. Один цвет, который получился при переходе с режима №1.
3. Настройка скорости плавной смены цветов для режима №1. 8 вариантов.
4. Настройка яркости. 8 вариантов.

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

Долго эксперементировал с тем, как визуализировать настройку выбора скорости всякими помигиваниями. В итоге остановился на выборе скорости по цветам радуги + розовый цвет. Красный — самая быстрая скорость. Розовый — самая медленная. Настройка яркости осуществляется визуально одним цветом.

Читайте также:  Что может вызывать чувство гордости за ребенка

Через 30 секунд после того, как мы последний раз переключали режим, происходит следующее. Если мы находимся в одном из основных режимов, то настройки сохраняются. Если мы находимся в одном из настроечных режимов, то лампа возвращается к сохраненным настройкам. При следующем включении лампа возвращается к сохраненным настройкам.

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

Материалы

В качестве блока питания можно взять зарядник от телефона на подходящий ток. У меня уже очень давно были закуплены блоки питания и плафоны по 2 штуки. Плафон взял от светильника grono из магазина «Икея». Еще вот похожие по размерам, но круглые — кварне.

Источником света в лампе является один или несколько RGB-светодиодов. Я взял один 3 Ваттный RGB-светодиод, который в номинале держит по 300 мА на каждый канал. Запитал его в щадящем режиме где-то по 200 мА на канал.

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

Схема, реализация

Схема получилась очень простой.

Для управления мощным светодиодом я взял полевики с дохлой материнской платы. И развел макет платы под них, изготовил пару плат.

Собрал все воедино, бросил коробочку на дно плафона. В качестве сенсора сделал кусок лакированной проволоки 0.3 мм, которую пустил по верхнему контуру плафона. Светодиод посадил временно только на термопасту, а проволоку на скотч.

Трудности отладки

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

Тогда мне в голову пришла идея: заэкранировать наш сенсор, чтобы он не ловил помехи. И я сделал не одну проволоку, а витую пару. Второй конец которой подключил к земле нашей схемы управления светодиодом. (Здесь у меня вопрос, есть ли смысл посадить на эту землю и корпус блока питания?) И всё, помехи ушли!

Но это еще не все. Первая моя стабильная версия лампы была реализована с помощью БМ (исходник этой реализации я тоже вложу в архив). Однако, помаргивания при плавном изменении цветов RGB-светодиода, все же, были видны, даже на частоте БМ 586 Гц. Особенно на маленьких яркостях. Частоту повышать уже больше не стал. Переделал на программный ШИМ с частотой около 100 Гц. На глаз теперь все происходит плавно!

Перспектива

Когда это все собрал и отладил, то был доволен. Но есть еще задумка. Как-то громоздко все это выглядит. Подумал, что было бы интересно собрать аналог такой лампы в виде небольшого ночничка, который можно было бы питать от любого разъема USB, ведь у каждого есть зарядник для телефона. Развел кругленькую плату (часть ее видно справа на фото готовых плат выше) для 9-ти RGB-светодиодов 5050 и разъема microUSB. Может быть в будущем соберу.

Исходник для прошивки написан на C в CodeBlocks под компилятор GCC AVR.

Желаю каждый проект довести до победного конца!

Источник

Оцените статью