基于STM32的智能垃圾分类识别系统设计(论文)_kaic

news2024/12/28 3:47:10

摘  要
智能垃圾分类技术逐渐受到了政府的重视和支持,越来越多的城市开始推行垃圾分类政策。因此设计一款能够对垃圾进行识别并分类的控制系统具有一定的现实意义。本设计采用STM32单片机作为整个系统的控制核心,利用K210开发板作为图像识别控制系统,两个核心采用UART串行通信方式连接。对于垃圾训练集采用K最近邻分类法对MAIX BIT官网提供的训练集进行训练,得到的样本作为库导入SD卡中。本设计具有人体检测模块、容量检测模块、垃圾仓/门控制模块以及语音播报模块,分别采用HC-SR501人体红外传感器、对射式红外传感器、SG90舵机以及WT588D作为各模块的主要工作元件。通过采用python语言在Maixpy IDE中对图像识别分类控制系统进行编译,并采用C语言对整个控制系统进行程序编译,实现了能够在有人时打开垃圾总门,并对放置的垃圾进行类型识别,若对应垃圾仓未满时,根据识别结果开启所对应的垃圾仓门。实现了对垃圾分类识别和控制的智能化、便捷化。
关键词:垃圾分类;单片机;K210开发板;图像识别;语音播报

Abstract
Intelligent garbage classification technology has gradually received the attention and support of the government, and more and more cities began to carry out the garbage classification policy. Therefore, it is of certain practical significance to design a control system that can identify and classify the garbage. This design adopts STM 32 SU as the control core of the whole system, uses K210 development board as the image recognition control system, and the two cores are connected by UART serial communication. For the garbage training set, the K-nearest neighbor classification method is used to train the training set provided by the MAIX BIT official website, and the obtained samples are imported into the SD card as libraries. This design has human body detection module, capacity detection module, garbage bin / door control module and voice broadcast module, using HC-SR 501 human infrared sensor, radiation infrared sensor, SG 90 steering machine and WT588D as the main working components of each module. By using python language in Maixpy IDE to compile the image recognition classification control system, and use C language for the whole control system, can open the garbage door when someone, and put the garbage type identification, if the corresponding trash is not full, according to the corresponding trash door identification results. The identification and control of garbage classification are intelligent and convenient.
Key words: garbage classification; SCM; K210 development board; image recognition; voice broadcast
 
目  录
摘  要
Abstract
1 绪论
1.1 研究背景
1.2 研究目的及意义
1.2.1 研究目的
1.2.2 研究意义
1.3 国内外研究现状
1.3.1 国外研究现状
1.3.2 国内研究现状
1.4研究内容及方法
1.4.1研究内容
1.4.2 研究方法
1.5 拟解决问题
2 系统构成及方案设计
2.2 硬件系统整体结构设计
2.3 主控模块选择
2.3.1 采用Arduino
2.3.2 采用单片机
2.4 识别模块选择
2.4.1 采用Open MV模块
2.4.2 采用K210模块
2.5 人体检测模块选择
2.6 容量检测模块选择
2.7 驱动模块选择
3 智能垃圾分类识别系统硬件电路设计
3.1 STM32F103C8T6简介
3.2 识别模块通讯方式选择
3.2.1 三种通信方式
3.2.2 UART串行通信
3.2.3 串行通信的实现
3.2.4 串行通信的仿真
3.3 人体检测模块
3.3.1 HC-SR501工作原理
3.3.2 人体检测模块电路设计
3.4 容量检测模块
3.4.1 红外对管工作原理
3.4.2 容量检测模块电路设计
3.5 垃圾仓/门驱动模块
3.5.1 SG90舵机工作原理
3.5.2 垃圾仓/门驱动电路设计
3.6 语音播报模块电路设计
3.6.1 WT588D工作原理
3.6.2 语音播报模块电路设计
4 智能垃圾分类识别设计
4.1 开发板简介
4.2 训练集简介
4.3 K最近邻分类法简介
4.4 训练流程设计
5 智能垃圾分类识别系统软件部分设计
5.1 控制系统主程序
5.2 识别控制系统主程序
5.3 人体检测子程序
5.4 仓门控制子程序
6 系统调试
6.1 软件调试
6.2 仿真调试
结论
参考文献
致谢
附录


1 绪论

