基于HuskyLens与掌控板打造本地AI视觉自助收银机原型

发布时间:2026/7/28 6:01:21

基于HuskyLens与掌控板打造本地AI视觉自助收银机原型 1. 项目缘起当AI视觉遇上开源硬件我们能做什么最近在折腾一个挺有意思的项目用HuskyLens AI视觉传感器和掌控板做了一个自助超市收银机的原型。这听起来可能有点“玩具”的感觉但实际做下来你会发现它触及了现代零售、物联网和嵌入式AI几个领域的交叉点。HuskyLens这个传感器本质上是一个集成了简单AI算法的摄像头模组能直接输出识别结果比如人脸、物体、颜色、标签、巡线省去了我们在微控制器上跑复杂模型的麻烦。掌控板则是一个基于ESP32的开源硬件集成了屏幕、按键、麦克风、Wi-Fi/蓝牙非常适合做交互原型。那么把这两者结合起来做一个“收银机”核心逻辑是什么其实就是用HuskyLens去识别商品比如通过颜色、物体或二维码标签然后掌控板负责处理识别结果、计算价格、显示账单并模拟支付流程。整个过程我们不需要连接云端服务器所有计算都在本地完成响应快也保护了隐私。这个项目非常适合想了解AIoT人工智能物联网入门、嵌入式系统交互设计或者单纯想做个有趣小项目的朋友。无论你是学生、创客还是对智能硬件感兴趣的开发者都能从这个项目中获得从硬件连接到逻辑编程的完整体验。2. 核心硬件选型与连接为什么是HuskyLens和掌控板在做任何项目之前硬件选型是第一步也是最关键的一步。选对了事半功倍选错了可能连第一步都迈不出去。我选择HuskyLens和掌控板这个组合是基于几个非常实际的考量。2.1 HuskyLens将AI视觉能力“傻瓜化”HuskyLens最大的优势在于“开箱即用”。传统的AI视觉方案你需要一个摄像头模组如OV2640然后在微控制器如ESP32-CAM上部署TensorFlow Lite Micro之类的框架自己准备数据集、训练模型、优化、部署。这个过程门槛高周期长对算力也有要求。HuskyLens则把这些都封装好了。它内置了Kendryte K210 AI芯片预置了多种算法。你只需要在它的小屏幕上通过按键选择识别模式比如“物体识别”然后让它“学习”一两个你要识别的物体样本它就能在后续的摄像头画面中实时框出并告诉你这是什么。对于我们的超市收银机项目这意味着快速原型我们不需要自己训练商品识别模型。可以用“颜色识别”模式区分不同颜色的水果红苹果、绿苹果、黄香蕉或者用“物体识别”模式学习几个具体的商品包装盒。降低复杂度HuskyLens通过UART串口或I2C接口输出结构化的识别结果比如ID:1, x:120, y:80ID代表学习时的样本编号x,y是中心坐标。掌控板只需要解析这些简单的数据而不需要处理原始的图像流。功耗与体积相比带摄像头的开发板HuskyLens集成度高供电简单5V体积也相对紧凑。注意HuskyLens的识别能力是有限的。它适合识别特征明显、背景相对简单的物体。对于成百上千种高度相似的商品比如不同口味的同品牌薯片它的准确率会下降。但在我们的原型和教学场景中这完全够用。2.2 掌控板一体化的交互与计算核心为什么不用更常见的Arduino Uno或ESP32开发板因为掌控板在“交互”上做了高度集成。内置显示屏一块1.3英寸的OLED屏幕无需额外接线和驱动直接可以显示商品名称、价格、总价等信息这是收银机的核心输出设备。丰富的输入设备板载了多个触摸按键金手指和物理按键A/B我们可以轻松地设计“确认”、“取消”、“结账”等交互逻辑。无线能力集成ESP32自带Wi-Fi和蓝牙。虽然我们这个基础版本是离线收银但未来扩展线上支付、库存同步等功能非常方便。编程友好完美支持Mind基于Scratch3.0和PythonMicroPython编程。对于初学者图形化编程可以快速搭建逻辑对于进阶者Python能实现更复杂的控制。2.3 硬件连接一张图搞定供电与通信连接非常简单核心是建立HuskyLens与掌控板之间的串口通信。所需材料清单HuskyLens AI视觉传感器 x1掌控板2.0版本 x1Type-C数据线为掌控板供电和编程 x1杜邦线母对母 x4接线步骤给HuskyLens供电HuskyLens需要5V电压。掌控板上的3V3引脚是3.3V不能直接使用。我们需要使用掌控板上的VCC引脚输出5V和GND引脚。建立串口通信我们使用软串口Software Serial来通信以避免占用掌控板下载程序用的硬串口。通常选择两个通用的GPIO引脚。具体连接方案掌控板引脚HuskyLens引脚线色建议作用3V33V3灰色错误接法勿用HuskyLens需要5V。VCC (5V)VCC (5V)红色正确为HuskyLens提供5V电源。GNDGND黑色或棕色共地确保电压基准一致。P13(GPIO13)RX黄色掌控板的TX发送端接HuskyLens的RX接收端。P14(GPIO14)TX白色掌控板的RX接收端接HuskyLens的TX发送端。提示TX接RXRX接TX这是串口通信的标准接法目的是让一方的发送端对准另一方的接收端。接反了无法通信。连接完成后用Type-C线将掌控板连接到电脑。此时HuskyLens应该会亮起红灯屏幕点亮。3. 软件环境搭建与HuskyLens基础配置硬件连好了接下来是让它们“活”起来的软件部分。这里我强烈推荐使用**Mind**这款国产图形化编程软件它对掌控板和HuskyLens的支持非常友好省去了配置开发环境、安装库文件等一系列繁琐步骤。3.1 Mind软件安装与设备连接下载与安装前往Mind官网下载对应操作系统的版本并安装。切换模式打开Mind点击左上角切换到“实时模式”区别于上传模式的离线运行实时模式可以边编程边看到效果非常适合调试。连接掌控板用Type-C线连接掌控板和电脑。在Mind右下角点击“连接设备”在端口列表中选择识别到的掌控板端口如COM3或/dev/cu.usbserial-XXXX。点击连接成功后右下角会显示“掌控板”已连接。加载扩展这是关键一步。我们需要告诉Mind这个项目要用到HuskyLens。点击左下角的“扩展”在“主控板”分类下找到并添加“掌控板”。然后在“传感器”分类下找到“HuskyLens AI摄像头”点击添加。添加成功后左侧积木区会出现HuskyLens相关的指令块。3.2 HuskyLens的首次配置与“学习”商品在编程之前我们需要先在HuskyLens设备本身上进行一些设置让它准备好识别我们的“商品”。选择识别算法按HuskyLens侧面的“功能键”FUNC屏幕上会列出所有算法人脸识别、物体追踪、物体识别、巡线、颜色识别、标签识别等。方案A颜色识别如果我们用不同颜色的积木块代表不同商品红苹果绿梨蓝饮料就选择“颜色识别”。这是最简单快速的方案。方案B物体识别如果我们用真实的、外形有区别的小物件比如一盒牛奶、一包饼干就选择“物体识别”。这个模式需要“学习”样本。方案C标签识别如果我们打印一些二维码或AprilTag贴纸贴到商品上就选择“标签识别”。这最接近真实超市的条形码方案。这里以物体识别为例进行后续说明。学习第一个商品样本将HuskyLens对准第一个商品比如一盒牛奶确保它在屏幕中央的白色方框内。长按“学习键”LEARN约2秒直到屏幕上的白色方框变成蓝色框并显示“再按一次确认长按退出”。此时HuskyLens已经抓取了一帧图像作为样本。再短按一次“学习键”屏幕上会显示“ID:1”。这意味着这个商品被学习为1号样本。你可以按“功能键”来切换显示ID编号。学习更多商品重复步骤2学习其他商品比如饼干、巧克力。每次学习HuskyLens会自动分配递增的ID2, 3...。保存模型可选但重要HuskyLens断电后学习的物体会丢失。为了下次不用重新学可以长按“功能键”进入设置菜单找到“保存模型”并确认。这样模型就保存在了传感器内部。完成这些后当你把学习过的商品再次放到镜头前HuskyLens应该能自动框出它并显示对应的ID。这就为我们的收银程序提供了最基础的输入信号。4. 核心逻辑编程从识别到结算的完整流程有了硬件连接和传感器配置最核心的部分来了——编程。我们将使用Mind的图形化积木来搭建整个收银机的逻辑。虽然看起来像搭积木但其背后的逻辑与用Python或C编写是完全相通的。我会详细解释每一块积木的作用和背后的编程思想。4.1 程序初始化与HuskyLens通信建立任何程序都需要一个起点。在Mind中我们通常用“当绿色旗帜被点击”作为主程序的开始。初始化串口首先我们必须初始化与HuskyLens通信的软串口。拖入串口初始化积木设置TX引脚为13RX引脚为14波特率设置为9600。这个波特率需要与HuskyLens的出厂设置一致通常是9600。为什么是9600波特率是通信速度。更高的波特率如115200传输更快但可能不稳定。9600是低速但非常稳定的通用选择对于传输简单的识别结果数据几个字节绰绰有余。初始化HuskyLens协议拖入HuskyLens初始化积木。这个积木内部会向HuskyLens发送一些初始化指令确保两者使用同一种“语言”协议通信。清空屏幕与变量拖入清空屏幕积木让OLED屏幕从空白开始。然后创建几个变量来存储关键数据商品ID临时存储当前识别到的商品编号。商品名称根据ID映射出的名称。商品单价根据ID映射出的价格。购物清单一个列表数组用于存储每次识别后加入的商品名称。总价一个数字变量累加每次加入商品的价格。实操心得在“当绿色旗帜被点击”下面进行所有的初始化操作是一个好习惯。这确保了每次重新运行程序都是从干净的状态开始避免了上次运行残留的数据干扰本次逻辑。4.2 构建商品信息数据库在真实收银系统中商品名称和价格是从后台数据库查询的。在我们的原型里需要自己建立一个简单的映射关系。最直接的方法就是用“如果...那么...”积木来实现查询。我们可以创建一个自定义的“函数”在Mind里叫“自制积木”命名为“查询商品信息”它接收一个“商品ID”作为输入然后设置对应的“商品名称”和“商品单价”。在这个函数里我们会这样写逻辑如果 商品ID 1 那么 商品名称 “牛奶” 商品单价 5.5 否则如果 商品ID 2 那么 商品名称 “饼干” 商品单价 3.0 否则如果 商品ID 3 那么 商品名称 “巧克力” 商品单价 8.0 否则 商品名称 “未知商品” 商品单价 0这样当主程序拿到一个ID调用这个函数就能立刻知道它是什么、卖多少钱。4.3 主循环识别、处理、显示的永动机收银机需要一直工作等待商品被放到镜头前。这需要一个“永远循环”的结构。获取识别结果在循环内首先拖入向HuskyLens请求数据积木协议选择“物体识别”。这条指令会让掌控板通过串口向HuskyLens索要最新的识别数据。解析数据接着使用HuskyLens是否有读到数据积木进行判断。如果为“是”说明HuskyLens当前“看到”了它认识的东西。如果读到数据就用HuskyLens读取物体识别数据ID积木将识别到的物体ID存入商品ID变量。然后立即调用我们刚才创建的“查询商品信息”函数。防重复触发机制关键这里有一个巨大的坑。HuskyLens的识别是连续的一个商品放在镜头前程序每循环一次可能每秒几十次都会读到同一个ID导致瞬间在购物清单里添加几十件同样的商品总价爆炸。解决方案引入一个状态变量比如上次识别ID。在成功识别并处理一个商品后将当前商品ID存入上次识别ID。然后在循环开头判断如果HuskyLens是否有读到数据为是并且读到的商品ID不等于上次识别ID才进行后续的“加入购物车”操作。处理完后立即更新上次识别ID。当商品拿开HuskyLens读不到数据了就将上次识别ID重置为0或-1等待下一个商品。这个逻辑模拟了真实收银机的“扫码枪”行为扫一次响一声添加一件。而不是把商品放在扫码口不动它就一直在那“哔哔哔”地添加。加入购物车与计算当确认是一次新的有效识别后将商品名称追加到购物清单列表中。将商品单价累加到总价变量上。更新屏幕显示在OLED屏幕上清晰地显示信息。可以分区域显示第一行显示最新加入的商品如牛奶 5.5元。中间区域滚动显示购物清单列表的内容。底部固定显示总计XX.XX元。使用OLED显示字符串积木并注意用转行积木控制显示位置。4.4 交互功能结账与清零一个完整的收银机不能只加不减还需要结账和开始新订单的功能。绑定按键事件我们可以用掌控板的A键作为“结账”键B键作为“清零/新订单”键。结账逻辑当A键被按下时程序可以在屏幕上显示“请支付 XX.XX元”的醒目提示。播放一段“嘀嘀”的提示音使用掌控板的蜂鸣器。可以模拟一个3秒倒计时然后显示“支付成功谢谢惠顾”。注意结账后不应自动清零因为可能需要打印小票我们这里模拟。实际按需决定是否在结账后自动清零。清零逻辑当B键被按下时程序需要清空购物清单列表。将总价变量设为0。清空屏幕并显示“等待扫码...”的初始界面。同时也要重置上次识别ID等状态变量为新订单做好准备。踩坑实录按键检测的“消抖”。机械按键在按下时信号并不是干净的从0到1而是会在几毫秒内产生快速的抖动导致程序误判为多次按下。在Mind中可以使用“当按键A被按下”事件积木它内部通常做了消抖处理。但如果自己用循环检测引脚电平就必须在代码中加入延时如等待50毫秒再判断一次以确保是有效的按键动作。5. 功能优化与扩展思考一个能跑通的基础版本已经完成了。但要让这个项目更像样、更有学习价值我们还需要进行一些优化和思考扩展的可能性。5.1 提升识别鲁棒性与用户体验多物体同时识别HuskyLens支持一帧画面里识别多个物体。我们可以修改程序不再只读取第一个物体的ID而是用一个循环通过HuskyLens物体识别数据下一个积木来遍历当前画面中的所有已识别物体。这样即使你同时把牛奶和饼干放在镜头前也能一次性都加入购物车体验更流畅。增加视觉与听觉反馈识别成功时除了屏幕显示还可以让掌控板的RGB灯闪烁绿色识别到未知商品时闪烁红色并发出“嘀嘀”报警声。这能让人机交互更加直观。屏幕显示优化当购物清单很长时OLED屏幕一屏显示不下。需要实现滚动显示功能。可以设定一个固定显示行数如4行当列表超过4个商品时让列表的起始显示索引逐渐增加实现自动向上滚动就像超市收银机屏幕那样。5.2 向“真实”收银系统迈进我们的原型是离线的所有商品价格都硬编码在程序里。如何让它更接近真实系统引入条码/二维码识别这是最直接的升级。使用HuskyLens的“标签识别”模式学习几个二维码可以用手机生成内容就是商品ID如“001”。商品上贴上对应的二维码。程序识别到二维码后解析出ID后续流程不变。这更符合真实超市场景。搭建简单的网络数据库利用掌控板的Wi-Fi功能。在同一个局域网内用电脑或树莓派搭建一个最简单的HTTP服务器上面放一个prices.json文件内容如{001: {name: 牛奶, price: 5.5}, 002: {...}}。当掌控板识别到商品ID后不是去本地函数查询而是通过Wi-Fi发起一个HTTP GET请求例如http://192.168.1.100/prices.json获取到整个价格表或者更精细地只请求该ID对应的信息。这样修改价格只需要改服务器上的文件无需重新给掌控板烧录程序。模拟支付流程可以结合掌控板的蓝牙功能模拟与手机APP的通信。当点击“结账”时掌控板通过蓝牙向手机发送总金额手机APP弹出模拟支付界面确认后手机再通过蓝牙向掌控板发送“支付成功”指令掌控板再显示成功信息。这就构成了一个完整的闭环体验。5.3 项目复盘与核心收获做完这个项目再回头看它不仅仅是一个“玩具”。它完整地串联了以下几个关键技术点嵌入式感知如何通过串口与智能传感器通信获取物理世界的信息。状态机逻辑如何设计程序逻辑来处理“等待-识别-添加-等待下一个”的循环特别是防重复触发这种关键状态控制。人机交互如何在资源受限小屏幕、少量按键的嵌入式设备上设计清晰、友好的用户界面和流程。系统思维如何将硬件传感器、主控板、软件识别算法、业务逻辑、交互显示、按键整合成一个可工作的系统原型。对于初学者来说成功复现这个项目你已经跨过了AIoT应用开发的第一道门槛。你会发现很多复杂的商业应用如智能货柜、自动分拣其核心原型阶段的思路与此是相通的感知-处理-执行-交互。我个人在调试过程中最大的教训就是状态管理。最初没有防重复触发机制程序简直一团糟。这也让我深刻体会到在事件驱动的嵌入式编程中理清所有可能的状态和它们之间的转换条件比写具体的功能代码更重要。画一个简单的状态转换图往往能事半功倍。最后这个项目的所有代码和连接方式都是开源的、可复用的。你可以轻易地修改商品数据库、改变交互方式甚至更换传感器比如用RFID读卡器来识别商品来创造属于你自己的“智能收银”或“物品管理”系统。动手去试在解决问题的过程中学习这才是创客精神的精髓。

相关新闻