步骤1:零件和工具
零件
Circuit Playground Express
15x Flora Neopixels
磁线
胶粘钩环带
迷你滑动开关,SPDT
热缩管
在采购零件时,购买附加装置是明智之举。我总共有20个NeoPixels,其中一个从一开始就被打破了,一个我毁了。 Candy Cane领带非常便宜,我买了第二个,以防我破坏了第一个。
工具
热胶枪
焊接车站
剪线钳
小刀
打火机或热风枪
线程和针
第2步:准备领带
主要目标是访问内部连接核心并划分指示LED应放置位置的线条。
步骤1:将扎带系在一起
当电子元件就位时,很难系上扎带。因此,打结领带,使其看起来很好,打结相当牢固,不会解开。然后小心地拉动系带的小端以打开孔以使绑带越过头部。这是领带将被处理的位置。
有各种不同的领带结。我只知道我小时候学过的那个,温莎。使用哪个结无关紧要。
步骤2:打开领带背面
撕开领带环一侧的接缝和徽标然后向下领带的中心。小心,因为它必须在最后重新缝合。
步骤3:绘制LED应放置的位置
要使LED出现在白色条纹部分中领带,更容易找到领带核心背面的每个白色条纹部分的中心线,然后将其映射到领带核心的前面。检查并仔细检查中心线是否为1),2)是否与条纹平行。如果稍微关闭,可以微调LED位置。但最好是让它尽可能接近现在而不是更晚。
通过在线上放置LED并将条纹织物放在上面来测试线条的中心度。根据需要进行调整。
步骤3:附加NeoPixels
基本上,我们正在制作自己的LED灯条。我们只需将LED安装到连接芯上,然后将它们相互连接。
步骤1:将NeoPixels粘附到连接芯上
在背面放一点热胶将NeoPixel放在中心线上。对于具有3个NeoPixels的部分,垂直对齐中心NeoPixel并首先将它们粘合在一起。这样可以更容易地将左右NeoPixel相对于中心定位,特别是考虑到领带的宽度从上到下增加。
确保将所有NeoPixel定位在同一方向,从左下角到右上角。如果这不正确,条带将无法工作。
关于热胶的说明。完成项目就足够了。至于它是否会持续多年,只需要看一下。
第3步:将NeoPixels焊接到彼此
因为我决定将NeoPixels焊接在一起而不是使用导电线,NeoPixel焊盘上的孔对我们起作用。只需在焊盘上找到一个焊接线的好地方。不要试图用焊料填充孔,但如果发生这种情况,就可以了。
磁铁线在铜芯周围有一层薄薄的绝缘层。用刀子擦掉绝缘材料,将它们焊接在一起。最好刮掉电线的整个圆周。
步骤4:测试连接性
使用万用表测试连接性:
积极的联系。从头到尾应该有连接。确保焊盘上的测试连接而不是电线。
接地连接。使用接地垫执行相同的测试。
每条数据线。从一个数据板到下一个,验证是否存在连接。
步骤4:附加Circuit Playground Express
Circuit Playground Express(CPX)是该系统的核心。 Adafruit有很多关于这个控制器的教程。稍后在这个讲义中,我将重点介绍一些MCU功能。
步骤1:将CPX焊接到底部尖端NeoPixel
切割适当长度的电磁线用于电源,地面和数据。将它们穿过连接核心结构,使它们接触NeoPixel电源,接地和数据焊盘。将它们焊接下来,确保焊盘上现有的导线仍能保持良好的连接性。
接下来翻转连接芯并将CPX置于所需位置。将电源线连接到VOUT焊盘,将地线连接到任何接地焊盘,并将数据线连接到A0以外的任何I/O焊盘。我编写的代码使用A3。
测试连接性。
步骤2:固定CPX
使用线程和针,选择任意四个等距垫并将它们缝到领带核心上。
步骤5:为CPX供电
CPX没有开/关开关。这意味着电池插入的那一刻,领带就会打开。这也意味着关闭它的唯一方法是拔掉电池,这是一个很大的麻烦。一个简单的解决方案是在电池上打开/关闭开关。
步骤1:切断开关上的第3个引脚
不需要其中一个非中心引脚。切断它与开关的主体齐平。
步骤2:将开关串联焊接电池导线
将电池接地线切断中间的某处。在每根接地线上滑动一块热缩管。将一根地线焊接到其中一根引脚,另一根地线焊接到另一根引脚。确保它们不会相互接触或焊料接触金属体。
确认没有使用万用表连接。将管道滑过焊接连接并收缩。在因弯曲疲劳而可能失效的任何部件上添加一些电气胶带。
步骤3:验证电池是否工作
此时,电池可以插入CPX 。如果一切顺利,开关应该能够打开和关闭CPX。
步骤4:安装电池
在背面放一点胶粘钩环带电池的一侧和领带核心。如果领带没有被粗暴处理,这将保持原位。
步骤6:设置电路游乐场快车
我不会去详细介绍如何设置CPX。 Adafruit做到了,然后做了一些。我将提供一些我经常遇到的问题的提示。
CPX冻结
可能由于运行时内存问题,CPX会经常冻结。快速解决方法是擦除并重新闪烁。在这些说明中搜索“Old Way”。基本上,它是按下几个按钮,拖放拖放,然后拖放重新闪烁。
警告:这将删除所有内容。 CPX上的所有代码都将丢失。
保存对CPX的更改可能导致问题
我发现有时在将文件保存到CPX后,python运行时将处于错误状态。修复程序是通过按重置按钮重新启动python运行时。只按一次。按两次将开始重新刷新过程。
直接保存到CPX上是危险的
由于CPX必须重新闪存的可能性,因此存在松动的风险他们所有的代码。丢失了两次代码之后,我想出了一个简单的工作流程。我会将我的代码保存到本地硬盘。当它准备在CPX上进行测试时,我只需通过运行一个简单的部署脚本来复制它。
第7步:编写Circuit Playground Express
此时,CPX和NeoPixels非常完整。不需要用它们进行其他机械或电气工作。其余的都是软件。
代码可以在我的github帐户中找到。核心python代码应该无需对所有操作系统进行任何更改即可运行。不要安装外部Adafruit CircuitPython库。它们未被使用。
以下是代码中发生的事情的高级摘要。
什么输入有什么用?
按钮A:循环播放LED动画
按钮B:循环播放歌曲
电容式触摸板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麦克风拾取声音,并根据声音幅度点亮NeoPixels。但是,我想要更多动画。由于运行时内存限制,我不得不选择我想要的动画。所以默认情况下,另外两个,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(“
我想要节日音乐。 CPX支持WAV和音调。在文件大小和运行时内存方面,WAV文件太大了。使用python数据结构来保持音调及其持续时间也被证明使用了太多的运行时内存。因此,我修改了Holi-Tie代码以读取压缩的二进制文件,该文件仅包含压缩二进制格式的必要歌曲数据。我写了一个脚本,它读取一个python数据结构中的歌曲并将其写成二进制格式。将歌曲编码为文件中的二进制数据使得歌曲既小又动态。歌曲播放完毕后,内存将被释放。
添加更多歌曲是微不足道的。有关详细信息,请参阅歌曲中的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()
即使使用内存效率更高的音乐管理系统,我也无法在运行时内存2动画,同时播放其中1个动画并同时播放所有歌曲。因为我已经选择不在运行时内存中使用VU表,所以我不想将动画的数量减少到只有1.所以我编写了代码,以便动画播放或播放音乐但不是都。另一种选择是减少NeoPixels的数量,但这会消除一些动画的酷感。
Python Code Funkiness
虽然我是一名经验丰富的软件开发人员,但我从未编写过Python。在我掌握了它并盯着应用封装和模块化等良好的编码实践后,我很快发现我使用了太多的运行时内存。所以有一些非DRY代码。我还必须使用一些MicroPython技术,如const(),以进一步减少运行时内存问题。
编译模块
编译
#!/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上。然而,这为我的项目留下了很小的空间。为了能够将我的代码放到CPX上,我开始编译模块并将它们放到MCU上。事实证明,Holi-Tie不需要任何外部库。 UF2中的现有库足以满足此项目的需要。运行* .mpy文件更有效,所以我保留了部署已编译模块的过程。
如上面的编译脚本所示,我正在使用Windows机器,但使用Unix实用程序,如bash和python3。我用Cygwin来完成这个。这个脚本可以很容易地转换为DOS批处理和Windows本机Python3实现。
第8步:搞定关系
最后一步是将领带芯放回原位,重新组装领带,并将其重新缝合。一定要能够访问CPX。更换电池或更改代码时需要它。
-
led
+关注
关注
242文章
23297浏览量
661359
发布评论请先 登录
相关推荐
评论