Рисование светом одним светодиодом: построение динамических изображений на DIY-манипуляторе
Компоненты и материалы
- Шаговый двигатель NEMA17 — 2 шт.
- Драйвер DRV8825 для шаговых двигателей — 2 шт.
- Модуль чтения SD-карт — 1 шт.
- Arduino Mega 2560 — 1 шт.
- Ремни и ролики (V-wheels) — 1 комплект
Необходимые инструменты и станки
- 3D-принтер
Программное обеспечение и онлайн-сервисы
- Arduino IDE
- GIMP (для подготовки изображений)
- Autodesk Fusion 360 (для проектирования)
О проекте
Идея
После просмотра видео и статей о рисовании светом (light painting) я решил попробовать сам. При длительной выдержке камеры точечный источник света превращается в световую линию. Но как создать детальное изображение или использовать много цветов? Я построил двухосевой ЧПУ-станок с одним RGB-светодиодом, который меняет цвет и «рисует» картинку.
План
Проект требует четырех основных компонентов: двухосевой ЧПУ, RGB-светодиод, SD-карта и камера с длительной выдержкой. Arduino Mega считывает битмап с SD-карты, двигает светодиод по горизонтали, зажигая соответствующие цвета, переходит на следующую строку и так далее. После завершения изображения пауза, затем поиск следующего файла.
Сборка рига
Благодаря опыту проектирования ЧПУ, сборка не составила труда. Я сделал модульную конструкцию на двух ремнях, перемещающихся вдоль алюминиевых профилей. Длину осей можно легко менять. Концы X-оси имеют 3D-печатанные наконечники с креплением двигателя и подшипника.
Чтение битмапов
Выбран формат BMP за простоту. Ключевые адреса в файле: 0x12 (ширина), 0x16 (высота), 0x1C (глубина цвета), 0xA (смещение пиксельных данных), 0x36 (обычное начало данных). Данные читаются блоками по 2 или 4 байта. Функция считывает заголовок, затем пиксели построчно.
Подготовка изображений
Камеры обычно ограничены 30 секундами выдержки — это около 288 пикселей (18×16). В GIMP я создал простой пиксель-арт: покебол, сердечко, прыгающего Марио. Изображения поместил в папку «bitmaps» на SD-карте.
Программа рисования
Шаговые двигатели не имеют обратной связи — позиция отслеживается программно. При старте позиция (0,0), светодиод мигает 5 раз — сигнал для фотографа начать съемку. Битмап читается построчно: для каждого пикселя двигаются шаговики, светодиод устанавливает цвет пикселя.
(Пере)создание изображения
Настройки камеры: выдержка 20 сек, диафрагма F36, ISO 100, компенсация -5 EV для минимизации «призраков». Результаты:
- Покебол — форма читается, немного размыто.
- Сердце (9×9) — пиксели менее определены.
- Марио — сильное размытие из-за ярких цветов.
Идеи для улучшений
Главное — уменьшить размытие: двигать светодиод в выключенном состоянии, зажигая только в точках остановки. Это резко повысит четкость.
Код
Полный код (C/C++) доступен в разделе Code. Он включает чтение BMP с SD-карты, управление драйверами DRV8825, вывод на RGB-светодиод и координацию движений.
Производственный процесс
- Почему дизайнеры возвращаются к натуральным материалам в продуктовом дизайне
- Управление светодиодом с PIR-датчиком движения на Raspberry Pi
- Освоение FMEA: пошаговое руководство менеджера ТО по созданию и использованию анализа режимов отказов и их пос…
- Передача данных температуры и влажности между двумя Arduino через Firebase
- Легкая перемена двух Python-переменных без временной переменной
- Проект Arduino: мелодия Coffin Dance — сборка и воспроизведение вирусного трека
- Вторая жизнь старых пультов: DIY умные устройства на Arduino
- Управление Arduino-роботом через Firmata и геймпад Xbox One
- Звукоактивируемый светодиодный дисплей 8 LED на Arduino
- Пошаговое руководство: сборка умного четырёхногого робота на Arduino