由 PSOC™ 6 人工智能套件构建一柄光剑
扫描二维码
随时随地手机看文章
每个绝地武士都必须亲手打造自己的光剑。想象一下,一柄闪耀着光芒的剑从你的剑柄处伸展而出,通过手腕的一次轻颤就能改变颜色,并且只需一个简单的动作就能收回——没有按钮,只有原力(以及一点点科技)。这就是你将要走的路。
在本次训练中,您将构建一个完全由您的动作控制的欧比旺风格光剑。该固件运行在英飞凌 PSOC™ 6 AI 评估套件(CY8CKIT-062S2-AI)上,通过 I²C 读取内置的 BMI270 加速度计,并为一个具有 378 个像素的与 WS2812 兼容的刀片供电。所有内容均使用 MicroPython 编写,具有动画化的点燃/收回效果、一个看门狗定时器以及实时串行诊断功能,以指导您操作。
以下是你的剑在接收到你的指令时的反应情况:
•快速向左扭转:开启刀片并改变颜色
•又一个向左快速转动的动作:移动到这 5 种颜色中的下一种。
•快速向右扭转:关闭刀片
你将拥有五种经典颜色的装备:欧比旺蓝色、绝地绿色、西斯红色、马斯·温杜紫色以及白色。它们的亮度限制在约 40%左右——这种亮度恰到好处,既能保证可见度,又不会过热,还能保持足够的能量输出。
如果你尚未使用过 PSOC™ 6 AI KIT 加速度计和陀螺仪模块,请参考英飞凌提供的教程《使用 PSOC™ 6 AI KIT 和 MicroPython 的加速度计与陀螺仪》。这里的运动设置是基于上述知识构建的。
运动检测是如何工作的?
你的剑通过 BMI270 加速度计感知你的动作,该传感器通过 I²C 通信协议进行信息传输。当你将剑直立持握时,手腕的转动会使剑围绕 Z 轴旋转:
•向左扭转 → 正向 Z 轴旋转速率
•向右扭转 → 负向 Z 轴旋转速率
一个有力且精准的轻拍动作每秒能达到数百度的温度,而平静的手则产生的温度要低得多。该固件设定的阈值为每秒 200 度,延时时间为 0.45 秒,以此来区分真正的动作和意外的移动。
惯性测量单元每 50 毫秒进行一次读取,并缓存最新的数据。这样既能保证光剑的响应速度,又不会使 I²C 总线过载。串行控制台会向您展示定期的状态更新:叶片状态、颜色索引、传感器状态以及最后的陀螺仪值——这些都是对学徒进行调试的有用工具。
如果 BMI270 在启动时或之后出现故障,其固件不会崩溃。相反,它会将该传感器标记为故障状态,保持主循环运行,并通过串行输出报告故障情况——这样,作为学徒的您就能看到并解决这个问题了。
硬件
你的光剑的核心部件就是其硬件部分。固件要求 NUM_LEDS 的值为 126,LED_PIN 的值为 P9_0。如果你的光剑或线路设置与这些值不同,请在继续操作之前先调整这些常量。
请按照以下步骤操作,年轻人:
1. 打印机械部件。
2. 将 LED 灯管上的两个标签都取下来。
3. 移除 LED 灯管内部的 LED 灯珠(如以下全息图(又名图片)所示)。
4. 按照组装照片所示将三角形部件粘合在一起,并让其完全固化。
5. 将 LED 灯带固定在三角形组件上。
6. 将这三根金属条并联连接起来:
•将所有 5 伏电源线连接在一起
•将所有的 GND 线连接在一起
•将所有数据输入连接在一起
7. 如果您使用的是 WS2813B 灯珠,备份数据输入端则可以保持不使用状态。
8. 将三根主要导线穿过光剑剑身上的孔洞。
9. 从充电宝上取下塑料和橡胶盖(如以下图片所示),这样能使其体积变小一些。如果您愿意,还可以将充电器部分粘贴在电池上。
10. 将 LED 电源连接至 PD 电源转换器。仅 PSOC™ 6 AI 产品套件无法为三组并联的 LED 灯带提供足够的电流。
11. 将共享的 LED 数据线连接到 P9_0 。
虽然您有三根物理条带,但固件却要控制 126 个 LED 位置。这些位置是并联连接的。
软件
现在,准备好你的软件:
1. 将 MicroPython 源代码烧录到您的 PSOC™ 6 人工智能开发套件上。如果您尚未进行此操作,请按照此处的说明进行操作。
2. 在 Thonny 中,请安装所需的库:
•bmi270
•NeoPixel
3. 将下面的代码复制到您的板子上作为 main.py 文件。
4. 在托尼软件中打开串行控制台,以便查看启动消息、陀螺仪诊断信息以及手势检测输出。这便是你了解剑器思维状况的窗口。
代码
这是微Python固件。它分为配置部分、传感器处理部分、LED 动画辅助部分,以及包含诊断和看门狗监控功能的主循环部分。好好研究它吧,因为理解你的代码就是通往精通之路。如果你希望每次在 PSOC™ 6 AI 开发套件上都能使用它。
这里发生了什么?
•read_twist():此函数每在 SENSOR_POLL_MS 毫秒内对 BMI270 进行一次读取,并缓存上一次有效的读数。这样可以确保手势检测保持响应性,同时又不会使 I²C 总线过载。
•WDT(超时时间为 WDT_TIMEOUT_MS):只有在初始启动动画结束后,才会启动看门狗定时器。这样在运行时就能保护您的设备,避免在启动时出现意外重启的情况。
•顏色:五個(紅、綠、藍)顏色組合,每種顏色的亮度上限約為 40%。這樣既節省電力,又足以讓你的刀片保持明亮的狀態。
•“ignite()”和“retract()”这两个函数分别逐个点亮或熄灭一个 LED 灯,而“show_solid()”和“blade_off()”则负责实现即时更新。
•“USE_SENSOR”和“TEST_ALL_LEDS_ON”:这些是用于排查惯性测量单元故障或验证 LED 接线的诊断开关。使用它们就如同 Jedi(绝地武士)运用原力一般——要明智地使用。
微调技巧
每把剑都是独一无二的。请根据你的手型和装备来调整这些参数:
•如果运动检测过于灵敏,就增大“FLICK_THRESHOLD”值。如果检测反应迟缓,则减小该值。
•“DEBOUNCE_S”:用于控制在一次快速动作之后,下一次手势能够被识别的最短时间间隔。
•ANIMATION_STEP_DELAY_S:调整点火与收回动画的播放速度。
••如果左右方向感觉颠倒了,就将“LEFT_IS_POSITIVE”设置为“False”。
•将“TEST_ALL_LEDS_ON”设为“True”即可进行快速的仅LED测试。
•将“USE_SENSOR”设置为“False”可实现不使用 BMI270 时对叶片行为进行调试。
结果
借助 PSOC™ 6 人工智能套件、强大的 MicroPython 程序和 BMI270 传感器,你已经打造出了足以媲美绝地武士的光剑:能够实现动画式的剑身运动、基于手势的色彩变换、串行诊断功能,还有用于维持系统运行的看门狗机制。这里没有按钮——只有你的动作和你的技艺。
本文编译自hackster.io





