基于STM32的智能垃圾桶Proteus仿真毕业论文

摘要

随着智能家居技术的快速发展,传统垃圾桶功能单一、智能化程度低、使用便捷性不足等问题日益凸显,难以满足现代家庭及公共场景的使用需求。本文设计并实现了一款基于STM32微控制器的智能垃圾桶系统,并通过Proteus软件完成仿真验证。该系统以STM32F103C8T6为核心控制单元,整合超声波测距模块(HC-SR04)、红外人体感应模块(HCSR501)、光敏传感器、DHT11温湿度传感器、MQ-135空气质量传感器、OLED显示屏、舵机、LED灯及模拟WiFi模块,实现垃圾桶容量检测与满载报警、人体感应自动翻盖、光照感应LED照明、环境温湿度与空气质量检测、参数实时显示及数据无线传输等功能。

通过Proteus仿真测试表明,系统运行稳定、响应迅速,各功能模块协同工作正常:HC-SR04模块可精准检测垃圾桶容量,满载时自动触发报警;HCSR501模块能可靠检测人体存在,实现垃圾桶盖的自动开合;光敏传感器可根据环境光照强度自动控制LED灯亮灭;DHT11与MQ-135模块可实时采集环境温湿度、空气质量数据,并通过OLED显示屏清晰显示;模拟WiFi模块可稳定上传各项监测数据。本设计结构简单、成本低廉、实用性强,既满足了智能家居的便捷化需求,也通过Proteus仿真完成了毕业论文的工程实践要求,为智能垃圾桶的实际开发与应用提供了理论参考与仿真依据,具有一定的实际应用价值与推广前景。

关键词:STM32;智能垃圾桶;Proteus仿真;传感器;自动控制;数据监测

第一章 绪论

1.1 研究背景与意义

在现代社会,垃圾桶作为日常生活与公共环境中不可或缺的卫生设施,其功能与便捷性直接影响人们的生活质量与环境整洁度。传统垃圾桶多为手动翻盖或无盖设计,存在诸多弊端:手动翻盖易造成手部污染,不符合卫生需求;无盖设计易散发异味、滋生细菌,影响环境质量;无法实时监测垃圾桶容量,导致垃圾溢出,增加清洁人员的工作负担;缺乏环境监测功能,无法及时反馈周围环境的温湿度、空气质量等参数。

随着嵌入式技术、传感器技术、物联网技术与智能家居产业的深度融合,智能垃圾桶应运而生,成为解决传统垃圾桶痛点的有效途径。智能垃圾桶集成多种传感器与控制模块,实现自动翻盖、容量监测、环境检测、数据传输等智能化功能,既能提升使用便捷性与卫生性,也能降低人工管理成本,符合现代智能家居的发展趋势。

本次研究基于STM32微控制器,结合多种常用传感器,设计智能垃圾桶系统,并通过Proteus软件进行仿真验证。Proteus仿真作为嵌入式系统开发的重要工具,可在实物搭建前完成系统功能验证,降低开发成本、缩短开发周期,同时满足毕业论文对工程实践能力与仿真设计能力的培养要求。本研究的开展,不仅能掌握STM32微控制器的应用与传感器的数据采集、处理方法,还能为智能垃圾桶的实际开发提供仿真参考,具有重要的理论意义与实用价值。

1.2 国内外研究现状

国外智能垃圾桶技术起步较早,相关产品与研究较为成熟,多注重智能化、人性化与环保性的结合。国外产品普遍集成人体感应自动翻盖、容量监测、异味处理、数据无线传输等功能,部分高端产品还融入了AI算法,可根据使用频率预测垃圾产生量,提醒清洁人员及时清理,同时通过物联网平台实现远程监控与管理。但此类产品核心技术封闭、价格高昂,难以在国内普通家庭及中小公共场景中广泛普及。

国内智能垃圾桶领域近年来快速发展,各类产品与研究不断涌现,多数产品实现了人体感应自动翻盖、容量监测等基础功能,但普遍存在智能化程度不高、功能单一、传感器检测精度不足、仿真验证不完善等问题。部分研究仅完成实物搭建,未通过仿真工具进行前期验证,导致开发过程中出现较多问题,增加了开发成本与难度。综合现有研究短板,本文设计一款功能全面、成本低廉的智能垃圾桶系统,通过Proteus软件完成仿真验证,涵盖题目要求的所有功能,弥补现有研究中仿真设计不足的问题,同时完成毕业论文的研发与撰写任务。

1.3 研究主要内容与目标

1.3.1 研究主要内容

