基于Adafruit CPX的可穿戴决策装置:从硬件集成到手工缝合的跨界实践
1. 项目概述:一个帮你做决定的“魔法口袋”
你有没有过这样的时刻?中午吃什么、周末去哪儿玩、该不该买那件衣服……面对生活中无数个微不足道却又让人纠结的小选择,总希望有个东西能帮你“拍板”。今天分享的这个项目,就是我用一块小小的开源硬件Adafruit Circuit Playground Express(简称CPX),结合一点手工缝纫,做出来的一个“决策手机袋”。它不仅仅是一个装手机的布袋,更是一个有趣的交互式可穿戴设备。当你摇晃它时,袋子上的一圈LED灯会像轮盘一样转动,最终随机停在红、黄、绿中的一个颜色上,分别代表“不应该”、“可能”和“应该”,用这种略带仪式感又充满趣味的方式,帮你做出那个小小的决定。
这个项目的核心魅力在于它的跨界融合。它不像传统的电子项目那样只关注电路和代码,也不像纯粹的手工那样只注重外观。它将微控制器的智能感知能力(通过内置的加速度计)与纺织品的柔软和可穿戴性结合了起来。你不需要是电子专家或编程高手,CPX的图形化编程环境让代码逻辑变得直观;你也不需要是裁缝大师,基础的缝纫技巧就足够完成。整个过程,从构思、编程到裁剪、缝合,是一个完整的“从想法到实物”的创造过程,非常适合作为可穿戴设备或互动艺术的入门项目。无论你是创客爱好者、手工达人,还是想找一个有趣的亲子或教学项目,这个“决策手机袋”都能让你在动手实践中,真切地感受到科技与生活碰撞出的火花。
2. 核心硬件解析:为什么是Adafruit Circuit Playground Express?
在开始动手之前,我们得先搞清楚手中的“大脑”——Adafruit Circuit Playground Express(CPX)。市面上微控制器那么多,比如经典的Arduino Uno,或者更小巧的ESP32,为什么这个项目特别适合CPX呢?这得从它的设计哲学和硬件特性说起。
2.1 CPX的“开箱即用”优势
CPX被设计为一款“全功能”的教育和原型开发板。这意味着它把许多在别的板子上需要额外焊接、连接才能使用的传感器和输出设备,都集成在了一块圆形的板子上。对于我们这个项目,最核心的几个集成模块包括:
- 10颗可编程NeoPixel RGB LED灯:它们均匀分布在板子周围,形成一个彩色的圆环。这正是我们实现红、黄、绿灯轮盘效果的硬件基础。如果使用普通Arduino,你需要额外购买LED灯环并学习复杂的接线和库函数,而CPX上这些灯已经焊好,并通过专用库轻松控制。
- 三轴加速度计:这是实现“摇晃触发”功能的关键传感器。它可以检测板子在X、Y、Z三个方向上的移动和倾斜。我们编程时,只需要判断加速度的数值是否超过某个阈值,就能知道设备是否被摇晃了,无需任何外部接线。
- 板载按钮与触摸感应引脚:除了摇晃,你还可以通过按动板载的A/B按钮,或者触摸特定的引脚(它们被设计成可以缝上导电线程作为触摸点)来触发交互,为项目扩展提供了多种可能。
- 内置USB接口与电池接口:通过USB线可以直接连接电脑进行编程和供电。同时,它有一个标准的JST PH电池接口,可以轻松连接一个3.7V的锂聚合物电池或我们项目中将使用的3节AAA电池盒,实现完全无线便携。
正是这些高度集成的特性,让我们可以抛开繁琐的电路焊接,专注于创意逻辑的实现和外观制作,极大地降低了入门门槛。
2.2 项目硬件清单与选型考量
原教程的清单非常精简,这里我结合自己的制作经验,补充一份更详细、更可靠的清单,并解释每一项的选择理由:
| 物品 | 规格/建议 | 数量 | 备注与选型理由 |
|---|---|---|---|
| 核心控制器 | Adafruit Circuit Playground Express | 1块 | 项目核心,务必确认是“Express”版本,它支持图形化MakeCode和CircuitPython。 |
| 供电系统 | 3节AAA电池盒(带开关) | 1个 | 选择带开关的型号方便随时断电。3节AAA电池(4.5V)在CPX的安全电压范围内,且容量和易得性平衡。 |
| 电池 | AAA碱性电池或可充电电池 | 3节 | 建议使用可充电电池,更环保且长期成本低。 |
| 主体材料 | 旧手套、毛毡布、帆布或结实的棉布 | 1只/块 | 旧手套创意独特,但不易获得。毛毡布无毛边、易裁剪缝合,是绝佳替代品。厚度要能支撑手机重量。 |
| 缝合线 | 普通缝纫线(与布料颜色搭配) | 1卷 | 用于缝合袋身、口袋和肩带。强度要足够。 |
| 固定线 | 蜡线、 embroidery floss(绣花线)或结实的棉线 | 若干 | 关键材料!用于将CPX缝在布袋上。需要足够结实且能穿过CPX的缝纫孔。绣花线颜色多且结实,推荐。 |
| 缝纫针 | 手缝针,针眼要能穿过固定线 | 1根 | 确保针足够细,能轻松穿过CPX板上的小孔。 |
| 装饰按钮 | 小型纽扣 | 2-4颗 | 可选,用于装饰肩带或袋口。避免金属扣,以防意外短路(虽然概率极低)。 |
| 工具 | 剪刀、尺子、水消笔或划粉 | 各1 | 用于精确裁剪和画线。 |
注意:关于“缝纫”电子元件:这是可穿戴电子项目的常见做法。CPX板边缘有一圈较大的孔,就是专门为缝纫或系带固定设计的。我们不是要缝合电路,而是像缝纽扣一样把板子物理固定在布料上。电源和信号通过板载的电池接口和无线方式(如果有)传输,不需要缝合电线,因此对线和针法没有导电性要求,只需牢固即可。
3. 手工制作详解:从零缝制你的专属手机袋
有了硬件,我们就要为它打造一个“家”。手工部分是这个项目充满个性和成就感的一环。我们目标是制作一个带肩带、有一个前袋用来固定CPX和电池的手机袋。
3.1 袋身制作:选择合适的材料与版型
原教程使用了旧手套,这是一个非常有创意但可复制性不高的选择。我更推荐使用毛毡布作为主要材料。原因有三:第一,毛毡布由纤维压制而成,裁剪后边缘不会散开,无需锁边,对新手极其友好;第二,它有一定厚度和挺括感,能很好地保持形状并保护手机;第三,质地柔软,易于手缝。
制作步骤:
- 确定尺寸:测量你的手机。假设手机尺寸为长16cm x 宽8cm x 厚1cm。我们需要预留空间,所以裁剪两块长方形毛毡布作为袋身的前片和后片。建议尺寸为:(手机长 + 3cm) x (手机宽 x 2 + 厚 + 4cm)。以上述手机为例,即 (16+3)=19cm 长, (8*2+1+4)=21cm 宽。这个宽度保证了手机放入后,两侧还有空间缝合。
- 裁剪与缝合:
- 将两块毛毡布正面相对(如果一面有纹理,纹理面朝内)叠放。
- 用夹子或珠针固定三边(左、右、下),顶部开口处不缝。
- 使用平针缝或回针缝(更牢固)沿固定好的三边缝合,留出大约1cm的缝份。缝到角落时,可以多缝一针加固。
- 缝合完成后,将布袋从顶部开口处翻出来,此时毛毡布的正面朝外,缝合线藏在内部。用指甲或笔杆轻轻将角落捅平整。
实操心得:缝份与翻面:使用毛毡布时,缝份可以留小一些(0.5-0.8cm),因为它不散边。翻面时如果觉得角落困难,可以先不翻,用剪刀在缝份的角落处斜着剪掉一个小三角(注意不要剪到缝线),这样翻过来后角落会更平整。
3.2 前袋与CPX固定位:功能分区的关键
前袋用于容纳电池盒,并作为CPX的“底座”。我们需要在袋身的前片(即将安装CPX的那一面)外部增加一个口袋。
- 裁剪口袋布:裁剪一块长方形毛毡布,宽度略大于电池盒(约多2cm),高度为电池盒高度的1.5倍。例如电池盒8cm x 5cm,口袋布可裁10cm x 7.5cm。
- 定位与缝合:将这块口袋布放置在前片外侧偏下的位置(为上方安装CPX留出空间)。用珠针固定其左、右、下三边。然后,同样用平针缝或回针缝缝合这三边,一个上方开口的小口袋就做好了。电池盒可以轻松放入取出。
- 标记CPX位置:将CPX板放在前片上方、口袋的正上方。用水消笔轻轻沿着板子边缘画个圆,并点出几个关键的缝纫孔位置(比如均匀选4-6个孔)。这个圆环标记有助于我们后续对齐。
3.3 缝制肩带与整体组装
- 制作肩带:裁剪一条长条形的毛毡布或结实的织带。长度根据个人喜好(单肩或斜挎),通常在100cm到120cm之间。宽度2-3cm即可。如果使用毛毡布条,将其对折(正面朝外),然后沿长边缝合,形成一个结实的管状肩带。
- 安装肩带:这是承重的关键点。将肩带的两端分别放在袋身顶部开口的内侧(即前后片之间),确保两端对称。用珠针固定。然后,在缝合袋身顶部边缘时(见下一步),将肩带末端一并缝进去。为了更牢固,可以在肩带连接处内侧再缝上一个小布条进行加固,形状类似一个“小耳朵”包住肩带端部和袋身,多缝几道线。
- 完成袋口:最后,处理手机袋的顶部开口。可以将前后片和肩带一起,用一道缝线简单缝合固定边缘。也可以将开口处的毛毡布向内折约1cm,缝一道明线,看起来更精致。至此,布袋主体完成。
4. 核心编程逻辑:让灯光“随机”舞动起来
硬件安家落户后,就要赋予它灵魂——程序。我们将使用Microsoft MakeCode for Adafruit(https://makecode.adafruit.com/)这个图形化编程平台。它像拼图一样,即使没有编程基础,也能轻松理解逻辑。
4.1 编程环境搭建与基础逻辑
打开MakeCode网站,新建一个项目。你会看到两个虚拟的“角色”:一个代表CPX板,另一个是代码积木区。我们的程序逻辑可以分解为以下几个部分:
- 初始化设置:当板子启动时,我们需要设定一些初始状态。例如,关闭所有LED灯,设定一个变量来记录当前选中的颜色状态。
- 摇晃检测:持续检查加速度计的数据。当检测到剧烈的晃动(加速度值突然增大)时,触发“选择开始”事件。
- 灯光轮盘效果:被触发后,让环形LED灯依次快速点亮,模拟轮盘转动。
- 随机停止与结果展示:转动一段时间后,随机停止在某一盏灯上,并让该灯保持亮起(红色、黄色或绿色),持续几秒钟,代表决策结果。
- 复位:结果展示完毕后,复位到初始状态,等待下一次摇晃。
4.2 MakeCode积木程序详解
下面我将用文字描述核心积木的拼接逻辑,你可以据此在MakeCode中操作:
-
“当开机时”积木块:
- 拖入
设置所有灯环颜色为 关闭。这是初始状态。 - 创建一个变量,命名为
isSpinning,并将其设置为false。这个变量是程序状态的“开关”,防止在转动过程中重复触发。
- 拖入
-
“永久循环”积木块:
- 在这个循环里,放入一个
如果...那么...积木。 - 条件判断是:
加速度 强度 > 1500(这个值可以根据你摇晃的力度调整,1500是个中等敏感的值,可以先试用再微调)。 - 在“那么”里面,再嵌套一个
如果...那么...,条件是isSpinning = false。这确保了只有当前不在转动时,摇晃才有效。 - 在内层的“那么”里,做三件事:
a. 将
isSpinning设置为true。表示进入转动状态。 b. 使用重复执行 10 次积木来模拟转动。在循环体内:设置所有灯环颜色为 蓝色(或任何你喜欢的转动时的颜色) ->暂停 100 毫秒->设置所有灯环颜色为 关闭->暂停 50 毫秒。这个“亮-灭”的快速循环形成了视觉上的转动感。 c. 转动结束后,进行随机选择。
- 在这个循环里,放入一个
-
随机选择逻辑:
- 转动循环结束后,创建一个变量
choice,使用随机取数 从 0 到 2为其赋值。这里0、1、2分别对应我们定义的三种结果。 - 使用
如果...那么...否则如果...积木链:如果 choice = 0:设置所有灯环颜色为 红色。代表“不应该”。否则如果 choice = 1:设置所有灯环颜色为 黄色。代表“可能”。否则:设置所有灯环颜色为 绿色。代表“应该”。
- 让结果颜色保持亮起:
暂停 3000 毫秒(3秒)。 - 复位:
设置所有灯环颜色为 关闭,并将isSpinning变量重新设置为false。程序回到初始状态,等待下一次摇晃。
- 转动循环结束后,创建一个变量
注意事项:防抖与灵敏度调整:在实际测试中,你可能会发现稍微一动就触发了。这是因为加速度计非常灵敏。除了调整阈值(1500这个数值),更常见的做法是加入“防抖”逻辑。例如,在触发条件里,可以要求高强度加速度持续超过一个很短的时间(比如50毫秒),而不是瞬间超过。在MakeCode中,可以通过记录时间戳的变量来实现,稍微复杂一些。对于初学者,先调整阈值是一个简单有效的方法。
4.3 代码下载与烧录
程序编写完成后,点击编辑器左下角的下载按钮,会保存一个.uf2格式的文件到你的电脑。然后用USB线将CPX连接到电脑。此时,CPX会以一个名为CPLAYBOOT的U盘形式出现。直接将下载好的.uf2文件拖入这个U盘。U盘会自动弹出,CPX板上的红色小灯会闪烁几下,程序就烧录完成了!断开USB线,装上电池,你的代码就开始在板子上独立运行了。
5. 最终整合与调试:让硬件与软件合二为一
这是最后一步,也是将创意变为现实的关键一步。
5.1 安全固定CPX与布线
- 缝合CPX:将烧录好程序的CPX板,按照之前画好的标记位置,放在布袋前片。使用蜡线或绣花线,像缝纽扣一样,穿过板子上的缝纫孔和下面的毛毡布。建议至少固定4个对称的点(如上、下、左、右),确保板子平整牢固,不会晃动。线在背面打结要结实,可以多打几次。
- 放置电池盒:将3节AAA电池装入电池盒,打开开关。把电池盒放入我们缝制的前袋中。将电池盒的JST插头,从口袋上方轻轻拉出,连接到CPX板侧面的电池接口。注意理顺电线,避免过度弯折或拉扯。
- 收纳与美观:多余的连接线可以塞进前袋里,和电池盒放在一起。确保开关露在口袋外或容易触及的地方,方便开关机。
5.2 功能测试与优化
- 基础测试:打开电池盒开关。CPX板上的电源灯(红色)应亮起。此时所有LED灯应处于熄灭状态(我们的程序设定)。用力摇晃手机袋,观察灯环是否开始蓝色闪烁(转动),并在几秒后随机停止在红、黄或绿色上,并保持几秒。
- 问题排查:
- 无任何反应:首先检查电池盒开关是否打开,电池电量是否充足,JST插头是否插紧。可以重新插拔一下。如果还不行,用USB线连接电脑,看MakeCode的串口监视器是否有错误信息(这需要稍微进阶的知识)。
- 灯光不转或直接显示结果:检查摇晃检测的阈值。可能是阈值太高(摇不动)或太低(太敏感)。回到MakeCode中,调整
加速度 强度 > XXX中的XXX数值,重新下载程序测试。 - 灯光效果异常:检查程序中的颜色设置积木是否正确。确保“关闭”所有灯和“设置所有灯环颜色”的积木使用正确。
- 个性化优化:
- 调整速度:修改转动循环中的
暂停时间,可以改变灯光轮盘的旋转速度。 - 增加音效:CPX有板载蜂鸣器!你可以在转动开始时加入
播放音调 中音C 持续 100毫秒,在停止时加入一个提示音,体验更丰富。 - 改变触发方式:除了摇晃,你可以尝试用
当按钮A被按下时积木块来触发决策,这样就是一个“按钮式决策器”了。
- 调整速度:修改转动循环中的
6. 项目延伸思考与更多可能性
这个“决策手机袋”是一个完美的起点,它展示了可穿戴设备的核心闭环:感知(加速度计)-> 处理(CPX微控制器)-> 反馈(LED灯环)。基于这个框架,你可以发挥想象,创造出更多有趣的应用:
- 情绪指示袋:利用CPX上的麦克风(声音传感器)或光线传感器。根据环境噪音大小或光线明暗,让LED灯环显示不同的颜色模式,比如安静时蓝色、嘈杂时红色,变成一个环境情绪可视化配饰。
- 社交距离提示器(概念性):结合另一个CPX和无线电功能(CPX Express支持蓝牙,但MakeCode中简化了),可以尝试制作成对的设备,当两个设备靠近时,灯光显示友好绿色,远离时显示蓝色。这需要更复杂的编程和通信协议学习。
- 可穿戴游戏控制器:将手机袋变成游戏方向控制器。通过加速度计检测倾斜方向,映射为游戏中的上下左右指令,通过蓝牙与手机或电脑上的游戏连接(需要学习Adafruit Bluefruit LE相关库)。
- 材料与工艺升级:使用导电缝纫线代替普通线,将CPX的触摸引脚(如A1、A2等)用导电线程引到布袋的其他位置(比如肩带上缝一个导电布贴)。这样,触摸肩带就能触发灯光变化,实现更隐秘、更自然的交互。
这个项目的价值,远不止于做出一个帮你决定吃面条还是米饭的小工具。它是一次完整的“造物”体验,让你亲自动手,将抽象的代码逻辑和冰冷的电子元件,封装进一个温暖、柔软、可随身携带的织物之中。它提醒我们,技术可以不是坚硬的、疏离的,而是可以融入日常,充满趣味和个性的。当你下次为选择而犹豫时,不妨拿起这个自己亲手做的袋子摇一摇,无论结果如何,这个过程本身,就已经充满了创造的确定性和乐趣。