【《基于STM32的语音识别智能垃圾桶设计实现研究》12000字(论文)】_第1页
【《基于STM32的语音识别智能垃圾桶设计实现研究》12000字(论文)】_第2页
【《基于STM32的语音识别智能垃圾桶设计实现研究》12000字(论文)】_第3页
【《基于STM32的语音识别智能垃圾桶设计实现研究》12000字(论文)】_第4页
【《基于STM32的语音识别智能垃圾桶设计实现研究》12000字(论文)】_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于STM32的语音识别智能垃圾桶设计实现研究摘要随着科技的进步,时代的发展,城市化建设不断扩大,生活垃圾不断产出,大量垃圾被无差别焚烧或填埋,没有得到合理的回收处理,不过随着近些年来媒体的宣传,人们也逐渐意识到资源回收的重要性。从源头出发改变现状是一个不错的解决方法,智能语音垃圾桶帮助市民提前做好垃圾分类,降低资源回收困难。本次毕业设计采用STM32F103ZET6单片机作为核心控制器,测重模块、语音识别模块、WiFi模块相结合来实现垃圾桶的语音智能化,同时将单片机通过MQTT协议接入阿里云物联网平台中,每隔一段时间上传一次数据,监控垃圾桶的状态。经过测试,该设计能实现语音问答、自动开合和数据显示的功能,满足智能垃圾桶的基本需求。将物联网技术与垃圾分类结合,将成为一项十分有意义的技术融合,帮助落实垃圾分类政策。关键字:物联网智能垃圾桶物联网平台目录1.绪论 11.1课题研究背景 11.2课题研究目的与意义 11.3国内外研究现状 11.3.1国内研究发展现状 11.3.2国外研究发展现状 21.4课题研究内容及方法 31.5设计对社会人文影响 41.6章节结构与内容安排 42.系统总体方案设计 62.1智能垃圾桶系统中的关键技术 62.1.1STM32单片机开发环境 62.1.2WiFi通信技术的选择及其特点 82.1.3物联网平台及界面开发的选择 82.1.4MQTT通信协议的选择及其特点 82.2语音智能垃圾桶功能需求分析 92.3智能垃圾桶系统整体框架设计 102.4智能垃圾桶控制系统整体原理 102.5智能垃圾桶系统硬件设备选型 112.6本章小结 153.硬件电路设计与实现 163.1微控制器模块电路设计 163.2语音识别模块电路设计 173.3测重模块电路设计 183.4自动开合模块电路设计 193.5WiFi通信模块电路设计 193.6本章小结 214.系统软件设计与实现 224.1软件设计和运行流程分析 224.2语音识别模块程序设计 234.3语音合成模块程序设计 264.4垃圾桶测重模块程序设计 294.5自动开合模块程序设计 314.6WiFi通信模块程序设计 354.7MQTT协议SDK移植 384.8本章小结 395.物联网平台的搭建 405.1服务器端设备管理 405.2数据显示界面的开发 445.3本章小结 466.系统测试与实现 476.1智能垃圾桶功能实现测试 476.1.1硬件测试结果 476.1.2阿里云物联网平台测试结果 496.2本章小结 507.工作总结与展望 517.1总结 517.2展望 51参考文献 52