本文围绕基于STM32的智能垃圾桶Proteus仿真系统展开研究,完成从方案设计、元器件选型、电路设计、软件编程、Proteus仿真调试到论文撰写的全流程工作,具体研究内容如下:

  1. 明确系统核心功能需求,结合题目要求,确定各模块的工作逻辑,完成系统整体方案设计与硬件架构搭建;
  1. 根据功能需求,完成各模块元器件选型,重点选择适配Proteus仿真的元器件,设计系统硬件电路,包括STM32最小系统、传感器采集电路、执行设备驱动电路、OLED显示电路、模拟WiFi通信电路;
  1. 基于Keil MDK5开发环境,采用模块化编程思想,编写主程序、传感器数据采集子程序、执行设备控制子程序、OLED显示子程序、报警子程序及模拟WiFi数据传输子程序;
  1. 在Proteus软件中搭建系统仿真电路,导入编写的程序,完成各功能模块的仿真测试,验证系统功能的正确性与稳定性;
  1. 优化系统设计与仿真参数,解决仿真过程中出现的问题,确保系统各项功能达到题目要求,完成毕业论文的撰写。

1.3.2 研究目标

本研究旨在设计一款基于STM32的智能垃圾桶Proteus仿真系统,实现以下核心目标,满足题目要求:

  1. 容量检测与报警功能:通过HC-SR04超声波模块检测垃圾桶容量,当检测到垃圾满载时,自动触发报警提示,提醒处理垃圾;
  1. 人体感应自动翻盖功能:通过HCSR501红外模块检测人体存在,有人时控制舵机转动,模拟垃圾桶盖自动打开;无人时,舵机复位,垃圾桶盖自动合上;
  1. 光照感应照明功能:通过光敏传感器检测周围光照强度,当光照不足时,自动控制LED灯亮起;光照充足时,LED灯熄灭;
  1. 环境参数检测功能:通过DHT11模块检测环境温湿度,通过MQ-135模块检测空气质量,确保检测数据准确、稳定;
  1. 数据显示功能:通过OLED显示屏实时显示环境温湿度、空气质量、有人/无人状态等信息,显示清晰、无乱码,数据刷新及时;
  1. 模拟WiFi功能:实现温湿度、光照强度、空气质量、垃圾桶容量等数据的自动接收与上传,模拟物联网数据传输过程;
  1. 仿真验证目标:通过Proteus软件完成系统仿真,确保各功能模块协同工作正常,系统运行稳定、响应迅速,满足毕业论文的仿真设计要求。

1.4 论文章节安排

本文共分为六章,具体章节安排如下:

  1. 绪论:阐述研究背景与意义、国内外研究现状、研究主要内容与目标、论文章节安排;
  1. 系统总体方案设计:明确系统功能需求、整体架构设计、控制逻辑设计及核心元器件选型;
  1. 系统硬件电路设计:分模块详解各单元电路的原理、接线与设计要点,绘制电路原理图,并说明Proteus仿真电路的搭建要点;
  1. 系统软件设计:讲解软件开发环境、主程序流程与各功能子程序的设计思路,给出核心代码片段;
  1. Proteus仿真调试与结果分析:搭建Proteus仿真环境,完成各功能模块的仿真测试,分析仿真结果,验证系统功能;
  1. 总结与展望:总结系统设计与仿真成果,指出现存不足并提出未来优化方向。

第二章 系统总体方案设计

2.1 系统功能需求分析

结合题目要求与智能垃圾桶的实际应用场景,本系统核心功能需求覆盖检测、控制、显示、通信四大核心模块,确保系统的实用性与针对性,具体功能需求如下:

  1. 容量检测与报警功能:HC-SR04超声波模块实时检测垃圾桶内垃圾高度,计算垃圾桶容量,当容量达到满载阈值(如90%)时,触发报警模块(可采用蜂鸣器)发出报警提示,提醒用户或清洁人员处理垃圾;
  1. 人体感应自动翻盖功能:HCSR501红外模块实时检测周围是否有人,检测到人体信号后,发送信号给STM32控制器,控制器控制舵机转动一定角度,模拟垃圾桶盖打开;当检测不到人体信号一段时间(如3秒)后,舵机复位,垃圾桶盖关闭;
  1. 光照感应照明功能:光敏传感器实时采集周围光照强度,当光照强度低于预设阈值(如500Lux)时,控制器控制LED灯亮起,提供照明;当光照强度高于预设阈值时,LED灯自动熄灭,节约能耗;
  1. 环境参数检测功能:DHT11模块实时采集环境温度(0-50℃)与湿度(20%-90%RH),MQ-135模块实时采集空气质量数据(主要检测有害气体浓度),为用户提供环境参考;
  1. 数据显示功能:OLED显示屏实时显示环境温度、环境湿度、空气质量等级、有人/无人状态、垃圾桶容量状态(未满/满载),数据刷新频率不低于1次/秒,显示清晰、直观;
  1. 模拟WiFi通信功能:通过模拟WiFi模块(如ESP8266仿真模型),将采集到的温湿度、光照强度、空气质量、垃圾桶容量等数据自动上传,模拟物联网数据传输过程,实现数据的远程监测。

2.2 系统整体架构设计