1.1 研究背景
垃圾分类装置的设计源于对环境保护和可持续发展的迫切需求。随着城市化和人口增长,垃圾产生量不断增加,垃圾的处理和回收成为一项重要任务。传统的垃圾处理方法效率低下、资源浪费且对环境造成了严重的污染。为了解决这一问题,垃圾分类装置被设计出来,旨在通过自动化和智能化技术,将垃圾分为可回收物、有害垃圾、湿垃圾等不同类别,从而提高回收率、减少污染、节约资源,并促进环境可持续发展。这样的设计背景以人们对环境保护和资源利用的关注为基础,力图实现更加高效、便捷和可持续的垃圾管理体系。
1.2 研究目的及意义
1.2.1 研究目的
对智能垃圾分类装置的硬件和软件设计,智能垃圾分类在社会、经济和政策方面也得到了进一步的推广和应用。在社会方面,越来越多的人开始关注垃圾分类和环保问题,有更多的人开始采取主动措施,如分类投放垃圾、回收利用、减少浪费等,同时也有越来越多的社会组织和志愿者参与到城市垃圾分类和环保活动中。在经济方面,智能垃圾分类技术不仅可以降低城市垃圾处理的成本,同时也可以促进垃圾回收和资源再利用,增加相关产业的发展和就业机会。
1.2.2 研究意义
智能垃圾分类装置的意义在于帮助解决城市垃圾分类和处理问题。随着城市化的进程加速,城市垃圾量也日益增加,如何高效地分类和处理垃圾成为了一个迫切的问题。智能垃圾分类装置通过运用物联网、传感器、人工智能等技术手段,能够对垃圾进行智能化分类、回收、处理,具有以下几个意义:
1.提高垃圾分类的准确性和效率。传统的垃圾分类需要人工干预,因此分类效率较低,而且分类标准存在一定的主观性,智能垃圾分类装置可以根据物体的形状、颜色、材料等特征自动进行分类,可以避免人为干扰导致的分类错误。
2.实现垃圾资源化利用。智能垃圾分类装置可以将可回收垃圾、有害垃圾、湿垃圾等不同类型的垃圾分别回收处理,可以有效地促进资源的循环利用,降低环境污染。
3.减轻城市垃圾处理压力。智能垃圾分类装置可以将垃圾分类处理得更细致,有助于降低垃圾处理的成本,缓解城市垃圾处理压力,同时也可以提高城市居民的环境意识和垃圾分类意识。
4.促进城市可持续发展。智能垃圾分类装置的应用可以帮助城市实现可持续发展,减少环境污染、提高资源利用率,有助于推进绿色发展和循环经济,为城市的长期发展奠定基础。
1.3 国内外研究现状
1.3.1 国外研究现状
智能垃圾分类技术主要需要用到机器学习、深度学习等技术。目前已经有很多研究机构和企业在这个领域进行了深入研究,提出了很多创新性的解决方案。例如,麻省理工大学相关学者利用卷积神经网络(CNN)来进行垃圾图像分类,利用循环神经网络(RNN)来对垃圾进行文本描述分类等等。
1.3.2 国内研究现状
智能垃圾分类装置的传感器、机器视觉、人工智能等方面的技术已经非常成熟,目前已经有多家国内外企业推出了自己的智能垃圾分类产品,如小米、华为、腾讯、京东等。这些产品主要采用的是多传感器融合、图像处理、机器学习等技术,能够自动识别并分类垃圾。
一些研究机构还在探索如何将智能垃圾分类技术与智慧城市建设、环境监测等技术结合起来,从而更好地应对城市垃圾处理和环境保护等方面的问题。总体来说,智能垃圾分类技术已经取得了一定的进展,但是仍然存在着一些挑战,如垃圾分类数据不够全面、质量不够高、分类准确率不够高等问题。未来随着技术的不断进步和应用的不断扩大,智能垃圾分类技术有望在城市垃圾处理和环保方面发挥越来越大的作用。
1.4 研究内容及方法
1.4.1 研究内容
本文针对智能垃圾分类识别控制系统进行设计,主要利用单片机和K210设备作为整个控制系统的硬件设备。
首先对智能垃圾分类系统的构成以及整体方案进行设计及选择,主要包括主控模块、识别模块、人体检测模块、容量检测模块、舱门驱动模块等。其次对整个系统的硬件电路部分进行设计,由于本设计采用的是两块MCU,一块为图像识别MCU,另一块为控制系统部分的STM32 MCU,另外对于人体检测模块、容量检测模块、舱门驱动模块以及语音播报模块进行电路设计;另外对于智能垃圾分类识别,即图像识别模块如何实现的进行阐述。主要采用的是K210视觉开发板(maixpy bit)的识别过程以及所采用到的算法进行介绍,本设计主要采用K最邻近分类算法作为垃圾训练算法,采用maix hub模型训练平台找到了平台提供的“Self_Learning_Classifier”自学习分类器;接下来对于智能垃圾分类识别系统的软件实现部分进行设计,包括系统主程序以及各部分子程序,对于垃圾识别部分采用的是Python语言进行设计,利用Maixpy IDE脚本编辑器对程序进行编译;垃圾控制部分采用的是C语言进行设计,利用Keil UDK软件;最终通过Proteus 8.9软件建立智能垃圾分类识别系统的仿真设计,由于仿真无法对识别模块进行模拟,因此该部分通过按键代替,其余功能能够按照预期设计实现。
1.4.2 研究方法
本设计采用以下研究方法:
1.文献综述法:通过查阅国内外相关学者对于垃圾分类、垃圾分类处理算法、硬件设计以及软件设计等相关内容,构建智能垃圾分类识别系统的整体框架。
2.硬件调试法:在设计完整体硬件电路之后,通过AD15软件自带的调试方法查找硬件电路引脚名称、电源极性等是否出现问题;
3.仿真调试法:通过proteus 8.9软件建立垃圾分类识别系统,对仿真进行描述以及分析,确定本设计的可行性。
1.5 拟解决问题
1.利用红外传感器检测人体,以利用红外反射原理进行垃圾桶顶部桶盖的自动合闭工作;
2.具有图像识别分类功能,对可回收垃圾、有害垃圾、厨余垃圾、其他垃圾进行分类;
3.对每次投放垃圾进行容量检测;
4.具有语音播报功能,对每次投放的垃圾进行识别后,能够播报其垃圾种类。
5.对整体电路、程序进行设计;
6.了解垃圾分类算法的基本原理,完成系统调试。

