Лирическое вступление
Наконец-то я закончил свой первый, однажды заброшенный, проект на микроконтроллере! Когда я начинал, то замахнулся на повторение одной поделки с "хабрахабр", но так и не смог отладить инфракрасный сенсор (ИК-светодиод + ИК-приемник). Поделка та была на 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.
Желаю каждый проект довести до победного конца!
Архив для статьи "Лампа настроения с сенсорным управлением на Attiny13" | |
Описание: Схема, модель в протеусе, исходники, макет платы | |
Размер файла: 197.06 KB Количество загрузок: 1 777 | Скачать |
Комментарии
Нужно залить в контроллер файл прошивки RGBLamp.hex и файл EEPROM памяти RGBLamp.eep
lfuse: 0x7A
hfuse: 0xFB
i.piccy.info/.../...