本系统采用模块化设计思想,以STM32F103C8T6微控制器为核心,将整个系统分为六大功能模块,各模块相互独立、协同工作,确保系统结构清晰、便于调试与仿真。系统整体架构如图2-1所示(此处可插入架构图),具体模块如下:

  1. 核心控制模块:以STM32F103C8T6为核心,负责接收各传感器采集的数据,进行数据处理、逻辑判断,发送控制指令给执行设备,同时对接OLED显示模块与模拟WiFi通信模块,协调各模块有序工作;
  1. 传感器采集模块:由HC-SR04超声波模块、HCSR501红外模块、光敏传感器、DHT11温湿度传感器、MQ-135空气质量传感器组成,负责实时采集垃圾桶容量、人体存在、光照强度、环境温湿度、空气质量等参数,并将采集到的信号传输给核心控制模块;
  1. 执行控制模块:由舵机(模拟垃圾桶翻盖)、LED灯、蜂鸣器(报警)组成,接收核心控制模块的控制指令,执行相应的动作,实现自动翻盖、照明、报警功能;
  1. 显示模块:采用OLED屏幕,接收核心控制模块发送的数据,实时显示各项环境参数与系统工作状态,方便用户直观查看;
  1. 模拟WiFi通信模块:采用ESP8266仿真模块,负责将核心控制模块处理后的各项数据上传,模拟无线数据传输功能,实现数据的远程监测;
  1. 电源模块:为整个系统提供稳定的供电,采用5V直流供电,经稳压模块转换为3.3V,为STM32芯片、传感器、OLED屏幕等提供稳定电压。

2.3 系统控制逻辑设计

本系统采用“实时采集-数据处理-逻辑判断-指令执行”的控制逻辑,各模块协同工作,确保各项功能有序实现,具体控制逻辑如下:

  1. 系统上电后,首先进行初始化操作,包括STM32系统时钟初始化、GPIO初始化、各传感器初始化、OLED初始化、模拟WiFi模块初始化等,初始化完成后,OLED屏幕显示开机界面与初始状态;
  1. 传感器采集模块实时采集各项参数,包括:HC-SR04采集垃圾桶垃圾高度,计算容量;HCSR501采集人体感应信号;光敏传感器采集光照强度;DHT11采集温湿度;MQ-135采集空气质量;
  1. 核心控制模块对采集到的数据进行处理与逻辑判断:
            
  • 容量判断:根据HC-SR04检测的垃圾高度,计算垃圾桶容量,若容量≥90%(满载阈值),触发蜂鸣器报警;若容量<90%,报警停止;
  • 人体感应判断:若HCSR501检测到人体信号,控制舵机转动(如转动90°),打开垃圾桶盖;若检测不到人体信号持续3秒,舵机复位(转动0°),关闭垃圾桶盖;
  • 光照判断:若光敏传感器检测的光照强度<500Lux,控制LED灯亮起;若光照强度≥500Lux,控制LED灯熄灭;
  • 数据处理:对DHT11与MQ-135采集的数据进行滤波处理,去除异常值,确保数据准确;
  1. 核心控制模块将处理后的各项数据发送给OLED显示屏,实时显示温湿度、空气质量、有人/无人状态、垃圾桶容量状态;
  1. 模拟WiFi模块将处理后的温湿度、光照强度、空气质量、垃圾桶容量等数据自动上传,模拟无线数据传输;
  1. 系统持续循环运行,实时采集、处理、显示数据,执行相应的控制动作,确保各项功能实时实现。

2.4 核心元器件选型(适配Proteus仿真)

根据系统功能需求与控制逻辑,结合Proteus仿真的兼容性、元器件的性价比与稳定性,对各模块核心元器件进行选型,确保系统仿真顺利实现,具体选型如下:

2.4.1 核心控制器选型

选用STM32F103C8T6作为系统核心控制器,该芯片基于ARM Cortex-M3内核,工作频率最高可达72MHz,具备高性能、低功耗、丰富的外设接口(GPIO、I2C、UART、TIM等),能够满足各传感器数据采集、执行设备控制、OLED显示、模拟WiFi通信等多种功能需求。同时,该芯片在Proteus软件中具有完善的仿真模型,兼容性好,体积小、成本低廉,适合嵌入式智能设备的仿真与开发,完全符合本系统的设计要求。

2.4.2 传感器选型

  1. 超声波测距模块:选用HC-SR04模块,该模块工作电压5V,测量距离范围2-400cm,测量精度±3mm,响应速度快,通过GPIO引脚与STM32通信,在Proteus中可直接调用仿真模型,适合用于垃圾桶容量检测;
  1. 红外人体感应模块:选用HCSR501模块,工作电压5V,检测距离3-7米,检测角度110°,可调节检测灵敏度与延时时间,输出数字信号,通过GPIO引脚与STM32连接,仿真兼容性好,适合人体存在检测;
  1. 光敏传感器:选用普通光敏电阻搭配分压电路,工作电压3.3V,光照强度变化时,电阻值随之变化,通过STM32的ADC接口采集模拟信号,转换为光照强度值,Proteus中可直接仿真,成本低廉、使用便捷;
  1. 温湿度传感器:选用DHT11模块,工作电压3.3-5V,采用单总线通信协议,可同时测量环境温度(0-50℃,精度±0.5℃)和湿度(20%-90%RH,精度±2%RH),响应速度快,接线简单,在Proteus中具有成熟的仿真模型;
  1. 空气质量传感器:选用MQ-135模块,工作电压5V,可检测多种有害气体(如甲醛、CO、SO2等),输出模拟信号,通过STM32的ADC接口采集信号,转换为空气质量数据,Proteus中可正常仿真,适合环境空气质量检测。

