Сборка 8×8×8 RGB LED-куба на Arduino: подробное руководство
Компоненты и материалы
- RGB диффузные светодиоды, общий анод (5 мм) — 512 шт.
- Драйверы LED DM13A (16-канальные, постоянный ток) — 12 шт. (~$1 за шт. на eBay)
- Декодер 74HC138 (3-в-8) — 1 шт. (управление 8 анодами/слоями)
- P-канальные MOSFET IRF9640 — 8 шт. (ключи анодов слоев)
- Arduino UNO — 1 шт. (или самодельная плата на ATmega328P + 16МГц кварц + 2×22пФ)
- Блок питания 5В 2.5А (20Вт) — 1 шт.
- Резисторы: 8×10кОм (gate pull-up), 8×1кОм (gate series), 8×100Ом (LED токоограничение? уточнить)
- Провода wire-wrap для ручной разводки
- Перфоплата/печатная плата (тонер-трансфер), корпус из сосны 40×9 мм
Программное обеспечение
- Arduino IDE
О проекте
Видео
Автор ссылается на видео-демонстрацию работающего куба.
Сборка
Вдохновлено кубом Кевина Дорра (Kevin Darrah). Но 24 сдвиговых регистра, 192 транзистора и 640 резисторов — слишком трудоемко. Автор заменил их на 12 драйверов DM13A (по $1), которые сами делают постоянный ток и ШИМ (BAM) внутри.
Сам куб собирался по методике Кевина (видео). Затем спроектирована печатная плата методом ЛУТ (транфер тонера) под DM13A и саму куб-матрицу. Из-за отсутствия металлизации отверстий, все 512×3=1536 выводов LED подключены к пинам DM13A вручную проводом wire-wrap.
На плате также предустановлены MSGEQ7 (7-полосный эквалайзер) и микрофонный предусилитель — для будущих аудио-эффектов (пока не используются).
Если использовать готовый Arduino UNO/Nano, нужно только: 74HC138, 8 P-MOSFET IRF9640, резисторы — можно собрать на макетке.
Корпус из массива сосны 40×9 мм. Блок питания 5В 20Вт с eBay.
Анимации основаны на коде Кевина Дорра с небольшими дополнениями.
Заключение
512 RGB LED (600 шт. с запасом) можно купить на eBay за ~$30. Даже с упрощенной электроникой сборка куба — очень трудоемкий процесс, но результат стоит того.
Код прошивки (основной скетч)
Скетч Cube_8x8x8_V1.ino (C/C++, ~2000 строк) реализует:
- 4-битную модуляцию угла яркости (BAM — Bit Angle Modulation) для 4096 цветов на LED.
- Мультиплексирование 8 слоев по прерыванию Timer1 (~8 кГц частота обновления слоя).
- SPI для выдачи данных в 12 драйверов DM13A (каждый управляет 64 каналами = 21 LED × 3 цвета? нет, 12×16=192 канала, на 512×3=1536 — кажется, каждый DM13A управляет частью матрицы).
- Функцию
LED(level, row, col, red, green, blue)для установки цвета любого вокселя (0-7, 0-7, 0-7, яркость 0-15). - Набор анимаций: дождь, складка, синусоида, случайные цвета, вытирание, прыгающий мяч, цветовое колесо, харлемшейк, рябь.
- Тестовый режим (переключателем SWITCH_PGM).
Ключевые фрагменты:
// Настройки пинов
#define LATCH_PIN 2
#define BLANK_PIN 4
#define DATA_PIN 11 // SPI MOSI
#define CLOCK_PIN 13 // SPI SCK
#define LAYER_A 5 // 74HC138 A
#define LAYER_B 6 // 74HC138 B
#define LAYER_C 7 // 74HC138 C
#define CUBE_SIZE 8
// Массивы для 4 бит на цвет (BAM)
byte red0[64], red1[64], red2[64], red3[64];
byte green0[64], ... blue3[64];
// Прерывание Timer1_COMPA_vect — мультиплексирование + BAM
// Выдает по SPI байты для текущего BAM-бита и текущего слоя,
// управляет 74HC138 для выбора анода, защелкивает (LATCH), снимает BLANK.
// Функция LED() преобразует (level,row,col) в индекс бита в массивах 64 байта.
Полный код очень объемен — скачайте из репозитория или исходного проекта.
Схемы и файлы
Eagle-файлы проекта: eagle_files_WfqPEUP7Mp.zip (доступны для скачивания).
Производственный процесс
- Умный датчик полива «Thirst Alert» на Arduino — DIY сигнализация засухи для растений
- Сборка потрясающего 5x5x5 LED-куба на Arduino Mega
- Итальянские словесные часы на Arduino Nano, NeoPixel, LCD и RTC
- Надежный счетчик кВт·ч на Sigfox с Arduino MKR Fox 1200
- Arduino RGB-микшер цветов: Простой проект для начинающих
- Bluetooth-монитор температуры на Arduino Nano с NTC-термистором
- Наружные RGB-прожекторы с DMX-управлением: бюджетное DIY-решение на Arduino
- Бесконтактный жестовый замок: APDS-9960 + Arduino для безопасного доступа
- Гальванически разделённый аналоговый вход для Arduino на LM331 и оптопаре 4N25
- Точный тест времени реакции на Arduino UNO