使用WS2812作为显示器设计俄罗斯方块游戏
扫描二维码
随时随地手机看文章
本项目以使用WS2812B迷你LED矩阵作为显示器的想法开始,搭配微控制器(Waveshare RP2040 Tiny)来控制矩阵并处理所有游戏逻辑。
为了把所有的东西结合在一起,我们设计了一个定制的PCB,集成了14×20 LED矩阵、输入按钮和专用电源管理电路。整个系统由一个LiPo电池供电,板载电源管理IC负责电池的充电和放电。
本文介绍了该项目的完整构建过程;让我们开始吧。
材料要求
本项目使用了以下材料:
•定制PCB (HQ NextPCB提供)
•RP2040微型浪享板
•WS2812B 2020封装led
•100nf电容器0603封装
•10uf电容器1206封装
•IP5306
•10 uH电感器
•指示灯LED 0805封装
•USB Type-C接口
•按钮6x6 SMD
•2欧姆1206封装
•RP2040微型程序员
•3D打印外壳
三维模型
这个项目开始于Fusion 360。我们首先将WS2812B 2020封装led的3D模型导入Fusion,以及SMD开关、USB Type-C端口、RP2040 Tiny和电池的CAD模型。
然后我们设计了一个91 × 47 mm的PCB。板的上半部分专用于RGB LED,在那里我们使用图案特征创建了一个14行乘20列的LED矩阵。在下方部分,我们按照Game boy风格的布局放置SMD开关,其中的方向键由上、下、左、右按钮组成,然后是a和B按钮。
RP2040 Tiny被放置在PCB的背面。除此之外,我们还模拟了一个外壳,以将PCB牢固地固定在适当的位置,覆盖包含电池的背面,并使设备舒适地持有。我们甚至在外壳的顶部添加了一个环,作为一个设计元素,它可以连接一个身份证带,这样设备就可以作为徽章佩戴或挂在某个地方。
在完成模型后,我们导出了外壳网格,并使用Hyper PLA在我的新Anycubic Kobra S1上进行了3D打印,打印结果非常干净。我已经使用《末影3》很长一段时间了,而这次升级正是我所需要的。
我们还导出了组件放置、板轮廓和总体布局参考的关键尺寸。这些尺寸后来在PCB设计过程中使用。
PCB设计
PCB设计过程从为项目准备原理图开始。在我们的案例中,我们以前使用过WS2812B 2020封装led。由于尺寸小,这些led并不容易使用,但同样紧凑的外形因素正是使它们成为基于矩阵的项目的理想选择。
我们重用了先前8×8 Tiny Matrix项目中的原理图作为起点。我们不再使用8×8布局,而是通过添加更多led将设计扩展为14×20矩阵。
然后,我们在RP2040 Tiny板的原理图中添加了另一部分,它连接到六个按钮。所有按钮都连接到GND和单独的GPIO引脚。当按钮被按下时,它将相应的GPIO引脚拉低,微控制器将其注册为按钮按下。
我们使用了Waveshare的RP2040 Tiny,这是一款基于RP2040的SMD开发板,设计用于作为模块直接安装在PCB上,类似于ESP-12F或ESP32模块。RP2040 Tiny的特点是有槽状焊盘,这使得它可以焊接到PCB的背面,并干净地集成到整体设计中。
对于电源,我们包含了我们在许多以前的项目中使用的值得信赖的IP5306-a电源管理IC。它从3.7V锂电池提供稳定的5V输出,并包括充电指示,低电量警告和高/低压切断等功能,这些都是锂电池安全运行所必需的。
NextPCB PCB服务
PCB设计完成后,将Gerber数据发送给HQ NextPCB,并订购了绿色白色丝印阻焊片;这次我们甚至还订了一个模版。
下订单后,PCB和模板都在一周内收到,PCB质量非常好。
另外,我要把HQDFM带给你,它在很多项目中给了我很大的帮助。华秋的内部工程师开发了免费的制造设计软件HQDFM,彻底改变了PCB设计师如何可视化和验证他们的设计。
利用NextPCB的加速器活动,为您的创新项目获得2个免费组装的基于rp2040的pcb。
此报价涵盖所有费用,包括物流,使您的想法更容易,更实惠的生活。SMT服务可能很昂贵,但NextPCB可以帮助您克服这一障碍。只要分享你的相关项目,他们就会处理好剩下的事情。不要错过这个提升你的科技创作的绝佳机会!
HQDFM:免费在线Gerber查看器和DFM分析工具
此外,NextPCB有自己的Gerber Viewer和DFM分析软件。
您的设计可以通过他们的HQDFM软件(DFM)服务得到改进。因为我发现等待制造商的DFM报告很烦人,所以HQDFM是执行事件前自检的最有效方法。
这是我在在线Gerber Viewer中看到的。这是一个体面的快速看,但不是完全清楚。要获得完整的功能(例如pcb的详细DFM分析),您需要下载桌面软件。网页版本只提供基本的DFM报告。
具有全面的制造设计(DFM)分析功能,HQDFM是一个免费的,复杂的在线PCB Gerber文件查看器。
凭借超过15年的行业经验,它为先进的制造工艺提供了宝贵的见解。如果你正在寻找可靠的PCB服务,在一个预算友好的价格,HQ NextPCB绝对值得一试。
模板的过程
我们通过在PCB上涂锡膏开始电路组装过程,但是有一个小问题。在这个项目中使用的组件数量相当大,这也意味着非常高的垫板数量。因此,使用锡膏点胶注射器是不切实际的。相反,我们使用了专门为这个电路制作的定制模板。
模板本质上是一块薄金属片,上面有激光切割的槽和孔,与PCB上的组件焊盘相匹配。使用模板可以使焊膏均匀地涂抹在所有焊盘上。在大规模生产电路的工业环境中,模板通常用于此目的。
我们首先用额外的PCB板搭建了一个临时的PCB板和模板架。这种设置有助于保持主PCB固定,并确保它在过程中不移动。
在将模板开口与PCB组件焊盘对齐后,我们在模板上涂上锡膏,并用刮刀将其均匀地散布在插槽上。该工艺在每个元件焊盘上沉积了一层薄而均匀的焊膏,为元件的放置做准备。
贴片元件贴片工艺
现在是另一个繁琐的过程:SMD组件放置。这是繁琐的,因为在这个项目中使用了大量的led。我们总共使用了280个led以及其他几个SMD组件,使整体组件数量超过300个。所有这些组件都必须手动放置。
我们首先将100nf去耦电容器放置在指定位置。在取放过程中,我们使用了防静电镊子。
接下来,我们将所有280个SMD RGB LED放置在它们的衬垫上,确保每个LED的方向正确,因为不正确的方向会阻止LED工作。
在LED放置后,我们添加了剩余的SMD组件,其中包括SMD按钮和所有与电源管理电路相关的部件。
一旦所有的组件被放置,整个板被小心地抬起,并放置在SMD回流热板。热板从下面加热PCB到锡膏熔化温度,大约是200°C。因此,所有的组件都被安全地焊接到它们的焊盘上。
测试SMD led
在我们将RP2040板放置在PCB背面之前,我们测试了led是否工作。如果led不工作,并且RP2040已经安装在PCB的背面,我们将无法使用热板来纠正led。
我们在RP2040的5V、GND和GPIO0端子上增加了跳线。然后将这些跳线连接到XIAO SAMD21 M0开发板。
我们将下面的草图上传到XIAO上,它将链中的每个LED一个接一个地打开为绿色。这个草图取自Adafruit NeoPixel库的示例草图。
RP2040组装
在确认led正常工作后,我们转向RP2040组装过程,首先将板翻转,将2040 Tiny放置在其位置,然后用烙铁焊接所有的焊盘和其castellated端子。
主要代码
然后我们继续将主固件闪烁到RP2040 Tiny上。使用随附的FFC带状电缆和USB适配器板,在将微控制器连接到USB时按住BOOTSEL按钮,将微控制器置于BOOTSEL模式。一旦检测到,我们就把主代码上传到电路板上。
让我们来分析一下我们为这个项目准备的代码。
我们使用以下库,使LED矩阵像一个微小的像素显示器一样工作。
Adafruit_NeoPixel
•Adafruit_GFX
•Adafruit_NeoMatrix
矩阵配置
游戏运行在14×20 LED矩阵上,与经典的俄罗斯方块操场相匹配。
MATRIX_PIN是驱动WS2812B数据线的GPIO。
本节定义:
•LED布局方向(左上原点,顺行布线)
•颜色顺序(GRB,标准为WS2812B)
•信号速度(800khz)
按钮输入
所有按钮都使用INPUT_PULLUP,并且按下按钮将引脚拉到LOW
定时和脱机控制
这些值控制正常下降速度以及快速下降时,保持速度按钮
防止意外的快速移动或旋转。
游戏网格与状态
这部分代表比赛场地;0是空单元格,1是已占用的单元格。
这将跟踪当前棋子的位置、旋转状态(0-3)以及哪个方块处于活动状态。
《Tetromino》定义(游戏核心)
共有7件(I, O, T, S, Z, J, L);每一块可以旋转4次,每次旋转是一个4×4矩阵。
碰撞检测
bool canPlace(int x, int y, int piece, int rot)
这个函数检查该块是否在矩阵边界内,以及它是否与已经放置的块重叠。
如果任何块发生碰撞,则拒绝放置。
将一个部件锁定到网格中
当一个棋子不能再下落时,它的像素被复制到网格中,棋子就成为场地的一部分。
Line-clearing逻辑
该函数扫描每一行,如果一行被完全填充,则上面的所有行都向下移动,并清除最上面的行。
生成新的碎片和游戏结束
这个函数随机选择一个新的四音,它从顶部中心开始。如果不能立即放进去,游戏就结束了。
当游戏结束时,屏幕变成红色,网格被清除,游戏重新开始。
渲染游戏
这个函数很重要;它清除屏幕并以绿色绘制锁定块。积极下落的碎片用蓝色绘制。
在设置函数中,初始化LED矩阵,设置亮度,配置按钮引脚,播种随机数生成器,并衍生第一个四元。
loop()函数处理移动、旋转和速度控制的按钮输入,使用计时器管理基于重力的下落,执行碰撞检测,锁定片段,清除已完成的线条,并每帧重新绘制屏幕。
通孔组件放置工艺
在测试完代码后,我们安装了最后一个通孔组件:USB Type-C端口。
我们使用的是只有电源的Type-C连接器,只有正极和负极端子,没有数据引脚。连接器从PCB的顶部放置,并使用烙铁从底部焊接。
这一步完成后,电路板组装就完成了。
电源
为了给项目供电,我们使用了一个3.7 V 650 mAh的LiPo电池,其正负端焊接到PCB背面提供的电池连接器上。
按一次电源按钮使电路打开,而按两次电源按钮则使系统关闭。
由于我们使用IP5306电源管理IC,板载状态LED提供视觉反馈-充电时闪烁,电池充满时保持固态,当电池电压降至低水平时再次闪烁。
外壳组装
我们首先将主电路放置在3d打印外壳上,然后使用四个M2.5 Torx螺栓将外壳与PCB固定。在背面,我们给出了一个窗口或插槽,允许用户访问FPC连接器以重新编程RP2040 Tiny。
结果
这是这个小而乏味的构建的最终结果:一个运行自定义版本《俄罗斯方块》的基于RGB矩阵的手持游戏机。我们从零开始创建了LED矩阵板,并将其与基于rp2040的微控制器和板载电源电路配对,以制作真正的便携式手持设备。
目前,这个设置工作得很完美。我们可以使用左右键来控制四重奏的形状,使用旋转键来旋转形状,甚至可以加速下落的方块。
机载LiPo电池提供大约4小时的电池备份,这是相当不错的。这种运行时间可以通过降低led的亮度进一步延长,从而降低总体电流消耗。
这个游戏机也可以用于未来的想法。虽然目前的实现运行的是自制版本的《俄罗斯方块》,但同样的硬件以后可以用于其他游戏,作为交互式徽章,或作为文本和简单图形的通用LED矩阵显示器。
本文编译自hackster.io