2.4.3 执行设备选型

  1. 舵机:选用SG90舵机,工作电压3.3-5V,转角范围0-180°,扭矩适中、控制精度高,通过STM32的TIM定时器输出PWM信号控制其转动角度,用于模拟垃圾桶盖的开合动作,Proteus中可直接调用仿真模型;
  1. LED灯:选用普通红色LED灯,工作电压3.3V,通过GPIO引脚控制其亮灭,用于光照不足时的照明,Proteus中仿真简单,成本低廉;
  1. 蜂鸣器:选用有源蜂鸣器,工作电压5V,通过GPIO引脚控制其启停,用于垃圾桶满载时的报警提示,Proteus中可直接仿真,发声效果明显。

2.4.4 显示模块选型

选用12864 OLED屏幕(I2C接口),分辨率为128×64,工作电压3.3V,具有自发光、功耗低、对比度高、显示清晰、响应速度快等优点,无需背光,适合不同光照环境下使用。I2C接口接线简单,可有效节省STM32的GPIO引脚资源,在Proteus中具有完善的仿真模型,能够实时显示各项环境参数与系统工作状态。

2.4.5 模拟WiFi通信模块选型

选用ESP8266 WIFI模块(ESP-01)的仿真模型,工作电压3.3V,支持UART通信,可在Proteus中模拟无线网络连接,实现数据上传功能。该模块配置简单,与STM32的UART接口对接便捷,能够模拟温湿度、光照强度、空气质量、垃圾桶容量等数据的无线传输,满足题目要求的模拟WiFi功能。

2.4.6 其他元器件

包括5V/3.3V稳压模块(AMS1117-3.3V)、电阻、电容、面包板、杜邦线等,用于搭建电源电路与各模块接口电路,确保电路连接可靠、系统稳定运行,所有元器件均选用Proteus中可正常仿真的型号。

第三章 系统硬件电路设计

3.1 硬件电路设计原则

本系统硬件电路设计遵循以下原则,兼顾实用性、兼容性与仿真可行性:一是可靠性,选用性能稳定、Proteus兼容的元器件,设计合理的电路结构,避免信号干扰,确保系统仿真时稳定运行;二是实用性,结合智能垃圾桶的实际应用场景,简化电路设计,降低成本,便于仿真搭建与调试;三是兼容性,所有元器件均选用Proteus中可直接调用的模型,确保仿真顺利实现;四是扩展性,预留一定的接口,便于后续增加功能(如远程控制、垃圾分类提示等)。

3.2 核心控制模块电路设计

核心控制模块以STM32F103C8T6为核心,主要包括最小系统电路、电源电路、复位电路、晶振电路,是整个系统的“大脑”,负责协调各模块工作,同时确保在Proteus中可正常仿真。

3.2.1 STM32最小系统电路

STM32F103C8T6最小系统电路主要由芯片、晶振电路、复位电路组成,在Proteus中搭建时需确保接线正确,仿真无报错:

  1. 晶振电路:选用8MHz外部晶振,搭配两个22pF电容,连接至芯片的OSC_IN(PA1)和OSC_OUT(PA2)引脚,为芯片提供稳定的时钟信号,通过倍频电路可将时钟频率提升至72MHz,满足系统高速运行需求;在Proteus中,晶振与电容的参数需设置正确,确保时钟信号稳定;
  1. 复位电路:采用上电复位与手动复位相结合的方式,复位引脚(NRST)通过10K电阻接VCC,通过0.1μF电容接地,同时并联一个手动复位按键,按下按键时,复位引脚接地,实现芯片复位,确保系统出现异常时可手动重启;Proteus中按键选用普通轻触按键,仿真时可正常触发复位功能。

3.2.2 电源电路设计

系统采用5V直流供电,通过USB接口或模拟电源供电,经AMS1117-3.3V稳压模块将5V电压转换为3.3V,为STM32芯片、传感器、OLED屏幕、ESP8266模块等提供稳定的3.3V电压;同时在电源输入端并联100μF电解电容和0.1μF陶瓷电容,用于滤波,减少电压波动,保护电路元器件。执行设备(舵机、蜂鸣器、LED灯)中,舵机与蜂鸣器采用5V供电,LED灯采用3.3V供电,通过GPIO引脚控制,在Proteus中需确保电源模块输出稳定,无电压波动。

3.3 传感器采集模块电路设计

传感器采集模块负责采集各项参数,根据传感器类型的不同,设计相应的接口电路,确保数据采集准确、稳定,同时适配Proteus仿真,各传感器电路设计如下:

3.3.1 HC-SR04超声波模块电路

