本期为大家带来一个「宏篇巨作」——一个极具未来科技感的磁流体显示屏。
之所以称为「巨作」不仅因为项目本身的硬核程度,更因为要花费很多银子和大量的时间来试验和调试。请看视频。
https://v.qq.com/x/page/h095851rtwh.html
由于该项目投入较大,而且制作这类项目通常会有设计者自身的想法与需求,设计要求也会有所不同。所以本篇不会详细的介绍项目是如何具体构成的,主要介绍构建项目中可以学的知识、可以避免的失误的地方、需重点注意的细节以及处理铁磁流体的一些硬核技能。
Applied-Procrastination-Fetch-Driver-Circuit-v1r2.brd
PCB design [534279 Bytes at 2020-04-28, 12 次下载]
Applied-Procrastination-Fetch-Driver-Circuit-v1r2.sch
Schematics [502524 Bytes at 2020-04-28, 8 次下载]
FerroTec EF-H1 铁磁流体 60ml × 1
JSP-1515 电磁铁 × 252
10mm M4 螺丝 × 252
两针脚的连接器 × 252
丙烯酸树脂板 × 2
定制电路板 × 10
1200W 服务器电源 × 1
PS 配电板 × 1
Molex 端口(MiniFitJr)电源线 × 10
Teensy 扩展板 3.6 × 1
DS3231 RTC 模块 × 1
胶合板 × 若干
木螺丝 × 若干
木胶 × 若干
2mm 玻璃板 × 若干
6mm 玻璃板 × 若干
超级胶水 × 若干
粗盐 × 若干
蒸馏水 × 若干
电线 × 若干
1、罐子要保持干净,防止黑色的磁流体被弄脏。
在开始之前,先来介绍一下铁磁流体。你可以了解关于磁流体容器的小知识。其中,重要的一点是在加入铁磁流体之前要先加入盐水。
这里采用的是玻璃容器。它比丙烯酸树脂材料更容易保持干净。虽然在项目分享后,收到其他 maker 关于使用丙烯酸树脂材料的成功经验,而且最近的“超疏水涂层”有助于丙烯酸树脂材料的使用,但目前已没有机会进行测试。
2、显示功能的通用性。
在通常情况下,永磁体和电机是激活铁磁流体的好方法。例如时钟。我们希望该显示器不仅能显示时钟功能,还能够实现一些炫酷的动画。因此,我们使用电磁铁代替永磁体和电机。
其优点有:
机械设计更简单。
活动部件更少。
运转更加安静。
由于可以完全关闭电磁体,无需离开容器,体积更小。
通过以其他方式发送电流来改变磁体的极性(以后实现)。
3、铁磁流体是垂直运动。
因为没有水平显示器,不能以 45° 或类似角度镜面的显示。项目采用垂直的方式进行,在展示物体的时候都必须与重力对抗。
由于设计限制,需要分别控制每个磁体,并将力施加到铁磁流体上。不能使用任何多路复用技术来简化电子设备,因为那样会很大程度的降低占空比,以至于无法提起铁磁流体。
最后,决定采用动态的更改“像素”的力的方法,通过这种精确手段来实现项目的优势。由于电磁体在较低的占空比下施加的力较小,因此可以使用脉宽调制 PWM 来控制铁磁流体定点给力的大小。但也有局限性,例如点的最大和最小尺寸无法控制。
需要注意的是:要对电磁体进行单独控制,并且没有微控制器可以提供 252 个 PWM 的输出,稍后将再次讨论。
4、能够显示时钟。
正如前面提到过,显示时钟是通用的功能。因此,需要足够的磁铁来显示四位数字和冒号分隔符,例如“13:37”。最小显示尺寸为 5x3 像素,但还需要在每个字符之间分隔一列,而且底部需要分隔两行。最后,最小矩阵为 7x17 像素。
5、选用 16:9 显示格式的内容。
由于时钟并不是显示器上显示的全部内容,因此没有选择 7x17 的磁铁。最后选用 16:9 的格式,希望能够具有较高的分辨率和像素密度。
提高分辨率意味着需要大量磁铁,而较小的磁铁不一定比大磁铁便宜。最后,选择了直径为 15mm 的 12x21(252)的电磁体,事实证明效果还不错。
6、板载动画。
该项目是基于 Teensy 3.6 扩展板构建的,附带 SD 卡插槽,能够使项目更加轻松的完成。与最常见的 Arduino 开发板相比,它的优势是速度极快,并且兼容了Arduino 的所有优势。不过,最初使用 Arduino Mega 进行原型制作,而对于下一代 PCB(V2),会一直使用它。稍后在讨论 PWM 时,将会详细介绍。
1、处理容器。前面我们曾经提到了如何选用容器以及细节处理的项目,可以点击了解。
https://www.instructables.com/id/Really-Beautiful-Swimming-Ferrofluids/
最终选择使用玻璃容器,但还要进行一些实验去除容器中的杂质。因为带有杂质和粗糙的表面会使铁磁流体容易被卡住,留下污点,因此获得光滑的表面非常重要。
有四种处理方法:实验室级酸,实验室级碱,普通醋和“无”作为对照。此外,使用了两种不同类型的盐来制作成悬浮的盐水。一种含有抗结块剂,另一种是纯海盐。将每一个组合中的两个元素进行组合,不断是验证哪种搭配更合适。
每一组的实验的结果都不一致,最终没有一个样品是非常干净。但还是有些收获的,请你详细的参考处理容器以及细节的链接,例如,在添加铁磁流体之前,需要将盐水在容器里放置一会儿。
其中,导致实验结果不一致、没有记录的变量是将“煮沸的”铁磁流体,使用吸管将其从主烧杯转移到样品中。我们并不确定是否需要沸腾的铁磁流体,但是我们这样做了,并不建议你跳过这个步骤。如果你沸腾处理了,请务必将其搅拌直到转移到想要的位置,转移液体时将吸管放置在底部上面和流体的下面。根据经验,底部比中间包含更多凝结的铁磁流体,而表面更容易起泡。
最后,重新选择容器,使用两块 100x100mm 2mm 厚的玻璃和一块 6mm 厚的玻璃制作一个玻璃的容器,使用胶水粘在一起。最后,效果还不错。
磁铁需要安装在某物上,以下是主要考虑的因素。
1、磁铁图案的选择。
最初磁铁的图案为六边形,因为它的有效面积最大,从而减小显示屏的尺寸。有效面积是指大部分区域被强磁场覆盖,这样间隙会更小。
但是这个策略有很大的问题,刚开始时并不明显,磁铁的安装是十六进制的。铁磁流体在其间移动的任何两个磁体都必须具有相反的极性,以便它们的磁场可以重新连接。如果两个磁体具有相同的极性,它们的磁场将会彼此排斥,它们就会形成一条没有磁场的尖锐的线。除非关闭其中一个磁铁,使它能够获得足够的动量通过,否则铁磁流体就不能越过这条线。
在六边形网格中,任何给定位置的相反极性的磁铁将严重向一个方向倾斜。绘制动画时会非常的困难并且费时。
因此,最后选择了更为常见的笛卡尔“正方形网格”。相反极性的电磁体沿 x 和 y 轴对齐,从而使其更易于编程和设置动画。
2、底座材料的选择。
在选择磁铁底座材料时,并不知道磁铁到底会变得有多热。只是担心网格中间的磁铁会被许多其他热磁铁包围,强力胶可能会熔化甚至会起火。因此,将磁体安装在金属上,金属可以充当散热器。
最初考虑购买定制的散热器,可以直接用螺钉将其安装在磁体上,但由于预算的限制,最终使用由两片丙烯酸树脂板激光切割而成的底座,效果很好。磁铁确实会变热,但实际情况还好。而且在被动冷却下运行。现在还没有安装风扇或其他任何设备,如果需要,可以随时添加。
3、易用性和易更换性。
可以尝试对铝板进行 CNC 加工。尝试激光切割制作模具,以便可以在不切断连接器的情况下从中移除磁铁安装到电线上。因为安装组件会花费很长的时间。
项目中,要将足够的功率分配给每个磁体并单独进行是非常大的挑战。它们的工作电压为 12v,因此要处理相当大的电流。
如图片所示,最初的版本比较笨重,从而导致体型比较大,但是它们易于焊接和处理,提供了参考价值。
最后,采用了几个很小的 ULN2004N 螺线管驱动器 IC 替换了所有笨拙的大晶体管,效果不错。
下一步的计划
现在,还需重新设计电子产品,但由于全球疫情的原因,时间尚未确定。下一次迭代将进一步优化。例如,组件的尺寸以及配合度还有电线的整理等。它还将提高 Fetch 的功能。
外壳是由激光切割的木制板制成,还有些问题需要改进。将来会采用金属外壳。
其中有两个问题:
1、玻璃容器无法通过外壳来固定。如果外壳的前壁掉落,容器也会掉落。因此,需要使用木胶密封所有的接缝,以防止这种情况发生。
2、组装的过程。组装时需要花费时间和耐心。
布线
将 PCB 的配电连接到 PSU 上的一个开关按钮上,插入电源线后需要按下该按钮。因此需要将 PSU 放置在如图所示的方向上,可以使用木棍将其穿孔(按钮扩展器)。
最后,如果将一个有线按钮与按下的按钮进行平行焊接,这样扩展的按钮更容易安装在外壳上。由于更改的较晚,电源线只能推向壳内的后面。
最初的设定不仅适合动画程序的需求,而且还有可扩展的空间,适用于很多其他的程序的使用。例如:Aseprite。
https://www.aseprite.org/
它是像素艺术家的首选编辑器之一,具有强大的社区和脚本编写的功能。开发过程非常的透明,即使许可证不完全开源,所有代码也可以在 github 上获得,如果你会自己编译,则可以免费使用。
点击链接了解关如何操作的说明。
https://github.com/aseprite/aseprite/blob/master/INSTALL.md
此外,半开放式的好处有:
1、通用编程语言完善 API。了解文件类型“ .aseprite”的内部结构非常的重要。
2、程序因为有资金的支持会积极开发新功能并修复错误,程序将日趋完善。
当前,工作流程基于外部 python 脚本。
https://github.com/appliedprocrastination/aseprite_to_fetch_parser
该脚本将 .aseprite 文件转换为由自主开发的并易于使用的两部分文件的类型。这两个部分是数据部分和标头部分。数据以二进制形式存储,标头以可读的 ASCII 格式存储,便于配置和更改动画的显示方式。将来,会考虑更新文件的类型。目前还比较满意所包含的数据量,暂时不会进行更新。
将“Fetch specific”文件存储在 SD 卡上,并插入系统中。将要增加通过串行进行远程上传的功能,例如:蓝牙或 WiFi。
目前,铁磁显示器在基于 Teensy 3.6 扩展板上运行,并运行自主开发的开源编码。
https://github.com/appliedprocrastination/FerroFetchFirmware
在固件中进行的最要紧的更改是将更多信息保存在“动画”和“帧”类中(例如,起点和屏幕上的当前位置),以便使编程游戏和动态动画更加容易。现在,只能展示预制动画。这些更改也会反映到文件类型中。
因为显示器是完全垂直的,所以要处理重力作用下的表现。我们采用的方法是在软件中实现脉冲宽度调制,可以选择性的对某些磁体施加较小的力。再通过软件将施加过较小力磁体的上方磁体施加最大的力。但是,这有一定的局限性。最明显的是,开始使用的电磁体程度不大时,能够设置的最大和最小 Blob(指图像中的一块连通区域)之间的动态范围很小。
目前,由于没有任何用于更改像素占空比的专用硬件,所以需要在软件中编写 PWM 驱动。在原型制作期间,使用 Arduino Mega 来实现时遇到了挑战,但在优化后它工作得很好。
目前,正在开发下一版电路板,以适用于特定的 PWM 硬件控制的电磁体,获得 Teensy 带来的高速度。所以,必须要将微控制器升级到 Teensy 3.6 扩展板的水准,因为使用 Arduino 无法在系统中存储动画。Teensy 3.6 扩展板带有内置的 SD 卡插槽,它非常的实用。
为了在未接电源时保持时钟的时间,我们加入 DS3231 精度“实时时钟”RTC 模块。经过一些代码调整之后, https://github.com/appliedprocrastination/FerroFetchFirmware/commit/ecc45b621966666171e8ed8b57e48b67e5f96fff 。
可以在显示屏上使用“时钟模式”。
实现起来非常的简单,但还可以不断的优化。当前的工作方式是,当显示器在“时钟模式”下运行时,它将以一分钟的分辨率显示时间。每过一分钟,显示器就会从 SD 卡读取新动画并进行显示。
显示器采用几种不同的模式,它可以为生活提供方便,例如可以在会议上展示这款炫酷的显示器。目前为止,我们使用未标记的四向开关来更换模式,将来可能采用磁带和永久标记来替代。
项目之初,准备为容器设计两个玻璃窗。如果可行,这是一种简单而获得高精度和耐用的容器的方法。首先摸索窗口的正确尺寸,可以通过测试来检验它是否可行。
先在密封处上钻一个孔,然后加水。观察几天后,没有发生泄漏后,再将水换成醋。该技巧在如何选用容器的链接中可以详细了解。其中要求清洁玻璃表面,以使铁磁流体不会粘住。
如图所示,这些玻璃窗口的内部有一层塑料膜,一两天后开始分解。更主要的是,玻璃碎片开始在铝边框散开,然后醋让其生锈。因此,请不要使用窗口作为你的容器,除了铁磁流体之外,不要将任何金属的放入容器。生锈的显示器可不好看。
另外要注意电源的连接方式。保护好自己并确保电路板不被烧毁。
1、当前的方案仍有可以改进的地方。脉冲宽度调制 PWM 是主要问题之一,这也是要在软件中进行 PWM 的原因。在下一版本中,将在硬件中实现 PWM,以减轻 CPU 的负担。
2、项目中每行只有一块板子,并且每块板都没有多余的运转。最后,项目将拥有十二个板和每个板有二十一个连接,而不是最初的十个板和每个板有二十八个连接。
3、显示器体积过大,这是由于之前设计电路板时,忘记考虑电磁铁导线的长度。当每个电路板控制自己的行时,编程快速代码要容易得多,而且一路放置在最左侧的电路板与右侧的磁铁相距太远,无法保持美观和平整。最后,不得不将板子放置在一个“水平圆顶”中,占用了很多不必要的空间。
4、最后改进的方式是以菊花链的方式连接 I2C 总线,从而大大减少了机箱内部的散线。如果在下一版中,能够采用行控制器主板,这样就不需要使用大量电线。