基于HuskyLens与掌控板的AI视觉自助收银机项目实战

发布时间:2026/7/28 10:44:09
基于HuskyLens与掌控板的AI视觉自助收银机项目实战 1. 项目概述当AI视觉遇见掌控板一个收银机的诞生最近在捣鼓HuskyLens这个AI视觉传感器发现它和掌控板搭配起来能玩出不少有意思的花样。这次我们不搞人脸识别也不玩物体追踪而是想做一个更贴近生活、能解决实际小问题的东西——一个简易的自助超市收银机。想象一下在小型社区超市或者校园小卖部顾客自己扫码结账是不是能省下不少人力这个项目就是基于这个想法用HuskyLens来识别商品上的条形码或二维码用掌控板来处理信息、计算价格并显示最终模拟一个自助收银的流程。整个过程涉及硬件连接、AI传感器配置、编程逻辑和简单的UI交互非常适合想从“点灯”进阶到“做项目”的创客朋友们。无论你是对物联网感兴趣还是想了解AI视觉如何落地到具体场景这个项目都能给你带来一次完整的实战体验。2. 核心硬件与软件环境搭建2.1 硬件清单与选型解析要完成这个自助收银机我们需要几样核心硬件。首先是主角HuskyLens AI视觉传感器我选择它而不是普通的摄像头模块原因在于它内置了多种AI算法比如人脸识别、物体追踪、颜色识别以及我们这次要用到的标签识别功能。这个标签识别功能经过我的实测对于标准的条形码和二维码识别率非常高而且它是在传感器端完成识别运算直接把识别结果比如二维码内容通过串口输出极大地减轻了主控板的计算压力。这对于掌控板这类资源有限的微控制器来说是至关重要的。另一个核心是掌控板我手头用的是掌控板2.0。它集成了ESP32主控、OLED屏幕、按键、蜂鸣器、麦克风等多种外设特别适合做这种需要显示和交互的项目。OLED屏可以清晰地显示商品信息和价格按键可以模拟“确认”、“取消”等操作蜂鸣器能提供扫码成功的提示音一站式解决了我们的大部分需求。剩下的就是连接线了我们需要一根4Pin的I2C连接线。这里有个关键点HuskyLens虽然支持UART和I2C两种通信协议但为了简化接线和编程我们强烈建议使用I2C模式。因为掌控板的I2C引脚是固定的21/22脚接线简单且掌控板的Mind、MakeCode等图形化编程环境对I2C的支持也更友好。硬件连接非常简单用连接线将HuskyLens背面的I2C接口注意针脚顺序一般是GND、VCC、SDA、SCL连接到掌控板对应的GND、3.3V、21号引脚SDA、22号引脚SCL上即可。注意务必确保HuskyLens的黄色功能按键拨到了“I2C”一侧这是很多新手容易忽略导致通信失败的关键一步。2.2 软件环境配置与固件更新软件方面我们主要使用**Mind**这款图形化编程软件。它对掌控板和HuskyLens的支持都非常好有现成的扩展库可以让我们像搭积木一样编程把精力集中在逻辑设计上而不是底层通信协议上。首先去DFRobot官网下载并安装最新版的Mind。安装完成后打开软件切换到“上传模式”。接着我们需要添加两个关键的扩展库。在“扩展”中心首先搜索并添加“掌控板”。添加成功后在左侧模块区就能看到掌控板相关的所有积木块了。然后同样在“扩展”中心搜索“HuskyLens”。这里可能会找到多个版本请选择由DFRobot官方发布的那一个。添加成功后软件会自动下载必要的驱动库。添加完扩展后用USB线将掌控板连接到电脑Mind通常会自动识别串口。如果没识别可以在“连接设备”处手动选择对应的COM口。接下来是一个非常重要的步骤更新HuskyLens的固件。新买的或者闲置一段时间的HuskyLens其固件可能不是最新版而最新的固件往往修复了旧版的Bug并提升了识别性能。更新方法很简单在Mind中切换到“实时模式”注意不是上传模式然后点击左侧“HuskyLens”模块分类下的第一个积木“初始化HuskyLens引脚SDA...”将其拖到编程区但不连接其他积木。然后点击这个积木块Mind的串口监视器区域会弹出一个HuskyLens的控制面板。在这个面板上通常有“固件升级”或类似的按钮点击后按照提示选择最新的固件文件.bin格式需从DFRobot官网下载进行升级即可。整个过程HuskyLens的屏幕会有进度条显示请保持USB供电稳定切勿断电。3. 项目核心逻辑与程序设计3.1 系统工作流程设计在动手写代码之前我们必须把整个收银机的工作流程想清楚。一个好的流程设计是项目成功的一半。我设计的核心流程是一个清晰的“状态机”模型待机状态系统启动后OLED屏幕显示欢迎语或“请扫描商品”的提示。HuskyLens持续进行图像捕捉和标签识别。识别状态当HuskyLens识别到一个有效的条形码/二维码我们统称为“标签”时它通过I2C将标签的ID和信息内容对于二维码就是里面存储的字符串发送给掌控板。查询与显示状态掌控板收到数据后首先进行解析。我们需要预先在程序中建立一个“商品数据库”。这个数据库可以是一个简单的列表或字典将标签ID或二维码内容映射到具体的商品名称和价格。掌控板根据接收到的信息去数据库里查询如果找到对应商品就在OLED屏上显示商品名称和单价同时蜂鸣器发出短促的“嘀”声提示识别成功。累加状态用户按下掌控板上的某个按键比如A键表示确认添加该商品。程序将当前商品的价格累加到“总金额”变量中并在屏幕上更新显示购物清单已添加的商品列表和实时总价。结算状态当用户扫描完所有商品按下另一个按键比如B键进入结算。屏幕显示最终总金额并提示“请支付”。这里我们可以模拟支付比如再按一次B键模拟支付完成然后蜂鸣器播放一段完成音效屏幕显示“谢谢惠顾”并将总金额清零清单清空系统回到“待机状态”。容错处理如果扫描到未知标签数据库里没有屏幕应显示“未识别商品请重试”。如果用户误操作可以设计一个“删除最后一项”的功能比如同时按A、B键。这个流程看似简单但涵盖了数据采集、处理、查询、交互、状态切换等多个嵌入式系统的核心概念。3.2 “商品数据库”的构建策略在资源有限的微控制器上我们不能运行真正的数据库软件。这里的“数据库”实际上是在程序里硬编码的一个数据结构。在Mind中我们可以利用“列表”和“变量”来模拟。一种简单有效的方法是使用两个并行的列表。例如商品ID列表存储我们预先让HuskyLens学习过的标签ID或者二维码的字符串内容。例如[“6901234567890”, “ITEM001”, “WATER-500ML”]商品信息列表存储对应的商品名称和价格可以用一个文本组合起来比如[“可乐 3.50”, “薯片 5.00”, “矿泉水 2.00”]。这样当HuskyLens识别到ID为“6901234567890”时程序就在商品ID列表里查找这个ID的索引位置比如是第0个然后去商品信息列表里取出相同索引位置第0个的字符串“可乐 3.50”再通过字符串处理函数将名称和价格拆分出来分别显示。更高级一点的做法可以尝试用“字典”思维但在图形化编程中实现稍复杂。对于入门项目双列表法完全够用且清晰易懂。实操心得在让HuskyLens学习标签时尽量保证标签完整、清晰、光照均匀。同一个商品最好从不同角度多学习几次这样可以提高识别成功率。对于二维码HuskyLens直接输出字符串内容所以我们的商品ID列表里直接存这个字符串即可比如“PAY-FOR-COFFEE”。4. 分步实现与代码详解4.1 HuskyLens的初始化与标签学习首先我们需要在Mind中完成HuskyLens的初始化并让它学习我们的商品标签。初始化模块在“上传模式”下从“HuskyLens”分类中拖出初始化HuskyLens使用I2C地址0x32积木放入当开机时事件容器中。这个0x32是HuskyLens默认的I2C地址一般无需更改。切换算法紧接着拖入设置算法为“标签识别”积木。这样HuskyLens就进入了我们需要的模式。学习标签学习过程需要我们在实物上操作。编写一个简单的学习程序当按钮A被按下时执行学习一次。将程序上传到掌控板后我们就可以进行学习了。拿起一件商品将上面的条形码或二维码置于HuskyLens镜头前确保屏幕上出现一个绿色的框框住标签。此时按下掌控板的A键HuskyLens会“嘀”一声屏幕上该标签的ID会从“ID”变成“ID1”第一次学习就是1后续累加。这就表示这个标签已经被学习并分配了ID1。重复这个过程学习所有你需要商品。记住每个ID对应的商品并把这个对应关系填写到我们程序中的“商品数据库”里。这里有一个关键技巧HuskyLens的标签识别算法对于条形码它学习的是条形码的图像特征而不是直接读取数字。所以即使同一个条形码打印在不同材质、不同大小、不同反光程度上都可能需要重新学习。对于二维码它则是直接解码内容。因此如果你的商品是印刷精美的标准条形码识别率会很高如果是自己打印的请确保打印清晰。4.2 掌控板主程序逻辑搭建主程序的核心是一个大循环不断执行以下步骤请求并获取识别结果使用请求HuskyLens返回识别结果积木然后使用检查是否有标签被识别到积木进行判断。这个“请求-检查”的过程是主动轮询需要放在循环内持续执行。解析结果如果“有标签被识别到”则使用获取标签信息数据“ID”和获取标签信息数据“内容”这两个积木来拿到我们需要的核心数据。对于条形码我们主要用ID对于二维码我们主要用“内容”即字符串。数据库查询与显示将获取到的ID或内容与我们预设的“商品ID列表”进行比对。这里需要使用列表“xxx”中是否存在项目“yyy”这样的积木进行查找。如果找到就根据索引从“商品信息列表”中取出信息字符串。字符串处理取出的信息可能是“可乐 3.50”我们需要将其拆分成“可乐”和“3.50”。在Mind中可以使用字符串“...”从第x个字符开始取y个字符或者更简单的用拆分字符串“...”以“ ”为分隔符积木将其拆分成一个临时列表第一个元素是名称第二个元素是价格字符串形式。OLED显示与交互使用掌控板OLED相关的积木如OLED显示字符串“...”在x行y列将商品名称和单价显示在屏幕指定位置。同时用播放频率xxx赫兹的音频持续xxx毫秒让蜂鸣器响一下。按键逻辑在循环中还需要持续检测按键状态。如果检测到“确认键”如A键被按下就将当前商品的价格需要将字符串“3.50”转换为数字3.5累加到总价变量并更新屏幕上的清单和总价显示。如果检测到“结算键”如B键被按下就跳转到结算显示逻辑。一个简单的代码结构示意如下文字描述逻辑当开机时 初始化HuskyLens (I2C, 0x32) 设置算法为“标签识别” 初始化商品ID列表和信息列表 清空OLED显示“自助收银机就绪” 重复执行 // 步骤12: 获取识别结果 请求HuskyLens返回识别结果 如果有标签被识别到那么 当前ID 获取标签ID // 步骤34: 查询数据库 如果商品ID列表包含当前ID那么 索引 商品ID列表中当前ID的位置 商品信息 商品信息列表[索引] 名称 价格字符串 拆分商品信息 价格数字 将价格字符串转为数字 // 步骤5: 显示 OLED显示名称和价格字符串 蜂鸣器提示音 等待按键... 如果A键按下 总价 总价 价格数字 更新购物清单显示 更新总价显示 如果B键按下 进入结算流程 否则 显示“未识别商品” 延时一小段时间如50毫秒避免循环过快4.3 用户交互与结算功能实现用户交互的友好性决定了这个收银机是否“好用”。除了基本的扫码、确认我们还可以增加一些功能实时反馈任何操作无论是扫码成功、添加商品、还是支付完成都伴随蜂鸣器不同的声音和屏幕提示让用户感知到机器“有反应”。购物清单在OLED屏幕的一个固定区域比如下半部分动态显示已添加的商品列表。由于OLED屏幕较小可以只显示最近添加的2-3项并始终显示“总计XX.XX元”。结算流程按下结算键后屏幕全屏显示总金额并闪烁“请扫码支付”或“确认支付按B键”。再次按下B键后模拟支付成功播放一段欢快的音效可以用播放旋律积木实现简单的音乐屏幕显示感谢语持续几秒后自动清屏返回待机状态。同时所有临时变量总价、购物清单清零。取消/删除功能长按A键可以删除最后添加的商品从总价中减去其价格并从清单中移除。这个功能对于纠错非常实用。实现这些功能的关键在于状态管理。我们可以设置一个全局变量当前模式它的值可以是“待机”、“已识别”、“结算中”等。程序的主循环根据当前模式的值来决定执行哪一段逻辑处理哪些按键事件。这样可以避免不同状态下的按键功能互相干扰让程序逻辑更清晰。5. 调试技巧与常见问题排坑实录5.1 硬件连接与通信故障排查问题1Mind中无法找到或初始化HuskyLens。检查步骤确认连接线是否插紧HuskyLens的I2C拨杆是否拨到了正确位置。检查掌控板是否通过USB正常供电HuskyLens的红色电源指示灯是否亮起。在Mind的“上传模式”下确保已正确添加“HuskyLens”和“掌控板”扩展。尝试在“实时模式”下使用串口监视器查看是否有HuskyLens的通信输出或者使用专门的I2C扫描程序检查地址0x32是否存在。根本原因90%是接线错误或拨杆位置不对。其次是扩展库未正确加载。问题2HuskyLens学习标签后识别不稳定时有时无。检查步骤确保学习时标签填充了屏幕中心区域的大部分光照充足且均匀避免反光。同一个标签尝试从多个角度、不同距离多学习几次。检查HuskyLens镜头是否干净。对于反光强烈的塑料包装上的条形码可以稍微倾斜镜头避开反光点。根本原因学习样本不充分或环境光影响。HuskyLens的机器学习需要多样本学习以提高泛化能力。5.2 软件逻辑与程序调试心得问题3扫描后屏幕显示的商品信息错乱。排查思路首先在识别到标签后不要立刻进行数据库查询而是先用OLED显示积木把HuskyLens返回的原始ID或内容直接显示出来。确认这个原始数据是否正确、稳定。如果原始数据正确再检查你的“商品ID列表”里存储的ID或内容是否与之一致。特别注意大小写、空格和特殊字符。二维码内容“ABC”和“abc”在程序看来是不同的。检查数据库查询部分的逻辑。使用调试输出或OLED显示在关键步骤打印中间变量比如“当前ID”、“查询到的索引”、“取出的信息”一步步跟踪数据流。实操心得在复杂逻辑中加入调试输出是最高效的排错方法。可以把关键变量的值显示在OLED屏的特定行或者通过串口打印到电脑上查看。问题4按键反应不灵敏或误触发。解决方案消抖处理这是必须的。在检测到按键按下后不要立即执行动作而是先延时20-50毫秒再次检测按键是否仍然处于按下状态如果是才确认为有效按键。Mind的“按键按下”积木通常已做处理但自己用如果引脚读取判断时需要注意。状态锁在执行一个需要时间的操作如显示动画、播放长音效时可以设置一个“忙碌”标志位在此期间忽略其他按键输入防止误操作。长按与短按区分通过计时器来判断按键按下的时长实现长按删除、短按确认的不同功能。5.3 性能优化与扩展思考当商品数量增多时在列表中线性查找遍历效率会变低。虽然对于几十个商品的项目来说影响微乎其微但作为一个好的编程习惯我们可以思考优化。如果使用Python文本编程我们可以用字典dict来实现O(1)时间复杂度的查找。在图形化编程中如果Mind支持更复杂的数据结构操作可以尝试优化查询逻辑。这个项目的扩展性很强。比如联网功能掌控板2.0自带Wi-Fi可以连接网络将扫描的商品信息发送到云服务器或本地数据库进行更复杂的库存管理和数据分析。语音提示利用掌控板的语音合成模块需外接在识别成功或结算时进行语音播报体验更佳。打印小票通过I2C或UART连接一个微型热敏打印机模块在支付完成后打印购物清单小票。多种支付模拟除了按键模拟可以增加二维码支付模拟。让HuskyLens学习一个“支付二维码”扫描后直接完成结算。调试这样一个项目最深的体会就是“分而治之”。不要试图一次性写完所有功能然后调试。应该先让HuskyLens能稳定识别并打印出ID再单独测试OLED显示和按键功能最后把各个模块像拼图一样组合起来每完成一个组合就测试一次。这样当问题出现时你能很快定位到是哪个环节出了错。硬件项目充满了不确定性耐心和有条理的调试方法是成功的关键。