HC-SR04模块采用GPIO接口通信,电路设计简单,模块的VCC引脚接5V电源,GND引脚接地,TRIG(触发引脚)连接至STM32的GPIO引脚(如PA0),ECHO(回声引脚)连接至STM32的GPIO引脚(如PA1)。STM32通过TRIG引脚发送触发信号(至少10us的高电平),模块接收触发信号后发射超声波,遇到垃圾反射后,ECHO引脚输出高电平,高电平持续时间即为超声波往返时间,通过计算可得到垃圾高度,进而确定垃圾桶容量。在Proteus中,需确保TRIG与ECHO引脚接线正确,模块可正常接收触发信号并返回回声信号。

3.3.2 HCSR501红外人体感应模块电路

HCSR501模块输出数字信号,电路设计中,模块的VCC引脚接5V电源,GND引脚接地,OUT(输出引脚)连接至STM32的GPIO引脚(如PA2)。模块上电后,自动检测周围人体红外信号,当检测到人体时,OUT引脚输出高电平;无人体时,输出低电平。STM32通过检测OUT引脚的电平变化,判断是否有人,进而控制舵机动作。在Proteus中,模块的灵敏度与延时时间可通过仿真参数调节,确保检测可靠。

3.3.3 光敏传感器电路

光敏传感器采用光敏电阻搭配分压电路,电路中,光敏电阻一端接3.3V电源,另一端通过10K电阻接地,中间节点(信号输出端)连接至STM32的ADC输入引脚(如PA3)。当光照强度变化时,光敏电阻的电阻值随之变化,分压电路的输出电压也随之变化,STM32通过ADC外设将模拟信号转换为数字信号,进而计算出光照强度值。为减少信号干扰,在信号输出端与GND之间并联一个0.1μF电容,用于滤波。在Proteus中,光敏电阻的参数可设置,模拟不同光照强度下的电阻变化。

3.3.4 DHT11温湿度传感器电路

DHT11传感器采用单总线通信,电路设计简单,传感器的VCC引脚接5V电源,GND引脚接地,DATA(数据引脚)通过10K上拉电阻连接至STM32的GPIO引脚(如PA4),同时DATA引脚连接至3.3V电源,确保通信稳定。STM32通过GPIO引脚模拟单总线时序,发送起始信号、接收传感器响应信号,进而读取温湿度数据,无需复杂的外围电路。在Proteus中,DHT11模块可直接调用,接线正确后即可正常采集数据。

3.3.5 MQ-135空气质量传感器电路

MQ-135传感器输出模拟信号,电路设计中,传感器的VCC引脚接5V电源,GND引脚接地,AO(模拟输出)引脚连接至STM32的ADC输入引脚(如PA5),通过STM32的ADC外设将模拟信号转换为数字信号,进而计算出空气质量数据(有害气体浓度)。为减少信号干扰,在AO引脚与GND之间并联一个0.1μF电容,用于滤波。在Proteus中,MQ-135模块的仿真模型可正常输出模拟信号,适配ADC采集。

3.4 执行控制模块电路设计

执行控制模块由舵机、LED灯、蜂鸣器组成,由于STM32的GPIO引脚输出电流较小,部分设备需通过驱动电路驱动,实现电气隔离,保护核心芯片,同时确保Proteus仿真正常。

3.4.1 舵机控制电路

选用SG90舵机,电路设计中,舵机的VCC引脚接5V电源,GND引脚接地,SIG(信号引脚)连接至STM32的TIM定时器引脚(如PB0)。STM32通过TIM定时器输出PWM信号,控制舵机的转动角度(0-180°),其中PWM信号的频率为50Hz,占空比为2.5%-12.5%,对应舵机0-180°的转角。在Proteus中,舵机模型可直接调用,通过PWM信号即可控制其转动,模拟垃圾桶盖的开合动作。

3.4.2 LED灯控制电路

LED灯采用3.3V供电,电路设计中,LED灯的阳极通过220Ω电阻连接至STM32的GPIO引脚(如PB1),阴极接地。当STM32的GPIO引脚输出高电平时,LED灯亮起;输出低电平时,LED灯熄灭。电路设计简单,在Proteus中可直接仿真,无需额外驱动电路。

3.4.3 蜂鸣器控制电路

选用有源蜂鸣器,电路设计中,蜂鸣器的VCC引脚接5V电源,GND引脚通过NPN三极管(如PNP8550)接地,三极管的基极通过1K电阻连接至STM32的GPIO引脚(如PB2)。当STM32的GPIO引脚输出高电平时,三极管导通,蜂鸣器通电发声;输出低电平时,三极管截止,蜂鸣器停止发声。采用三极管驱动可增大输出电流,确保蜂鸣器正常发声,在Proteus中,三极管与蜂鸣器的仿真模型可正常配合工作。

3.5 显示模块电路设计

OLED屏幕采用I2C接口,电路设计简单,屏幕的VCC引脚接3.3V电源,GND引脚接地,SCL引脚连接至STM32的I2C_SCL引脚(如PB6),SDA引脚连接至STM32的I2C_SDA引脚(如PB7)。STM32通过I2C总线向OLED屏幕发送控制指令与显示数据,实现各项环境参数的实时显示,无需额外的驱动芯片,简化了电路设计。在Proteus中,OLED屏幕的I2C通信需确保接线正确,初始化指令配置合理,方可正常显示数据。

