使用WS2812作為顯示器設(shè)計(jì)俄羅斯方塊游戲
本項(xiàng)目以使用WS2812B迷你LED矩陣作為顯示器的想法開始,搭配微控制器(Waveshare RP2040 Tiny)來(lái)控制矩陣并處理所有游戲邏輯。
為了把所有的東西結(jié)合在一起,我們?cè)O(shè)計(jì)了一個(gè)定制的PCB,集成了14×20 LED矩陣、輸入按鈕和專用電源管理電路。整個(gè)系統(tǒng)由一個(gè)LiPo電池供電,板載電源管理IC負(fù)責(zé)電池的充電和放電。
本文介紹了該項(xiàng)目的完整構(gòu)建過(guò)程;讓我們開始吧。
材料要求
本項(xiàng)目使用了以下材料:
?定制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打印外殼
三維模型
這個(gè)項(xiàng)目開始于Fusion 360。我們首先將WS2812B 2020封裝led的3D模型導(dǎo)入Fusion,以及SMD開關(guān)、USB Type-C端口、RP2040 Tiny和電池的CAD模型。
然后我們?cè)O(shè)計(jì)了一個(gè)91 × 47 mm的PCB。板的上半部分專用于RGB LED,在那里我們使用圖案特征創(chuàng)建了一個(gè)14行乘20列的LED矩陣。在下方部分,我們按照Game boy風(fēng)格的布局放置SMD開關(guān),其中的方向鍵由上、下、左、右按鈕組成,然后是a和B按鈕。
RP2040 Tiny被放置在PCB的背面。除此之外,我們還模擬了一個(gè)外殼,以將PCB牢固地固定在適當(dāng)?shù)奈恢?,覆蓋包含電池的背面,并使設(shè)備舒適地持有。我們甚至在外殼的頂部添加了一個(gè)環(huán),作為一個(gè)設(shè)計(jì)元素,它可以連接一個(gè)身份證帶,這樣設(shè)備就可以作為徽章佩戴或掛在某個(gè)地方。
在完成模型后,我們導(dǎo)出了外殼網(wǎng)格,并使用Hyper PLA在我的新Anycubic Kobra S1上進(jìn)行了3D打印,打印結(jié)果非常干凈。我已經(jīng)使用《末影3》很長(zhǎng)一段時(shí)間了,而這次升級(jí)正是我所需要的。
我們還導(dǎo)出了組件放置、板輪廓和總體布局參考的關(guān)鍵尺寸。這些尺寸后來(lái)在PCB設(shè)計(jì)過(guò)程中使用。
PCB設(shè)計(jì)
PCB設(shè)計(jì)過(guò)程從為項(xiàng)目準(zhǔn)備原理圖開始。在我們的案例中,我們以前使用過(guò)WS2812B 2020封裝led。由于尺寸小,這些led并不容易使用,但同樣緊湊的外形因素正是使它們成為基于矩陣的項(xiàng)目的理想選擇。
我們重用了先前8×8 Tiny Matrix項(xiàng)目中的原理圖作為起點(diǎn)。我們不再使用8×8布局,而是通過(guò)添加更多l(xiāng)ed將設(shè)計(jì)擴(kuò)展為14×20矩陣。
然后,我們?cè)赗P2040 Tiny板的原理圖中添加了另一部分,它連接到六個(gè)按鈕。所有按鈕都連接到GND和單獨(dú)的GPIO引腳。當(dāng)按鈕被按下時(shí),它將相應(yīng)的GPIO引腳拉低,微控制器將其注冊(cè)為按鈕按下。
我們使用了Waveshare的RP2040 Tiny,這是一款基于RP2040的SMD開發(fā)板,設(shè)計(jì)用于作為模塊直接安裝在PCB上,類似于ESP-12F或ESP32模塊。RP2040 Tiny的特點(diǎn)是有槽狀焊盤,這使得它可以焊接到PCB的背面,并干凈地集成到整體設(shè)計(jì)中。
對(duì)于電源,我們包含了我們?cè)谠S多以前的項(xiàng)目中使用的值得信賴的IP5306-a電源管理IC。它從3.7V鋰電池提供穩(wěn)定的5V輸出,并包括充電指示,低電量警告和高/低壓切斷等功能,這些都是鋰電池安全運(yùn)行所必需的。
NextPCB PCB服務(wù)
PCB設(shè)計(jì)完成后,將Gerber數(shù)據(jù)發(fā)送給HQ NextPCB,并訂購(gòu)了綠色白色絲印阻焊片;這次我們甚至還訂了一個(gè)模版。
下訂單后,PCB和模板都在一周內(nèi)收到,PCB質(zhì)量非常好。
另外,我要把HQDFM帶給你,它在很多項(xiàng)目中給了我很大的幫助。華秋的內(nèi)部工程師開發(fā)了免費(fèi)的制造設(shè)計(jì)軟件HQDFM,徹底改變了PCB設(shè)計(jì)師如何可視化和驗(yàn)證他們的設(shè)計(jì)。
利用NextPCB的加速器活動(dòng),為您的創(chuàng)新項(xiàng)目獲得2個(gè)免費(fèi)組裝的基于rp2040的pcb。
此報(bào)價(jià)涵蓋所有費(fèi)用,包括物流,使您的想法更容易,更實(shí)惠的生活。SMT服務(wù)可能很昂貴,但NextPCB可以幫助您克服這一障礙。只要分享你的相關(guān)項(xiàng)目,他們就會(huì)處理好剩下的事情。不要錯(cuò)過(guò)這個(gè)提升你的科技創(chuàng)作的絕佳機(jī)會(huì)!
HQDFM:免費(fèi)在線Gerber查看器和DFM分析工具
此外,NextPCB有自己的Gerber Viewer和DFM分析軟件。
您的設(shè)計(jì)可以通過(guò)他們的HQDFM軟件(DFM)服務(wù)得到改進(jìn)。因?yàn)槲野l(fā)現(xiàn)等待制造商的DFM報(bào)告很煩人,所以HQDFM是執(zhí)行事件前自檢的最有效方法。
這是我在在線Gerber Viewer中看到的。這是一個(gè)體面的快速看,但不是完全清楚。要獲得完整的功能(例如pcb的詳細(xì)DFM分析),您需要下載桌面軟件。網(wǎng)頁(yè)版本只提供基本的DFM報(bào)告。
具有全面的制造設(shè)計(jì)(DFM)分析功能,HQDFM是一個(gè)免費(fèi)的,復(fù)雜的在線PCB Gerber文件查看器。
憑借超過(guò)15年的行業(yè)經(jīng)驗(yàn),它為先進(jìn)的制造工藝提供了寶貴的見解。如果你正在尋找可靠的PCB服務(wù),在一個(gè)預(yù)算友好的價(jià)格,HQ NextPCB絕對(duì)值得一試。
模板的過(guò)程
我們通過(guò)在PCB上涂錫膏開始電路組裝過(guò)程,但是有一個(gè)小問(wèn)題。在這個(gè)項(xiàng)目中使用的組件數(shù)量相當(dāng)大,這也意味著非常高的墊板數(shù)量。因此,使用錫膏點(diǎn)膠注射器是不切實(shí)際的。相反,我們使用了專門為這個(gè)電路制作的定制模板。
模板本質(zhì)上是一塊薄金屬片,上面有激光切割的槽和孔,與PCB上的組件焊盤相匹配。使用模板可以使焊膏均勻地涂抹在所有焊盤上。在大規(guī)模生產(chǎn)電路的工業(yè)環(huán)境中,模板通常用于此目的。
我們首先用額外的PCB板搭建了一個(gè)臨時(shí)的PCB板和模板架。這種設(shè)置有助于保持主PCB固定,并確保它在過(guò)程中不移動(dòng)。
在將模板開口與PCB組件焊盤對(duì)齊后,我們?cè)谀0迳贤可襄a膏,并用刮刀將其均勻地散布在插槽上。該工藝在每個(gè)元件焊盤上沉積了一層薄而均勻的焊膏,為元件的放置做準(zhǔn)備。
貼片元件貼片工藝
現(xiàn)在是另一個(gè)繁瑣的過(guò)程:SMD組件放置。這是繁瑣的,因?yàn)樵谶@個(gè)項(xiàng)目中使用了大量的led。我們總共使用了280個(gè)led以及其他幾個(gè)SMD組件,使整體組件數(shù)量超過(guò)300個(gè)。所有這些組件都必須手動(dòng)放置。
我們首先將100nf去耦電容器放置在指定位置。在取放過(guò)程中,我們使用了防靜電鑷子。
接下來(lái),我們將所有280個(gè)SMD RGB LED放置在它們的襯墊上,確保每個(gè)LED的方向正確,因?yàn)椴徽_的方向會(huì)阻止LED工作。
在LED放置后,我們添加了剩余的SMD組件,其中包括SMD按鈕和所有與電源管理電路相關(guān)的部件。
一旦所有的組件被放置,整個(gè)板被小心地抬起,并放置在SMD回流熱板。熱板從下面加熱PCB到錫膏熔化溫度,大約是200°C。因此,所有的組件都被安全地焊接到它們的焊盤上。
測(cè)試SMD led
在我們將RP2040板放置在PCB背面之前,我們測(cè)試了led是否工作。如果led不工作,并且RP2040已經(jīng)安裝在PCB的背面,我們將無(wú)法使用熱板來(lái)糾正led。
我們?cè)赗P2040的5V、GND和GPIO0端子上增加了跳線。然后將這些跳線連接到XIAO SAMD21 M0開發(fā)板。
我們將下面的草圖上傳到XIAO上,它將鏈中的每個(gè)LED一個(gè)接一個(gè)地打開為綠色。這個(gè)草圖取自Adafruit NeoPixel庫(kù)的示例草圖。
RP2040組裝
在確認(rèn)led正常工作后,我們轉(zhuǎn)向RP2040組裝過(guò)程,首先將板翻轉(zhuǎn),將2040 Tiny放置在其位置,然后用烙鐵焊接所有的焊盤和其castellated端子。
主要代碼
然后我們繼續(xù)將主固件閃爍到RP2040 Tiny上。使用隨附的FFC帶狀電纜和USB適配器板,在將微控制器連接到USB時(shí)按住BOOTSEL按鈕,將微控制器置于BOOTSEL模式。一旦檢測(cè)到,我們就把主代碼上傳到電路板上。
讓我們來(lái)分析一下我們?yōu)檫@個(gè)項(xiàng)目準(zhǔn)備的代碼。
我們使用以下庫(kù),使LED矩陣像一個(gè)微小的像素顯示器一樣工作。
Adafruit_NeoPixel
?Adafruit_GFX
?Adafruit_NeoMatrix
矩陣配置
游戲運(yùn)行在14×20 LED矩陣上,與經(jīng)典的俄羅斯方塊操場(chǎng)相匹配。
MATRIX_PIN是驅(qū)動(dòng)WS2812B數(shù)據(jù)線的GPIO。
本節(jié)定義:
?LED布局方向(左上原點(diǎn),順行布線)
?顏色順序(GRB,標(biāo)準(zhǔn)為WS2812B)
?信號(hào)速度(800khz)
按鈕輸入
所有按鈕都使用INPUT_PULLUP,并且按下按鈕將引腳拉到LOW
定時(shí)和脫機(jī)控制
這些值控制正常下降速度以及快速下降時(shí),保持速度按鈕
防止意外的快速移動(dòng)或旋轉(zhuǎn)。
游戲網(wǎng)格與狀態(tài)
這部分代表比賽場(chǎng)地;0是空單元格,1是已占用的單元格。
這將跟蹤當(dāng)前棋子的位置、旋轉(zhuǎn)狀態(tài)(0-3)以及哪個(gè)方塊處于活動(dòng)狀態(tài)。
《Tetromino》定義(游戲核心)
共有7件(I, O, T, S, Z, J, L);每一塊可以旋轉(zhuǎn)4次,每次旋轉(zhuǎn)是一個(gè)4×4矩陣。
碰撞檢測(cè)
bool canPlace(int x, int y, int piece, int rot)
這個(gè)函數(shù)檢查該塊是否在矩陣邊界內(nèi),以及它是否與已經(jīng)放置的塊重疊。
如果任何塊發(fā)生碰撞,則拒絕放置。
將一個(gè)部件鎖定到網(wǎng)格中
當(dāng)一個(gè)棋子不能再下落時(shí),它的像素被復(fù)制到網(wǎng)格中,棋子就成為場(chǎng)地的一部分。
Line-clearing邏輯
該函數(shù)掃描每一行,如果一行被完全填充,則上面的所有行都向下移動(dòng),并清除最上面的行。
生成新的碎片和游戲結(jié)束
這個(gè)函數(shù)隨機(jī)選擇一個(gè)新的四音,它從頂部中心開始。如果不能立即放進(jìn)去,游戲就結(jié)束了。
當(dāng)游戲結(jié)束時(shí),屏幕變成紅色,網(wǎng)格被清除,游戲重新開始。
渲染游戲
這個(gè)函數(shù)很重要;它清除屏幕并以綠色繪制鎖定塊。積極下落的碎片用藍(lán)色繪制。
在設(shè)置函數(shù)中,初始化LED矩陣,設(shè)置亮度,配置按鈕引腳,播種隨機(jī)數(shù)生成器,并衍生第一個(gè)四元。
loop()函數(shù)處理移動(dòng)、旋轉(zhuǎn)和速度控制的按鈕輸入,使用計(jì)時(shí)器管理基于重力的下落,執(zhí)行碰撞檢測(cè),鎖定片段,清除已完成的線條,并每幀重新繪制屏幕。
通孔組件放置工藝
在測(cè)試完代碼后,我們安裝了最后一個(gè)通孔組件:USB Type-C端口。
我們使用的是只有電源的Type-C連接器,只有正極和負(fù)極端子,沒(méi)有數(shù)據(jù)引腳。連接器從PCB的頂部放置,并使用烙鐵從底部焊接。
這一步完成后,電路板組裝就完成了。
電源
為了給項(xiàng)目供電,我們使用了一個(gè)3.7 V 650 mAh的LiPo電池,其正負(fù)端焊接到PCB背面提供的電池連接器上。
按一次電源按鈕使電路打開,而按兩次電源按鈕則使系統(tǒng)關(guān)閉。
由于我們使用IP5306電源管理IC,板載狀態(tài)LED提供視覺(jué)反饋-充電時(shí)閃爍,電池充滿時(shí)保持固態(tài),當(dāng)電池電壓降至低水平時(shí)再次閃爍。
外殼組裝
我們首先將主電路放置在3d打印外殼上,然后使用四個(gè)M2.5 Torx螺栓將外殼與PCB固定。在背面,我們給出了一個(gè)窗口或插槽,允許用戶訪問(wèn)FPC連接器以重新編程RP2040 Tiny。
結(jié)果
這是這個(gè)小而乏味的構(gòu)建的最終結(jié)果:一個(gè)運(yùn)行自定義版本《俄羅斯方塊》的基于RGB矩陣的手持游戲機(jī)。我們從零開始創(chuàng)建了LED矩陣板,并將其與基于rp2040的微控制器和板載電源電路配對(duì),以制作真正的便攜式手持設(shè)備。
目前,這個(gè)設(shè)置工作得很完美。我們可以使用左右鍵來(lái)控制四重奏的形狀,使用旋轉(zhuǎn)鍵來(lái)旋轉(zhuǎn)形狀,甚至可以加速下落的方塊。
機(jī)載LiPo電池提供大約4小時(shí)的電池備份,這是相當(dāng)不錯(cuò)的。這種運(yùn)行時(shí)間可以通過(guò)降低led的亮度進(jìn)一步延長(zhǎng),從而降低總體電流消耗。
這個(gè)游戲機(jī)也可以用于未來(lái)的想法。雖然目前的實(shí)現(xiàn)運(yùn)行的是自制版本的《俄羅斯方塊》,但同樣的硬件以后可以用于其他游戲,作為交互式徽章,或作為文本和簡(jiǎn)單圖形的通用LED矩陣顯示器。
本文編譯自hackster.io