1.绪论1.1课题研究背景随着科技发展,生产力逐步提高,在生产和使用一些产品的同时诞生的一些废料垃圾也越来越多,如何回收利用好这些潜在的资源将会是一个重要的研究方向。中国作为世界工厂生产发展至今必然避免不了产生许多垃圾,重视这一现象,不仅可以使我们以后的生存环境更加美好,也能促进资源回收再生,为后代带来一个美好的蓝色星球。从垃圾产生的源头来看可以分为工业垃圾与生活垃圾等类别。如何处理好这些垃圾,我们市民方面就需要在生活垃圾回收下面下功夫,做好生活垃圾的回收利用即完善垃圾分类的政策。本次设计的智能语音垃圾桶就能在当前环境下发挥巨大作用。1.2课题研究目的与意义垃圾资源回收利用是环境环保的一个不可分割的议题,但是并不是所有垃圾都能回收,我们需要提前将其分类。然而现阶段的垃圾桶往往混合使用,仅仅在改变了垃圾桶的颜色做了下简单的区分。在当今各项设备都在“智能化”的时代,垃圾桶也应该进行升级改造,加强一下分类的功能。综上,本次智能垃圾桶设计的意义可以总结为以下几点:1)从源头上解决垃圾分类不彻底的问题,促使人们做到垃圾分类。2)减轻市民在处理垃圾分类时的排斥心理,减轻垃圾分类的负担,不会让人因分类太复杂而应付了事。3)宣传垃圾分类思想,人们遇到一般的垃圾分类宣传牌时往往看一眼就略过,不会记住什么,当智能垃圾桶与人们有了互动,做到“你问我答”,那就能大大增加市民对垃圾分类的认可。1.3国内外研究现状1.3.1国内研究发展现状现在国内分布于城市各个角落的垃圾桶还是最普通的塑料垃圾桶,但是随着科技的发展也有不少公司推出了许多智能垃圾桶,但也大多是面向个人,它们的特点与其说是智能化不如说是自动化。图1.1某品牌智能垃圾桶图1.2一般城市户外垃圾桶综上所述,我国垃圾分类还处于起步阶段,大多垃圾桶还是传统的类型,许多智能垃圾桶的设计还处于设计该概念阶段,没有大面积投入使用。1.3.2国外研究发展现状国外智能垃圾桶相较国内发展起步早一些,技术也相对成熟一些。就比如美国BigBelly公司研发的太阳能垃圾桶,它将WiFi模块集成于垃圾桶中,并且使用太阳能进行供电,内置传感器检测垃圾桶内部空间是否充足,在检测到垃圾快满时可以开启压缩功能,压缩机会在将体内垃圾压缩至原来的五分之一。它甚至可以开启WiFi热点供行人使用。这个智能垃圾桶虽然功能强大,但是售价并不便宜,在大量部署上存在经济问题。目前已知有加州大学圣地亚哥分校(UCSD)部署了改垃圾桶。图1.3BigBell智能垃圾桶图1.4BigBell垃圾桶功能展示综上所述国外的智能垃圾桶技术已有相对成熟的方案,可以实现垃圾桶线上线下不同的功能。但是在经济方面没有很大的优势,做不到大面积部署。一个好的智能垃圾桶设计需要在经济成本和功能实现中达到平衡,这给接下来的设计带来了不少启发。1.4课题研究内容及方法在本次设计当中,我们将基于B/S架构,结合语音识别模块和阿里云物联网平台,实现线下非特定语音识别以及线上实时显示垃圾桶内垃圾的重量的功能。硬件MCU采用STM32,结合LD3320语音模块和ESP8266WiFi模块,使用MQTT协议连接到阿里云物联网平台进行通信。最后利用阿里云提供的IoTStudio来进行线上数据显示的应用开发。本文主要的研究内容如下:(1)首先在硬件方面对智能垃圾桶进行框架设计,罗列出应实现的基本功能,依照功能采购相应的模块,而在软件方面需要选择好开发环境以及STM32的开发库。(2)将单片机与模块进行接线调试,编写相应的板级支持包.(3)参考阿里云使用文档,移植C语言SDK,使单片机可以使用MQTT协议与物联网平台通信。(4)搭建阿里云物联网平台,添加相应设备与物理模型。使用IoTStudio进行界面开发。(5)测试各项功能,语言能否准确识别,物联网平台端能否实时显示相应数据。1.5设计对社会人文影响智能垃圾桶的设计有利于环境的保护,有利于资源的循环利用,减少了垃圾处理成本,提高了垃圾的资源价值与经济价值。同时从人们的实际生活出发解决垃圾分类政策难以落实的问题,有助于以后此类政策的全国推广实现。1.6章节结构与内容安排第一章绪论主要介绍设计背景及意义,也同时列举了一些国内外的相关研究设计,对本次毕业设计进行了一些简要说明。第二章总体方案设计主要介绍各硬件的选型和每个模块的功能特点。第三章硬件电路设计与实现具体介绍了硬件的接线方法。第四章系统软件设计与实现主要介绍智能垃圾桶软件的实现,各模块的程序流程图。第五章物联网平台的搭建主要说明了阿里云物联网平台的使用方法。第六章系统测试与实现主要对毕设实现的功能进行测试。测试垃圾桶设计是否满足智能化特点。第七章工作总结与展望对本次毕业设计内容进行简要总结,同时思考待改进之处,为下一次研究做出建议。2.系统总体方案设计2.1智能垃圾桶系统中的关键技术2.1.1STM32单片机开发环境STM32单片机的开发选择C语言。C语言是一门面向过程的程序设计语言,由丹尼斯·里奇和肯·汤普森设计的B语言为基础发展而来。C语言是一种结构化的语言,它主要有以下几点特点:(1)语言简约、结构紧凑,用法灵活。C语言总共只有37个关键字和9种控制语句,程序主要以小写字母编写,格式简洁明了,方便阅读。(2)运算符、数据类型丰富。C语言的运算符的应用十分广泛,总共有34种运算符。C语言把赋值、括号和强制类型转换等都作为运算符处理,从而使C语言的运算类型极其丰富,表达式类型多样化。(3)具有结构化的控制语句(如if...else选择语句、while循环语句、do...while循环语句、switch选择语句和for循环语句)。用函数作为程序的模块单位,便于实现程序的模块化。C语言是完全模块化和结构化的语言。(4)C语言允许对物理地址直接进行访问操作,能实现汇编语言的大部分功能,可以直接对硬件进行操作。因此C语言不仅有高级语言的特征,也有低级语言的特征,可以用来开发系统软件。(5)移植性好,由于C的编译系统十分简洁,因此很容易移植到其他新的系统中。在开发STM32单片机的同时,ST公司也为开发者提供了十分方便的开发库。STM32编程目前有标准外设库(STD库)、HAL库、LL库三种库来供人使用。标准库和HAL库比较常用,后面的LL库是ST最近才添加的,与HAL源码包一起提供,目前支持使用的芯片也比较少。虽然现在标准库还是STM32单片机开发的主流,但是它目前已经停止更新,为了跟上未来单片机开发的趋势,本次设计最终选择了HAL库开发。HAL(HardwareAbstractionLayer)的全称翻译至中文为硬件抽象层。HAL库是ST公司为STM32单片机研发的抽象层嵌入式软件,降低了STM32产品之间程序移植的难度,方便模块化开发硬件。HAL库是基于一个非限制性的BSD许可协议(BerkeleySoftwareDistribution)而发布的开源代码。ST制作的中间件堆栈(USB主机和设备库,STemWin)带有允许轻松重用的许可模式,只要是在ST公司的MCU芯片上使用,库中的中间件(USB主机/设备库,STemWin)协议栈即被允许随便修改,并可以反复使用。至于基于其它著名的开源解决方案商的中间件(FreeRTOS,FatFs,LwIP和PolarSSL)也都具有友好的用户许可条款。

