在本教程中,我們將使用樹莓派 Pico 來(lái)控制 31 個(gè)單獨(dú)可尋址的 LED 燈,它們安裝在兩片亞克力塑料圓盤之間。其中一片圓盤上涂有膠粘鏡片,另一片圓盤上貼有單向鏡膜;這樣可以給 LED 燈帶制造出 3D 無(wú)限效果。
不過(guò),樹莓派目前還沒(méi)有自己的”等離子聚變能源”,所以我們還得用充電電池,然后把所有東西封裝在一個(gè) 3D 打印的外殼中。
組件清單
樹莓派 Pico
柔性條形彩色像素 LED 燈帶(通常以 1 米長(zhǎng)度出售;我們使用了144 個(gè) WS2812B 的燈帶,并將其切割為 31 個(gè) LED 的長(zhǎng)度,剩余的部分可以用于其他項(xiàng)目)
3mm 厚的亞克力板材,足夠切割兩塊直徑為 70mm 的圓盤
自粘式柔性鏡片瓦(不是玻璃)
單向鏡自粘膜(用于阻擋太陽(yáng)的窗貼式膜片)
USB-C 5V 1A TP4506 充電板(或者使用 Micro USB 接口的等效充電板)
可充電的 3.7V 1100mAh 603449 鋰離子電池
2 位 3P SPDT 面板安裝微型滑動(dòng)開關(guān),鎖定開關(guān)
約 100cm 的 26AWG 硅膠絕緣銅線(或類似線材)
強(qiáng)力膠水
3D 打印的外殼零件(STL 設(shè)計(jì)文件可以文末免費(fèi)獲取)
在初始設(shè)置過(guò)程中,你還需要:一臺(tái)電腦,一根 Micro USB 線和焊接設(shè)備和材料(本項(xiàng)目中的焊接量很少,所以如果你不擅長(zhǎng)或者不會(huì)焊接,也不用擔(dān)心)。
安裝固件
樹莓派為樹莓派 Pico 提供了詳細(xì)的文檔,不過(guò)在這一步,非常簡(jiǎn)單,我們只需要拖動(dòng)固件到Pico上就行(就像把文件拷貝到 U 盤上一樣)。
在你的計(jì)算機(jī)上
下載適用于最新版本 Pico MicroPython 固件的 UF2 文件。MicroPython 是一種針對(duì)微控制器優(yōu)化的 Python 實(shí)現(xiàn),適合各種水平的程序員。
如果你的 Pico 還沒(méi)有顯示為 RPI-RP2 驅(qū)動(dòng)器,你需要檢查一下你的電腦是否已正確安裝了 Pico 的驅(qū)動(dòng)程序。
你可以按住 Pico 上的 BOOTSEL 按鈕(位于 USB 插口旁邊的小按鈕),同時(shí)將連接了 Pico 的 Micro USB 插入到電腦上來(lái)將 Pico 設(shè)置為啟動(dòng)器模式。
然后,Pico 將會(huì)顯示為一個(gè)名為 RPI-RP2 的驅(qū)動(dòng)器,如下所示(以 macOS 為例):
給 Pico 編程
下載、安裝并打開一個(gè)名為 Thonny 的 Python 集成開發(fā)環(huán)境(IDE)。后面我們會(huì)用這個(gè)給Pico編程。確認(rèn) Pico 仍然連接著,并且 Thonny 的界面應(yīng)該是這樣的:
如果你在 Shell 窗口中看到 >>>,那么你已經(jīng)成功連接到 Pico 并啟用了交互式會(huì)話,準(zhǔn)備開始編程。如果你沒(méi)有看到這個(gè)提示,那么你需要檢查 Thonny 的設(shè)置是否正確。
點(diǎn)擊 Thonny 窗口的右下角,確保選擇了 MicroPython(Raspberry Pi Pico)解釋器;如果沒(méi)有選擇,請(qǐng)選擇它。
如果由于某種原因沒(méi)有成功地刷寫固件,Thonny 可能會(huì)提示你在這個(gè)階段安裝它;在這種情況下,嘗試重新刷寫固件。如果Pico 仍然沒(méi)有顯示為連接狀態(tài),那需要斷開連接并重新連接,然后按下 Thonny 頂部菜單欄的紅色停止標(biāo)志來(lái)重置一下。
然后,你應(yīng)該就可以在 Shell 窗口中看到 >>> 提示了,說(shuō)明我們已經(jīng)連接成功。
將以下代碼復(fù)制粘貼到空白且尚未保存的 Thonny 程序窗口中:
import array, time from machine import Pin import rp2 # Configure the number of WS2812 LEDs. NUM_LEDS = 31 PIN_NUM = 28 brightness = 1 @rp2.asm_pio(sideset_init=rp2.PIO.OUT_LOW, out_shiftdir=rp2.PIO.SHIFT_LEFT, autopull=True, pull_thresh=24) def ws2812(): T1 = 2 T2 = 5 T3 = 3 wrap_target() label("bitloop") out(x, 1) .side(0) [T3 - 1] jmp(not_x, "do_zero") .side(1) [T1 - 1] jmp("bitloop") .side(1) [T2 - 1] label("do_zero") nop() .side(0) [T2 - 1] wrap() # Create the StateMachine with the ws2812 program, outputting on pin sm = rp2.StateMachine(0, ws2812, freq=8_000_000, sideset_base=Pin(PIN_NUM)) # Start the StateMachine, it will wait for data on its FIFO. sm.active(1) # Display a pattern on the LEDs via an array of LED RGB values. ar = array.array("I", [0 for _ in range(NUM_LEDS)]) ########################################################################## def pixels_show(): dimmer_ar = array.array("I", [0 for _ in range(NUM_LEDS)]) for i,c in enumerate(ar): r = int(((c >> 8) & 0xFF) * brightness) g = int(((c >> 16) & 0xFF) * brightness) b = int((c & 0xFF) * brightness) dimmer_ar[i] = (g<<16) + (r<<8) + b sm.put(dimmer_ar, 8) time.sleep_ms(10) def pixels_set(i, color): ar[i] = (color[1]<<16) + (color[0]<<8) + color[2] def pixels_fill(color): for i in range(len(ar)): pixels_set(i, color) def color_chase(color, wait): for i in range(NUM_LEDS): pixels_set(i, color) time.sleep(wait) pixels_show() time.sleep(0.2) def wheel(pos): # Input a value 0 to 255 to get a color value. # The colours are a transition r - g - b - back to r. if pos < 0 or pos > 255: return (0, 0, 0) if pos < 85: return (255 - pos * 3, pos * 3, 0) if pos < 170: pos -= 85 return (0, 255 - pos * 3, pos * 3) pos -= 170 return (pos * 3, 0, 255 - pos * 3) def rainbow_cycle(wait): for j in range(255): for i in range(NUM_LEDS): rc_index = (i * 256 // NUM_LEDS) + j pixels_set(i, wheel(rc_index & 255)) pixels_show() time.sleep(wait) BLACK = (0, 0, 0) RED = (255, 0, 0) YELLOW = (255, 150, 0) GREEN = (0, 255, 0) CYAN = (0, 255, 255) BLUE = (0, 0, 255) PURPLE = (180, 0, 255) WHITE = (255, 255, 255) COLORS = (BLACK, RED, YELLOW, GREEN, CYAN, BLUE, PURPLE, WHITE) while True: print("fills") for color in COLORS: pixels_fill(color) pixels_show() time.sleep(0.2) print("chases") for color in COLORS: color_chase(color, 0.01) print("rainbow") rainbow_cycle(0)
Thonny 的界面現(xiàn)在看起來(lái)是這樣的:
使用 MicroPython 的一個(gè)優(yōu)點(diǎn)是它的很多代碼都是用可讀性強(qiáng)的英語(yǔ)編寫的。比如,在這個(gè)程序的開頭,我們可以看到 Pico 將通過(guò)引腳 28 控制 31 個(gè) LED,以最大亮度顯示(亮度為 0-1 的比例,其中 0.5 表示 50% 的亮度)。
這個(gè)程序的剩余部分會(huì)指示 Pico 重復(fù)顯示圖案和顏色。
點(diǎn)擊 File 然后選擇 Save as…
組裝硬件
3D 打印的部件
需要四個(gè) 3D 打印的零件來(lái)容納所有的組件:背板、主體、Pico 支架和前蓋。我們只需要將它們粘在一起組裝成完整的裝置就行。
你可以在文末免費(fèi)下載這些 3D 打印文件。建議使用易于打印的材料,比如 PLA 或 PETG 塑料絲材料來(lái)打印。
切割和準(zhǔn)備亞克力圓盤
對(duì)于這個(gè)項(xiàng)目,我們需要兩塊厚度為 3mm,直徑為 70mm 的亞克力圓盤,其中一塊圓盤需要在中央鉆一個(gè)直徑約為 5mm 的孔,用于通過(guò)導(dǎo)線。
如果你可以使用激光切割機(jī),制作這些部件很簡(jiǎn)單。或者你可以找出你的舊文具盒,找到圓規(guī)。使用木工鋸切割出一個(gè)直徑為 70mm 的圓形,然后用砂紙或銼刀修整邊緣。最終的圓盤不需要完全無(wú)瑕疵,因?yàn)楹罄m(xù)的步驟會(huì)遮蓋這些小瑕疵。
其中一塊圓盤在中心鉆一個(gè)直徑為 5mm 的孔,用于以后通過(guò)導(dǎo)線。
在柔性粘性鏡片上標(biāo)記一個(gè)70mm的圓,在單向鏡自粘膜上標(biāo)記另一個(gè)同樣大的圓。使用剪刀剪裁出圓形,而且可以剪得非常圓。
確保從亞克力圓片上撕掉了所有的保護(hù)層,然后依次撕掉鏡片背面的粘性支撐層。
把鏡片貼到帶有孔的圓片上,這個(gè)圓片會(huì)被用于安裝我們的Pico,然后將一片單向鏡膜貼到另一個(gè)圓片上。
布線和焊接電子器件
反應(yīng)爐底部將會(huì)包含可充電電池、開關(guān)和 USB-C 充電板,這些我們需要將它們粘合到 3D 打印切割件內(nèi)部的適配插槽中。
在這個(gè)階段,我們需要進(jìn)行一些電線的剪切、剝離和焊接工作。
根據(jù)下面的照片,確保將電池的正負(fù)極線連接到正確的 USB-C 充電板正負(fù)極輸入上,并將板的正輸出線焊接到滑動(dòng)開關(guān)的中間引腳上。
開關(guān)的正極線可以焊接到兩個(gè)外側(cè)開關(guān)引腳的任意一個(gè)上:
接下來(lái),將另外三根導(dǎo)線直接焊接到 Pico 的背面。這些導(dǎo)線的長(zhǎng)度應(yīng)該足夠完成后面組裝過(guò)程中的連線電路:大約 20cm 的長(zhǎng)度應(yīng)該足夠了。
為了給 Pico 提供電源,還需要將紅色和黑色導(dǎo)線分別連接到標(biāo)有 VBUS 和 GND 的引腳上。
我們需要第三根導(dǎo)線(藍(lán)色),在上面的照片中顯示,在藍(lán)色導(dǎo)線上將它焊接到標(biāo)有 GP28 的引腳上。我們的 MicroPython 腳本中指定的是 Pico 用來(lái)與 LED 進(jìn)行通信的引腳
LED 燈帶通常已經(jīng)預(yù)先布線,但它們的連接點(diǎn)通常較大,我們需要自制一個(gè)布線束。使用剪刀,將任何現(xiàn)有的布線都剪掉,然后切割出一條 31 個(gè) LED 的燈帶,確保剪切沿每個(gè) LED 之間的縫隙進(jìn)行:
燈帶上也標(biāo)有箭頭,用于顯示正確的電流方向,”+”符號(hào)代表正線,”0″代表數(shù)據(jù)線,”G”代表負(fù)線或接地線。在切割時(shí),確保沿著每個(gè)焊盤中間切開;如果不小心的話,很容易導(dǎo)致焊接線接觸不良。
在上面的照片中,像這樣焊接另外三根導(dǎo)線,長(zhǎng)度也約為 20cm:紅色正線、藍(lán)色數(shù)據(jù)線和黑色地線。在焊接到焊盤時(shí),你可能會(huì)發(fā)現(xiàn)從燈帶后面進(jìn)行焊接會(huì)更方便一些。
組裝
將連接到你的樹莓派Pico的三根線穿過(guò)小型3D打印的Pico底座。然后將線通過(guò)鏡子圓板的孔,將底座粘在你的Pico底部和圓板的反光面。確保Pico在底座上坐立于鏡子表面之上。
這樣,我們就可以實(shí)現(xiàn)我們的目標(biāo),獲得一個(gè) 3D 無(wú)限效果
現(xiàn)在將帶單向膜的圓盤放入 3D 打印的主體中,并將前環(huán)粘合到主體上。由于圓盤是由前環(huán)固定的,所以可以隱藏一些形狀方面的細(xì)微缺陷。
將 31 個(gè) LED 的燈帶粘貼在 3D 打印的主體的內(nèi)部,確保布線和連接與主體的間隙對(duì)齊,這樣你可以輕松地將導(dǎo)線穿過(guò)安裝 Pico 的圓盤的一側(cè)。
大多數(shù) LED 燈帶都有自粘背面,這有助于使這個(gè)過(guò)程變得簡(jiǎn)單。
將已經(jīng)粘合到鏡面圓盤上的 Pico 與裝有 LED 的主體和單向鏡組成一個(gè)完整的裝置,并與包含電池、充電板和開關(guān)的底座配對(duì)。
確保你的所有導(dǎo)線尾部都穿過(guò)到了反應(yīng)爐底座上。將兩根藍(lán)色數(shù)據(jù)線焊接在一起,將三根紅色正線焊接在一起,將三根黑色負(fù)線焊接在一起,根據(jù)需要修剪任何多余長(zhǎng)度的線材??梢允褂脽峥s套管或膠帶絕緣我們的連接點(diǎn)。
最后檢查
在將所有部件粘合在一起之前,檢查一切是否按預(yù)想的工作。通過(guò)滑動(dòng)開關(guān)檢查 LED 是否點(diǎn)亮;使用 USB-C 手機(jī)充電器或 USB 充電寶測(cè)試充電板的功能;充電時(shí),LED指示燈將亮起。
現(xiàn)在,我們只需要將部件粘合在一起就ok了。
升級(jí)
升級(jí)!每個(gè)人都喜歡升級(jí),尤其是鋼鐵俠。其實(shí)我們還可以使用樹莓派 Pico W 運(yùn)行一個(gè) web 服務(wù)器,從手機(jī)瀏覽器上無(wú)線控制 LED。
或者也可以加一些涂料,在反應(yīng)爐背面粘貼一些魔術(shù)貼,這樣我們就可以將它像托尼·斯塔克那樣佩戴在胸前了。
審核編輯:劉清
-
鋰離子電池
+關(guān)注
關(guān)注
85文章
3187瀏覽量
77398 -
驅(qū)動(dòng)器
+關(guān)注
關(guān)注
52文章
8057瀏覽量
145629 -
led燈
+關(guān)注
關(guān)注
22文章
1591瀏覽量
107655 -
3D打印技術(shù)
+關(guān)注
關(guān)注
4文章
219瀏覽量
31847 -
樹莓派
+關(guān)注
關(guān)注
116文章
1683瀏覽量
105396
原文標(biāo)題:用樹莓派 Pico 做一個(gè)鋼鐵俠反應(yīng)爐
文章出處:【微信號(hào):趣無(wú)盡,微信公眾號(hào):趣無(wú)盡】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論