用樹莓派 Pico 做一個鋼鐵俠反應爐

在本教程中,我們將使用樹莓派 Pico 來控制 31 個單獨可尋址的 LED 燈,它們安裝在兩片亞克力塑料圓盤之間。其中一片圓盤上涂有膠粘鏡片,另一片圓盤上貼有單向鏡膜;這樣可以給 LED 燈帶制造出 3D 無限效果。
不過,樹莓派目前還沒有自己的”等離子聚變能源”,所以我們還得用充電電池,然后把所有東西封裝在一個 3D 打印的外殼中。

組件清單

樹莓派 Pico
柔性條形彩色像素 LED 燈帶(通常以 1 米長度出售;我們使用了144 個 WS2812B 的燈帶,并將其切割為 31 個 LED 的長度,剩余的部分可以用于其他項目)
3mm 厚的亞克力板材,足夠切割兩塊直徑為 70mm 的圓盤
自粘式柔性鏡片瓦(不是玻璃)
單向鏡自粘膜(用于阻擋太陽的窗貼式膜片)
USB-C 5V 1A TP4506 充電板(或者使用 Micro USB 接口的等效充電板)
可充電的 3.7V 1100mAh 603449 鋰離子電池
2 位 3P SPDT 面板安裝微型滑動開關,鎖定開關
約 100cm 的 26AWG 硅膠絕緣銅線(或類似線材)
強力膠水
3D 打印的外殼零件(STL 設計文件可以文末免費獲?。?br /> 在初始設置過程中,你還需要:一臺電腦,一根 Micro USB 線和焊接設備和材料(本項目中的焊接量很少,所以如果你不擅長或者不會焊接,也不用擔心)。

安裝固件

樹莓派為樹莓派 Pico 提供了詳細的文檔,不過在這一步,非常簡單,我們只需要拖動固件到Pico上就行(就像把文件拷貝到 U 盤上一樣)。

在你的計算機上,從這里:https://micropython.org/download/rp2-pico/

下載適用于最新版本 Pico MicroPython 固件的 UF2 文件。MicroPython 是一種針對微控制器優化的 Python 實現,適合各種水平的程序員。

如果你的 Pico 還沒有顯示為 RPI-RP2 驅動器,你需要檢查一下你的電腦是否已正確安裝了 Pico 的驅動程序。你可以按住 Pico 上的 BOOTSEL 按鈕(位于 USB 插口旁邊的小按鈕),同時將連接了 Pico 的 Micro USB 插入到電腦上來將 Pico 設置為啟動器模式。然后,Pico 將會顯示為一個名為 RPI-RP2 的驅動器,如下所示(以 macOS 為例):

給 Pico 編程

下載、安裝并打開一個名為 Thonny 的 Python 集成開發環境(IDE)。后面我們會用這個給Pico編程。確認 Pico 仍然連接著,并且 Thonny 的界面應該是這樣的:

如果你在 Shell 窗口中看到 >>>,那么你已經成功連接到 Pico 并啟用了交互式會話,準備開始編程。如果你沒有看到這個提示,那么你需要檢查 Thonny 的設置是否正確。點擊 Thonny 窗口的右下角,確保選擇了 MicroPython(Raspberry Pi Pico)解釋器;如果沒有選擇,請選擇它。如果由于某種原因沒有成功地刷寫固件,Thonny 可能會提示你在這個階段安裝它;在這種情況下,嘗試重新刷寫固件。如果Pico 仍然沒有顯示為連接狀態,那需要斷開連接并重新連接,然后按下 Thonny 頂部菜單欄的紅色停止標志來重置一下。然后,你應該就可以在 Shell 窗口中看到 >>> 提示了,說明我們已經連接成功。

將以下代碼復制粘貼到空白且尚未保存的 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 的界面現在看起來是這樣的:

使用 MicroPython 的一個優點是它的很多代碼都是用可讀性強的英語編寫的。比如,在這個程序的開頭,我們可以看到 Pico 將通過引腳 28 控制 31 個 LED,以最大亮度顯示(亮度為 0-1 的比例,其中 0.5 表示 50% 的亮度)。這個程序的剩余部分會指示 Pico 重復顯示圖案和顏色。

點擊 File 然后選擇 Save as…

組裝硬件

3D 打印的部件

需要四個 3D 打印的零件來容納所有的組件:背板、主體、Pico 支架和前蓋。我們只需要將它們粘在一起組裝成完整的裝置就行。

你可以在文末免費下載這些 3D 打印文件。建議使用易于打印的材料,比如 PLA 或 PETG 塑料絲材料來打印。

切割和準備亞克力圓盤

對于這個項目,我們需要兩塊厚度為 3mm,直徑為 70mm 的亞克力圓盤,其中一塊圓盤需要在中央鉆一個直徑約為 5mm 的孔,用于通過導線。

如果你可以使用激光切割機,制作這些部件很簡單?;蛘吣憧梢哉页瞿愕呐f文具盒,找到圓規。使用木工鋸切割出一個直徑為 70mm 的圓形,然后用砂紙或銼刀修整邊緣。最終的圓盤不需要完全無瑕疵,因為后續的步驟會遮蓋這些小瑕疵。其中一塊圓盤在中心鉆一個直徑為 5mm 的孔,用于以后通過導線。

在柔性粘性鏡片上標記一個70mm的圓,在單向鏡自粘膜上標記另一個同樣大的圓。使用剪刀剪裁出圓形,而且可以剪得非常圓。確保從亞克力圓片上撕掉了所有的保護層,然后依次撕掉鏡片背面的粘性支撐層。把鏡片貼到帶有孔的圓片上,這個圓片會被用于安裝我們的Pico,然后將一片單向鏡膜貼到另一個圓片上。

布線和焊接電子器件

反應爐底部將會包含可充電電池、開關和 USB-C 充電板,這些我們需要將它們粘合到 3D 打印切割件內部的適配插槽中。

在這個階段,我們需要進行一些電線的剪切、剝離和焊接工作。根據下面的照片,確保將電池的正負極線連接到正確的 USB-C 充電板正負極輸入上,并將板的正輸出線焊接到滑動開關的中間引腳上。開關的正極線可以焊接到兩個外側開關引腳的任意一個上:

接下來,將另外三根導線直接焊接到 Pico 的背面。這些導線的長度應該足夠完成后面組裝過程中的連線電路:大約 20cm 的長度應該足夠了。為了給 Pico 提供電源,還需要將紅色和黑色導線分別連接到標有 VBUS 和 GND 的引腳上。我們需要第三根導線(藍色),在上面的照片中顯示,在藍色導線上將它焊接到標有 GP28 的引腳上。我們的 MicroPython 腳本中指定的是 Pico 用來與 LED 進行通信的引腳:

LED 燈帶通常已經預先布線,但它們的連接點通常較大,我們需要自制一個布線束。使用剪刀,將任何現有的布線都剪掉,然后切割出一條 31 個 LED 的燈帶,確保剪切沿每個 LED 之間的縫隙進行:

燈帶上也標有箭頭,用于顯示正確的電流方向,”+”符號代表正線,”0″代表數據線,”G”代表負線或接地線。在切割時,確保沿著每個焊盤中間切開;如果不小心的話,很容易導致焊接線接觸不良。

在上面的照片中,像這樣焊接另外三根導線,長度也約為 20cm:紅色正線、藍色數據線和黑色地線。在焊接到焊盤時,你可能會發現從燈帶后面進行焊接會更方便一些。

組裝

將連接到你的樹莓派Pico的三根線穿過小型3D打印的Pico底座。然后將線通過鏡子圓板的孔,將底座粘在你的Pico底部和圓板的反光面。確保Pico在底座上坐立于鏡子表面之上。

這樣,我們就可以實現我們的目標,獲得一個 3D 無限效果:

現在將帶單向膜的圓盤放入 3D 打印的主體中,并將前環粘合到主體上。由于圓盤是由前環固定的,所以可以隱藏一些形狀方面的細微缺陷。

將 31 個 LED 的燈帶粘貼在 3D 打印的主體的內部,確保布線和連接與主體的間隙對齊,這樣你可以輕松地將導線穿過安裝 Pico 的圓盤的一側。大多數 LED 燈帶都有自粘背面,這有助于使這個過程變得簡單。參考下面的圖示,查看所有組件如何組裝在一起:

將已經粘合到鏡面圓盤上的 Pico 與裝有 LED 的主體和單向鏡組成一個完整的裝置,并與包含電池、充電板和開關的底座配對。確保你的所有導線尾部都穿過到了反應爐底座上。將兩根藍色數據線焊接在一起,將三根紅色正線焊接在一起,將三根黑色負線焊接在一起,根據需要修剪任何多余長度的線材??梢允褂脽峥s套管或膠帶絕緣我們的連接點。

最后檢查
在將所有部件粘合在一起之前,檢查一切是否按預想的工作。通過滑動開關檢查 LED 是否點亮;使用 USB-C 手機充電器或 USB 充電寶測試充電板的功能;充電時,LED指示燈將亮起。

現在,我們只需要將部件粘合在一起就ok了。

升級

升級!每個人都喜歡升級,尤其是鋼鐵俠。其實我們還可以使用樹莓派 Pico W 運行一個 web 服務器,從手機瀏覽器上無線控制 LED?;蛘咭部梢约右恍┩苛?,在反應爐背面粘貼一些魔術貼,這樣我們就可以將它像托尼·斯塔克那樣佩戴在胸前了。

via

坐沙發

發表評論

你的郵件地址不會公開


*