相比标准库,HAL库表现出更高的抽象整合水平,HAL库的API集中关注各外设的公共函数功能,这样便于定义一套通用的用户友好的API函数接口,从而方便实现从一个STM32产品移植到另一个不同的STM32系列产品。HAL库是ST公司以后主推的库,ST公司新出的F7系列芯片已经不再支持使用标准库开发。到现在为止,STM32所有产品都可以使用HAL库开发。本次设计在Keil5上进行软件开发并且使用STM32CubeMX进行软件配置。Keil5是由美国KeilSoftware公司(目前已被ARM公司收购)开发的一个集成开发环境,该软件方便易用,仿真调试功能强大。STM32CubeMX则是一款图形化的软件配置工具,可以使用图形化的操作,完成初始化代码工程。图2.1STM32CubeMX2.1.2WiFi通信技术的选择及其特点智能垃圾桶与阿里云物联网平台的无线通信方式选择了WiFi通信。WiFi通信技术具有以下几个优点:(1)覆盖范围广,WIFi的信号半径可达100米,适合大范围的使用部署。(2)速度快可靠性高,可达到11mbps,符合数据需要实时传输的需求。(3)灵活性高,无需布线,降低部署难度。2.1.3物联网平台及界面开发的选择目前提供物联网平台服务的公司有很多比如阿里云、OneNet等等。本次设计采用阿里云的物联网平台。阿里云物联网平台连接物联网设备提供上行下行服务,设备向上传输数据,平台向下发送指令;物联网平台同时向上提供云端API,服务端可以通过调用云端API将指令下发至设备端,实现远程控制。物联网平台提供IoTSDK,传感器设备集成SDK后,即可安全接入物联网平台,使用设备管理、数据流转等功能。图2.2阿里云物联网平台消息通信流程图阿里云物联网平台也提供IoTStudio来进行网页端的界面可视化开发,缩短了开发周期与部署难度。2.1.4MQTT通信协议的选择及其特点阿里云物联网平台的连接需要用到MQTT协议(MessageQueuingTelemetryTransport,消息队列遥测传输协议),这是一个基于TCP协议的发布/订阅(Publish/Subscribe)模式的轻量级通信协议。该协议可以使用极少的代码和有限的带宽,为远程设备提供实时可靠的消息服务,这一特点使得它在物联网、手机应用等场景广泛应用。MQTT协议具有以下几项特性:(1)使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合。(2)对负载内容屏蔽的消息传输。(3)使用TCP/IP提供网络连接。(4)有三种消息发布服务质量:"至多一次",消息发布完全依赖于底层TCP/IP网络。会发生消息丢失或重复。"至少一次",保证消息到达,但消息重复可能会发生。"只有一次",保证消息到达一次。(5)小型传输,开销很小(固定长度的头部是2字节),协议交换最小化,以降低网络流量。(6)使用LastWill和Testament特性通知有关各方客户端异常中断的机制。LastWill:遗言机制,用于通知同一主题下的其他设备发送遗言的设备已经断开了连接。Testament:遗嘱机制,功能类似于LastWill。2.2语音智能垃圾桶功能需求分析本次智能垃圾桶设计主要面向城市户外,需要达到智能化、成本低和方便使用等要求,可以通过语音告知使用者垃圾的分类情况;可以通过云端远程监控垃圾桶内状况。结合实际情况,系统需要实现以下功能:(1)语音识别功能事先将各种常见垃圾对应的分类方法录入语音识别芯片中,来对外部语音进行识别。(2)语音播报功能将垃圾类别播报出来,方便分类的同时也起到宣传作用,帮助人们记住垃圾的类别。(3)垃圾桶盖自动开合功能识别垃圾的类型后自动打开垃圾所属类别的垃圾桶的盖子。降低人与垃圾接触,避免一些卫生问题。(4)重量显示功能实时采集垃圾桶内的重量,为管理者提供远程监控服务,降低管理维护成本,提高垃圾回收效率。2.3智能垃圾桶系统整体框架设计本次设计用到的硬件有STM32核心开发板、LD3320语音模块、舵机、ESP8266WiFi模块、HX711测重模块、UNV6288语音播报模块。毕业设计采用STM32作为控制芯片,以LD3320语音识别模块作为人机交互的主要外设,通过嵌入式技术与无线传输技术实现了不同于传统C/S(客户机/服务器)的B/S(浏览器/服务器)架构。垃圾桶内数据经过ESP8266模块传输至阿里云物联网平台进行数据显示。图2.3系统整体框架结构2.4智能垃圾桶控制系统整体原理(1)硬件工作原理通过语音识别模块对语音关键字进行识别,当识别到时就执行相对应的函数,同时在循环中不断刷新测重模块检测到的重量,将WiFi模块提前设置成STA模式,通过MQTT协议将重量数据传输至阿里云物联网平台端。(2)软件工作原理开发环境采用HAL库而不是标准库,增加代码的可移植性,简化的寄存器各项功能的配置。将阿里云物联网平台提供的C语言SDK移植到MCU上,再使用里面提供的API函数与服务器进行基于MQTT协议的无线通信。2.5智能垃圾桶系统硬件设备选型本次设计系统的硬件选择应该根据具体情况进行选购,不仅需要考虑到用户的实际使用情况,也要根据开发板选择相配套的模块,选择配套的模块可以大幅减少开发的周期,增加运行时的稳定性和可靠性。以下为本次设计所选用的硬件:(1)嵌入式核心开发板的选择本次设计采用普中科技公司的STM32F103ZET6核心开发板,该开发板将STM32GPIO口全部引出方便开发,自带3个SPI接口和5个USART接口,方便接入其他外设开发,符合本次设计开发的需求。核心板如下图2.4所示。图2.4STM32核心开发板(2)语音检测模块的选择智能垃圾桶的语音检测可以大致分为两种解决方案,线上检测与线下检测。线上检测可以先将数据采集再上传至电脑调用科大讯飞的API来进行识别,但是考虑到实现难度,最终还是选择了线下识别的方案。线下语音识别使用了LD3320语音识别模块。LD3320芯片上集成了高精度的A/D和D/A接口,不需要外接辅助的Flash与RAM即可实现非特定人语音识别功能,并且用户可以对需要被识别的关键字列表进行动态编辑,支持自由编辑50条关键字。该模块通过SPI接口与核心板连接,使用方便。语音模块的实物图和接口参数图如下图2.5和2.6所示。图2.5LD3320语音识别模块图2.6模块接口参数图(3)语音合成模块的选择语音播报功能选用UNV6288语音合成模块。该模块是一款高度集成的语音合成模块,可以实现中文、英文、数字的语音合成。模块的控制方式也比较简单,通过USART串口发送字符串数据即可实现播报语句。语音合成模块如下图2.7所示。图2.7语音合成模块(4)垃圾桶自动开合模块的选择设计采用舵机来模拟垃圾桶的开合,舵机采用MG90S(360°),它是一种位置伺服的驱动器,适用于那些角度需要不断变化有可以保持控制的控制系统。舵机的控制信号是PWM信号,利用占空比的变化来改变舵机的位置。舵机的控制要求如下图2.8所示,舵机模块如下图2.9所示。图2.8舵机控制要求图2.9舵机模块(5)测重模块的选择测重模块选择了海芯科技的HX711模块,是一款24位A/D转换器芯片。该芯片集成了稳压电源、片内时钟振荡器等外围电路,具有集成度高、响应速度快、抗干扰性强等优点。该芯片与控制器芯片的接口和编程十分简单,所有控制信号由引脚脚驱动,无需对芯内部的寄存器编程。模块实物图如下图2.10所示。图2.10HX711测重模块(6)无线通信模块的选择在垃圾桶数据采集模块与阿里云物联网平台的通信中,采用了WiFi无线通信的数据传输方式,为MCU提供无线通信的是安信可科技的ESP-01WiF模块,该模块核心处理器ESP8266在较小尺寸封装中集成了TensilicaL106超低功耗32位微型MCU,带有16位精简模式,主频支持80MHz和160MHz,支持RTOS,集成Wi-FiMAC/BB/RF/PA/LNA,板载天线。该模块支持的IEEE802.11协议,拥有完整的TCP/IP协议栈。用户可以使用该模块为物联网设备添加联网功能,也可以作为AP构建独立的网络控制器,以最低的成本提供最大的实用性,给物联网设备联网开发提供便利。该模块的使用也十分简单,只需将模块与核心板通过USART串口连接,向WiFi模块发送AT指令即可。模块结构图和实物图如图2.12和2.13所示。图2.12ESP8266EX结构图图2.13ESP-01WiFi模块2.6本章小结本章介绍了语音识别智能垃圾桶的整体方案和系统应用中的关键技术。参照设计需求分析对各个硬件模块进行选型,调整出了最佳的设计方案,为语音智能垃圾桶的总体设计奠定了基础。3.硬件电路设计与实现3.1微控制器模块电路设计STM32F103ZET6是一款工作性能高功耗低的微控制器。一般的嵌入式设计都会用到STM32F103系列的芯片。STM32F103ZET6的基础组成功能如下表3.1所示。表3.1STM32F103ZET6基础组成功能型号FLASH(KB)RAM(KB)I2CU(S)ART通用IOSTM32F103ZET65126423+2112STM32芯片、测重模块、语音合成模块将使用5V电压供电,其余模块使用3.3V供电。单片机的串口通信电路采用CH340USB转串口芯片,与USART1连接来实现上位机通信。电路原理图如下图3.1、3.2所示。图3.1STM32F103ZET6电路原理图图3.2CH340串口通信电路原理图3.2语音识别模块电路设计语音识别采用LD3320芯片,该芯片由ICRoute公司生产,集成了语音识别处理器和一部分外部电路,不需要外接辅助如Flash、RAM等,在功能实现中操作简单。并且有足够多的关键字进行编辑以此来应对复杂的垃圾分类。芯片内部电路如下图3.3。图3.3LD3320芯片内部电路简单逻辑图芯片电压输入要求为3.3V,与STM32单片机SPI2串口相接。3.3测重模块电路设计测重模块为海芯科技的HX711芯片。该芯片集成了稳压电源、片内时钟振荡器等外围电路,具有集成度高、抗干扰性强、响应速度快等优点。提高了智能垃圾桶设计的性能和可靠性。图3.4HX711原理图该模块DOUT引脚和PD_SCK引脚分别与STM32单片机PB15和PD14引脚相连。3.4自动开合模块电路设计本次设计利用舵机模拟垃圾桶盖子的开合。舵机是一种位置伺服的驱动器,适用于需要角度不断变化并且可以保持的控制系统。舵机的控制信号是PWM信号,利用占空比的变化来改变舵机的位置。舵机的控制要求如下图3.5。图3.5舵机的控制要求舵机的电源接3.3V,PWM信号由STM32单片机的PD14引脚产生。3.5WiFi通信模块电路设计WiFi通信模块使用的是由安信可科技开发的ESP-01WiFi模块。该模块支持标准的IEEE802.11协议,拥有完整的TCP/IP协议栈。用户可以使用该模块为现有的物联网设备添加联网功能,也可以构建独立的网络控制器。性能参数表与电路图如下。表3.2WiFi模块性能参数表性能参数说明无线标准802.11b频率范围2.4-2.5GHZ数据接口UART工作电压3.0-3.6V(建议3.3V)工作温度-40℃-125℃无线网络类型STA/AP/STA+AP工作电流200mA外观尺寸14.3mm*24.8mm*3mm安全机制WPA/WPA2网络协议Ipv4,TCP/UDP/HTTP/FTP图3.6WiFi模块电路图WiFi模块与STM32单片机的USART3相连进行通信。3.6本章小结在智能垃圾桶的总计结构设计的基础上对各个模块进行设计接线。学习了各个模块的工作原理和使用要求。对智能垃圾桶设计的总体框架以及工作流程有了更加清除的认识,为接下来的软件设计打下基础。4.系统软件设计与实现软件实现的总体功能图:图4.1软件总体功能模块图4.1软件设计和运行流程分析工程项目代码主要分为以下几个部分:(1)组STM32Fxx_HAL_Driver下面存放HAL库的驱动代码。(2)组USER下存放运行main函数和各个模块的板极支持包。(3)组MQTT下存放移植的MQTTSDK用于和阿里云物联网平台通信系统在单片机上电后会先进行外设的初始化,然后系统就会开启周期的运行,在一个周期中先检测是否有语音识别的关键字,若有则进行相应语音的播报以及舵机的开合,再对测重模块进行数据计算,将数据传输至云端。系统主程序流程图如下图4.2。图4.2主程序流程图4.2语音识别模块程序设计语音识别是人机交互的主要部分,语音识别模块识别关键字再采取相应的回答对策,回答垃圾的类别。语音识别模块是通过SPI与STM32单片机相连的,使用时需要初始化单片机相应引脚和将关键字添加到模块中,下面是关键字添加的代码:uint8LD_AsrAddFixed(void){ uint8k,flag; uint8nAsrAddLength; #defineDATE_A20//数组二维数值 #defineDATE_B20 //数组一维数值 //添加关键字 uint8sRecog[DATE_A][DATE_B]={ "dianchi",\ "guopi",\ "suliaodai", }; uint8pCode[DATE_A]={ CODE_YHLJ,\ CODE_BKHS,\ CODE_KHS }; //添加识别码 flag=1; for(k=0;k<DATE_A;k++) { if(LD_Check_ASRBusyFlag_b2()==0) { flag=0; break; } LD_WriteReg(0xc1,pCode[k]); LD_WriteReg(0xc3,0); LD_WriteReg(0x08,0x04); LD3320_delay(1); LD_WriteReg(0x08,0x00); LD3320_delay(1); for(nAsrAddLength=0;nAsrAddLength<DATE_B;nAsrAddLength++) { if(sRecog[k][nAsrAddLength]==0) break; LD_WriteReg(0x5,sRecog[k][nAsrAddLength]); } LD_WriteReg(0xb9,nAsrAddLength); LD_WriteReg(0xb2,0xff); LD_WriteReg(0x37,0x04); } returnflag;}图4.3语音识别模块的流程图4.3语音合成模块程序设计语音合成模块用于合成语音,在识别到关键字后发送相应的垃圾类别应答提问。语音合成模块的程序设计比较简单,只需USART串口通信将文字发送给模块就能实现语音播报。串口初始化和中断函数代码如下:if(huart->Instance==UART4) { GPIO_InitTypeDefGPIO_Init4; __HAL_RCC_UART4_CLK_ENABLE(); __HAL_RCC_GPIOC_CLK_ENABLE();/* UART4GPIOPC10>UART4_TX*/ GPIO_Init4.Pin=GPIO_PIN_10; GPIO_Init4.Mode=GPIO_MODE_AF_PP; GPIO_Init4.Speed=GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(GPIOC,&GPIO_Init4); /* PC11>UART4_RX */ GPIO_Init4.Pin=GPIO_PIN_11; GPIO_Init4.Mode=GPIO_MODE_INPUT; GPIO_Init4.Pull=GPIO_NOPULL; HAL_GPIO_Init(GPIOC,&GPIO_Init4); HAL_NVIC_SetPriority(UART4_IRQn,12,1); HAL_NVIC_EnableIRQ(UART4_IRQn); UART4_RX_STA=0; }voidUART4_IRQHandler(void) { uint8Res; if(__HAL_UART_GET_IT_SOURCE(&huart4,UART_IT_RXNE)!=RESET) { Res=HAL_UART_Receive(&huart4,(uint8_t*)&Res,1,1000); if((UART4_RX_STA&0x8000)==0) { if(UART4_RX_STA<UART4_REC_LEN) { if(UART4_RX_STA==0) { //TIM_Cmd(TIM7,ENABLE); } UART4_RX_BUF[UART4_RX_STA++]=Res; } else { UART4_RX_STA|=1<<15; } } }}图4.4语音播报流程图4.4垃圾桶测重模块程序设计测重模块用于垃圾桶内部重量检测,这些数据需要读取并发送至服务器端,显示在服务器端的数据展示界面工人监测与分析数据。HX711测重模块的使用,需要先了解他的通信方式。该芯片由DOUT和PD_SCK两个通信引脚组成,功能分别是数据的发送和时钟接收,通过对这两个引脚的控制来从芯片中读取转换的数据。当数据输出引脚DOUT的状态为高电平时,钟输入信号PD_SCK引脚应为低电平。当DOUT从高电平变低电平后,PD_SCK应输入25至27个不等的时钟脉冲(图4.5)。第25至27个时钟脉冲用来选择下一次A/D转换的输入通道和增益(设置方法参考表4.1)。当A/D转换器的输入通道需要增益改变时,A/D转换器需要等待4个数据输出周期才能稳定。DOUT引脚在4个数据输出周期后才会由高电平转变低电平,输出有效数据。表4.1输出通道和增益选择PD_SCK脉冲数输入通道增益25A12826B3227A64图4.5数据输出,输入通道和增益选择时序图HX711相关程序:unsignedlongHX711_Read(void) { unsignedlongcount; unsignedchari;HAL_GPIO_WritePin(GPIOE,GPIO_PIN_2,GPIO_PIN_SET); delay_us(1);HAL_GPIO_WritePin(GPIOE,GPIO_PIN_1,GPIO_PIN_RESET);count=0;while(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_2)==1);for(i=0;i<24;i++) { HAL_GPIO_WritePin(GPIOE,GPIO_PIN_1,GPIO_PIN_SET); count=count<<1; delay_us(1); HAL_GPIO_WritePin(GPIOE,GPIO_PIN_1,GPIO_PIN_RESET); if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_2)==1) count++; delay_us(1); } HAL_GPIO_WritePin(GPIOE,GPIO_PIN_1,GPIO_PIN_RESET);count=count^0x800000; delay_us(1); HAL_GPIO_WritePin(GPIOE,GPIO_PIN_1,GPIO_PIN_RESET); return(count);}图4.6测重流程图4.5自动开合模块程序设计作为智能垃圾桶,需要减少人与垃圾桶的接触,在识别完垃圾类别后,垃圾桶需要自动开盖,方便丢垃圾。舵机的使用PWM信号控制,而PWM信号由单片机的定时器发出,因此需要初始化定时器主要代码如下:TIM_HandleTypeDefhtim4;voidMX_TIM4_Init(void){TIM_ClockConfigTypeDefsClockSourceConfig={0};TIM_MasterConfigTypeDefsMasterConfig={0};TIM_OC_InitTypeDefsConfigOC={0};htim4.Instance=TIM4;htim4.Init.Prescaler=7200-1;htim4.Init.CounterMode=TIM_COUNTERMODE_UP;htim4.Init.Period=200-1;htim4.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;htim4.Init.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_DISABLE;if(HAL_TIM_Base_Init(&htim4)!=HAL_OK){Error_Handler();}sClockSourceConfig.ClockSource=TIM_CLOCKSOURCE_INTERNAL;if(HAL_TIM_ConfigClockSource(&htim4,&sClockSourceConfig)!=HAL_OK){Error_Handler();}if(HAL_TIM_PWM_Init(&htim4)!=HAL_OK){Error_Handler();}sMasterConfig.MasterOutputTrigger=TIM_TRGO_RESET;sMasterConfig.MasterSlaveMode=TIM_MASTERSLAVEMODE_DISABLE;if(HAL_TIMEx_MasterConfigSynchronization(&htim4,&sMasterConfig)!=HAL_OK){Error_Handler();}sConfigOC.OCMode=TIM_OCMODE_PWM1;sConfigOC.Pulse=0;sConfigOC.OCPolarity=TIM_OCPOLARITY_LOW;sConfigOC.OCFastMode=TIM_OCFAST_DISABLE;if(HAL_TIM_PWM_ConfigChannel(&htim4,&sConfigOC,TIM_CHANNEL_3)!=HAL_OK){Error_Handler();}HAL_TIM_MspPostInit(&htim4);}voidHAL_TIM_Base_MspInit(TIM_HandleTypeDef*tim_baseHandle){if(tim_baseHandle->Instance==TIM4){__HAL_RCC_TIM4_CLK_ENABLE();}}voidHAL_TIM_MspPostInit(TIM_HandleTypeDef*timHandle){GPIO_InitTypeDefGPIO_InitStruct={0};if(timHandle->Instance==TIM4){__HAL_RCC_GPIOD_CLK_ENABLE();/**TIM4GPIOConfigurationPD14>TIM4_CH3*/GPIO_InitStruct.Pin=GPIO_PIN_14;GPIO_InitStruct.Mode=GPIO_MODE_AF_PP;GPIO_InitStruct.Speed=GPIO_SPEED_FREQ_LOW;HAL_GPIO_Init(GPIOD,&GPIO_InitStruct);__HAL_AFIO_REMAP_TIM4_ENABLE();}}voidopenbin(void){ HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_3); __HAL_TIM_SET_COMPARE(&htim4,TIM_CHANNEL_3,175); HAL_Delay(500); __HAL_TIM_SET_COMPARE(&htim4,TIM_CHANNEL_3,195); HAL_Delay(2000); __HAL_TIM_SET_COMPARE(&htim4,TIM_CHANNEL_3,175);}4.6WiFi通信模块程序设计为了满足智能化的要求,需要使用WiFi模块将采集的数据传输至阿里云物联网平台进行显示与分析。在系统运行之初对它完成初始化(USART3)。然后将采集到的数据发送至物联网平台进行显示。主要代码如下://配置WiFi的通信的uart3voidWIFI_USART_Config(){WifiUartHandle.Instance=WIFI_USART;WifiUartHandle.Init.BaudRate=DEBUG_USART_BAUDRATE;WifiUartHandle.Init.WordLength=UART_WORDLENGTH_8B;WifiUartHandle.Init.StopBits=UART_STOPBITS_1;WifiUartHandle.Init.Parity=UART_PARITY_NONE;WifiUartHandle.Init.HwFlowCtl=UART_HWCONTROL_NONE;WifiUartHandle.Init.Mode=UART_MODE_TX_RX;HAL_UART_Init(&WifiUartHandle);//使能串口接收__HAL_UART_ENABLE_IT(&WifiUartHandle,UART_IT_RXNE);}//发送AT指令voidESP8266_Cmd(uint8_t*cmd){Usart_SendString(&WifiUartHandle,cmd);Test_Usart_Recv();}//测试AT指令main调用测试成功voidESP8266_AT_Test(void){ESP8266_Cmd("AT\r\n");HAL_Delay(2000);}//查找附近wifivoidESP8266_Find_Wifi(void){ESP8266_Cmd("AT+CWLAP\r\n");}//ESP8266工作模式选择voidESP8266_Net_Mode(Net_ModeTypeDefenum_mode){switch(enum_mode){caseAP:ESP8266_Cmd("AT+CWMODE=2\r\n");caseSTA:ESP8266_Cmd("AT+CWMODE=1\r\n");caseSTA_AP:ESP8266_Cmd("AT+CWMODE=3\r\n");default:break;}}//连接外部wifi热点voidESP8266_JoinAP(char*name,char*password){charcCmd[120]; sprintf(cCmd,"AT+CWJAP=\"%s\",\"%s\"\r\n",name,password);ESP8266_Cmd((uint8_t*)cCmd);}图4.7WiFi模块工作流程图4.7MQTT协议SDK移植如何在单片机上使用MQTT协议与阿里云通信,阿里云物联网平台提供的产品文档中给出了很多方案,如MCU+支持MQTT的模组、MCU+支持TCP的模组、使用已经集成SDK的模块。实际考察下来MCU+支持TCP的模组这个方案比较适合本次设计。设备端的开发过程如图4.8图4.8设备端开发过程SDK通过MQTT协议与阿里云物联网平台通信,对于只支持TCP的情况,MCU上需要使用SDK自带的MQTTClient来将用户的数据封装成MQTT协议,再通过通信模组上的TCP模块(ESP8266)将数据传输至阿里云物联网平台。参考产品文档移植下来的CSDK如下图4.7所示,其中mqtt_example.c是样例程序。图4.7CSDK4.8本章小结本章中在硬件选型等前期准备完成的情况下对系统软件进行了详细的设计,包括程序流程图,程序关键代码等。程序流程图是软件设计的重要组成部分,可以让编程思路变得更加清晰。通过本章对软件系统的分析,减少了毕设开发难度。5.物联网平台的搭建5.1服务器端设备管理阿里云物联网平台提供完整的设备管理功能,支持设备注册、功能定义、在线调试等功能。本次设计使用到的是公共实例(可以免费体验,若需要更专业的功能需使用企业版实例),创建产品并添加了节点设备。产品:设备的集合,通常由一组功能相同的设备组成。物联网平台会给每个产品生成全局唯一的ProductKey。设备:归属于某个产品类下的具体设备。物联网平台会给设备生成产品内唯一的证书DeviceName。设备证书:ProductKey、DeviceName、DeviceSecret的组合。ProductKey:物联网平台为产品颁发的全局唯一标识。DeviceName:在设备注册时,自定义的设备名称,在产品维度中具有唯一性。DeviceSecret:物联网平台为设备颁发的设备密钥,通常和DeviceName成对出现。不同的物联网设备需要创建对应的产品(每个产品有唯一的ProductKey),同时需要设置模块的功能定义,提前设置好以后接收到的数据的类型和标识符,以后若添加同一类型的设备可以直接在该产品下添加新设备,十分方便。图5.1产品创建图5.2产品功能设置图5.3创建完成的产品(设备模型)若有多个智能垃圾桶需要接入系统中,就需要创建多个设备(DeviceName自己设置,DeviceSecret系统生成,这两个参数都需在代码中提前初始化)。订阅Topic列表后即可接收或者发布消息。图5.4物联网设备图5.5设备证书图5.6设备订阅的Topic列表下面为发送的消息格式:{"method":"perty.set","id":"837768771","params":{"weight_test":4},"version":"1.0.0"}数据显示如下:图5.7设备物理型数据5.2数据显示界面的开发数据显示界面的开发使用到了物联网应用开发(IoTStudio)中的Web可视化开发工作台适用于开发状态监控面板、设备管理后台、设备数据分析报表等。它具有免代码开发,完全托管,模板丰富的功能特点。阿里云物联网应用开发提供了很多实用的组件,方便界面开发。图5.8界面开发组件为了更形象地显示数据,使用仪表盘来显示垃圾桶内重量。图5.8数据显示界面开发为了将数据显示到该组件中,需要进

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论