当前位置:首页 > 工业控制 > 电路设计项目集锦
[导读]在一块3D打印扩散器后方,安装了四块LED面板,由树莓派驱动。明亮的白色数字在不断变化的彩色背景中闪烁——或者将屏幕翻转,数字便会呈现负数显示。

在一块3D打印扩散器后方,安装了四块LED面板,由树莓派驱动。明亮的白色数字在不断变化的彩色背景中闪烁——或者将屏幕翻转,数字便会呈现负数显示。

其下方仅由1024颗LED组成,但它们前方则是一块3D打印的扩散器,为每颗LED提供独立的小型“单元格”空间,使整个画面呈现出清晰锐利的像素艺术效果,而非零散的亮点。

硬件配置

画布由四块OzzMaker 16×16 RGB LED面板串联而成,从左至右拼接成一个64×16的显示屏,共1024个像素。通过OzzMaker的LED接口连接树莓派,使用Henner Zeller开发的rpi-rgb-led-matrix库,以高速传输数据到各面板。将面板按OUT→IN方向连接,提供适当电源后,树莓派便将其视为一条连续的宽幅条状图像。

3D打印的扩散器直接位于面板正前方,形成网格结构,为每颗LED提供独立的封闭小单元空间。它将原始的、发亮的点状光源软化为清晰均匀发光的方块,使显示屏呈现出清晰的像素艺术效果,而非散落的亮光点。这些像素之间的硬质边框也营造了白色数字的视觉效果:亮白色的数字与旁边的彩色区域在边缘处形成鲜明的高对比度分界,而不是相互渗透。这是构建中最便宜的部分,却承担了最多的任务——区别于“带有LED的电路板”和“屏幕”的本质差异。扩散器同时起到支架的作用。

如下图所示,扩散器背面内部壁面使用黑色PLA打印,以防止LED之间出现光线泄漏。该部件由Babu Lab P2S多色打印机打印而成。

绘制数字

所有内容首先被渲染到一个简单的内存缓冲区中——即64×16个RGB元组的列表——最后才推送到硬件上。数字本身采用传统的七段数码显示方式,每个数字仅由一组小矩形构成;每个数字表示需要亮起的七段:# 每个数字点亮的7个段(a=顶部,g=中间,……)

SEGMENTS = { “0”: “abcdef”, “1”: “bc”,“2”: “abged”,“3”: “abgcd”,“4”: “fgbc”,“8”: “abcdefg”,# … }

默认情况下,这些段落以白色在彩色背景上显示,因此时间。

数字本身采用传统的七段显示方式。每个数字只是若干小矩形的组合;每个数字表示需要亮起的段:

一个用于实时调整的小型网页面板

通过编辑文件并重启来修改设置非常麻烦,因此同一程序还运行了一个小型 Flask 网页面板。从网络中的任何手机或笔记本电脑打开,即可看到亮度、调色板、效果、过渡等选项的滑块和下拉菜单——同时还能实时预览面板正在绘制的实际画面。每次更改都会保存到 settings.json 文件中,并在重启后保留。其底层结构是一个进程,包含两个线程,彼此完全不干扰:一个渲染线程负责管理矩阵,每帧运行约 20 帧;另一个是 Web 服务器。两者仅通过一组线程安全的对象进行通信——设置信息输入,状态帧输出。保持边界清洁,使得在不断添加功能时,显示始终不会卡顿,从而确保了安全性。

本文编译自hackster.io

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