1. 项目缘起当“二哈”遇见“神奇宝贝”前阵子收拾屋子翻出了孩子玩腻的micro:bit开发板还有几个闲置的舵机和传感器。看着这些“电子垃圾”我就在想能不能用它们搞点既有趣又有技术含量的东西重新点燃孩子以及我自己对硬件的兴趣。正好之前体验过HuskyLens也就是大家常说的“二哈识图”这款AI视觉传感器它开箱即用的物体识别功能给我留下了深刻印象。一个念头突然冒出来能不能用“二哈”来识别现实中的物体然后让micro:bit驱动一个“图鉴”装置像《神奇宝贝》里的图鉴一样识别到特定物体就自动展示对应的信息这个想法让我很兴奋。它不像单纯的教程项目那样只是点亮个LED或者让小车跑起来而是融合了当下热门的边缘AI视觉、嵌入式硬件交互甚至还有点无线数据传输的影子最终呈现为一个有明确主题和趣味性的完整作品。整个过程涉及硬件选型、软件编程、结构设计、功能联调是一个典型的创客项目非常适合用来学习从想法到实物的完整流程。今天我就把这个“自制神奇宝贝图鉴器”的实现过程、踩过的坑以及一些优化思路毫无保留地分享出来。2. 核心硬件选型与功能拆解这个项目的核心目标是让机器“看见”物体并做出智能响应。围绕这个目标我们需要拆解出几个关键模块并为之选择合适的硬件。2.1 视觉感知模块为什么是HuskyLens视觉部分是项目的起点。市面上能给微控制器用的视觉模块不少比如OpenMV、K210开发板等。但我最终选择了DFRobot的HuskyLens主要基于以下几点考虑极低的学习与使用门槛“二哈”最大的特点是内置了训练好的AI算法。对于物体分类、人脸识别、标签追踪等常见功能你不需要自己收集数据、训练模型、部署模型。只需要通过机身上的按钮和屏幕对着目标物体按一下“学习键”它就能记住这个物体。下次再看到类似的物体它就能直接输出识别结果ID、坐标、大小等。这让我们可以完全专注于应用逻辑的开发而不是陷在复杂的AI模型训练中。丰富的通信接口HuskyLens支持I2C、UART两种通信方式可以非常方便地与Arduino、micro:bit、树莓派等主流主控板连接。其通信协议也相对简单通过读取固定的数据帧就能获取识别结果。集成度高供电简单模块集成了摄像头、处理器、屏幕只需要一根4Pin线VCC, GND, SDA, SCL或TX, RX就能工作非常适合嵌入式项目。注意HuskyLens的物体识别是基于特征点的而非深度学习中的大量数据训练。这意味着它对于形状、颜色特征明显的物体比如一个红色的苹果、一个特定的玩具识别效果很好但对于同一类物体中差异较大的个体比如不同品种的狗可能需要分别学习。在我们的“神奇宝贝”图鉴场景中这反而成了优点——我们可以把每个不同的手办或卡片定义为一个独立的“神奇宝贝”分别学习实现精准的一对一识别。2.2 主控与执行模块micro:bit 舵机 显示屏主控板我选择了BBC micro:bit。原因很简单它普及度高图形化编程环境如Mind对新手友好同时其MicroPython能力也能满足进阶需求。更重要的是它内置了蓝牙和无线电模块为后续的无线传输信号模拟提供了硬件基础。项目的“图鉴”表现形式我设计了一个可翻页的实体卡片簿。具体执行机构如下翻页机构使用一个180度舵机。舵机臂连接一个“拨杆”通过程序控制舵机旋转特定角度模拟手指翻动卡片簿页面的动作。信息展示最初考虑用micro:bit自身的5x5 LED点阵但显示信息太有限。因此我增加了一块OLED显示屏I2C接口128x64分辨率用于显示识别出的“神奇宝贝”的名称、属性、简介等文本信息。交互反馈micro:bit的板载LED点阵和蜂鸣器也没浪费用来作为识别成功的视觉和声音提示比如显示一个对勾图案播放一段简短音效。2.3 “无线传输”概念的融入“相关热搜词”和“最新网络热词”里都提到了“无线传输”。在这个项目中我并没有实现真正的远程数据传输比如Wi-Fi或4G而是巧妙地利用了micro:bit内置的无线电Radio功能模拟了“图鉴数据无线同步”的体验。我的设计是准备两块micro:bit。一块Micro:bit A作为“图鉴终端”与HuskyLens、舵机、OLED连接负责核心的识别与翻页动作。另一块Micro:bit B作为“数据发射端”单独放置。当在HuskyLens上学习一个新的“神奇宝贝”时我们需要给这个物体分配一个唯一的ID。这个ID不仅存储在“二哈”内部也通过Micro:bit B的无线电发送出去。Micro:bit A接收到这个ID后将其与对应的“神奇宝贝”详细信息名称、属性等绑定并存储起来。这样从用户视角看学习新生物的过程就像是把它的“数据”从发射端无线传输到了图鉴终端科技感十足。这实际上是一种近距离的、设备间通信的信号模拟系统成本低廉且易于实现。3. 系统搭建与电路连接硬件清单确定后下一步就是将它们正确地连接起来。清晰的接线是项目稳定的基础。3.1 接线图与原理说明由于设备较多我制作了一个接线表格比文字描述更直观设备引脚/接口连接到 Micro:bit (主控A)功能说明HuskyLensI2C 接口 (4Pin)SDA - P20I2C 数据线SCL - P19I2C 时钟线VCC - 3.3V特别注意必须接3.3VGND - GND共地OLED显示屏I2C 接口 (4Pin)SDA - P20与HuskyLens共享I2C总线SCL - P19与HuskyLens共享I2C总线VCC - 3.3V供电GND - GND共地舵机信号线 (橙色)信号线 - P0PWM信号控制引脚电源线 (红色)VCC - 外部电源正极重要勿直接接micro:bit地线 (棕色)GND - 外部电源负极 micro:bit GND电源共地Micro:bit B (发射端)无线电无需接线独立供电仅用于发送ID信号关键接线细节与避坑指南HuskyLens供电电压这是最容易出错的地方。HuskyLens的工作电压是3.3V而micro:bit的3.3V引脚输出电流有限约300mA。虽然“二哈”在识别时功耗不高但为了系统稳定建议使用一个3.3V稳压模块从外部电源如4节AA电池盒或USB充电宝取电同时给HuskyLens和舵机供电。直接将HuskyLens接micro:bit的3.3V可能导致micro:bit重启或“二哈”工作不稳定。共享I2C总线HuskyLens和OLED显示屏都使用I2C协议因此它们的SDA和SCL可以分别并联到micro:bit的对应引脚P20和P19。每个I2C设备都有一个地址HuskyLens的默认地址是0x32OLED的地址通常是0x3C程序里通过地址来区分和它们通信不会冲突。舵机供电隔离舵机在转动瞬间电流很大绝对不能直接从micro:bit取电否则极易烧坏主控板。必须使用独立的外部电源如上述的电池盒为舵机供电。同时务必把外部电源的GND和micro:bit的GND连接在一起确保它们有共同的参考地PWM信号才能被正确识别。引脚分配策略micro:bit的某些引脚有特殊功能。我选择P0控制舵机是因为它是一个普通的GPIO也支持PWM。P19、P20是硬件I2C引脚连接“二哈”和OLED最稳定。P1、P2等引脚可以预留用于后续扩展按钮或传感器。4. 软件逻辑与Mind编程实现硬件连接好后就到了赋予项目灵魂的软件部分。我使用Mind基于Scratch 3.0支持图形化和Python进行编程因为它对micro:bit和HuskyLens的支持非常好封装了复杂的底层通信。4.1 主程序逻辑流程图整个图鉴器的工作流程可以用以下逻辑来描述初始化设置无线电组、初始化OLED屏幕、连接HuskyLens。循环检测持续从HuskyLens读取识别结果。判断与响应如果识别到物体ID 0检查这个ID是否是新出现的与上一次识别的ID不同。如果是新ID则根据ID索引从预存的“神奇宝贝”数据库中找到对应的名称、属性、简介。在OLED屏幕上显示详细信息。控制舵机旋转到该ID对应的页面角度例如ID1转到30度ID2转到60度。让micro:bit点阵显示笑脸播放提示音。记录当前ID防止重复触发。无线学习功能这是一个独立并行的事件。当按下micro:bit A的A按钮时进入“学习模式”等待接收来自Micro:bit B的无线电信号即新物体的ID并将其添加到数据库的末尾。4.2 Mind图形化编程关键积木解析虽然图形化编程看起来简单但里面有些细节决定了项目的成败。1. HuskyLens数据读取在Mind的“扩展”中添加“HuskyLens AI摄像头”后关键积木是请求HuskyLens返回 [物体识别] 的学习结果。这个积木执行后需要用一个“重复执行直到”循环来等待数据准备好判断条件是HuskyLens [物体识别] 是否学习到ID。这里有个坑HuskyLens的数据更新有一定频率如果主循环太快可能会读到旧数据或空数据。我的经验是在读取积木后加一个等待0.1秒让数据缓冲区稳定能显著提高识别稳定性。2. 舵机角度控制使用设置舵机连接引脚 [P0] 角度为 [ ]积木。翻页动作需要拟人化不能瞬间“跳”到目标角度。我的做法是使用一个“渐进循环”从当前角度开始每次增加或减少2度并等待20毫秒直到达到目标角度。这样舵机会平滑转动更像是在翻书。3. OLED屏幕显示OLED显示需要处理多行文本和清屏。Mind的OLED积木有显示字符串 [ ] 行 [ ] 列 [ ]。需要注意的是屏幕分辨率是128x64每行大约可以显示16个中文字符或32个英文字符。在显示新信息前务必先使用清除显示积木否则新旧文字会重叠。对于较长的简介可以设计滚动显示效果。4. 无线电通信这是模拟“无线传输”的核心。在Mind的“扩展”中添加“无线电”。发射端Micro:bit B程序非常简单。当按下它的A按钮时就无线发送数字 [新物品ID]。这个ID可以硬编码或者通过其他方式比如旋钮电位器来设定。接收端Micro:bit A程序需要设置当无线接收到数据的事件。接收到数字后将其存入一个变量比如新ID。然后在“学习模式”下将这个新ID与用户通过HuskyLens按键学习的物体绑定。同时在OLED上显示“新生物数据已接收”的提示。5. “神奇宝贝”数据库的实现在micro:bit这种资源有限的设备上无法使用复杂的数据库。我采用最直接的数组列表方式来模拟。例如创建三个列表宝可梦ID列表: [1, 2, 3]宝可梦名称列表: [皮卡丘, 妙蛙种子, 小火龙]宝可梦简介列表: [电属性脸颊有电气袋, 草/毒属性背上有种子, 火属性尾巴火焰代表生命]当识别到ID为x时程序就去遍历宝可梦ID列表找到匹配的索引号然后用这个索引号去名称列表和简介列表里取出对应的信息显示。当通过无线方式添加新ID时就向这三个列表末尾分别追加新的数据。5. 机械结构设计与组装调试电子部分通了但要让“图鉴”真正动起来一个可靠的机械结构必不可少。我的设计目标是简单、可靠、易于复现。5.1 翻页机构的设计我使用了激光切割的3mm椴木板来制作结构件。核心是一个可以固定卡片簿的底座以及一个由舵机驱动的“翻页拨杆”。底座设计底座需要有一个垂直的背板用于粘贴或夹住卡片簿。底部平台用于固定micro:bit、面包板和电池盒。背板上要开孔让舵机的转轴可以伸出来。拨杆设计用一小段铁丝或者3D打印一个L形的拨杆一端牢牢固定在舵机的舵盘上另一端轻轻搭在卡片簿的页面上。舵盘旋转时拨杆会划过页面边缘将一叠页面拨过去实现翻页。角度校准这是调试中最花时间的部分。你需要手动测试舵机转动多少度刚好能翻过一页这个角度取决于你的卡片簿厚度、拨杆长度和安装位置。我的方法是先写一个测试程序让舵机在0-180度之间慢慢来回转动观察拨杆的运动轨迹找到它刚好能接触到页面和刚好翻过一页的两个临界点角度记录下来作为程序中翻一页的动作角度。5.2 整体布局与走线合理的布局能让项目看起来更整洁也减少干扰。重心稳定电池盒最重的部分放在底座平台的下方或后方降低重心防止头重脚轻。线路管理使用尼龙扎带或热熔胶枪固定飞线。将HuskyLens用可调节的支架比如迷你三脚架立在卡片簿正前方合适距离确保视野能覆盖整个识别区域。OLED屏幕摆放将OLED屏幕用双面胶固定在卡片簿背板的上方或侧方作为信息显示屏方便观看。5.3 系统联调与问题排查把所有部分组装好后上电测试很可能会遇到各种问题。下面是我遇到的一些典型问题及解决方法现象可能原因排查与解决步骤HuskyLens开机无反应或频繁重启供电不足或电压不对1. 检查是否接在3.3V上。2. 用万用表测量供电引脚电压是否稳定在3.3V左右。3. 尝试使用独立的3.3V稳压模块供电确保电流充足。舵机不转动或抖动1. 供电不足2. 信号线接触不良3. 程序角度值超限1. 确保舵机使用独立电源如4节AA电池提供6V电压。2. 检查信号线是否接在指定的P0引脚且接触良好。3. 检查程序里设置的舵机角度是否在0-180度合理范围内。OLED屏幕不显示或乱码1. I2C地址错误2. 初始化失败3. 屏幕本身故障1. 确认OLED的I2C地址常用0x3C或0x3D在Mind初始化积木中填写正确。2. 检查SDA、SCL接线是否反了或虚焊。3. 尝试单独给OLED和micro:bit编程写一个简单的显示测试程序。物体识别不稳定时有时无1. 环境光线过暗或过亮2. 学习样本不充分3. 物体特征不明显1. 保证识别环境光线均匀、适中避免强光直射或逆光。2. 对同一个物体从多个角度正面、侧面、稍微倾斜各学习一次增加特征样本。3. 尝试更换识别物体选择颜色、形状对比度高的物体。无线电接收不到信号1. 无线电组号不一致2. 距离过远或有遮挡3. 程序逻辑错误1. 检查发射端和接收端的micro:bit在“设置无线电组”积木中是否使用了相同的组号0-255。2. 确保两台设备在几米范围内无大型金属物体遮挡。3. 在接收端程序中用显示数字积木将接收到的信号直接显示在点阵上先验证通信是否正常。6. 功能优化与扩展思路一个基础版本完成后我们可以从交互体验、功能深度和外观呈现上做很多优化让这个“图鉴器”更像那么回事。6.1 交互体验优化多级菜单与按钮控制目前版本是自动识别即翻页。可以增加一个模式切换按钮用micro:bit的B按钮。按一下B按钮OLED进入菜单模式显示“1.识别模式 2.浏览模式 3.学习模式”通过A按钮进行选择和确认。在“浏览模式”下可以用A/B按钮手动前后翻页查看所有已收录的宝可梦信息。语音反馈加入一个DFPlayer Mini模块和一个小喇叭为每个宝可梦录制一段简短的特性介绍音频如“皮卡丘电属性宝可梦”。当识别成功时不仅翻页显示文字还播放对应的语音体验立刻提升一个档次。识别置信度显示HuskyLens其实可以返回识别框的大小和坐标。我们可以利用这些数据简单计算一个“置信度”比如识别框面积是否稳定、位置是否在画面中央。在OLED上同时显示识别到的名称和置信度百分比让用户知道这次识别有多“确定”。6.2 数据与功能扩展SD卡存储数据库当收录的“神奇宝贝”数量很多时micro:bit的内存可能不够用。可以添加一个MicroSD卡模块将宝可梦的详细信息名称、属性、身高、体重、技能等以文本文件的形式存储在SD卡中。程序运行时根据识别到的ID去SD卡里读取对应的文件内容并显示。这样理论上可以存储成千上万条记录。联网更新图鉴这是更进阶的玩法。将主控换成ESP32或树莓派Pico W这类带Wi-Fi功能的板子。识别到物体后通过Wi-Fi向一个自己搭建的简单服务器或Evene Webhook发送ID服务器返回该ID对应的详细信息JSON格式设备再解析并显示。这样就可以实现真正的“云端图鉴”随时更新和添加新内容。融合更多传感器比如加入一个温湿度传感器当识别到“急冻鸟”时让舵机带动一个小风扇吹出冷风配合加湿器识别到“喷火龙”时点亮红色的LED灯带模拟火焰效果。让交互从视觉扩展到环境感知更加沉浸。6.3 外观与主题深化定制化外壳用3D建模软件如Fusion 360, Tinkercad为整个装置设计一个科幻风格的“图鉴”外壳将电路板、屏幕、摄像头都内嵌其中只露出必要的镜头和显示区域。卡片簿改造不用现成的相册而是自己打印和制作“神奇宝贝”卡片。每一页的右下角可以贴上一个简单的AprilTag或ArUco二维码。HuskyLens也支持标签识别这样识别稳定性和准确性会更高。翻到某一页摄像头识别页面角落的标签从而触发对应的信息展示。这个“二哈物体分类-自制神奇宝贝图鉴器”项目从想法到实现贯穿了硬件集成、软件编程、机械设计和问题调试的全过程。它最吸引人的地方在于用一个具体的、有趣的主题将几个看似不相关的技术点AI视觉、嵌入式控制、无线通信、人机交互串联了起来形成了一个有始有终的完整作品。无论是用于STEM教育还是作为创客玩家的一个趣味项目它都能带来十足的成就感。更重要的是在这个过程中积累的硬件连接经验、调试方法和功能扩展思路完全可以迁移到其他任何物联网或智能交互项目中。