Создание впечатляющего POV-цилиндра на Arduino Due — пошаговое руководство
Компоненты и материалы
| Компонент | Количество | Примечание |
|---|---|---|
| Arduino Due | 1 | Основной микроконтроллер |
| Bluetooth-модуль HC-06 | 1 | Беспроводное управление с ПК |
| LED-лента LPD8806 RGB, 1 м, 60 LED/м, IP20 | 1 | 40 RGB LED всего (4 полосы по 10 LED) |
| Линейный регулятор напряжения (регулируемый) | 1 | LM317 для питания 4.6 В |
| Два операционных усилителя Texas Instruments (General Purpose Dual Op-Amp) | 1 | Для ИК-приёмника |
| Резистор 20 кОм | 3 | |
| Резистор 220 Ом | 1 | |
| Резистор 1 кОм | 2 | |
| Транзистор NPN общего назначения | 1 | |
| Конденсатор 1000 мкФ | 1 | |
| Конденсатор 100 нФ | 1 | |
| Конденсатор 1 мкФ | 1 | |
| Резистор 240 Ом | 1 | |
| Подстроечный резистор 1 кОм | 1 | |
| ИК-передатчик | 1 | Для синхронизации ротора |
| ИК-приёмник | 1 | Определение позиции ротора |
| Беспаечная макетная плата | 1 | |
| Пенопластовый цилиндр (Ø200 мм, высота 100 мм) | 2 | Ротор дисплея |
| Электродвигатель 12 В, XDRIVE 545-1 | 1 | Привод ротора |
| Корончатое колесо 60 зуб., 8 мм | 1 | |
| Корончатое колесо 12 зуб., 3.2 мм | 1 | |
| Зубчатый ремень, 80 зуб., 6×200 мм | 1 | |
| Шплинт M8, 125 мм | 3 | Соединение дисков шасси |
| Шплинт M8, 330 мм | 1 | Вал ротора |
| Контактное кольцо ASL9017 | 1 | Питание вращающейся части |
| Клейкая лента (чёрная, 48 мм) | 1 | Крепление лент на роторе |
| Фанерный диск (Ø150 мм, толщина 10 мм) | 2 | Диски шасси |
| Алюминиевый диск (Ø200 мм, толщина 2.5 мм) | 2 | Диски ротора |
Необходимые инструменты и оборудование
- Паяльник
- Лобзик
- Станочный сверлильный станок
- Лабораторный блок питания
- Ноутбук с Windows 10
Программное обеспечение и онлайн-сервисы
- Microchip Studio (разработка ПО для Arduino)
- Arduino IDE (альтернатива)
- Cygwin (для PC Control Program)
- Microsoft Visual Studio 2015 (графический интерфейс)
О проекте
Введение
Это мой первый проект на Arduino. Вдохновением послужили проекты POV-глобусов (Persistence of Vision — эффект стойкости зрения), использующие дискретные LED и сдвиговые регистры. Мой проект реализует POV-дисплей в виде вращающегося цилиндра с готовыми RGB LED-лентами.
Эффект стойкости зрения (POV) — оптическая иллюзия, при которой множество дискретных изображений сливается в человеческом сознании в единое целое. Этот принцип лежит в основе восприятия движения в кино и анимации.
Основные характеристики
- POV-дисплей на вращающемся цилиндре
- Воспроизведение анимированных GIF-изображений
- Хранение кадров в ОЗУ или Flash-памяти Arduino Due
- Управление через Bluetooth с ПК
Технические параметры
- Диаметр цилиндра: 200 мм
- Высота цилиндра: 200 мм
- Материал: пенопласт
- Вес ротора: 420 г
- 4 RGB LED-ленты на базе LPD8806
- Разрешение экрана: 151 × 40 пикселей
- Микроконтроллер: Arduino Due
- Bluetooth-модуль: HC-06
- Скорость вращения: до 1300 об/мин (22 Гц)
Механическая конструкция
Устройство состоит из шасси и ротора. Шасси образуют два круглых фанерных диска, соединённых тремя шплинтами M8 (расстояние 120 мм). В центре установлены два шарикоподшипника и вал (шплинт M8 330 мм). Привод осуществляется электродвигателем через две корончатые передачи и зубчатый ремень.
Ротор состоит из двух пенопластовых цилиндров и двух алюминиевых дисков. Нижний диск склеен с цилиндрами, верхний съёмный — для крепления к валу. Электроника размещена в верхней части ротора: плата Arduino Due, самодельный щит, плата питания и Bluetooth-модуль HC-06.
Питание 7.5 В поступает на плату питания через скользящие контакты и контактное кольцо. На плате питания регулятор LM317 понижает напряжение до 4.6 В для Arduino Due и LED-лент.
Четыре LED-ленты (всего 40 RGB LED) подключены к щиту Arduino. Ленты расположены со сдвигом, что делит расстояние по оси Y на 4. Программно обеспечивается развёртка по оси X: программное обеспечение обновляет все 40 LED 151 раз за оборот.
Электрическая схема
Полная схема доступна в прикреплённом PDF. Основные узлы:
- Плата питания с LM317 (вход 7.5 В, выход 4.6 В)
- Самодельный щит Arduino: разъёмы для LED-лент и схема ИК-приёмника (подключён к таймеру/прерыванию)
- Четыре LED-ленты STRIP0–STRIP3. STRIP0 — USART0, STRIP1 — USART1 (оба в SPI-режиме). STRIP2 и STRIP3 — последовательно через аппаратный SPI.
- Bluetooth HC-06 — USART3, питание 3.3 В от Arduino
Программное обеспечение Arduino
Составляет основной скетч mpc.ino и библиотеки:
- bt — драйвер Bluetooth
- LDP8806 — драйвер LED-лент
- MemoryFree — мониторинг свободной RAM
- mpcgif — воспроизведение GIF из RAM/Flash
- pictures — внутренние GIF во Flash
- trace — отладка
Вывод кадров на LED-ленты реализован через прерывания. Используются два кадровых буфера (по 40×151 пикселей, 1 байт = индекс палитры). Пока один буфер выводится через прерывание и DMA, второй готовится основной программой (декодирование GIF). Переключение буферов происходит в прерывании кадра.
Прерывание кадра (по сигналу ИК-датчика за оборот) измеряет скорость вращения и программирует периодические столбцовые прерывания (150 за оборот) через аппаратный таймер. Прерывание столбца выводит текущий столбец на ленты. Для производительности используются три DMA-канала, работающих параллельно.
Полный исходный код доступен на GitHub.
Программа управления на ПК (pccp)
Консольная утилита на C++ (работает под Cygwin), обменивается данными с Arduino через Bluetooth. Команды (одиночные символы):
- 0–7 — заливка экрана цветом (чёрный, красный, жёлтый, зелёный, голубой, синий, фиолетовый, белый)
- t — тестовый треугольник
- s — включение/выключение вращения изображения
- r — рисование одной строки
- c — рисование одного столбца
- y — воспроизведение внутреннего GIF из Flash
- f — загрузка внешнего GIF-файла с ПК через BT
- x — воспроизведение загруженного GIF
Программа отображает скорость вращения (Гц и мкс) и счётчик кадров. Исходный код на GitHub.
Графический интерфейс (Universal Windows App)
Позволяет выбирать GIF-файл для отображения. Основан на примере FilePicker из Microsoft Windows Universal Samples. Исходный код на GitHub.
Ссылки
- Persistence of vision — Wikipedia
- RGB LED GLOBE - POV - 40 x 200
- POV Globe Display RGB
- POV Globe Display RGB — описание проекта (на немецком)
- Microsoft Windows Universal Samples
Исходный код
Схемы
Схема доступна в разделе Schematics проекта.
Производственный процесс
- Arduino POV-часы: сборка дисплея на эффекте сохранения образа
- Создание осциллографа на Arduino Nano с дисплеем Nokia 5110 (20 кГц): простое DIY-руководство
- Умные шторы: автоматическое управление светом на Arduino с солнечной энергией
- Создание сенсорной игры «Крестики-нолики» на Arduino Due
- Умная копилка: управление монетоприёмником на Arduino Nano
- Итальянские словесные часы на Arduino Nano, NeoPixel, LCD и RTC
- Управление светодиодом по Bluetooth с Arduino: простой DIY-гид
- Простой ИК-датчик препятствий на Arduino: ИК-светодиод и фотодиод
- Надежный счетчик кВт·ч на Sigfox с Arduino MKR Fox 1200
- Гальванически разделённый аналоговый вход для Arduino на LM331 и оптопаре 4N25