2 系统构成及方案设计

2.2 硬件系统整体结构设计
依据上述功能,本设计考虑采用两块MCU作为整个控制系统的开发板,分别为控制图像分类识别和控制垃圾箱检测和驱动的两部分。两块MCU采用串口通讯的方式进行连接,图像分类识别的MCU将识别结果传输控制系统,由控制系统根据此结果执行相对应的功能,即人体检测、容量检测、舱门控制、语音播报等。整体设计框图如图2-1所示:
 
图2-1  系统整体设计框图
2.3 主控模块选择
2.3.1 采用Arduino
树莓派是一款功能非常强大的控制模块,可以当作一种小型主机使用,其在处理速度、性能与其它控制板具有非常大的优势,因此其主要适用于可靠性较高、处理速度快的场景中,另外该控制板的价格非常昂贵。
2.3.2 采用单片机
单片机是一种高性能芯片,其强大的集成、运算、扩展等优良性能是其它单片机所不能比拟的。该芯片工作时频能够达到72MHz,而随着工作时频的提升,所带来的问题必将是高功耗。
单片机与Arduino控制模块、树莓派相比,在硬件设计、软件设计都具有一定的优势,该控制模块接口种类丰富,开源文件较多,在利用arduino进行软件设计时,只需要在库文件中找到Arduino即可。可是对于本设计的智能垃圾分类识别分类系统来说,采用Arduino价格比较昂贵,性价比较低;而采用STM32单片机,既能够实现整个控制系统的功能,价格低廉且开源程序较多。因此本设计选择STM32系列单片机作为控制模块。
2.4 识别模块选择
2.4.1 采用Open MV模块
采用Open MV模块对垃圾进行识别,Open MV官方为数字识别提供了一个教程,在该教程的基础上进行一定程度上的改进就能够实现本设计的垃圾识别。但是通过实际发现,而由于垃圾种类众多,采用Open MV模块对其进行识别,其处理速度相对较慢,因此对于垃圾进行识别最好采用卷积神经网络算法对此进行改进,这样能够进一步提升数字识别的正确率以及速度。
2.4.2 采用K210模块
采用K210对垃圾进行类型识别,这个方案需要在Maixpy IDE软件上进行模型训练,首先通过在anoconad使用conda create命令创建虚拟环境,其次对模型进行建立和训练,在这一环节通常采用KNN算法对模型继续搭建,以此提高识别精度。
考虑自身使用情况,KNN算法较容易掌握,卷积神经网络算法虽然识别精度稿,但是其过程较为复杂,不易实现。因此本设计采用K210视觉开发板(maixpy bit)作为识别模块。
2.5 人体检测模块选择
为了实现当有人体靠近时,打开垃圾桶门这个功能,必须要采用一款传感器用于检测人体。通常情况下,在我们生活的环境中,任何物体都会相环境释放一定数量的红外光谱信号,不同物体所能产生信号的峰值是不同的,红外光谱的峰值是由物体的性质以及物体的温度所决定的,同时不同物体释放的红外信号的能量是不一样的,这也就导致了波长会不一样。可以采用热释红外传感器。
通过调节热释红外传感器的阀值,能够改变传感器的灵敏度,也就是所能接收到信号的范围。将其调整至一个较为合适的阀值时,当人体经过红外传感器时,由于人体表面的温度是37℃,与周围环境之间存在一定的差值,这就使得红外传感器能够检测出这个差值,并判断是有人通过,通过内部电路设计,对外输出高电平及实现传感器的控制过程。
2.6 容量检测模块选择
红外对管在对物体检测以及障碍物检测中得应用较为广泛。红外对管主要包括两部分,一部分是发射端、另一部分是接收端,其工作特性是不断向外发射红外射线,其红外射线是不能够被肉眼看见;红外对管主要分为两种,其中一种是直射,另一种是反射,反射式红外对管是计算发射红外与接受红外信号的时间,来判断是否有物体。根据本设计中的容量检测这个功能,采用反射式红外对管较为合适;同时红外对管是根据工作电流得调制信号进行工作的,对于外界环境所产生得扰动是比较小的;并且在本设计中,对物体进行检测的距离大致为1-2cm,红外对管对小距离的物体检测较为合适。
2.7 驱动模块选择
根据本设计的垃圾分类功能,本设计考虑采用舵机来控制垃圾仓门的开启。其主要包括垃圾门和垃圾仓门两部分,本设计均采用舵机来实现。舵机本身就是一种伺服电机,其工作方式主要是通过PWM信号来控制舵机工作,同时舵机能够实现0°-180°范围内旋转功能,而本设计功能,可以通过编写程序,控制舵机的PWM调制信号使舵机的旋转角度在0°-90°范围内,当无垃圾时,舵机在0°,有垃圾时,对应舱门的舵机在90°。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1602150.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RT-thread信号量与互斥量

