利用樹莓派和乒乓球制作一個(gè)假日彩燈
我喜歡圣誕裝飾品和燈飾,因此很長(zhǎng)一段時(shí)間以來(lái)我一直想做一個(gè)可編程的 LED 項(xiàng)目。最近,我制作了一個(gè)由 LED 燈、乒乓球和樹莓派 Zero 組成的燈陣列。這個(gè)項(xiàng)目相對(duì)簡(jiǎn)單并且具有教學(xué)價(jià)值,因此我認(rèn)為它非常值得分享。
整個(gè)彩燈由我設(shè)計(jì),但其中一些靈感也來(lái)自 YouTube。你可以在我的 ??Git 存儲(chǔ)庫(kù)?? 中找到源代碼和制作說(shuō)明。
購(gòu)物清單
- ??樹莓派 Zero??
- ??樹莓派保護(hù)殼??
- 5V 2A 的電源線
- 展架
- 255 個(gè)乒乓球
- 熱熔膠槍和若干熱熔膠棒
- 烙鐵
- 焊錫絲
- 22 AWG 0.35mm 實(shí)芯線
- 10 米 WS2812(B) LED 燈帶(每米 30 像素)
- 萬(wàn)用表
- 鋼絲鉗
- 剝線鉗
設(shè)計(jì)樹莓派的燈光效果
這個(gè)設(shè)計(jì)是根據(jù)我展框的大小決定的。我在全球速賣通買到了每米 30 像素的燈帶,它可以輕松地切成 0.5 米的長(zhǎng)度,每條有 15 個(gè) LED 燈。乒乓球的直徑是 40 毫米,所以我測(cè)量并隔開 40 毫米劃了線,LED 燈條放在每隔 40 毫米的中間部分,這就產(chǎn)生了 17 條線。因此我的燈光陣列是 15×17。你可以根據(jù)實(shí)際情況來(lái)調(diào)整尺寸。
為了給燈帶和樹莓派供電,我在電路板底部設(shè)置了數(shù)據(jù)線和電源線。我的 LED 燈不需要很多電,所以我使用樹莓派 Zero 的 5V 輸出 GPIO 為它們供電。當(dāng)我以 50% 的亮度運(yùn)行時(shí),這個(gè)亮度已經(jīng)足以在白天和晚上透過(guò)我的窗戶看到。
布線
我從電路板的底部以之字形開始布線,這使得焊接非常容易,因?yàn)槊啃械哪┪膊槐胤祷氐矫啃械拈_頭。
我的線路大致像這樣(為清楚起見,這里進(jìn)行了簡(jiǎn)化,實(shí)際上它一共有 17 行):
使用樹莓派制作顯示屏
當(dāng)設(shè)計(jì)和布線的工作完成后就可以開始制作顯示屏了。
我在展板上測(cè)量并繪制了線路。我的燈帶背面有膠帶,所以我只需要取下背襯并將其貼在展板上。我檢查了每個(gè)燈帶的位置和數(shù)據(jù)線的方向,以確保燈帶可以按照樹莓派的指令正確串聯(lián)起來(lái)。
連接好所有燈帶后,我剪下三段長(zhǎng)度相同的電線,并將每個(gè)燈帶末端的電源線、數(shù)據(jù)線和接地線連接到其上方。
Connect each light strip at the end of each line.
在線路連接完成后,我檢查了每條燈帶之間的電源線和地線之間的連接,以確保其連通性。我還檢查了是否存在錯(cuò)誤的橋接,所以我驗(yàn)證了電源線和地線之間的連接。我還進(jìn)行了一些測(cè)試以確保所有燈都正常點(diǎn)亮(鏈路測(cè)試參閱 ??測(cè)試代碼??)。
完成上述工作后,我開始在乒乓球上剪洞,用剪刀刺入乒乓球的底部,然后剪一個(gè)小洞讓 LED 燈穿進(jìn)去。手工不太行,每個(gè)球都不太一樣,但效果真的很好。我使用的每米 30 個(gè)像素的 LED 燈,所以每個(gè) LED 之間有大約 30 毫米的空隙。一個(gè)乒乓球是 40 毫米寬,但我不打算開始單獨(dú)焊接每一個(gè) LED!我想,這是很重要的。首先,我并不擅長(zhǎng)焊接(正如我的照片所顯示的),而且無(wú)論如何,我想“好吧,它們是乒乓球。我可以把它們壓在一起!”
我是這樣做的:
在 LED 燈上滴上熱熔膠,然后在 LED 上放了一個(gè)乒乓球并按住大約五秒鐘,就粘好了一個(gè)乒乓球。粘貼下一個(gè)乒乓球時(shí)我只需要擠著上一個(gè)乒乓球,就能讓所有乒乓球都變得整齊了。我對(duì)它的外觀很滿意。它還有一個(gè)很好的好處,就是掩蓋了我糟糕的焊接工作;)
It's a tight fit, but the 40mm ping pong balls fit in a 30mm space just fine.
我繼續(xù)為余下的乒乓球進(jìn)行焊接。盡管這個(gè)過(guò)程中有幾個(gè)乒乓球被壓碎了,但最終還是順利完成了制作。
255 LEDs and 255 ping pong balls in an array.
測(cè)試代碼
測(cè)試代碼需要確保所有部件都能正常工作,為此我使用了這個(gè) ??Adafruit 指南??,它以紅、綠和藍(lán)點(diǎn)亮每個(gè) LED,然后依次進(jìn)行循環(huán)。我在測(cè)試時(shí)使用它來(lái)確保我連接無(wú)誤并且焊接正常。
在此之后,我在電子表格中設(shè)計(jì)了一個(gè)網(wǎng)格,將每個(gè)像素映射到一個(gè)網(wǎng)格位置。由于我的像素編號(hào)呈之字形排列,因此很難跟蹤每個(gè) LED(例如 A1 為 256,B1 為 226)。重新映射網(wǎng)格位置能使得我在構(gòu)建圖像時(shí)更容易。
在所有準(zhǔn)備工作完成之后,我就可以在紙上和電子表格中設(shè)計(jì)圖像,然后編碼。于是我開始添加一些動(dòng)畫(使用循環(huán)并將像素變?yōu)橐环N顏色,然后變?yōu)榱硪环N顏色)。
最終的結(jié)果還算順利。
A Christmas gift in LED.
Reindeer painted with light.
An LED snowflake.
能玩一年的樹莓派彩燈
我不確定這是否已經(jīng)完全完成了。自從把它擺放到櫥窗里,幾乎每個(gè)晚上我都會(huì)添加一些新的圖像和動(dòng)畫。我已經(jīng)在考慮除夕夜的時(shí)候要做成什么樣了。它不會(huì)像圣誕裝飾品一起在圣誕節(jié)后被放進(jìn)儲(chǔ)藏室。我只需要在上面顯示其它圖案,就能使它成為一個(gè)能玩一年的彩燈!我的一個(gè)朋友推薦了像素版馬里奧,這聽起來(lái)是個(gè)好主意!
我的代碼仍然需要完善。例如,我做了一些滾動(dòng)文本,但當(dāng)我為文本的每個(gè)位置重新繪制時(shí)卻花了很多時(shí)間。我想我可以用循環(huán)做一些事情,或者圖像庫(kù)可以幫助更輕松地滾動(dòng)字母,并使添加文本更容易,而不是在每一步打開和關(guān)閉每個(gè)像素。
這里有一張照片記錄了我制作的全過(guò)程:??LED 乒乓墻??。
可以在此處觀看它的運(yùn)行視頻:??XMas 燈光展示??。
這個(gè)彩燈最終的效果我非常滿意。以后我也會(huì)嘗試更多利用 LED 彩燈完成的項(xiàng)目。我也鼓勵(lì)大家親自動(dòng)手制作一個(gè)這樣的彩燈,它會(huì)比你想象中更簡(jiǎn)單。