Arduino + Excel 驱动 8×8 与 16×16 WS2812 RGB 矩阵动画编程
零部件与物料
| 零部件 | 数量 | 备注 |
|---|---|---|
| Arduino UNO | 1 | |
| WS2812 8×8 RGB LED 矩阵 | 1 | |
| 公/母杜邦线 | 3 | 黑-GND、红-5V、绿-DATA |
| 9V 电池 | 1 | |
| 9V 转 DC 插头 | 1 | |
| 5Pin 公排针 | 1 | 仅用 3 脚 |
所需工具
- 电烙铁
- 无铅焊锡丝
项目简介
WS2812 8×8 矩阵并非传统 XY 寻址,而是 64 颗灯串联成 8 行 8 列的蛇形链路。改造 Kevin Darrah 的 16×16 Excel 工具,使其支持 8×8 矩阵,无需外部库即可编程动画。更新后的 LED_Utility.xlsm 支持:
- 逐灯 RGB 赋值
- VBA 动态属性修改
- XY 坐标平移模拟动画
- 内置调色盘快速取色
- 双模式支持 8×8 与 16×16
硬件组装
5Pin 排针连接矩阵与 UNO:
- DIN → D8
- +5V → 5V
- GND → GND

坐标 (0,0) 为矩阵左上角。
Excel 工具详解
打开 LED_Utility.xlsm,含三张表:
- Eight — 8×8 界面
- Sixteen — 16×16 界面
- ColMap — 常用 RGB 对照表
默认只读,生成代码后 另存为 保留设计。

Eight 表关键功能按钮:
- Show — 显示选中单元格 RGB 值 (0-255)
- Var Map — 接受数值/变量输入,不显示输出
- Wrap Map — 加模运算处理坐标溢出,支持变量复用
- Clear — 清空两个输入网格
每个按钮生成一段 C++ 代码块,复制进 Arduino 草图,配合自定义 mapLEDXY() 函数将 XY 坐标转为串联索引。
Arduino 核心草图
// 引脚定义
#define WS2812_pin 8
// 总灯数
#define numberOfLEDs 64
// RGB 缓冲区 (3字节/灯)
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() 处理蛇形布线的索引映射。将生成代码粘贴到 loop() 上传即见效。
项目 1:静态红色方块
在 (2,2) 到 (4,4) 画 3×3 红方块。Excel 对应格设 R=255,G=B=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 生成代码粘贴,加 delay() 与 clearLEDs() 实现两形态轮播。
项目 3:生长方块动画
Grow.ino 设计内层小方块+外层边框,移除内层数值生成外层代码,两段粘贴形成扩张/收缩动画。
项目 4:螺旋动画
复杂模式下将每帧封装为函数,loop() 依次调用。示例 Spiral.ino 用 5 个辅助函数构建 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:边框淡入淡出
共享变量 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--) { ... }
项目 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);
}
配合 Excel Wrap Map 处理坐标溢出。
16×16 矩阵扩展
概念完全复用:替换草图为 LED_Arduino16.ino,切换到 Sixteen 表,仅需修改 numberOfLEDs 与 mapLEDXY() 内索引计算以适配 16×16 蛇形布线。
扩展建议
方法适用于任意尺寸(如 8×32)。新尺寸只需更新灯数常量与索引算法。工作表保持只读防误改。若功耗敏感可改用 Arduino Nano。
制造工艺
- Arduino Nano飞行模拟2020控制面板——LCD与CDI显示
- Arduino 飞行模拟器 2020 实体开关面板
- Arduino + Excel 驱动 8×8 与 16×16 WS2812 RGB 矩阵动画编程
- “走开”机器人:Arduino 入门级超声波避障发声装置
- 仅用 3 根模拟口驱动 4×3 矩阵键盘:电阻分压识别键值
- TinyML 关键词检测控制 RGB 灯 — Arduino Nano 33 BLE Sense
- 2020年塑造数字化制造的三大核心趋势
- 中小企业国际化扩张制胜三策:拥抱电商、善用金融科技、寻汇率专家
- 零售商必须从一年动荡中汲取的三大关键教训
- 工业设备维保与安全三大铁律:全天候监测、分级计划、备件前置
- 重型工业设备采购三大铁律:固定/移动抉择、预算工程、需求锚定
- 全球物联网安全三大支柱:连接平台、私有IPX与生态协作