Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Программирование анимаций на матрицах WS2812 8×8 и 16×16 через Arduino и Excel

Компоненты и материалы

Arduino UNO ×1
WS2812 RGB LED матрица 8×8 ×1
Перемычки (Male/Female) — чёрный GND, красный 5V, зелёный Data ×3
Батарея 9 В (стандартная кронка) ×1
Разъём 9 В на джек (barrel jack) ×1
Pin header 5 позиций, 1 ряд, длинный (0.1") ×1

Необходимые инструменты

О проекте

Приобретя первую матрицу WS2812 8×8 RGB LED, я ожидал адресацию через традиционную XY-систему координат. Вместо этого 64 светодиода собраны в цепочку из восьми рядов по восемь. Я обнаружил, что Excel-утилита Кевина Дарра, изначально созданная для матрицы 16×16, может быть адаптирована для управления 8×8 массивом. Модифицировав и таблицу, и сопровождающий Arduino-скетч, я создал универсальный инструмент для программирования LED-анимаций без внешних библиотек.

Обновлённая книга Excel, LED_Utility.xlsm, теперь поддерживает:

Ниже — пошаговые инструкции по сборке железа, настройке Excel-утилиты и загрузке Arduino-скетча. Каждый проект строится на предыдущем, вводя циклы, условие и модульные функции.

Сборка железа

Подключите матрицу 8×8 к Arduino UNO через 5-пиновый хэдер:

  1. DIN → пин 8 Arduino
  2. +5V → пин 5V
  3. GND → пин GND
Программирование анимаций на матрицах WS2812 8×8 и 16×16 через Arduino и Excel
Схема подключения: DIN→D8, 5V, GND

В этой настройке координата (0,0) соответствует левому верхнему углу матрицы.

Обзор Excel-утилиты

Откройте LED_Utility.xlsm — она содержит три листа:

Книга по умолчанию в режиме «только чтение» для защиты вашей работы. Используйте File → Save As после генерации кода, чтобы сохранить дизайн.

Программирование анимаций на матрицах WS2812 8×8 и 16×16 через Arduino и Excel
Лист Eight: кнопки Show, Var Map, Wrap Map, Clear

Ключевые функции на листе Eight:

Каждая кнопка генерирует блок C++ кода, который копируется в Arduino-скетч. Код форматирован для кастомной функции mapLEDXY(), преобразующей XY-координаты в соответствующий индекс светодиода.

Arduino-скетч

Основной скетч (LED_Arduino.ino) содержит:

// Определение пина
#define WS2812_pin 8
// Общее количество светодиодов
#define numberOfLEDs 64
// RGB-буфер (3 байта на LED)
byte RGB[192];
// Предварительные объявления
void RGB_update(int LED, byte RED, byte GREEN, byte BLUE);
void mapLEDXY(int x, int y, byte RED, byte GREEN, byte BLUE);
void clearLEDs();

Рутина mapLEDXY() отображает пару координат в линейный массив, учитывая зигзагообразную проводку, типичную для матриц WS2812.

После вставки сгенерированного кода в функцию loop() загрузите скетч. Матрица мгновенно отреагирует на инструкции.

Проект 1 — Статичный красный квадрат

Создайте красный квадрат 3×3 в координатах (2,2)–(4,4). В Excel установите соответствующие ячейки: красный=255, зелёный/синий=0. Скопируйте сгенерированный код в строку 40 скетча:

mapLEDXY(2,2,255,0,0);mapLEDXY(2,3,255,0,0);mapLEDXY(2,4,255,0,0);
mapLEDXY(3,2,255,0,0);mapLEDXY(3,3,255,0,0);mapLEDXY(3,4,255,0,0);
mapLEDXY(4,2,255,0,0);mapLEDXY(4,3,255,0,0);mapLEDXY(4,4,255,0,0);

Загрузите и наблюдайте за горящим квадратом. Экспериментируйте: очистите сетку, смените цвета, добавьте рамку.

Проект 2 — Два цветных квадрата

Дублируйте скетч как Colour_Sq.ino и модифицируйте Excel-лист для второго, более крупного квадрата. Используйте кнопку Show для генерации кода и вставьте в скетч. Добавьте простую задержку и clearLEDs() для переключения между фигурами.

Проект 3 — Растущий квадрат

В скетче Grow.ino спроектируйте меньший внутренний квадрат и обрамите его рамкой по выбору. Удалите значения внутреннего квадрата, сгенерируйте код внешней рамки, вставьте оба блока в скетч. Результат — анимированный квадрат, расширяющийся и сжимающийся.

Проект 4 — Спиральная анимация

Для сложных паттернов инкапсулируйте каждый кадр в отдельную функцию и вызывайте их из loop(). Пример Spiral.ino использует пять вспомогательных функций для построения 5-слойной спирали. Этот модульный подход сохраняет главный цикл лаконичным и упрощает будущие правки.

Проект 5 — Цикл переменной яркости

Введите for-цикл для анимации яркости:

for (int r=0; r<256; r++) {
  mapLEDXY(3,3,r,0,0);mapLEDXY(3,4,r,0,0);
  mapLEDXY(4,3,r,0,0);mapLEDXY(4,4,r,0,0);
  RGB_update(-1,0,0,0); delay(50);
}
for (int r=255; r>=0; r--) {
  mapLEDXY(3,3,r,0,0);mapLEDXY(3,4,r,0,0);
  mapLEDXY(4,3,r,0,0);mapLEDXY(4,4,r,0,0);
  RGB_update(-1,0,0,0); delay(50);
}

Квадрат плавно нарастает и затухает.

Проект 6 — Затухающая рамка

Комбинируйте for-циклы с общей переменной g для затухания окружающей рамки:

for (int g=0; g<256; g++) {
  b=g;
  mapLEDXY(...); // ячейки рамки
  RGB_update(-1,0,0,0); delay(50);
}
for (int g=255; g>=0; g--) {
  b=g;
  mapLEDXY(...); // ячейки рамки
  RGB_update(-1,0,0,0); delay(50);
}

Здесь синий канал отслеживает зелёный для плавного перехода.

Проект 7 — Переход цвета

Используйте if для смены средних ячеек рамки с зелёного на жёлтый при достижении порога:

for (int r=0; r<256; r++) {
  g=r;
  if (g>64) { g=65; l=r; }
  mapLEDXY(...); // ячейки
  RGB_update(-1,0,0,0); delay(50);
}

Экспериментируйте с разными порогами для различных эффектов.

Проект 8 — Движущаяся стрелка

Генерируйте движущуюся стрелку параметризацией X-координаты:

for (int x=0; x<8; x++) {
  mapLEDXY((x+0)%8,3,0,255,255);
  mapLEDXY((x+1)%8,1,255,128,128);
  mapLEDXY((x+1)%8,3,0,255,255);
  mapLEDXY((x+1)%8,5,255,128,128);
  mapLEDXY((x+2)%8,2,255,128,128);
  mapLEDXY((x+2)%8,3,0,255,255);
  mapLEDXY((x+2)%8,4,255,128,128);
  mapLEDXY((x+3)%8,3,255,128,128);
  RGB_update(-1,0,0,0); delay(100);
}

Используйте функцию Wrap Map в таблице для обработки переполнения координат.

Использование матрицы 16×16

Все концепции выше напрямую переносятся на матрицу 16×16. Замените LED_Arduino.ino на LED_Arduino16.ino и переключитесь на лист Sixteen в книге. Единственное изменение — константа numberOfLEDs и расчёт RGBlocation в mapLEDXY().

Расширения и советы

Хотя руководство фокусируется на 8×8 и 16×16, та же методология применима к другим размерам (например, 8×32). Для каждого нового размера обновите константу numberOfLEDs и модифицируйте расчёт индекса под проводку вашей матрицы. Держите книгу в режиме «только чтение», чтобы избежать случайной потери кода. Рассмотрите использование меньшей платы, например Arduino Nano, если важно потребление энергии.

Производственный процесс

  1. Панель управления полётным симулятором 2020 на Arduino Nano: LCD и CDI-дисплеи
  2. Панель переключателей и LED для Microsoft Flight Simulator 2020 на Arduino
  3. Программирование анимаций на матрицах WS2812 8×8 и 16×16 через Arduino и Excel
  4. Защита глобального IoT: три обязательных шага
  5. Топ-3 тренда цифрового производства, формирующие 2020 год
  6. Топ-3 стратегии для МСБ успешной международной экспансии
  7. Три ключевых урока для ритейлеров в условиях годовых сбоев поставок
  8. Робот «Уходи!» — простой стартовый набор Arduino для детей
  9. Топ-3 главных совета по ТО и безопасности промышленного оборудования
  10. Основное руководство: 3 проверенные стратегии закупки тяжёлого промышленного оборудования