60 多年过去了,尽管辉光管已经停产,有很多工程师仍然对它情有独钟。我用 8 块液晶显示屏制作了一个拟辉光管时钟,感受复古元素的美感,表达对过去经典的敬意。
看过《命运石之门》的朋友应该知道里面有一个“时间线变动仪”,就是用辉光管呈现数字,网上很多电子爱好者也成功用辉光管进行了复刻,效果拔群。对于刚接触电子行业的我来说有点复杂,而且辉光管早已停产,后来我在各个平台寻觅,终于看到了一个用液晶屏显示辉光管图片的方式做的拟辉光管时钟,相比于传统的辉光管,液晶显示屏工作电压低、寿命长、可呈现多种色彩,还可以显示图片,可玩性比较高。在实现时间显示功能的同时,我还给时钟增加了一个AHT10 温 / 湿度模块和一个 0.96 英寸的OLED 显示屏,用于显示室内温 / 湿度。
主控芯片:
本 项 目 主 控 芯 片 采 用 ESP32-WROOM-32D 模块(见图 1),具有可扩展、自适应的特点。时钟频率的调节范围为 80~240MHz,只需极少的外围元器件,即可实现强大的处理性能、可靠的安全性能、Wi-Fi 和蓝牙功能。
图 1 ESP32-WROOM-32D 模块
显 示 屏 使 用 1.14 英 寸 LCD 液 晶 显示 模 块( 见 图 2), 分 辨 率 为 135 像 素×240 像素,驱动芯片型号为 ST7789,通信方式为 4 线 SPI,接口方式为焊接式,0.7mm 的接口间距对焊接比较友好。
图 2 1.14 英寸液晶显示模块
温 / 湿度模块型号为 AHT10(见图 3),该模块配有一个 ASIC 专用芯片、一个经过改进的 MEMS 半导体电容式湿度传感元器件和一个标准的片上温度传感元器件,响应迅速、抗干扰能力强、性价比高、稳定性好,广泛应用于空调、除湿器及其他相关温 / 湿度检测控制设备中。
图 3 AHT10 温 / 湿度模块
OLED显示模块:
OLED显示模块为0.96英寸(见图4),像素为白色的,分辨率为 128 像素 ×64像素,接口为 I2C。OLED 显示屏可视角度大、功耗低、不需背光源、对比度高、厚度薄、反应速度快、可用于挠曲面板、使用温度范围广、结构及制程简单等优异特性,操作方便,功能丰富,可显示汉字、ASCII 码、 图案等信息。
图 4 OLED 显示模块
主控部分:
ESP32-WROOM-32D 模块提供了丰富的 GPIO 接口,温 / 湿度模块的I2C接口和 OLED 显示模块以及时间芯片的I2C 接口复用,减少 I/O 接口的占用,主控电路里使用了一路 ADC 采集,读取环境光亮度采集电路的电压变化来控制显示屏背光,使用了 8 个引脚(CS1~CS8)分别连接 8 块液晶显示屏的引脚,通过电平变化实现对 8 个显示屏的控制,使用一个按键引脚(key1)用于液晶显示屏显示内容的切换,主控电路如图 5 所示。
本项目使用 CH340C 芯片,该芯片内置晶体振荡器,可以省去晶体振荡器电路,价格便宜,电路简单,配合三极管可实现自动下载功能,下载电路如图 6 所示。
供电电路使用了 3 个 Micro USB 接口,方便后期从时钟的左、右、后 3 个方向给时钟供电,使用一个 MSK-12D19 拨动开关实现对电源的通断。
稳压电路使用 LM1117-3.3 芯片,该芯片是一种常见的稳压芯片,价格便宜,电路简单,供电及稳压电路如图 7 所示。
AHT10 温 / 湿度模块使用 I2C 总线,模块集成度高,仅有 4 个接口,AHT10 温 / 湿度模块电路如图 8 所示。
OLED显示模块电路:
OLED 显示模块同样使用 I2C总线,仅有 4 个接口,OLED 显示模块电路如图9 所示。
光敏电阻在不同光强度下电阻值不同,光照变强,电阻值变小,该电路采集的是与光敏电阻串联阻值为 1kΩ 的定值电阻两端电压,因为光照变强,光敏电阻阻值变小,环境光亮度采集电路中的电流变大,1kΩ定值电阻两端电压会变大,这样 ESP32-WROOM-32D 模块采集到的电压与光照强度呈现正相关,方便后期程序调试,环境光亮度采集电路如图 10 所示。
时钟芯片使用的是 PCF8563,是一款工业级内含 I2C 总线接口、具有极低功耗的多功能时钟和日历芯片,性价比很高。电路中增加了 CR1220 电池座,主电源掉电后,可采用备用纽扣电池供电,这里时钟芯片精度不做要求,因为 ESP32-WROOM-32D模块有Wi-Fi功能,在有网络的条件下,程序中可实现启动时获取网络时间完成本地对时,时钟芯片电路如图 11 所示
液晶显示屏驱动电路采用开源平台的成熟方案,将需要的引脚引出后,连接到8Pin 的 NDK/TAT 总线插槽里,画成 PCB后,显示屏可以像游戏卡带那样直立插到主控板上,液晶显示屏驱动电路如图 12 所示。
图 12 液晶显示屏驱动电路
我 在 设 计 PCB 之 前 综 合 考 虑 了8块液晶显示屏横向排开的间距以及时 钟 整 体 稳 定 性, 将 PCB 尺 寸 定 为200mm×50mm。将大部分贴片元器件分别布置在 PCB 底层,让顶层保持一定的美观,PCB 面积比较大,留给元器件空间也足够,焊接难度降低。
主控 PCB 整体布局如图 13 所示,主 控 PCB 整 体 效 果 如 图 14 所 示,在 ESP32-WROOM-32D 模 块 天线下方区域不覆铜(见图 15),防止PCB 铜箔层对信号产生干扰。为了防止ESP32-WROOM-32D 模块以及稳压电路工作时产生的热量对 AHT10 温 / 湿度模块检测室温干扰,将 AHT10 温 / 湿度模块放置在远离主控芯片和稳压电路的位置(见图 16)。
图 16 AHT10温 /湿度模块远离主控芯片和稳压电路
液晶显示屏驱动 PCB 整体布局如图17 所示,液晶显示屏驱动 PCB 效果如图18 所示,PCB 下方的顶层和底层分别留出4 个焊盘(见图 19),焊盘通过 8Pin 的NDK/TAT 总线插槽和主控 PCB 连接。
编程环境:
我使用 Arduino IDE 1.8.16 版本,软件中的开发板管理器中的 ESP32 开发板版本为 1.0.6(见图 20)。
图 20 Arduino IDE 版本以及 ESP32 开发板版本
程序编写:
(1)导入库
Arduino 自带很多库文件,可以直接在“库管理器”中安装使用,这个项目用到了支持时钟芯片、支持温 / 湿度模块、实 现 ESP32 模 块 的 Wi-Fi 功 能 和 断 电记忆功能、驱动液晶显示屏显示和驱动OLED 显示模块显示的相关库文件。
(2)配网功能
这里采用的是乐鑫提供的SmartConfig 方 案, 配 合 手 机 端 App、EspTouch 使用,当前设备在没有和其他设备建立任何实际性通信连接的状态下,可以一键配置该设备接入 Wi-Fi,如程序1所示。
参 考 I2C_BM8563.h 库 文 件 的 示 例程序,获取时间芯片里的时间和日期,将时、分、秒分别赋值给变量,如程序 2 所示。
将时、分,秒变量的十位数和个位数分别取出赋值给新的变量,用来对应显示代表数字的图片,如程序 3 所示。
参考“Adafruit_AHT10.h”库文件的示例程序,获取温 / 湿度模块的温度和湿度,将温度和湿度分别赋值给变量,如程序4所示。
使 用“U8g2lib.h” 库, 设 置 OLED显示模块的驱动类型和硬件连接方式,将从温 / 湿度模块获取的温度和湿度显示到OLED 显示模块上,这里以显示温度内容为例,如程序 5 所示。
准备好代表 0~9 的 10 张辉光管字体图片,通过画图软件将其调整为宽 135 像素,高 240 像素,如图 21 所示。
调整好辉光管字体图片大小后,把数字是 0 的图片通过“jpg 转 Hex”软件转码后创建扩展名是 .h 的文件,命名为a0.h,剩下的图片也按照这种方法处理。
使用 TFT_eSPI.h 库驱动液晶显示屏显示内容,在 setup() 函数中将液晶显示屏与 ESP32-WROOM-32D 模块连接的CS1~CS8这8个引脚定义为“OUTPUT”,以液晶显示屏显示小时的第2位数字为例,先把第 2 块液晶显示屏 CS 引脚拉低让显示屏使能,剩下液晶显示屏 CS 引脚拉高,通过 switch() 函数把小时的第二位数字对应的图片显示到第 2 块液晶显示屏上,如程序 7 所示。剩下各个位置数字用相同办法下拉对应液晶显示屏的 CS 引脚,将与数字对应的辉光管字体图片显示到对应的液晶显示屏上,程序通过获取时间判断该位置数字是否发生变化,如果改变则会触发 if 语句刷新该位置显示屏内容。
ESP32 模块从环境光亮度采集电路获取电压值,计算 10 次的平均数,然后将此数值转化为 0~255 范围的液晶显示屏背光亮度,如程序 8 所示。
将液晶显示屏焊接到液晶显示屏驱动PCB 上,液晶显示屏背面用双面胶固定,如图 22 所示,最后制作完成的拟辉光管时钟如图 23 所示。
这个项目里 ESP32-WROOM-32D模块还有一个 IO34 引脚没有使用,感兴趣的朋友可以利用这个引脚扩展其他功能,目前能想到的是把人体感应模块的信号引脚接到 IO34,这样拟辉光管时钟通过人体感应模块传来的高低电平信号控制显示屏背光的开关,这样拟辉光管时钟在没有人的时候会关闭显示,达到省电的目的。
这 8 块液晶显示屏除了做时钟,还可以显示丰富多彩的内容,通过程序让 ESP32-WROOM-32D 模块利用 Wi-Fi 从互联网上获取信息,比如天气预报、农历、二十四节气,将获取的信息显示到液晶显示屏上。当然这些只是抛砖引玉,想必大家还有更多更好的想法去丰富这个拟辉光管时钟的功能。
我第一次看到辉光管时钟就被它黑暗中橙黄色幽光的独特韵味深深吸引,真没想到自己会用另一种形式将其复刻出来,前期构思花了很长时间,几乎要放弃,可能是念念不忘必有回响,一天查看资料发现了同时点亮两块液晶显示屏并且显示不同内容的方法,于是这个基于液晶显示屏的拟辉光管时钟真的被我做成了。焊接好元器件写入程序最后点亮的那一刻,我感觉一切都值得,那种快乐妙不可言。