描述
我想创建一个基于 Arduino 的机械彩色 Nipkow 显示器,无需复杂的机械加工即可制作。所以我决定设计和 3D 打印所有必要的组件——包括 Nipkow 磁盘本身。
对于拥有 3d 打印机并且对更具挑战性的 Arduino 项目感兴趣的每个人来说,它都可以轻松重现。下面的项目描述提供了如何构建的分步说明。
此项目中包含的磁盘可生成 32x32 像素图像,颜色深度为 18 位/像素 (RGB666)。它可以达到 25-30fps 的最大帧速率,足以获得稳定且无闪烁的图像。相对较高的色深和帧率提高了图像质量。
框图
大多数组件都很容易制造或从 Arduino 或 Amazon 获得,唯一的特殊部分是一个快速的三重 DAC LED 驱动器,用于控制每个 R、G、B 通道。它比标准的 Arduino Uno 需要更多的端口和内存。这就是我选择 Arduino Mega 的原因——它很方便,因为它有很多 IO 端口,而且它的内存更大(视频双缓冲区)。tripe DAC LED 驱动器的电子设备可能需要在面包板上花费更多精力,因此我决定设计自己的 PCB,该 PCB 非常适合这个项目。磁盘电机不受 Arduino 控制,而是 Arduino 将通过 IR 传感器单元每次旋转测量速度并重新调整像素读数的计时器。其他组件包括 MicroSD 读卡器和几个按钮。
方框图
说明 - 如何构建:
1. 打印所有部分(通过链接下载STL 文件...)
a) Nipkow 圆盘 32 孔(需要 >20x20 厘米的床)
b) 电机支架(前后部分)
c) LED 单元(支架、LED 插座、反射器和盖子)
d) IR 传感器(支架和盖板)
e) 框架部件(左右侧部件和顶部安装底座)
f) 可选:前面板(面板、2x 支架、SD 卡座)
1 / 2 • Nipkow 磁盘需要具有 >20x20cm 打印床的打印机
2. 组装所有印刷零件(见图片和视频说明)
a) 使用 4x M4x30 将框架部件拧在一起并安装在合适的(木制)接地板上
b) 将直流电机插入支架(前部使用 2 个 M4 螺钉固定)并使用 4 个 M4x16 安装在底板上添加法兰以将 Nipkow 盘安装在电机轴上(轴上的 2 个 M3 和 M6 螺母)
c) 使用 M3x12 将 LED 插座组装到 LED 支架上,使用 2x M3x20 安装在底座上。然后在反射器内添加反射箔,将 RGB LED 插入插座并滑动反射器以将 LED 固定到位。插入一小块(非常)薄的纸作为扩散器,最后用 M2 螺丝安装盖板
d) 将红外传感器支架安装在电机轴下方
e)可选:用 2 个支架和 SD 卡成型机组装前面板并固定在接地板上(看起来更干净一些)
f) 在将圆盘安装到轴上之前,在 Nipkow 圆盘上为 IR 传感器添加反射垫(距起始位置 90°)
1 / 18 •框架部件
3. 构建tripe DAC电子:
要么使用宽板(参见上面的框图),要么在原型条板上构建,或者构建 3x 6 位 DAC 的 PCB(这就是我所做的),请参见下面的一个 DAC(需要 3 个)的示意图
DAC + 输出驱动器电路之一的原理图
4. Arduino Mega 端口连接
a) 连接 SD 卡 (PG0->CS, PB3->MISO, PB2-> MOSI, PB1->CLK)
b) 连接红外传感器 (Dout->PE4)
c) 将 R、G、B 端口连接到 DAC(端口 A、C 和 L)
d) 将 3 个 DAC 输出连接到 RGB LED
5. 软件
a) 准备 Aduino IDE:将目标设置为 Arduino Mega
b) 通过 Arduino 库管理器安装“SDfat.h”(快速 SD 卡读取访问所需)
c) 获取我的 Arduino 源代码(见下文),它包含 2 个文件(主代码和测试图片)
d) 编译并上传到 Arduino 板
e) 转换您自己的图片或动画
详细说明 :
Nipkow 磁盘Nipkow 磁盘用于早期的电视系统,可以机械扫描或创建图像。该磁盘包含螺旋上的几个孔,在我的情况下将形成 32 行。在任何给定的时刻,只有一个孔通过 LED,这会改变它的亮度和颜色,从而在线条上创建单独的像素。
对于打印版本,磁盘直径取决于您可用的打印机。我使用了 Prusa iMk3S+,它给了我大约 21x25cm 的水平打印空间,所以我决定使用直径为 20cm 的磁盘。使用这种磁盘尺寸,孔(=线)的数量在某种程度上受到限制,因为更多的孔会导致更小的像素尺寸和更不准确的孔形状。我尝试了最多 48 孔的版本,但结果不是很好,而且 Aruduino 的内存(帧缓冲区)太有限,所以我决定坚持使用 32 孔的版本作为一个很好的折衷方案。
为了轻松构建多个磁盘,我在 PC 上创建了一个程序,该程序允许在阿基米德螺线(由极坐标方程 r = θa 定义的曲线)上创建多个孔并将此几何图形输出为 SVG 文件,可以通过以墨水空间为例。然后我更改了参数,直到磁盘设计符合预期,最后将 SVG 文件导入任何 CAD 程序(例如 Tinkercad)并挤压成 3D 对象。注意:这个工具仅供我自己使用,它更像是一个“hack”,并且没有正确开发。所以我不会让它可用。
电机我使用常见的 12V DC 电机类型“XD3420”,您可以轻松找到(例如在亚马逊上)。在低于其最大规格使用时,它最大仅消耗 0.5A-1A 并且非常安静。磁盘旋转将由红外脉冲传感器在每次旋转时测量,因此我们不需要主动控制它。使用任何现成的 12V PWM 调节器模块来控制电机。使用合适的外径 32mm、内径 8mm 的法兰连接电机轴上的圆盘。
RGB LED您可以找到各种高功率 LED“芯片”型产品,其中大多数是在金属外壳上粘合 9 个单独的 LED。它们中的大多数将充当一个白色 LED(涂层),但也有提供 3x 红色、3x 绿色、3x 蓝色灯串的变体。我正在使用的 LED(在亚马逊上找到)使用大约。每个 LED 灯串 6-10V,消耗约 6-10V。最大 350 毫安
RGB 电源 LED
3 通道 DAC LED驱动器更多的努力是为 3x(R、G 和 B)通道 DAC 创建电子设备。为了实现足够快的 DAC 转换,我选择了一个“6-bit R2R-ladder DAC”,它与 IO 切换的速度一样快,但需要许多并行输出端口(因此我为这个项目选择了 Arduino Mega,它有许多数字IO!)。在 R2R 梯形图之后,使用同相运算放大器级来维持敏感的输入信号电压,并确保运算放大器的输出不受负载变化的影响。最后,一个 n 沟道 FET (IRLZ34N) 将驱动相关的 LED 输出通道。这个 FET 的导通电阻低,散发的热量也少,所以我们不需要散热器。使用电位器,可以调整每个通道的不同偏移和增益(亮度)。使用提供的测试图片。
电路本身并不难,但因为你需要它 3 次,在面包板或原型 PCB 上组装它可能有点不愉快。因此,对于我的最终版本,我决定在一个简单的 PCB 上放置 2 个 DAC,并使用当地的 PCB 制造商来制造 PCB。通常您需要订购 3-5 个 PCB,因此在我的情况下,我将其中两个堆叠在一起。
我为 DAC 制作了自己的 PCB
为了避免在每个像素读出时进行任何位移操作,我只是使用了 3 个完整的 8 位端口(A、C 和 L)作为 DAC 的输出。即使这可能有点“浪费”引脚,Arduino Mega 有足够多的可用 IO,它使软件非常干净。
这是从 Arduino Mega 到 3 个 DAC 通道的连接:
端口(引脚)-> DAC 通道
A2(24) -> R0 C2(35) -> G0 L2(47) -> B0
A3(25) -> R1 C3(34) -> G1 L3(46) -> B1
A4(26) -> R2 C4(33) -> G2 L4(45) -> B2
A5(27) -> R3 C5(32) -> G3 L5(44) -> B3
A6(28) -> R4 C6(31) -> G4 L6(43) -> B4
A7(29) -> R5 C7(30) -> G5 L7(42) -> B5
其他电子零件
- IR 传感器:我使用 IR 传感器“TCRT5000”来测量磁盘转速。传感器发射 IR 并检测它是否接收到来自磁盘反射同步条的回波(您需要将其放在磁盘上!)。为了防止环境噪音,我在传感器周围创建了一个简单的屏蔽。这样,我们可以将灵敏度调到最小值,因为在反光条出现之前,它通常看起来很暗。该模块将使用 VCC 和 GND 和数字输出连接到:
Dout -> PE4(2) / INT4
- SD 卡:要将连续图片显示为大文件中的“电影”,SD 卡可以方便地存储二进制文件。Arduinos 的典型 SD 卡模块提供了一个 SPI 接口来连接到 Arduino。该项目中 Arduino Mega 的引脚是:
PG0(41) -> CS
PB3(50) -> 味噌
PB2(51) -> 莫西
PB1(52) -> 时钟
注意:启用视频模式后,软件将循环使用它可以在根目录中找到的所有文件。没有检查有效的格式或扩展名等!因此,请确保您只将包含以下转换器工具制作的有效“二进制视频数据”的文件放在 SD 卡上。
- 按钮:为了轻松控制输入选择和播放/停止/曲目跳过,我使用安装在(可选)前面板上的 2 个按钮和 1 个开关:
模式选择(图片或视频)-> PB7 (13)
播放/停止 -> PB6 (12)
下一首 -> PB5 (11)
注意:我没有为开关实现任何软件去抖动,因此您需要并行使用 100nF 电容(参见框图)。在我的情况下,这绝对没问题。
软件
用于调试的串行接口
Nipkow Media Converter PC Tool我创建了一个简单的转换器工具来转换我在这个项目中包含的位图,以方便使用。此工具仅适用于 Windows。它可以:- 将一个或多个位图(24 位)转换为头文件(用于编译)以直接显示来自闪存的静态图片- 将多个位图(24 位)作为动画序列转换为 SD 卡的更大二进制文件为“视频"该工具只是一个 EXE 文件,您应该将其放置在包含要转换的位图的目录中。确保位图为 32x32 像素大小、未压缩并以 BMP 24 位/像素格式存储。还要确保位图顺时针旋转 90°。
!注意:这个软件工具只是为这个项目制作的,没有经过全面测试,可能并不完美。它是“按原样”提供的,使用它来承担我们的风险。对于我的项目,它确实运行良好。
媒体转换器工具
静态位图转换说明:
a) 启动后,该工具搜索它所在的目录并列出它可以找到的所有位图。在列表框中选择一个或多个进行转换。
b) 选择输出类型:静态位图的“头文件” 将此项目的“输出颜色”选项设置为“颜色”。我还将它用于早期的单色原型。
c) 单击转换,转换过程将开始并在框中报告状态消息
d) 它始终使用第一个文件名作为输出名称,例如:输入文件 1:0Testpic3232.bmp -> 输出文件:0Testpic3232.h您需要将其重命名为例如“bitmaps.h”,然后再将其包含在您的项目中
f) 将头文件复制到您的 Arduino 项目文件夹并重新编译(注意:如果您包含的文件过多,超出了可用闪存大小,则会出现编译器错误)
g) 确保您在 Arduino 源代码中正确设置了包含文件的数量:“const byte numberpics = 4;”
动画说明(视频转换) :
注意:需要附加工具“virtualdub”来从视频文件中生成一系列位图。
a) 下载并打开“virtualdub”
b) 打开一个视频文件
c) 在“video->filters”中添加 2 个条目:“resize 32x32”和“rotate 90° right” (根据需要随意调整其他设置,例如合同、帧速率等...)
d) 转到“文件导出图像序列”并将输出设置为“Windows BMP”(注意:根据您的视频大小,这将创建很多图像!)
e) 将 NipkowMediaConverter 放在输出目录中,启动它并选择所有图像(它们将具有前导数字,例如:000video.bmp、001video.bmp 等)
f)确保您将输出格式设置为“二进制”,然后开始转换(需要一些时间......)
g) 将 created.bin 文件复制到 micro-SD 卡的根目录
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !