步驟1:零件和工具
零件
Circuit Playground Express
15x Flora Neopixels
磁線
膠粘鉤環(huán)帶
迷你滑動(dòng)開(kāi)關(guān),SPDT
熱縮管
在采購(gòu)零件時(shí),購(gòu)買(mǎi)附加裝置是明智之舉。我總共有20個(gè)NeoPixels,其中一個(gè)從一開(kāi)始就被打破了,一個(gè)我毀了。 Candy Cane領(lǐng)帶非常便宜,我買(mǎi)了第二個(gè),以防我破壞了第一個(gè)。
工具
熱膠槍
焊接車(chē)站
剪線鉗
小刀
打火機(jī)或熱風(fēng)槍
線程和針
第2步:準(zhǔn)備領(lǐng)帶
主要目標(biāo)是訪問(wèn)內(nèi)部連接核心并劃分指示LED應(yīng)放置位置的線條。
步驟1:將扎帶系在一起
當(dāng)電子元件就位時(shí),很難系上扎帶。因此,打結(jié)領(lǐng)帶,使其看起來(lái)很好,打結(jié)相當(dāng)牢固,不會(huì)解開(kāi)。然后小心地拉動(dòng)系帶的小端以打開(kāi)孔以使綁帶越過(guò)頭部。這是領(lǐng)帶將被處理的位置。
有各種不同的領(lǐng)帶結(jié)。我只知道我小時(shí)候?qū)W過(guò)的那個(gè),溫莎。使用哪個(gè)結(jié)無(wú)關(guān)緊要。
步驟2:打開(kāi)領(lǐng)帶背面
撕開(kāi)領(lǐng)帶環(huán)一側(cè)的接縫和徽標(biāo)然后向下領(lǐng)帶的中心。小心,因?yàn)樗仨氃谧詈笾匦驴p合。
步驟3:繪制LED應(yīng)放置的位置
要使LED出現(xiàn)在白色條紋部分中領(lǐng)帶,更容易找到領(lǐng)帶核心背面的每個(gè)白色條紋部分的中心線,然后將其映射到領(lǐng)帶核心的前面。檢查并仔細(xì)檢查中心線是否為1),2)是否與條紋平行。如果稍微關(guān)閉,可以微調(diào)LED位置。但最好是讓它盡可能接近現(xiàn)在而不是更晚。
通過(guò)在線上放置LED并將條紋織物放在上面來(lái)測(cè)試線條的中心度。根據(jù)需要進(jìn)行調(diào)整。
步驟3:附加NeoPixels
基本上,我們正在制作自己的LED燈條。我們只需將LED安裝到連接芯上,然后將它們相互連接。
步驟1:將NeoPixels粘附到連接芯上
在背面放一點(diǎn)熱膠將NeoPixel放在中心線上。對(duì)于具有3個(gè)NeoPixels的部分,垂直對(duì)齊中心NeoPixel并首先將它們粘合在一起。這樣可以更容易地將左右NeoPixel相對(duì)于中心定位,特別是考慮到領(lǐng)帶的寬度從上到下增加。
確保將所有NeoPixel定位在同一方向,從左下角到右上角。如果這不正確,條帶將無(wú)法工作。
關(guān)于熱膠的說(shuō)明。完成項(xiàng)目就足夠了。至于它是否會(huì)持續(xù)多年,只需要看一下。
第3步:將NeoPixels焊接到彼此
因?yàn)槲覜Q定將NeoPixels焊接在一起而不是使用導(dǎo)電線,NeoPixel焊盤(pán)上的孔對(duì)我們起作用。只需在焊盤(pán)上找到一個(gè)焊接線的好地方。不要試圖用焊料填充孔,但如果發(fā)生這種情況,就可以了。
磁鐵線在銅芯周?chē)幸粚颖”〉慕^緣層。用刀子擦掉絕緣材料,將它們焊接在一起。最好刮掉電線的整個(gè)圓周。
步驟4:測(cè)試連接性
使用萬(wàn)用表測(cè)試連接性:
積極的聯(lián)系。從頭到尾應(yīng)該有連接。確保焊盤(pán)上的測(cè)試連接而不是電線。
接地連接。使用接地墊執(zhí)行相同的測(cè)試。
每條數(shù)據(jù)線。從一個(gè)數(shù)據(jù)板到下一個(gè),驗(yàn)證是否存在連接。
步驟4:附加Circuit Playground Express
Circuit Playground Express(CPX)是該系統(tǒng)的核心。 Adafruit有很多關(guān)于這個(gè)控制器的教程。稍后在這個(gè)講義中,我將重點(diǎn)介紹一些MCU功能。
步驟1:將CPX焊接到底部尖端NeoPixel
切割適當(dāng)長(zhǎng)度的電磁線用于電源,地面和數(shù)據(jù)。將它們穿過(guò)連接核心結(jié)構(gòu),使它們接觸NeoPixel電源,接地和數(shù)據(jù)焊盤(pán)。將它們焊接下來(lái),確保焊盤(pán)上現(xiàn)有的導(dǎo)線仍能保持良好的連接性。
接下來(lái)翻轉(zhuǎn)連接芯并將CPX置于所需位置。將電源線連接到VOUT焊盤(pán),將地線連接到任何接地焊盤(pán),并將數(shù)據(jù)線連接到A0以外的任何I/O焊盤(pán)。我編寫(xiě)的代碼使用A3。
測(cè)試連接性。
步驟2:固定CPX
使用線程和針,選擇任意四個(gè)等距墊并將它們縫到領(lǐng)帶核心上。
步驟5:為CPX供電
CPX沒(méi)有開(kāi)/關(guān)開(kāi)關(guān)。這意味著電池插入的那一刻,領(lǐng)帶就會(huì)打開(kāi)。這也意味著關(guān)閉它的唯一方法是拔掉電池,這是一個(gè)很大的麻煩。一個(gè)簡(jiǎn)單的解決方案是在電池上打開(kāi)/關(guān)閉開(kāi)關(guān)。
步驟1:切斷開(kāi)關(guān)上的第3個(gè)引腳
不需要其中一個(gè)非中心引腳。切斷它與開(kāi)關(guān)的主體齊平。
步驟2:將開(kāi)關(guān)串聯(lián)焊接電池導(dǎo)線
將電池接地線切斷中間的某處。在每根接地線上滑動(dòng)一塊熱縮管。將一根地線焊接到其中一根引腳,另一根地線焊接到另一根引腳。確保它們不會(huì)相互接觸或焊料接觸金屬體。
確認(rèn)沒(méi)有使用萬(wàn)用表連接。將管道滑過(guò)焊接連接并收縮。在因彎曲疲勞而可能失效的任何部件上添加一些電氣膠帶。
步驟3:驗(yàn)證電池是否工作
此時(shí),電池可以插入CPX 。如果一切順利,開(kāi)關(guān)應(yīng)該能夠打開(kāi)和關(guān)閉CPX。
步驟4:安裝電池
在背面放一點(diǎn)膠粘鉤環(huán)帶電池的一側(cè)和領(lǐng)帶核心。如果領(lǐng)帶沒(méi)有被粗暴處理,這將保持原位。
步驟6:設(shè)置電路游樂(lè)場(chǎng)快車(chē)
我不會(huì)去詳細(xì)介紹如何設(shè)置CPX。 Adafruit做到了,然后做了一些。我將提供一些我經(jīng)常遇到的問(wèn)題的提示。
CPX凍結(jié)
可能由于運(yùn)行時(shí)內(nèi)存問(wèn)題,CPX會(huì)經(jīng)常凍結(jié)。快速解決方法是擦除并重新閃爍。在這些說(shuō)明中搜索“Old Way”。基本上,它是按下幾個(gè)按鈕,拖放拖放,然后拖放重新閃爍。
警告:這將刪除所有內(nèi)容。 CPX上的所有代碼都將丟失。
保存對(duì)CPX的更改可能導(dǎo)致問(wèn)題
我發(fā)現(xiàn)有時(shí)在將文件保存到CPX后,python運(yùn)行時(shí)將處于錯(cuò)誤狀態(tài)。修復(fù)程序是通過(guò)按重置按鈕重新啟動(dòng)python運(yùn)行時(shí)。只按一次。按兩次將開(kāi)始重新刷新過(guò)程。
直接保存到CPX上是危險(xiǎn)的
由于CPX必須重新閃存的可能性,因此存在松動(dòng)的風(fēng)險(xiǎn)他們所有的代碼。丟失了兩次代碼之后,我想出了一個(gè)簡(jiǎn)單的工作流程。我會(huì)將我的代碼保存到本地硬盤(pán)。當(dāng)它準(zhǔn)備在CPX上進(jìn)行測(cè)試時(shí),我只需通過(guò)運(yùn)行一個(gè)簡(jiǎn)單的部署腳本來(lái)復(fù)制它。
第7步:編寫(xiě)Circuit Playground Express
此時(shí),CPX和NeoPixels非常完整。不需要用它們進(jìn)行其他機(jī)械或電氣工作。其余的都是軟件。
代碼可以在我的github帳戶(hù)中找到。核心python代碼應(yīng)該無(wú)需對(duì)所有操作系統(tǒng)進(jìn)行任何更改即可運(yùn)行。不要安裝外部Adafruit CircuitPython庫(kù)。它們未被使用。
以下是代碼中發(fā)生的事情的高級(jí)摘要。
什么輸入有什么用?
按鈕A:循環(huán)播放LED動(dòng)畫(huà)
按鈕B:循環(huán)播放歌曲
電容式觸摸板A1:更改LED動(dòng)畫(huà)的顏色
電容式觸摸板A6:更改LED動(dòng)畫(huà)的速度
3動(dòng)畫(huà)存在但只有2個(gè)有效
code.py
import pixelsoff
#import vumeter
import twinkle
。..
led_animations = [
pixelsoff.PixelsOff(pixels),
# vumeter.VuMeter(pixels, 100, 400)
stairs.Stairs(pixels),
twinkle.Twinkle(pixels)
]
我移植了Ampli-Tie VU儀表樣式代碼。它使用CPX麥克風(fēng)拾取聲音,并根據(jù)聲音幅度點(diǎn)亮NeoPixels。但是,我想要更多動(dòng)畫(huà)。由于運(yùn)行時(shí)內(nèi)存限制,我不得不選擇我想要的動(dòng)畫(huà)。所以默認(rèn)情況下,另外兩個(gè),Stairs和Twinkle,無(wú)需更改代碼即可運(yùn)行。要運(yùn)行VU表動(dòng)畫(huà),必須注釋掉其中一個(gè)或兩個(gè)動(dòng)畫(huà)并取消注釋VU表。
音樂(lè)管理器和離線編碼
frosty_the_snowman.py
import musical_notes as mn
# Frosty the Snowman
# Walter E. Rollins
song = [
(mn.G4, mn.HLF),
(mn.E4, mn.DTQ),
(mn.F4, mn.ETH),
(mn.G4, mn.QTR),
(mn.C5, mn.HLF),
。..
convert_to_binary.py
songs = [
(jingle_bells.song, “jingle_bells.bin”),
(frosty_the_snowman.song, “frosty_the_snowman.bin”)
]
for song in songs:
data=song[0]
file=song[1]
with open(file, “wb”) as bin_file:
for entry in data:
print(“writing: ” + str(entry))
note=entry[0]
dur=entry[1]
bin_file.write(struct.pack(“
我想要節(jié)日音樂(lè)。 CPX支持WAV和音調(diào)。在文件大小和運(yùn)行時(shí)內(nèi)存方面,WAV文件太大了。使用python數(shù)據(jù)結(jié)構(gòu)來(lái)保持音調(diào)及其持續(xù)時(shí)間也被證明使用了太多的運(yùn)行時(shí)內(nèi)存。因此,我修改了Holi-Tie代碼以讀取壓縮的二進(jìn)制文件,該文件僅包含壓縮二進(jìn)制格式的必要歌曲數(shù)據(jù)。我寫(xiě)了一個(gè)腳本,它讀取一個(gè)python數(shù)據(jù)結(jié)構(gòu)中的歌曲并將其寫(xiě)成二進(jìn)制格式。將歌曲編碼為文件中的二進(jìn)制數(shù)據(jù)使得歌曲既小又動(dòng)態(tài)。歌曲播放完畢后,內(nèi)存將被釋放。
添加更多歌曲是微不足道的。有關(guān)詳細(xì)信息,請(qǐng)參閱歌曲中的README.md。
按鈕A動(dòng)畫(huà)NeoPixels,B播放音樂(lè),但不同時(shí)
code.py
def button_a_pressed():
if music.is_playing(): # Stop music if playing
music.stop()
next_led_animation()
def button_b_pressed():
if active_led_animation != 0: # Run no-op animation
next_led_animation(0)
if music.is_playing(): # Toggle music on or off
music.stop()
else:
music.play()
即使使用內(nèi)存效率更高的音樂(lè)管理系統(tǒng),我也無(wú)法在運(yùn)行時(shí)內(nèi)存2動(dòng)畫(huà),同時(shí)播放其中1個(gè)動(dòng)畫(huà)并同時(shí)播放所有歌曲。因?yàn)槲乙呀?jīng)選擇不在運(yùn)行時(shí)內(nèi)存中使用VU表,所以我不想將動(dòng)畫(huà)的數(shù)量減少到只有1.所以我編寫(xiě)了代碼,以便動(dòng)畫(huà)播放或播放音樂(lè)但不是都。另一種選擇是減少NeoPixels的數(shù)量,但這會(huì)消除一些動(dòng)畫(huà)的酷感。
Python Code Funkiness
雖然我是一名經(jīng)驗(yàn)豐富的軟件開(kāi)發(fā)人員,但我從未編寫(xiě)過(guò)Python。在我掌握了它并盯著應(yīng)用封裝和模塊化等良好的編碼實(shí)踐后,我很快發(fā)現(xiàn)我使用了太多的運(yùn)行時(shí)內(nèi)存。所以有一些非DRY代碼。我還必須使用一些MicroPython技術(shù),如const(),以進(jìn)一步減少運(yùn)行時(shí)內(nèi)存問(wèn)題。
編譯模塊
編譯
#!/bin/bash
compiler=~/development/circuitpython/mpy-cross-3.x-windows.exe
cd songs
python3 。/convert_to_binary.py
cd 。.
for f in *.py; do
if [[ $f != code.py ]]; then
echo ”compiling: $f“
$compiler $f
fi
done
在項(xiàng)目早期,我遵循了Adafruit的建議,并將所有Adafruit CircuitPython庫(kù)存儲(chǔ)在flash上。然而,這為我的項(xiàng)目留下了很小的空間。為了能夠?qū)⑽业拇a放到CPX上,我開(kāi)始編譯模塊并將它們放到MCU上。事實(shí)證明,Holi-Tie不需要任何外部庫(kù)。 UF2中的現(xiàn)有庫(kù)足以滿(mǎn)足此項(xiàng)目的需要。運(yùn)行* .mpy文件更有效,所以我保留了部署已編譯模塊的過(guò)程。
如上面的編譯腳本所示,我正在使用Windows機(jī)器,但使用Unix實(shí)用程序,如bash和python3。我用Cygwin來(lái)完成這個(gè)。這個(gè)腳本可以很容易地轉(zhuǎn)換為DOS批處理和Windows本機(jī)Python3實(shí)現(xiàn)。
第8步:搞定關(guān)系
最后一步是將領(lǐng)帶芯放回原位,重新組裝領(lǐng)帶,并將其重新縫合。一定要能夠訪問(wèn)CPX。更換電池或更改代碼時(shí)需要它。
-
led
+關(guān)注
關(guān)注
242文章
23703瀏覽量
670909
發(fā)布評(píng)論請(qǐng)先 登錄
松下影像制作方案分享會(huì)成功舉辦

戶(hù)外LED廣告機(jī), 也叫LED海報(bào)屏, 社區(qū)小區(qū)售賣(mài)機(jī)附屬配套產(chǎn)品 #戶(hù)外LED廣告機(jī)#LED海報(bào)屏
DLPC3479 GUI上面的Edit Firmware制作中有幾個(gè)疑問(wèn)求解
開(kāi)源項(xiàng)目!手把手教你制作一個(gè)互動(dòng)式LED墻壁時(shí)鐘!
白光LED熒光粉合成途徑與光學(xué)性能研究

松下MPS媒體制作平臺(tái)概述

虛擬制作技術(shù)在廣告領(lǐng)域中的應(yīng)用與挑戰(zhàn)
HDI板盲孔制作常見(jiàn)缺陷及解決
AIGC在視頻內(nèi)容制作中的應(yīng)用前景
開(kāi)關(guān)電源設(shè)計(jì)與制作

科技感應(yīng)門(mén)為何青睞LED全息屏?揭秘現(xiàn)代科技新風(fēng)尚。#LED全息貼膜屏
光刻掩膜版制作流程
AI+XR打造內(nèi)容制作新范式 隨幻科技全新虛擬制作方案首秀BIRTV2024

評(píng)論