3.6 模拟WiFi通信模块电路设计

模拟WiFi通信模块采用ESP8266 WIFI模块(ESP-01)的仿真模型,电路设计中,ESP8266模块的VCC引脚接3.3V电源(注意:模块不能直接接5V电源,否则会烧毁),GND引脚接地,TX引脚连接至STM32的USART_RX引脚(如PA3),RX引脚连接至STM32的USART_TX引脚(如PA2),实现STM32与ESP8266模块的UART通信。模块的CH_PD引脚接3.3V电源,确保模块正常工作;RST引脚可连接至STM32的GPIO引脚,实现模块的手动复位与重启。在Proteus中,ESP8266模块可模拟无线网络连接,通过UART接口接收STM32发送的数据,并模拟上传,实现题目要求的模拟WiFi功能。

3.7 整体硬件电路原理图与Proteus仿真搭建要点

结合上述各模块电路设计,绘制系统整体硬件电路原理图(此处可插入原理图),明确各模块之间的接线关系,确保电路连接正确、合理。原理图中包含STM32最小系统、传感器采集电路、执行控制电路、显示电路、模拟WiFi通信电路,各模块通过GPIO、I2C、UART、TIM等接口实现数据交互与控制,整体电路结构清晰、接线简单,便于Proteus仿真搭建。

Proteus仿真搭建要点:一是选用与选型一致的元器件模型,确保所有元器件在Proteus中可正常仿真;二是按照电路原理图正确接线,重点检查电源引脚、通信引脚的接线,避免接反或短路;三是设置电源参数,确保5V与3.3V电源输出稳定;四是添加仿真探针,便于查看各引脚的电平变化与数据传输情况,方便调试。

第四章 系统软件设计

4.1 软件开发环境

本系统软件设计采用Keil MDK5作为开发环境,该环境支持STM32系列微控制器的编程、编译、调试,集成了丰富的库函数与开发工具,能够大幅提高开发效率;编程语言采用C语言,具有可读性强、可移植性好、执行效率高的特点,适合嵌入式系统开发。同时,需要安装STM32F103系列芯片的固件库,用于调用GPIO、I2C、UART、ADC、TIM等外设的库函数,简化编程流程。

此外,Proteus软件用于系统仿真,将Keil MDK5中编译生成的.hex文件导入Proteus仿真电路,即可实现系统功能仿真,验证软件程序的正确性。

4.2 软件设计思想与整体流程

4.2.1 软件设计思想

系统软件采用模块化编程思想,将不同功能模块的代码分开编写,形成独立的子程序,如传感器数据采集子程序、舵机控制子程序、LED灯控制子程序、蜂鸣器报警子程序、OLED显示子程序、模拟WiFi数据传输子程序等。这种设计方式使得代码结构清晰、便于调试与维护,同时提高了代码的可复用性,后续可根据需求灵活增加或修改功能模块。

4.2.2 系统整体软件流程

系统上电后,首先进行初始化操作,包括STM32系统时钟初始化、GPIO初始化、I2C初始化、UART初始化、ADC初始化、TIM初始化、各传感器初始化、OLED初始化、模拟WiFi模块初始化等;初始化完成后,OLED屏幕显示开机界面与系统初始状态(如温湿度、空气质量默认值、无人状态、容量未满等);随后系统进入主循环,在主循环中,依次完成传感器数据采集、数据处理、逻辑判断、执行设备控制、OLED数据显示、模拟WiFi数据上传等操作;系统持续循环运行,确保各项功能实时实现。系统主程序流程图如图4-1所示(此处可插入流程图)。

4.3 各功能模块子程序设计

4.3.1 系统初始化子程序

系统初始化子程序是软件运行的基础,负责对系统各外设与模块进行初始化配置,确保各模块能够正常工作,具体初始化内容如下:

  1. 系统时钟初始化:配置STM32的系统时钟为72MHz,为各外设提供稳定的时钟信号;
  1. GPIO初始化:配置各传感器、舵机、LED灯、蜂鸣器对应的GPIO引脚为输入或输出模式,设置引脚电平初始状态(如LED灯初始熄灭、蜂鸣器初始停止、舵机初始复位);
  1. I2C初始化:配置I2C总线通信参数(如通信速率100kHz),用于OLED屏幕的数据交互;
  1. UART初始化:配置USART通信参数(波特率9600bps,数据位8位,停止位1位,无校验位),用于模拟WiFi模块(ESP8266)的数据交互;
  1. ADC初始化:配置ADC外设,用于采集光敏传感器、MQ-135传感器的模拟信号;
  1. TIM初始化:配置TIM定时器,输出50Hz的PWM信号,用于控制舵机转动;
  1. 传感器初始化:初始化DHT11、HC-SR04、HCSR501、光敏传感器、MQ-135传感器,确保传感器能够正常采集数据;
  1. OLED初始化:发送控制指令,设置OLED屏幕的显示模式、对比度、显示方向等参数,清空屏幕;
  1. 模拟WiFi模块初始化:通过AT指令配置ESP8266模块,使其模拟接入无线网络,准备接收与上传数据。

