回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页
best-icon

收银结算台 简单

头像 汤果 2020.03.16 3821 5

【项目背景】

超市里的收银员在结账的时候通过扫描条码来统计顾客所购买商品的金额。二哈识图(Huskylens)刚好有标签识别(二维码识别)功能,我们可以利用这个功能来设计一个作品,实现类似的效果。

project-image

【原理分析】

不同的二维码可以标记不同的商品。通过学习每种商品的二维码,记录该二维码的 ID。我们可以在 Mind+ 中建立两个列表,一个存放商品名,一个存放对应的价格,通过列表的下标与二维码的 ID 一一对应。这样就可以通过二维码来识别商品,获取单价了。

【材料准备】

主控板的选择余地很大,因为 Mind+ 中二哈识图支持三大主流平台。这里我选择 micro:bit 作为主控,为了方便连线,我选择了 micro:bit 掌控板两用扩展板。除了二哈识图传感器以外,还需要一个显示设备来显示商品单价及总金额等信息,这里选用 LCD 1602 液晶屏。因为二哈识图比较费电,所以需要强劲的电源来支撑,也可以用充电宝单独供电。我使用的是麦昆锂电池供电套装。

材料清单

  • micro:bit 编程入门开发 X1 链接
  • micro:IO Extend micro:bit 掌控板 IO扩展板 X1 链接
  • 麦昆CR123A锂电池电源管理模组(含电池) X1 链接
  • Gravity: 二哈识图(HuskyLens)AI 视觉传感器 X1 链接
  • Gravity: I2C LCD1602 液晶显示屏 (蓝底) X1 链接

步骤1 连接设备

因为液晶屏和二哈识图都是 I2C 接口,所以连接很简单,直接接到扩展板的 I2C 接口就好了。这个扩展板上没有额外电源供电接口,所以锂电池接到 micro:bit 上就可以了。

project-image

连接好后是这样的,看上去有点乱~

project-image

步骤2 加载扩展

接下来就可以开始编写代码了。在正式开始之前需要加载用到的扩展。首先选择【主控板】分类下的【micro:bit】。

project-image

接着选择【传感器】分类下的【HUSKYLENS AI 摄像头】。

project-image

最后加载【显示器】分类下的【LCD1602 模块(IIC 接口)】。

project-image

步骤3 创建变量

正如原理分析所述,我们需要两个列表:【商品名】用来存放商品的名字,【单价】用来存放各个商品的单价。除此以外还需要设置【总价】变量,用来存储购买商品的总金额。【ID】变量用来记录当前二维码所代表的序号,也就是第几个二维码。通过这个变量可以找出这个二维码所对应的商品及单价。

project-image

步骤4 编写代码

首先要初始化变量。我们需要构建两个列表,将超市里的商品信息录进去。因为这个液晶屏只能显示英文字符,所以不能写中文!

project-image

接下来就是程序的主体部分。当检测到摄像头前方有二维码时,获取该二维码的 ID。然后蜂鸣器响一声,告诉收银员这个二维码已经识别好了。接着我们通过这个 ID 去找到这个商品的名称和单价,显示在液晶屏上,然后把金额加到总价中,并将总金额显示在液晶屏上。最后我们等候 1 秒,以免在操作的时候没来得及拿走商品,又录入一遍。

project-image

这里遇到一个小插曲。液晶屏显示总价的时候小数点后面有很长一串 0,看上去很不爽。没办法,我们只能通过字符串的形式找到小数点的位置,然后截取到小数点后两位。

步骤5 学习标签

根据录入的商品种类数,学习相应个数的二维码。注意开启【学习多个】选项。因为家里没打印机,二维码也不方便打印。我就用手机展示二维码,识别手机上的二维码图片。

project-image

二维码只能识别内置的这些,也就是上面的所有二维码。具体的学习过程可以参考《标签识别上手》这篇文章:https://makelog.dfrobot.com.cn/article-308244.html

步骤6 设计造型

找一个合适大小的盒子,挖两个孔。一个放液晶屏,一个开口给摄像头。

project-image

把器材全都装进去。

project-image

实际效果是这样的:

project-image

看上去还挺便携的。(摄像头横着放、竖着放都可以,二维码都可以识别出来)

步骤7 测试运行

通电,测试。程序开始的时候在液晶屏上显示“Welcome!”。

project-image

识别出二维码后会在第一行显示商品名称和单价,在第二行显示总金额。

project-image

具体可以看下面的演示视频。

【后记】

1.程序可以添加清空功能,将上一个顾客的购买信息清空,以便后续顾客的结算。本来想加这个代码的,按 A 或 B 键清空总金额。但是这样子造型很难设计,盒子上没法开孔。比较好的方法是引出一个按钮,通过按钮来置零。然而手头没有按钮,只好作罢。

2.识别二维码/条形码还真是个技术活。角度和方向必须控制的很好,不然很难识别出来。难怪超市的条码枪和桌面式读码器都会有一个激光束来标定方位:)

3.液晶屏只能显示英文字符,对用户不够友好。可以考虑换成掌控板,这样可以显示中文,并且去掉 1602 液晶屏,减轻成本。

评论

user-avatar
  • 1919

    19192020.06.03

    老师,请问这个二维码需要跟商品一一对应吗?需要的话该怎么操作呢?

    1
    • 汤果

      汤果2020.06.07

      需要的。你先学习好若干个二维码。然后在程序初始化的列表中加入商品的先后顺序与学习编号所对应的二维码一一对应起来就好了。

  • 1919

    19192020.05.12

    老师,请教!二哈获取的ID值是指标签ID后面的数吗?从“结果中获取第1个方向...”这句什么意思?不用设置变量表示第几个方向吗?我用掌控版代替您这里的液晶屏,但是无法显示结果。

    1
    • 汤果

      汤果2020.05.24

      二哈获取的ID值指的是画面中出现的这个标签经过学习后得到的一个ID。例如第一个学习的标签ID为1,第二个学习的标签ID是2。从结果中获取第1个方向,应该是画面中出现了不止一个方向,应该是在巡线模式下才起作用的。比如遇到了岔路口。

  • 古德微小微

    古德微小微2020.04.18

    给汤老师点赞!

    0