1,信号量 信号量是一种轻型的用于解决线程间同步问题的内核对象,线程可以获取或释放它,从而达到同步或互斥的目的。理解资源计数适合于线程间工作处理速度不匹配的场合;信号量在大于0时才能获取,在中断、线程中均可释放信号量。 为了体现使用信号量来达到线程间的同步,…

删除链表的倒数第n个节点【java版】

思路:要删除链表的倒数第n个节点,只需要找到倒数第n1个节点然后改变他的指针即可! 问题转换为:找到倒数第n1个节点? 假设要删除倒数第2个节点,只需要找到倒数第3个节点,问题是如何定位到这个节点 可见一个指针是不够…

【nodejs】使用express-generator快速搭建项目框架

文章目录 一、全局安装express-generator二、安装依赖三、启动项目四、修改文件便重启服务器1、全局安装nodemon2、修改 package.json 文件3、npm start 启动项目 一、全局安装express-generator npm install -g express-generator二、安装依赖 项目根目录打开终端&#xff0…

新手备战软考不要慌!这份软考全攻略请收下!

软考有哪些变化? 相信很多考生也关注到了,软考这两年进行了很多调整,软考这两年在多方面的形式上进行了一些调整。像2023年下半年开始,软考从以前的纸笔考试改成了机考。今年在考试科目的次数和时间安排上也进行了一些调整。 比…

久吾高科技股份有限将莅临2024第13届生物发酵展

参展企业介绍 江苏久吾高科技股份有限公司成立于1997年,是一家专注从事新材料研发与整体解决方案的高科技企业。2017年3月在深交所A股创业板上市。公司是首批认定的guojiaji高新技术企业、国家专精特新“小巨人”企业、国家制造业单项、中国膜行业陶瓷膜领域龙头企…

白帽工具箱:在windows上安装部署渗透测试演练系统DVWA-方法二

🌟🌌 欢迎来到知识与创意的殿堂 — 远见阁小民的世界!🚀 🌟🧭 在这里,我们一起探索技术的奥秘,一起在知识的海洋中遨游。 🌟🧭 在这里,每个错误都…

流程编排是如何实现解耦代码