4.3.2 传感器数据采集子程序

传感器数据采集子程序负责实时采集各传感器的参数,进行数据滤波、校准处理,确保数据准确可靠,然后将处理后的数据存储到相应的变量中,供后续显示与控制使用。各传感器数据采集流程如下:

  1. HC-SR04超声波数据采集:STM32通过TRIG引脚发送10us以上的高电平触发信号,然后检测ECHO引脚的高电平持续时间,根据公式“距离=(高电平持续时间×声速)/2”计算出垃圾高度,进而计算垃圾桶容量(容量=(垃圾桶总高度-垃圾高度)/垃圾桶总高度×100%);
  1. HCSR501红外数据采集:STM32检测HCSR501模块OUT引脚的电平,若为高电平,判定为有人;若为低电平,判定为无人,同时设置延时判断,避免误触发;
  1. 光敏传感器数据采集:STM32通过ADC外设采集光敏电阻分压电路的模拟信号,将模拟信号转换为数字信号,根据校准参数计算出光照强度值(Lux);
  1. DHT11温湿度采集:STM32通过GPIO引脚模拟单总线时序,发送起始信号,等待传感器响应,然后读取40位数据,解析出环境温度与湿度值,进行滤波处理,去除异常数据;
  1. MQ-135空气质量采集:STM32通过ADC外设采集MQ-135模块的模拟信号,将模拟信号转换为数字信号,根据传感器校准参数,计算出空气质量等级(如优、良、中、差)。

数据采集采用定时采集方式,每隔1秒采集一次数据,确保数据的实时性与稳定性,采集完成后,将数据更新到对应的全局变量中。

4.3.3 执行设备控制子程序

执行设备控制子程序根据系统逻辑判断结果,控制舵机、LED灯、蜂鸣器的运行状态,实现自动翻盖、照明、报警功能,具体设计如下:

  1. 舵机控制子程序:根据HCSR501模块的检测结果,控制舵机转动角度。有人时,控制舵机转动90°,打开垃圾桶盖;无人且延时3秒后,控制舵机复位(0°),关闭垃圾桶盖。通过TIM定时器输出不同占空比的PWM信号,实现舵机转角的精准控制;
  1. LED灯控制子程序:根据光敏传感器采集的光照强度值,控制LED灯亮灭。当光照强度<500Lux时,控制GPIO引脚输出高电平,LED灯亮起;当光照强度≥500Lux时,控制GPIO引脚输出低电平,LED灯熄灭;
  1. 蜂鸣器报警子程序:根据HC-SR04模块计算的垃圾桶容量,控制蜂鸣器启停。当容量≥90%(满载)时,控制GPIO引脚输出高电平,蜂鸣器持续报警;当容量<90%时,控制GPIO引脚输出低电平,蜂鸣器停止报警。

4.3.4 OLED显示子程序

OLED显示子程序负责将传感器采集到的各项参数实时显示在OLED屏幕上,显示内容包括环境温度、环境湿度、空气质量等级、有人/无人状态、垃圾桶容量状态(未满/满载),显示流程如下:

  1. 清空OLED屏幕显示缓存,避免数据叠加;
  1. 在屏幕指定位置显示各项参数的名称(如“环境温度:”“环境湿度:”“空气质量:”“人体状态:”“垃圾桶容量:”);
  1. 读取传感器采集的实时数据,将数字数据转换为字符串格式,空气质量数据转换为等级(如“优”“良”);
  1. 在对应参数名称后显示具体数据及单位(如“25.5℃”“60%RH”“优”“无人”“70%(未满)”);
  1. 刷新屏幕显示,确保数据实时更新,刷新频率与数据采集频率一致(1次/秒)。

4.3.5 模拟WiFi数据传输子程序

该子程序负责实现STM32与模拟WiFi模块(ESP8266)的通信,将采集到的各项数据模拟上传,具体功能包括:ESP8266模块配置、数据封装、数据上传。

  1. ESP8266模块配置:STM32通过UART接口向ESP8266发送AT指令,配置模块的模拟无线网络参数,确保模块处于数据传输状态;
  1. 数据封装:STM32将采集到的温湿度、光照强度、空气质量、垃圾桶容量、人体状态等数据,按照预设格式进行封装,便于模拟上传与接收;
  1. 数据上传:STM32通过UART接口将封装后的数据发送给ESP8266模块,模块模拟将数据上传至无线网络,完成模拟WiFi数据传输功能,在Proteus仿真中,可通过串口调试窗口查看上传的数据。

4.4 关键代码片段

为清晰展示系统软件的核心实现逻辑,以下给出部分关键代码片段(简化版),涵盖传感器数据采集、舵机控制、OLED显示、模拟WiFi数据传输等核心功能,代码可直接在Keil MDK5中编译,适配Proteus仿真:

4.4.1 传感器数据采集代码

c
#include "dht11.h"
#include "adc.h"
#include "usart.h"
#include "gpio.h"

