用 Arduino Due 制作炫酷 POV 圆柱显示器——分步指南
项目简介
这是我的第一个 Arduino 项目,灵感来源于多个制作者的 POV(视觉暂留)球体显示项目 [2,3,4]。
视觉暂留 是指人眼将多个离散图像融合为单一图像的光学错觉,被认为是电影和动画动态感知的解释 [1]。
参考项目 [2,3,4] 采用离散 LED 和移位寄存器实现 POV 球体显示,而我的装置使用旋转圆柱体和现成的 RGB LED 灯带作为 POV 显示屏。
主要特性
- POV(视觉暂留)显示
- 在旋转圆柱上显示动态 GIF 图片
- GIF 图片存储在 Arduino 的 RAM 或 Flash 中
- 通过蓝牙与 PC 通信
技术规格
- 圆柱直径:200 mm
- 圆柱高度:200 mm
- 圆柱材质:泡沫塑料
- 圆柱重量:420 g
- 4 条基于 LPD8806 的 RGB LED 灯带
- 屏幕分辨率:151 × 40 像素
- 基于 Arduino Due
- 包含 HC-06 蓝牙模块
- 通过蓝牙由 PC 控制
机械结构
机械结构如下图所示。装置由底盘和转子两部分组成。

底盘由两块圆形胶合板圆盘通过三根螺纹杆连接,圆盘间距 120 mm。中间装有两个滚珠轴承和轴(同样使用螺纹杆)。轴通过两个伞齿轮和一个同步带由电机驱动,转速高达 1300 RPM(22 Hz)。
转子由两个泡沫塑料圆柱和两个圆形铝盘组成。泡沫圆柱粘接在下盘上,上盘可拆卸,用于将转子固定在轴上。

电子模块位于转子上部,包括:
- Arduino Due 开发板
- 自制 Arduino Due 扩展板
- 电源板
- HC-06 蓝牙模块

电源(7.5V)通过滑动触点和集电环馈送至电源板。四条 LED 灯带共 40 个 RGB LED,通过线缆连接到 Arduino 扩展板。

四条 LED 灯带按下图布局放置。通过四条错位排列的灯带,Y 轴方向上 LED 间距缩减为 1/4,X 轴方向由软件控制。软件每转更新所有 40 个 LED 151 次。图中网格对应可见像素。
电子电路
电子电路详见附件 PDF 原理图。
电源板采用 LM317 稳压器,输入 7.5V,输出 4.6V,为 Arduino Due 和 LED 灯带供电。
自制扩展板包含 LED 灯带连接器和红外接收电路。红外接收器用于检测转子位置,连接至 Arduino 的定时器/中断输入引脚。
四条 LED 灯带命名为 STRIP0 至 STRIP3,每条含 5 个 LPD8806 驱动芯片和 10 个 RGB LED。STRIP0 接 USART0,STRIP1 接 USART1,均以 SPI 模式工作。STRIP2 和 STRIP3 串联后由 Arduino 的 SPI 接口驱动。
HC-06 蓝牙模块接 USART3,由 Arduino 提供的 3.3V 供电,用于与 PC 通信。
Arduino 软件
Arduino 软件由主程序(mpc.ino)和以下库组成:
- bt - 蓝牙模块驱动
- LDP8806 - LED 灯带驱动
- MemoryFree - 检测可用 RAM
- mpcgif - 播放存储在 RAM 或 Flash 中的 GIF 文件
- pictures - 存储在 Flash 中的内部 GIF 图片
- trace - 软件调试功能
图片向 LED 灯带的周期性输出由中断驱动。使用两个翻转帧缓冲,每个缓冲存储一幅 40 × 151 像素的图像,每像素为一字节调色板索引。一个缓冲通过中断和 DMA 输出到 LED 灯带,另一个由主程序准备(如解码 GIF)。帧中断例程负责翻转缓冲。
每转产生一帧中断,由红外传感器触发。帧中断例程通过硬件定时器测量转速,并编程周期性列中断(每列一个,即每转 150 次中断)。列中断例程将当前列数据输出到 LED 灯带。为提升性能,输出通过三个并行工作的 DMA 通道完成。
完整 Arduino 源代码可在 GitHub 获取。
PC 控制程序
PC 控制程序(pccp)是运行在 Cygwin 下的 C++ 命令行工具,通过蓝牙与 Arduino 通信。支持以下单字符命令:
- 0-7 - 用颜色填充屏幕(黑、红、黄、绿、青、蓝、紫、白)
- t - 绘制三角曲线(测试图案)
- s - 启用/禁用显示图片旋转
- r - 绘制单行
- c - 绘制单列
- y - 播放存储在 Flash 中的内部 GIF 图片
- f - 通过蓝牙从 PC 下载外部 GIF 文件
- x - 播放下载的外部 GIF 文件
pccp 还提供图形用户界面接口,并显示当前转速(Hz 和 µs)及帧计数器值。完整源码见 GitHub。
图形用户界面
GUI 为通用 Windows 应用,允许选择要显示的 GIF 文件。该应用源自“Microsoft Windows Universal Samples”中的 FilePicker 示例 [5]。完整源码见 GitHub。

参考资料
- https://en.wikipedia.org/wiki/Persistence_of_vision
- RGB LED GLOBE - POV - 40 x 200
- POV Globe Display RGB
- POV Globe Display RGB - 项目描述(德语)
- https://github.com/Microsoft/Windows-universal-samples
代码仓库
- Arduino 源码:https://github.com/hanoba/povc-arduino
- PC 控制程序:https://github.com/hanoba/povc-pccp
- 图形用户界面:https://github.com/hanoba/povc-win-app
原理图
原理图请参考附件 PDF 文件。
制造工艺
- Arduino POV 时钟:自制视觉暂留 LED 显示器
- 用 Arduino Nano 和 Nokia 5110 LCD 自制 20kHz 示波器:简易 DIY 指南
- 智能窗帘:基于Arduino与太阳能的自动光控系统
- Arduino Due 触摸屏井字棋游戏 — 人机对战
- 智能存钱罐:Arduino Nano 控制硬币识别器实现余额显示
- 意大利语单词时钟:Arduino Nano + NeoPixel 144 灯珠 + LCD + RTC 打造
- Arduino + HC-05 蓝牙控制 LED:MIT App Inventor 手机 App 开发全攻略
- 自制简易红外避障传感器:IR LED + 光电二极管 + Arduino
- 基于Arduino MKR Fox 1200构建可靠Sigfox千瓦时电表
- 蓝牙温度监测仪:Arduino Nano + NTC 热敏电阻 + HC-06 无线传输
- Arduino UNO + 以太网盾板实现低成本太阳辐射测量仪(热电堆原理)
- 为Arduino构建隔离模拟输入电路