POV Cylinder with Arduino Due
组件和用品
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 3 | ||||
| × | 1 | ||||
| × | 2 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 2 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 3 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 2 | ||||
| × | 2 |
必要的工具和机器
| ||||
| ||||
| ||||
| ||||
|
应用和在线服务
| ||||
| ||||
| ||||
|
关于这个项目
简介
这是我的第一个 Arduino 项目。我的工作受到几个创客项目的启发,这些项目创造了视觉显示持久性 [2,3,4]。
视觉的持久性 (POV) 是指视觉错觉,其中多个离散图像在人脑中融合为一个图像,并被认为是电影和动画电影中运动感知的解释 [1]。
项目 [2,3,4] 使用离散 LED 和离散移位寄存器实现 POV 地球仪显示器。相反,我的设备使用旋转圆柱体和现成的 RGB LED 灯条作为 POV 显示。
我的 POV Cylinder 的主要特点是:
- POV(视觉暂留)显示
- 在旋转圆柱体上显示动画 GIF 图片
- GIF 图片存储在 Arduino 的 RAM 或 Flash 中
- 通过蓝牙与 PC 通信
技术概述
- 圆柱直径:200 毫米
- 气缸高度:200 毫米
- 圆筒材料:泡沫塑料
- 钢瓶重量:420 克
- 4 个基于 LPD8806 的 RGB LED 灯条
- 屏幕尺寸 151 x 40 像素
- 基于 Arduino Due
- 包括 HC06 蓝牙模块
- 通过 PC 上的蓝牙进行控制
机械结构
机械结构如下图所示。
该装置包括底盘和转子。底盘由两个圆形胶合板组成,通过三个螺纹杆连接。圆盘之间的距离为 120 毫米。中间有两个滚珠轴承和轴。轴也使用螺纹杆。轴由电动机通过两个冠状齿轮和齿形带驱动。转速高达1300 RPM (22 Hz)。
转子由两个泡沫聚苯乙烯圆柱体和两个圆形铝盘组成。聚苯乙烯泡沫塑料圆柱体粘在下盘上。上盘可以取下。它用于将转子连接到轴上。
电子元件位于转子的上部。它包括以下几个部分:
- Arduino Due 板
- Arduino Due 板的自制屏蔽
- 电源 (PS) 板
- HC-06 蓝牙模块
电源(7.5V)通过滑动触点和接触环馈送到电源板。
使用了四个 LED 灯条,总共使用了 40 个 RBG LED。它们通过电缆连接到 Arduino Shield。
四个 LED 灯带如下图所示放置。通过使用四个移位的 LED 条纹,LED 之间 Y 轴上的距离除以 4。X 轴上的距离由 SW 处理。软件每转更新所有 40 个 LED 151 次。图中的网格对应可见像素。
电子电路
电子电路显示在随附的 PDF 原理图中。
有一个带有LM317稳压器的电源板。输入电压为 7.5 伏,输出电压为 4.6 伏。电压调节器为 Arduino Due 板和 LED 灯条供电。
还有一个自制的Arduino盾牌。它包含连接到 LED 灯条的连接器电缆和用于 IR 接收器的电路。 IR 接收器用于检测转子位置。它连接到Arduino的定时器/中断输入。
有四个名为 STRIP0 到 STRIP3 的 LED 灯条。每个灯条有 5 个 LPD8806 LED 驱动器和 10 个 RBG LED。 STRIP0 连接到 USART0,STRIP1 连接到 USART1。两个 USART 都在 SPI 模式下运行。 STRIP2和STRIP3串联,由Arduino的SPI接口驱动。
为了与 PC 通信,HC-06 蓝牙模块连接到 USART3。蓝牙模块由Arduino板提供的3.3V供电。
Arduino 软件
Arduino 软件由主程序 (mpc.ino ) 和以下库:
- bt - 蓝牙模块驱动软件
- LDP8806 - LED 灯条驱动软件
- 无内存 - 检测可用 RAM 内存的功能
- mpcgif - 播放位于 RAM 或闪存中的 GIF 文件
- 图片 - Flash 中存储的内部 GIF 图片
- 跟踪 - 软件调试功能
图像到 LED 灯条的周期性输出是由中断驱动的。有两个切换帧缓冲区。每个帧缓冲区保存一张 40 x 151 像素的图片。每个像素是一个字节的调色板索引。当一个帧缓冲区通过中断和 DMA 输出到 LED 灯条时,另一个帧缓冲区由主程序准备(例如通过解码 GIF 图片的函数)。帧缓冲区的切换由帧中断例程完成。
IR 传感器触发每转一帧中断。帧中断例程测量(通过硬件计时器)演化速度并使用硬件计时器对周期性列中断(每列一个,即每转 150 个中断)进行编程。列中断例程将当前列输出到 LED 灯条。出于性能原因,输出是通过三个完全并行运行的 DMA 通道完成的。
完整的 Arduino 源代码可在 github 上找到。
PC控制程序
PC 控制程序 (pccp ) 是一个用 C++ 编写的命令行工具。它在 Cygwin 下运行并通过蓝牙与 Arduino 通信。 pccp 允许使用以下单字符命令控制 POV Cylinder:
- 0-7 - 用颜色填充屏幕(黑色、红色、黄色、绿色、青色、蓝色、紫色、白色)
- t - 绘制三角形曲线(作为测试图)
- s - 启用或禁用显示图片的旋转
- r - 绘制单行
- c - 绘制单列
- 是 - 播放存储在闪存中的内部 GIF 图片
- f - 通过 BT 从 PC 下载外部 GIF 文件
- x - 播放下载的外部 GIF 文件
pccp 还提供了图形用户界面的界面。此外,它还显示当前旋转速度(以赫兹和微秒为单位)和帧计数器值。
完整的源代码可在 github 上找到。
图形用户界面
图形用户界面是一个通用的 Windows 应用程序。它允许选择要由 POV Cylinder 显示的 GIF 文件。该应用程序源自“Microsoft Windows 通用示例”[5] 中的 FilePicker 应用程序。
完整的源代码可在 github 上找到。
参考资料
[1] https://en.wikipedia.org/wiki/Persistence_of_vision
[2] RGB LED 地球仪 - POV - 40 x 200
[3] POV Globe Display RGB
[4] POV Globe Display RGB - 项目描述(德语)
[5] https://github.com/Microsoft/Windows-universal-samples
代码
POV Cylinder 的 Arduino 源代码
https://github.com/hanoba/povc-arduinoPOV气缸PC控制程序
这是Cygwin下运行的C++命令行程序https://github.com/hanoba/povc-pccpPOV Cylinder 的图形用户界面
这是一个 Windows 通用应用 https://github.com/hanoba/povc-win-app示意图
这是原理图。制造工艺