// 全局变量存储传感器数据
float env_temp, env_humi;    // 环境温湿度
float light_intensity;       // 光照强度(Lux)
float air_quality;           // 空气质量(模拟值)
float trash_can_capacity;    // 垃圾桶容量(%)
uint8_t human_state;         // 人体状态:0-无人,1-有人
uint16_t trash_height;       // 垃圾高度(cm)
#define TRASH_CAN_TOTAL_HEIGHT 50  // 垃圾桶总高度(cm)

// 传感器数据采集函数
void Sensor_Collect(void)
{
    // 1. DHT11温湿度采集
    DHT11_Read(&env_temp, &env_humi);
    
    // 2. 光敏传感器采集(ADC转换)
    uint16_t light_adc = ADC_Convert(ADC_Channel_3);
    light_intensity = (float)light_adc * 1000.0 / 4095;  // 转换为光照强度(Lux)
    
    // 3. MQ-135空气质量采集(ADC转换)
    uint16_t air_adc = ADC_Convert(ADC_Channel_5);
    air_quality = (float)air_adc / 4095 * 100;  // 转换为空气质量模拟值(0-100)
    
    // 4. HC-SR04超声波采集(垃圾高度)
    trash_height = HC_SR04_Read();
    // 计算垃圾桶容量
    trash_can_capacity = (TRASH_CAN_TOTAL_HEIGHT - trash_height) * 100.0 / TRASH_CAN_TOTAL_HEIGHT;
    if(trash_can_capacity < 0) trash_can_capacity = 0;
    if(trash_can_capacity > 100) trash_can_capacity = 100;
    
    // 5. HCSR501人体感应采集
    human_state = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_2);  // PA2为HCSR501输出引脚
}

// HC-SR04超声波读取函数(简化)
uint16_t HC_SR04_Read(void)
{
    uint16_t time;
    // 发送触发信号(PA0为TRIG引脚)
    GPIO_SetBits(GPIOA, GPIO_Pin_0);
    delay_us(15);  // 触发信号至少10us
    GPIO_ResetBits(GPIOA, GPIO_Pin_0);
    
    // 接收回声信号(PA1为ECHO引脚)
    while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1) == 0);
    TIM_Cmd(TIM2, ENABLE);  // 启动定时器计时
    while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1) == 1);
    TIM_Cmd(TIM2, DISABLE);  // 停止定时器
    time = TIM_GetCounter(TIM2);
    TIM_SetCounter(TIM2, 0);  // 定时器清零
    
    // 计算距离:声速340m/s,距离=(时间×340)/2 /1000(转换为cm)
    return (time * 340.0) / 2000;
}

4.4.2 舵机控制代码

c
#include "tim.h"
#include "gpio.h"

// 舵机控制函数:angle为转角(0-180°)
void Servo_Control(uint16_t angle)
{
    uint16_t pwm_val;
    // PWM频率50Hz,周期20ms,占空比2.5%-12.5%对应0-180°
    pwm_val = 200 + (angle * 1000) / 180;  // 200对应2.5%,1200对应12.5%
    TIM_SetCompare1(TIM3, pwm_val);  // PB0为TIM3_CH1,输出PWM信号
}

// 垃圾桶盖控制函数
void Trash_Cover_Control(void)
{
    static uint8_t last_human_state = 0;
    static uint16_t delay_cnt = 0;
    
    if(human_state == 1)  // 有人,打开垃圾桶盖
    {
        Servo_Control(90);  // 舵机转动90°
        last_human_state = 1;
        delay_cnt = 0;
    }
    else  // 无人,延时后关闭
    {
        if(last_human_state == 1)  // 之前有人,现在无人,开始延时
        {
            delay_cnt++;
            if(delay_cnt >= 3000)  // 延时3秒(1ms计数一次)
            {
                Servo_Control(0);  // 舵机复位,关闭垃圾桶盖
                last_human_state = 0;
                delay_cnt = 0;
            }
        }
    }
}

4.4.3 OLED显示代码

c
#include "oled.h"
#include "stdio.h"

// 空气质量等级转换函数
char* Air_Quality_Grade(float air_val)
{
    if(air_val <= 30) return "优";
    else if(air_val <= 60) return "良";
    else if(air_val <= 80) return "中";
    else return "差";
}

// OLED显示数据函数
void OLED_Display_Data(void)
{
    char buf[32];
    // 清空屏幕
    OLED_Clear();
    // 显示环境温湿度
    sprintf(buf, "Temp: %.1f℃", env_temp);
    OLED_ShowString(0, 0, buf, 16);
    sprintf(buf, "Humi: %.1f%%RH", env_humi);
    OLED_ShowString(0, 2, buf, 16);
    // 显示空气质量
    sprintf(buf, "Air: %s", Air_Quality_Grade(air_quality));
    OLED_ShowString(0, 4, buf, 16);
    // 显示人体状态
    sprintf(buf, "Human: %s", human_state ? "Yes" : "No");
    OLED_ShowString(0, 6, buf, 16);
    // 显示垃圾桶容量
    sprintf(buf, "Capacity: %.0f%%", trash_can_capacity);
    OLED_ShowString(0, 8, buf

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