среда, 22 января 2014 г.

STM32 & Mood Lamp

Mood Lamp, она же лампа настроения, представляет собой лампу которая плавно меняет цвет и яркость свечения. Обычно подобные конструкции строят на базе готового корпуса и собственной начинки, а так как корпус у меня уже есть то я решил попробовать. В качестве контроллера взял STM32. Вот что у меня получилось:

Для тех кому интересны подробности, добро пожаловать под кат.










Введение
В качестве корпуса взял китайский стеклянный "куб" с подсветкой. В нём на стекле лазером за счёт термического эффекта сделан трёхмерный рисунок. Однако подставка выполнена не самым лучшим образом.
Если вам интересно, вы можете посмотреть видео о её устройстве:


Проектирование устройства
Для управления подсветкой куба я использовал один из младших МК от STM32 - STM32F100C8T6. И обычный трёхцветный светодиод (т.к. мне его подсунули вместо FULLCOLOR светодиода. Последний отличается тем что ВАХ кристаллов диодов там более или менее одинаковый, позволяя получать нужный цвет прямым способом).
Схема устройства проста и она доступна в папке hardware моего репозитория. Также там доступны печатная плата и готовые PDF файлы для ЛУТа (в зеркальном виде). Плату травил обычным способом, вертикально разместив её в ёмкости:


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

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

Вот обзорное видео этой платы:


Прошивка
Собственно прошивка устройства получилась достаточно небольшой - 8 кБ, и то благодаря тому, что в ней использовалась программная плавающая точка. Вся функциональность программы размещена в файле main.c. Т.е. происходит выбор случайного цвета, в котором для большего разброса цветов случайным образом минимизируется значение одного из каналов, после происходит плавное изменение от текущего цвета к новому за 256 шагов. Выбор нового цвета происходит по следующему принципу, чтобы не было цветов близких к белому.
В качестве примера алгоритма послужила эта статья, её оригинал и исходный код к ней.
Из добавленной мною функциональности является выправленный по сравнению со статьёй алгоритм в некоторых местах кода, а также генератор случайных чисел, который не заработал из стандартной библиотеки.

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

Весь исходный код доступен в папке firmware моего репозитория.

Итог
После сборки устройства, оно не отличается по внешнему виду от оригинального:

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

Все файлы проекта доступны в моём репозитории - https://github.com/no111u3/ledbox
И как обычно в конце статьи, я выкладываю обзорное видео получившегося устройства:

На этом всё, пока.