Arduino Nano 驱动 NeoPixel LED 矩阵:从零制作 10×15 全彩屏
元器件清单
| 元器件 | 数量 | 备注 |
|---|---|---|
| Arduino Nano R3 | 1 | |
| WS2812B NeoPixel 灯带 (30 LED/m, 5米) | 1 | 共 150 颗 LED,剪成 15 条×10 颗 |
| 跳线 | 若干 |
所需工具
- 电烙铁 (焊接灯带)
所需软件
- Arduino IDE
- Adafruit NeoPixel 库
- Adafruit GFX 库
- Adafruit NeoMatrix 库
制作过程
1. 准备灯条
购买 5 米、30 LED/米 的 WS2812B 灯带 (共 150 颗)。注意灯带上的箭头方向,数据只能单向流动,接反会损坏 LED。
2. 裁剪与排布
将灯带剪成 15 段,每段 10 颗 LED。在硬纸板上呈蛇形排布:第一行左→右,第二行右→左,以此类推 (Zigzag 模式)。
3. 焊接连接
- 每段灯带有 3 个焊盘:DI (数据输入)、5V、GND
- 首段 DI 接 Arduino D6
- 相邻段:前一段 DO → 后一段 DI,5V 并联、GND 并联
- 共焊接 14 处连接点
- 焊接后务必用万用表检查短路,短路会烧毁 Nano、灯带甚至电脑 USB 口
4. 测试验证
上传 Adafruit NeoMatrix 示例 neomatrix_test,参数设为:
Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(
10, 15, PIN, // 宽10, 高15
NEO_MATRIX_BOTTOM + NEO_MATRIX_LEFT + NEO_MATRIX_COLUMNS + NEO_MATRIX_ZIGZAG,
NEO_GRB + NEO_KHZ800
);
若屏幕滚动显示 "Howdy",说明矩阵制作成功!
完整测试代码
#include
#include
#include
#ifndef PSTR
#define PSTR // 兼容 Arduino Due
#endif
#define PIN 6 // 数据引脚
// 矩阵声明:10列 × 15行
// 第一个 LED 在左下角 (BOTTOM + LEFT)
// 列优先 (COLUMNS),蛇形排布 (ZIGZAG)
// GRB 色序,800kHz 驱动
Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(
10, 15, PIN,
NEO_MATRIX_BOTTOM + NEO_MATRIX_LEFT +
NEO_MATRIX_COLUMNS + NEO_MATRIX_ZIGZAG,
NEO_GRB + NEO_KHZ800
);
const uint16_t colors[] = {
matrix.Color(255, 0, 0), // 红
matrix.Color(0, 255, 0), // 绿
matrix.Color(0, 0, 255) // 蓝
};
void setup() {
matrix.begin();
matrix.setTextWrap(false); // 文字不自动换行
matrix.setBrightness(40); // 亮度 40/255 (约 16%,护眼省电)
matrix.setTextColor(colors[0]); // 初始红色
}
int x = 10; // 起始 X 坐标 (矩阵宽度)
int pass = 0; // 颜色切换计数
void loop() {
matrix.fillScreen(0); // 清屏
matrix.setCursor(x, 0); // 设置光标
matrix.print(F("Howdy")); // 打印文字
if (--x < -36) { // 文字完全移出左侧
x = matrix.width(); // 重置到右侧
if (++pass >= 3) pass = 0; // 循环切换颜色
matrix.setTextColor(colors[pass]);
}
matrix.show(); // 刷新显示
delay(100); // 滚动速度
}
关键参数解析
| 参数 | 含义 |
|---|---|
| NEO_MATRIX_BOTTOM | 第一颗 LED 在底部 |
| NEO_MATRIX_LEFT | 第一颗 LED 在左侧 |
| NEO_MATRIX_COLUMNS | 按列排布 (垂直条带) |
| NEO_MATRIX_ZIGZAG | 相邻列方向相反 (蛇形) |
| NEO_GRB | 色序 Green-Red-Blue (WS2812B 标准) |
| NEO_KHZ800 | 800kHz 高速模式 |
供电建议
- 150 颗 LED 全白最大电流 ≈ 150 × 60mA = 9A
- 实际动画平均电流远小于峰值,建议 5V/3A 以上电源
- 长条供电两端并联,中间每隔 1 米加装电源注入
- Arduino 与灯带共地,数据线建议串联 330-470Ω 电阻
原理图
进阶玩法
- 显示时钟、天气、股票行情
- 制作贪吃蛇、俄罗斯方块等小游戏
- 配合麦克风做音乐频谱可视化
- 多块矩阵拼接成大屏
制造工艺