做了个辉光管时钟

2020-01-07 14:18:21 +08:00
 RedL0tus

本文原本是想要参加少数派的新年征文的,后来因为种种原因我自己滚了。想着写都写了总还是要给人看的,先在这边发一下。过段时间会在我博客上发个细节更多的版本,可能会把链接发在附文。

下面这图是文章里提到的头图。

然后我确实是不懂硬件,也是第一次用 Arduino,请各位大佬轻点,轻点(

下面是原文。


今年可以说是买了不少东西了。因为不明原因耳机电脑集体暴毙,买了 Final 家的 F4100 和 MBP 13 2019 等等等等,都是挺好的东西( MBP 的话前提是别出 bug,这是我这段时间对苹果最不满的地方了)。但是要说最喜欢的还是前两天刚刚做完主体部分的的辉光管时钟。

什么是辉光管

他们正式的名称实际上应该是叫数码管,是一种可以显示数字和其他信息的电子设备。

基本结构是在充有稀有气体的玻璃管里放入多个数字形状的阴极金属丝,还有连通的金属网阳极。往里面通入高压电之后(通常 170 伏左右)会激发阴极的数字附近的气体发光从而形成能看到的数字。一般情况下里面充入的气体是氖,造成一般情况下颜色是一种温暖的橙色。简单而又不是很准确的说法就是可以控制的小型霓虹灯。然后一般情况下分为侧视和顶视两种类型,故名思意就是一种是数字显示在侧面一种显示在顶部。通常顶视的比侧视的小很多也便宜很多。

做个辉光管时钟可以说是我一直的梦想之一。我最早知道辉光管这种东西是中学时看了一部叫命运石之门的动画,里面有一样东西叫世界线变动率探测器,形象就是一个有着八颗侧视辉光管的钟。

当时就觉得它看着有一种特别的美感,但是我并不知道它们叫什么,甚至不知道它们是不是真实存在的。直到后面有一次偶然看到一篇文章讲述如何制作一个类似的东西当时钟,成功给我种了这棵草。

但是现实是残酷的,现在这些管子的售价可以说是非常高昂了。尽管单个成本并不算高,早年也是大量生产的物品,但是因为种种原因它们早在上世纪五六十年代就已经停产了,现在能买到的大多是那时美国或苏联剩下来的存货。这就造成这些管子的年龄应该比我们大多数人都要高,虽然这种“历史的积淀”让它们变得更加带感,但是同时也造成了本垃圾作为一个穷学生根本买不起成品;自己做的话作为一个只会写点 bug 的中学生,我并不会自己画电路也不会焊元件,更不用说高压电路了。就算排除别的所有东西德成本,管子本身的价格也还是不太能承受。最后这个梦想也就搁置了,而这一放就是几年。

开坑的原因

今年八九月份忙完了重要的事情之后就变得很闲,整天不知道做什么摸鱼就摸过去了,GitHub 上也很久没有新的提交了。十一月的时候感觉这样下去不行,一定要找点事情做,这棵以前被种下的草不知道怎么的又被我想起来了,然后就一发不可收拾了。

制作过程

首先要澄清的是我依旧不会设计电路,所以我先从寻找有没有能接受的成品或者 DIY 套装开始。当然也只能买顶视的管子,侧视的经典的比如苏联产 IN-18 差不多都要一百多刀一根,完全负担不起。

在开始做之前有在一个叫 Crowd Supply 的 DIY 科技产品众筹网站上看到有个叫 Nixie Tap 的钟已经在出货了,是一种使用四个小型的顶视管子配 ESP8266 微控制器的钟。他们提供 $99 的 DIY 套装和 $398 的成品。成品的价格我觉得不是很能接受,DIY 套装的话当我真的决定要做的时候已经没有了。于是无奈之下只得放弃。

经过一段时间搜索之后我发现基本还是没有可以接受的成品,要么买不到了要么价格太过夸张。于是我决定找找看有没有可以使用或者参考的电路设计,最好是能跟 Arduino 搭配使用的那种。在软件方面我并不怎么怕,对我来说主要的难点还是硬件上的东西。虽然从原理上来说要点亮管子最主要的东西就是升压电路,要把一般电路里使用的五伏或者九伏升压到一百七十伏左右,别的东西就只是简单的通电断电而已。我一开始的设想是用我这边闲置的上古树莓派 1B 来控制独立的升压电路,但是后来发现没有符合要求的板子,连接电池的话树莓派本身功耗可能相对也太高就放弃了。后来我发现一个叫 ArduiNix 的产品看起来挺不错的,价格也能接受。同时它们也有售卖成套的管子,也省得我从不同的渠道上购买。

最后决定使用 Arduino Uno Wi-Fi Rev 2 这个板子来控制,顾名思义比普通的 Arduino Uno 多一个 Wi-Fi 支持,同时比普通的 Arduino Uno 贵不少,但是省得我再接一个 ESP8266 出来。

时钟的功能的话还需要一个硬件 RTC ( Real-Time Clock,实时时钟),因为 Arduino 这种板子自己是没有办法在断电之后让时钟继续走下去的,重新设置又会很麻烦,本身精度可能也不高。于是购买了 DS3231SN,是我在普通渠道下能买到的精度最高的 RTC。

供电我决定使用早年购买的一个吃灰中的移动电源,配合一根能从 5V 2A 升压到 9V 1A 的线应该能满足需求。

当时以为很简单就能搞定,不过现实并没有那么美好,我一个硬件苦手还是没能避免出问题。

硬件的第一次尝试

起先想着虽然买不起侧视的,但是八个管子还是要的,于是购买了八个 IN-17 的套装。没几天之后东西到了(盒子我没拍照)。说实话我并不怎么会焊板子,这可以说是我第一次自己制作板子。电烙铁用的是几年前冲动消费买的十几美元一套的垃圾套装,焊锡用的也是套装里面自带的。那个垃圾烙铁在连续使用几分钟后会连手握的地方都边烫,那个垃圾焊锡的话融化得也慢。经过几小时的奋战之后搞定了驱动板,把万用表接上去能正常进行升压。

后来兴高采烈得去把连着管子的子板也焊了。但是接上去并给 Arduino 刷好了示例程序就傻眼了,显示的数字都是不完整的,几个不同的数字的部分重叠在了一起。

可以看到里面的数字并不成型

不甘心的我检查了下示例程序,虽然很烂但是并没有发现什么问题。拿万用表在板子上检查才发现我驱动版焊坏了,控制用的芯片的芯片座有几个脚不通了,与其他的种种原因结合起来最后结果就是我浪费了这一个驱动版的钱。

反思之后觉得是下面几点原因:

硬件的第二次尝试

上次浪费的那些钱我可以说是很心痛了,想着这次绝对不要出错就把他们官网上的产品都大概了解了一遍。最后决定买六个 IN-12 的管子,因为它们更大更好看,同时又是通过可拔插的针脚连接的,这能让我能更简单得保证管子没有焊歪。 单个管子不点亮是这样的

至于工具的话最后购买了 eDesign 的 TS80,焊锡换成了 Kester 的 6040 有铅焊锡。至于为什么不买白光的焊台,主要是我这边白光很贵而且体积太大。这个 TS80 是通过 USB Type-C 这样的精致接口供电的,我甚至能通过移动电源来给烙铁供电。后来的体验确实是比之前的垃圾好太多,完成得比上次快多了,效果也比之前好很多,老祖宗们说的工欲善其事必先利其器确实有道理。

同样的又是几天后收到了包裹。几小时的奋斗之后再进行了测试之后没发现什么问题,把管子接上去之后终于成了.

软件和硬件细节上的坑

(这部分如果嫌枯燥可以跳过,只要知道我最后把能用的程序写出来了就行了)

枯燥的硬件终于结束,终于到了我会一点的软件部分了。Arduino 使用的是一种魔改版的没有精简版 C++,或者实际上叫它是能 OOP 的 C with Classes 更恰当。我此前并没有写 C++ 的经历,但是好在他们把需要折腾的地方都给简化了,导致我看起来和写起来都没什么大问题。

起先想直接改原版的程序算了,但是后来感觉实在看不下去,写得实在是太烂了,有时还会出我觉得很迷惑的问题,于是我决定还是要自己从头写。在通读了示例代码之后写出了我觉得更好的抽象。

后来发现这个驱动板有个挺严重的问题。控制辉光管显示什么数字的原理很简单,仅仅是给对应的数字的阴极和共用的阳极通电就行,但是问题是每一个管子就有 11 个针脚(零到九共十个,还有一个阳极),六个管子接起来的话总共就要 66 个,那么这样的话如果像 ArduiNix 这样把管子跟控制板分离的话连接用的线的数量就会变得很多,板子也会变得超级巨大。而 ArduiNix 的解决方法是仅仅提供 20 个阴极和 4 个阳极,每个阳极对应着两个管子,然后 10 个阴极一组控制那两个管子上显示的数字,然后这样轮换下去。只要闪得足够快人眼就会认为它在常亮,也就是一种类似 PWM 的情况。这种设计思路我没弄错的话应该叫 Multiplexing,多路复用。这样的做法我确实可以理解,这样可以在缩小板子的体积的同时做到可以随时更换板子,而缺点就是驱动用的程序会变得更复杂。这也是为什么我觉得官方程序烂的原因之一,他们相当于是把本来可以通过循环搞定的事情用最笨的手动的方式解决了。还有个需要多路复用的原因是 Arduino 本身能用的针脚也有限,尽管用了译码器,零到九这十个针脚编码成二进制也还是需要需要四位,也就是四个针脚。这么一套下来已经把 Arduino Uno 除了 Serial 输出占掉的 0 和 1 号以外的所有数字输出针脚用完了。

我把基本功能实现之后想起来之前看到过还有种显示上的效果叫 Crossfade,简单点说就是原本的数字淡出,后来的数字淡入。但是在上文提到的这种多路复用的情况下我不是很确定怎样才是正确的实现方法。我本来以为是逐渐减少原本数字显示的时间然后延长新数字显示的时间就行,但是做出来感觉效果并不是很对,并且复杂度是越来越高了。而官方示例代码自称是有这种效果,但是实际对比之后发现他们做的 Crossfade 效果并不明显,就觉得这样凑和用算了。以后有空的话可以再试试看能不能实现。

接下来是调整时间上的问题,我虽然放了个看起来挺准确的 RTC 在上面,但是还是有需要调整的情况。自动校准的话我使用 NTPClient 这个库做了个通过 NTP ( Network Time Protocol,网络时间协议)自动校时。NTP 就是我们平时手机上或电脑上看到的那种自定设置时间背后的东西,通过这个协议可以跟网络上的时间服务器进行同步。但是不管是 NTP 还是 RTC 都是没有时区这个概念的,仅仅是用来同步国际协调时的,而 Arduino 使用的精简 C++ 的库里也没有处理时间相关的东西,这又是一种实现起来很麻烦的东西。我毕竟是做给自己看的所以有点问题也无所谓,只是简单做了一个偏移。至于手动调整的话如果加实体按钮的话需要加很多,我嫌麻烦,那些元件要少量的买也不太好买。于是我随波逐流用上了 Blynk 这个库,使得我可以在手机上控制它。但是有个问题是发送消息到 Blynk 的服务器上会造成延时,可能是网络的延时也可能是 Arduino 的性能太弱,结果就是会让前面提到的闪烁的时间间隔变长,让闪烁变得肉眼可见。所以现在的程序并不会把显示的数字提交到 Blynk 的服务器上,感觉还是有点遗憾的。Blynk 的控制端被我做成了这样:

我实在是不会做 GUI,我摆放这些控件的思路就两个字,塞爆!

所以如果你们要做或者我以后要再做一个的话,还是更建议自己画板子就是了。毕竟自己做的话一般明白自己需要哪些东西,只要把所有的都做成一体,或者使用别的更合适的方式连接驱动板和管子所在的板子就可以不需要多路复用,配合锁存器就可以让控制器从无休止的闪烁之中解放出来,成本可能会高一点但是就不会遇到我现在遇到的这些令人难过的问题。不管怎么样,最后做出来的至少能看。我写的程序源码可以在我的 GitHub Gist 上找到: https://gist.github.com/RedL0tus/b521a65cb32255e23a07fcf0d6cd425c

至于显示出来的效果嘛,顶上的 banner 就是我拍的照片。只是可惜我没有合适的设备可以固定管子,也没有相机和脚架,管子焊得也说不上完美,还是能看到到瑕疵的。

当前的总结

现在对于硬件方面我基本满意了,虽然有点歪,壳子也还没做。但是这毕竟是自己做出来的东西,逐渐膨胀的我还有我的成就感导致我觉得这就是我今年买的最好的东西。

晚上关灯之后拍的,我感觉可以说是非常漂亮了,题图就是从这张裁剪出来的

硬件我是 12 月 19 号完成的,程序我是在 12 月 31 晚上十一点半完成的,正好赶在新年前半小时,顺手在某个不存在的地方做了一个跨年倒计时直播。

说起来之前看到有人用 LED 配合亚克力板来模仿辉光管的效果,名字好像叫 Lexie,实际也挺好看的,寿命也会远比真正的辉光管长。如果只是要钟的功能的话它可以说是性价比很低的一种解决方案了,如果用普通的七段式屏幕或者 LED 点阵屏幕的话成本估计只有这个几分之一,同时远远比辉光管节能。与此同时真正的辉光管毕竟基本上都是半个世纪多以前的东西了,本身因为高压之类的问题寿命也不会很长。花这么多钱买这些做个寿命不长的钟听起来性价比非常低,但是对我来说做这些可以说是给自己圆梦了。感觉偶尔从效率啊性价比之类的东西之前让自己放松放松也不坏。虽然最后感觉钱包挺疼的就是了。

最后作为新时代恶臭青年,请允许我臭一下( x

就是这样了!大家新年快乐!

11071 次点击
所在节点    分享创造
76 条回复
Honekoneke
2020-01-08 16:41:40 +08:00
选择不看的心情有点复杂哎,不是不想看,因为知道看了就没啦所以就攒起来…

外壳,可能大概也许没你想的那么难整?
金属或者亚克力壳的话,淘宝有代做 3D 打印跟出 CAD 图的。
木壳的话,主要是工具比较费劲,能找到一些小家具店大概率他们也有木工可以代做。
选代做,只需要你量一下板子尺寸跟管子高度、半径提供过去就行叭,我猜…
手动的话,自己慢慢刨木头、锯木头比较费劲,也需要前期算好尺寸画个简单的结构图。
RedL0tus
2020-01-09 04:33:56 +08:00
@yyh0808 谢谢!我本来也这么想的,但是后来想想感觉树莓派好像不是很必要,所以就成了只用 Arduino。不过如果用树莓派的话感觉应该是可以只用树莓派的?

@mlhorizon 谢谢!
RedL0tus
2020-01-09 04:39:29 +08:00
@Honekoneke

嘛,那我就不引诱你看结局了(

外壳的话我这边不方便用淘宝的所以不知道应该怎么搞... 不过我这边社团老师说跟另外一个学校有合作,可以用他们的 3D 打印机,到时候可以看看能不能用。

建模的话我刚刚下载了个 Fusion 360,这两天看看能不能自己先试试看(

现在依旧感觉最理想的外壳是木质的,但是这个就真的感觉完全做不来了。我家里以前做红木相关行业的时候认识有不错的木工,但是很久没联系了,原材料也没有(如果能做外壳的话还是希望能用好看而且质量好的木头的,毕竟别的方面做得还算挺认真的,也是第一个)。如果实在没办法的话我可以去看看有没有什么地方可以 3D 打印类木材料的,之前看到过有能做到类似木头效果的填料。

反正到时候再说嘛,什么时候做完了我应该会写个完整的文章扔我博客上 🤣
sc13
2020-01-09 15:52:17 +08:00
老铁 酷啊
337136897
2020-01-09 17:32:09 +08:00
楼主多少卖
paouke
2020-01-09 17:47:05 +08:00
楼主加个好友聊聊啊,我一直打算做个这个的
RedL0tus
2020-01-11 15:22:01 +08:00
@sc13 谢谢。

@337136897 抱歉不买,可以照着我用的材料自己做就是。

@paouke 抱歉现在才回复,前两天有点忙。有什么方式可以联系呢?我不用 QQ 微信。或者就在这儿也行。
srsman
2020-01-11 17:47:43 +08:00
@haozi1986 TS100 只有 TS80 一半不到的价格
msg7086
2020-01-12 02:12:20 +08:00
这管子…第一个想到的其实是核电站的功率表(
RedL0tus
2020-01-13 03:17:48 +08:00
@srsman 是鸭(

@msg7086 emmmm 新的核电站已经不用这种了吧(
kn007
2020-01-13 23:59:30 +08:00
很好看
chenyu8674
2020-01-14 11:23:07 +08:00
@FaiChou #52
El Psy Congroo (エル・プサイ・コングルゥ) 冈部伦太郎离别时的常用厨二病用语,没什么特别意义,冈部伦太郎的造词。是希腊语和拉丁语组成的词语,大意为强化思路。含义转化成英文是 "To Harden the Mind" 对冈部伦太郎来说或许是再日常不过的词语,据说遇到异常的状况时也有取回平常心的功效。

阅读更多: https://zh.moegirl.org/El_psy_congroo
本文引自萌娘百科( https://zh.moegirl.org),文字内容默认使用《知识共享 署名-非商业性使用-相同方式共享 3.0 》协议。
kknd22
2020-01-16 09:15:26 +08:00
网上一搜,好几大千,家境贫寒,告辞!
RedL0tus
2020-01-16 11:31:34 +08:00
@kknd22 俺就是家境贫寒才自己做的(小声

不然就买成品了(小声
kknd22
2020-01-16 12:23:14 +08:00
@RedL0tus 没你那技术,我看到网上有仿辉光管的,才不到 200 左右,哪天勒紧裤腰带买个
RedL0tus
2020-01-17 00:15:17 +08:00
@kknd22 那些也挺好康的(

而且我也没啥技术啊,我要那么厉害就自己画板子了(小声

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/635784

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX