ESP32 + Python 还不知道怎么垃圾分类? 用HaaS DIY一个智能垃圾桶吧

2023-05-16

来这里发现更多创意案例

HaaS开发框架HaaS积木方案,赋能生态开发者,让您快速找到自己需要的解决方案,硬件主板与外设,以及各种应用组件。https://haas.iot.aliyun.com/solution/
本系统在物体接近后,通过红外避障传感器检测到物体,然后启动摄像头抓拍图片上传至云端,云端通过HaaS增值服务对抓拍的图片进行识别,并将垃圾类别、物品名称和可信度等信息返回给设备端,设备端根据返回的垃圾类别,自动打开对应类别的垃圾桶,待投放者离开后,再关上垃圾桶。

下图是本案例的四步导学。

1、简介

1.1、背景知识

  
红外避障传感器:利用物体的反射性质,在一定范围内,如果没有障碍物,发射出去的红外线,距离越远越弱,如果有障碍物,红外线遇到障碍物就会被反射,传感器接收头接收到这一信号,就可以确定正前方有物体。

  
HaaS增值服务:集多种人工智能算法为一体的云端服务,通过设备端上传图片到云端,云端对图片进行识别,并把结果返回给设备的服务,目前已涵盖图片识别、文字识别、物品识别、人型识别等多个类别。详情请参考:HaaS AI API说明文档

  
垃圾分类目前分为可回收垃圾、有害垃圾、厨余垃圾(湿垃圾)、其他垃圾(干垃圾)。

  
实验整体步骤如下:

  1. 连接硬件
  2. HaaS云端积木平台创建设备
  3. 设备端开发
  4. 设备运行

1.2、准备

  1. M5Stack Core2开发板 一套
  2. M5Stack Unit CAM摄像头 一个
  3. 连接线 一根
  4. 红外避障传感器 一个
  5. SG90舵机 一个
  6. 公对母、公对公杜邦线 若干

涉及到的硬件购买链接如下,仅供参考,不负责商家发货的品质保障等问题!

名称数量参考链接
M5Stack Core2开发版1M5Stack Core2
microUSB数据线1M5Stack Core2开发套件自带
摄像头1M5Stack Unit CAM摄像头
连接线1条M5Stack GROVE连接线 请选用10cm长即可
红外避障传感器1红外避障传感器
公对母杜邦线若干杜邦线 请选用10cm长即可
SG90角度舵机1SG90舵机

  
硬件连线图如下图所示:

2、云端平台功能

在本案例中涉及到云端平台功能都聚合在HaaS云端积木中,所以无需单独使用 对象存储OSS 和 视觉智能开发平台。因此,整个云端步骤分为下面两步。

1. 注册阿里云账号并登录;
2. 登录HaaS云端积木控制台创建设备;

2.1、注册阿里云账号

  
进入阿里云官网,如已有阿里云账号可跳过这步,注册阿里云账号 。

2.2、HaaS云端积木平台创建设备

  1. 登录HaaS云端积木平台

  
进入阿里云官网,用阿里云账号登录HaaS云端组件控制台 。

  1. 创建设备

  
在左侧导航栏设备管理中,可以看到产品和设备选项,点击“产品”,可以看到平台默认创建了“haas_正式游客产品”这个产品;
所以开发者只需要创建设备即可。点击“批量添加”, 添加方式为“自动生成”, 申请数量可填为“1”个,即可完成新设备的创建。

  1. 获取设备的三元组

  
在设备的列表中,新创建的设备上点击“查看”,就可以获得设备的三元组信息,之后这个三元组信息会在设备端代码中使用到。

  
请复制该处的三元组信息,后面设备端开发需要使用。

3、设备端开发

3.1、开发环境

  
在进行下一步之前请确保M5StackCore2开发环境已经搭建完毕。详情请参考M5StackCore2快速开始的说明。
 

3.2、创建解决方案

  
如下图所示,在Haas Studio中创建项目。先选择左侧的“开发板型号”再从右侧的案例中选择“智能垃圾桶”案例点击“立即创建”即可。

3.3、代码准备

  
将智能垃圾桶代码目录下的所有脚本进行复制到“smart_trashbin”工程根目录中,然后进行如下设定完成设备端代码的开发。

Python脚本的详细说明请参考脚本内嵌的文字注释

1、修改路由器名称及密码

  
修改main.py中SSID和PWD的值为读者实际要连接的路由器的名称及密码(请注意名称和密码都需要放在''符号中间)。

# Wi-Fi SSID和Password设置
SSID='Your-AP-SSID'
PWD='Your-AP-Password'

  
修改完成之后connect_wifi函数就会连接读者自己设定的路由器。

2、修改设备的三元组信息

  
请参考“获取设备的三元组步骤”,把获取的三元组信息,填入main.py中:

# HaaS设备三元组
productKey = "Your-ProductKey"
deviceName  = "Your-devicename"
deviceSecret  = "Your-deviceSecret"

4、运行结果

  
推送此脚本到M5Stack Core2之后,网络连接成功后,屏幕上将打印出IP地址和"NTP Done",如果迟迟不能显示“NTP Done”,请长按电源键关机同时拔掉USB线重新上电运行。

  
把要识别的垃圾放到大约距离红外传感器1-10cm处,当传感器上两个灯都亮起时,表明检测到物体开始垃圾分类识别,识别成功后在屏幕上显示红色XXXX Detected的字样,XXXX是四种垃圾分类的一种,样例log如下。在检测成功后,会根据识别的垃圾类型,打开对应类别的垃圾桶。

  
推送此脚本到M5StackCore2之后,通过PC端串口调试工具可以看到设备端打印如下日志。日志的含义为:

  • “link platform connected” 代表成功连接到云端平台。
  • "upload--->"之后跟着的为设备端向云端发送的请求信息,其中"eventName"为"classifyingRubbish",表示需要云端进行垃圾分类识别。
  • "download <----"之后跟着的是收到云端回复的识别结果信息:
    • result:识别是否成功。(success:识别成功,failed:识别失败)
    • elements:数组元素说明:
      • category:垃圾类别。包括可回收垃圾、干垃圾、湿垃圾、有害垃圾。
      • categoryScore:识别出的垃圾类别的置信度。
      • rubbish:物品名称
      • RubbishScore:物品名称的置信度。
  • detected: Recyclable 表示当前检测到的垃圾是可回收垃圾。
  • open the Recyclable bin 表示将要打开可回收垃圾桶盖。
I (71364) phy: phy_version: 4500, 0cd6843, Sep 17 2020, 15:37:07, 0, 0
Wi-Fi is connecting...
Wi-Fi is connecting...
Wi-Fi is connected
IP: 192.168.xxx.xxx
NTP start
NTP done
E (61287) ACTIVATION_REPORT: activation success

establish tcp connection with server(host='${Your-ProductKey}.iot-as-mqtt.cn-shanghai.aliyuncs.com', port=[443])
tcp_connect: can only connect from state CLOSED
success to establish tcp, fd=54
link platform connected
IR detector ...
启动红外检测线程
有物体进入
upload--->{'qos': 1, 'payload': '{"version": "1.0", "id": 1, "params": {"ext": "{\\"fileName\\": \\"test.jpg\\", \\"fileId\\": \\"xxxxx\\", \\"filePosition\\": \\"lp\\"}", "eventType": "haas.faas", "eventName": "classifyingRubbish", "argInt": 1}}', 'topic': '/sys/xxxxx/xxxxx/thing/event/hli_event/post'}
download <----{'msg_id': 2136609361, 'service_id': 'hli_async_service', 'params': '{"ext":"{\\"elements\\":[{\\"category\\":\\"Recyclable\\",\\"categoryScore\\":0.9868,\\"rubbish\\":\\"\u706f\u7ba1\\",\\"rubbishScore\\":0.9868}],\\"result\\":\\"success\\",\\"sensitive\\":false}","commandName":"classifyingRubbishReply","commandTyperecognize time : 2378
":"haas.faas","argInt":1}', 'code': 0, 'params_len': 245}
detect: Recyclable
detected: Recyclable
open the Recyclable bin

  
动手改造一下手边的小垃圾桶,通过舵机控制垃圾桶盖的开合,实现自动打开对应类别垃圾桶的效果。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ESP32 + Python 还不知道怎么垃圾分类? 用HaaS DIY一个智能垃圾桶吧 的相关文章

随机推荐