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