为什么要使用流程流程编排 问题原因 在我们日常开发中,当我们接到一个复杂业务需求时,大部分开发同学都是通过面向过程编程代码,瀑布式编写代码风格,当新增新的需求时我们需要修改当前的方法,当需求变更很频繁代码的…

恶意不息上线时间/游戏价格/配置要求/加速器推荐

Moon Studios 联合创始人、技术总监 Gennadiy Korol 解释说:我们的目标是让战斗更有身临其境感一些、更加专注一些。而不是屏幕上的信息量多到爆炸,让人看不过来。我们要让玩家真正感受到角色的每一个动作。战斗是贴近的,是专注的。不是屏幕上…

Day:007(3) | Python爬虫:高效数据抓取的编程技术(scrapy框架使用)

Scrapy 保存数据案例-小说保存 spider import scrapyclass XiaoshuoSpiderSpider(scrapy.Spider):name xiaoshuo_spiderallowed_domains [zy200.com]url http://www.zy200.com/5/5943/start_urls [url 11667352.html]def parse(self, response):info response.xpath(&qu…

Linux第90步_异步通知实验

“异步通知”的核心就是信号&#xff0c;由“驱动设备”主动报告给“应用程序”的。 1、添加“EXTI3.c” #include "EXTI3.h" #include <linux/gpio.h> //使能gpio_request(),gpio_free(),gpio_direction_input(), //使能gpio_direction_output(),gpio_get_v…

浅谈Java IO流

Java中的IO流&#xff08;Input/Output streams&#xff09;是Java程序用来处理数据输入和输出的核心工具集。IO流抽象了数据流动的概念&#xff0c;允许Java程序与外部世界进行数据交换&#xff0c;无论是从文件、网络、键盘输入还是向屏幕、文件或网络发送数据。Java IO流按照…

RocketMQ:Windows下开发环境搭建

一、准备工作 从RockitMQ官网下载 | RocketMQ下载最新的release包。我这里下载的版本是v5.2.0 解压到本地目录&#xff0c;bin目录下存放可运行的脚本。 二、RocketMQ基本结构 在动手开发之前&#xff0c;我们需要了解一下RocketMQ的基本结构 如上图所示&#xff0c;一个正常…

【ROS2笔记七】ROS中的参数通信

7.ROS中的参数通信 文章目录 7.ROS中的参数通信7.1使用CLI工具调整参数7.2参数通信之rclcpp实现7.2.1创建节点7.2.2rclcpp参数API Reference ROS2中的参数是由键值对组成的&#xff0c;参数可以实现动态调整。 7.1使用CLI工具调整参数 启动turtlesim功能包的环境 ros2 run …

进程、线程和协程

进程、线程和协程 进程是程序的执行实例 线程是进程的执行路径 协程是基于线程之上但又比线程更加轻量级的存在 进程与线程的区别 线程是程序执行的最小单位&#xff0c;而进程是操作系统分配资源的最小单位 进程和程序的区别 程序&#xff1a;执行特定任务的一串代码&a…

Fastjson报autotype is not support

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 打开AutoType功能 …

快速删除node_modules依赖包的命令rimraf

1、安装rimraf npm install -g rimraf 2、使用命令删除node_modules rimraf node_modules *** window系统&#xff0c;使用命令很快就删除node_modules ***

python-获取config.ini中的属性值

获取配置文件中的数据 import configparser class ReadConfig(object):def __init__(self,config_file_path):self.config configparser.ConfigParser()self.config.read(config_file_path,encodingutf-8)def get_config(self,section,option):config_valueself.config.get(s…

Linux系统——Zookeeper集群

目录 一、Zookeeper概述 1.Zookeeper简介 2.Zookeeper工作机制 3.Zookeeper数据结构 4.Zookeeper应用场景 4.1统一命名服务 4.2统一配置管理 4.3统一集群管理 4.4服务器动态上下线 4.5软负载均衡 5.Zookeeper选举机制 5.1第一次启动选举机制 5.2非第一次启动选举机…

前端开发框架BootStrap

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl BootStrap概述 Bootstrap是一个开源的前端框架&#xff0c;它由Twitter的设计师和开发者创建并维护。Bootstrap提供了许多现成的Web组件&#xff0c;可帮助开发者快速设计和…

关于java分页功能以及传参规范

java分页以及传参规范&#xff0c;特此工作记录 不用插件 //当前页码private static final Integer currentPage 2;//设置每页个数private static final Integer pageSize 5;Testpublic void test8() {//手写一个分页测试&#xff0c;不用插件List<Integer> list new…