基于STM32单片机的智能鞋柜清洁系统设计
- 0、毕业设计选题原则说明(重点)
- 1、项目简介
- 1.1 系统功能
- 1.2 演示视频
- 2、部分电路设计
- 2.1 STM32单片机核心板电路设计
- 2.2 舵机控制电路
- 2.3 HC05 蓝牙无线通信电路设计
- 2.4、DHT11温湿度检测电路设计
- 2.5、GP2Y1010AU粉尘PM2.5检测电路设计
- 3、单片机代码展示
- 3.1 系统初始化
- 3.2 读取PM2.5粉尘浓度数据
- 3.3 DHT11读取温湿度数据
0、毕业设计选题原则说明(重点)
- 选题之前,同学们要弄明白一件事情,做毕业设计是干什么用的!
- 这里我告诉大家,毕业设计对于你来说,不是让你去搞研究,掌握运用所学知识的,也不是让你去比谁做的毕业设计多么牛逼,多么厉害。
- 说白点,它的作用就是一个,让你顺利毕业,能够拿到学位证,毕业证而已!!!
- 当你明白这一点后,作毕业设计的要求就是在满足老师的要求后,越简单越好,这样不但容易去做,而且你自己也容易去理解,掌握,同样也能花最少的钱!!!
- 满足老师的要求,这个没办法,毕竟他是决定你是否能通过答辩的人。
- 每年都有很多同学找到我的时候,后悔当初为什么要把功能写的那么复杂,后悔没有提前找我咨询一下!所以在这里提醒同学们,提交开题报告之前一定要多想想,咨询下以往的学长学姐,不要自己随便写一堆提交上去!!!
1、项目简介
- 系统构成:STM32单片机最小系统+蓝牙通信电路+舵机控制电路+DHT11温湿度采集电路+人体检测电路+OLED液晶显示电路+PM2.5粉尘检测电路+继电器控制电路
1.1 系统功能
- 功能介绍:
- (1)实时监控鞋柜内的温度与湿度
- (2)实时监控鞋柜内粉尘 PM2.5浓度
- (3)通过蓝牙发送给手机端查看
- (4)PM粉尘值异常状态报警;
- (5)红外人体感应,感应到有人,自动开柜。
- (6)oled液晶显示数据
- (7)继电器模拟输出控制要求:
- ①高于设定阈值温度30,湿度50,粉尘50,开启通风
- ②低于设定阈值温度28,湿度45,开启加热模式
- ③高于设定阈值粉尘50,开启报警
1.2 演示视频
2、部分电路设计
2.1 STM32单片机核心板电路设计
- 基于 ARM Cortex-M3内核的STM32F1系列单片机属于主流STM32单片机,其中增强型STM32F103子系列单片机的CPU 主频高达72MHz,片内Flash容量高达1MB,芯片引脚数量多达144个,有 QFN、LQFP、CSP、BGA 等多种芯片封装形式,并具有多种片内外设、USB接口和CAN 接口。根据STM32F103单片机片内Flash容量的不同,ST 公司将其分为小容量(16-32KB)、中等容量(64-128KB)、大容量(256KB-1MB)3种。
- 电源电路:为单片机提供稳定的工作电压,通常采用3.3V电源供电。电源电路的设计要保证单片机在不同工作条件下都能获得稳定的电压输出,以确保单片机的正常工作。
- 晶振电路:提供单片机工作所需的时钟信号。晶振电路通过晶振和电容组成,为单片机提供稳定的工作脉冲,确保单片机的定时和同步需求。
- 复位电路:实现单片机的复位功能,类似于电脑的重启。复位电路通过电容和电阻的配合,实现单片机在上电启动时的自动复位,以及通过手动按键实现复位功能,保证单片机在程序跑飞或异常情况下能够重新开始执行程序。
STM32单片机是一种功能强大、易于使用、灵活且可靠的32位微控制器,基于ARM Cortex™-M内核。其主要功能特点包括:
- 高性能和低功耗:STM32系列单片机提供多种内核选择,如Cortex-M0、Cortex-M3、Cortex-M4等,满足不同应用场景对性能的需求,同时保持低功耗特性。
- 多种通信和外设接口:STM32单片机具备广泛的通信和外设接口,如I2C、SPI、USART、USB等,便于开发者实现各种复杂功能。
- 易于开发和调试:STM32单片机提供了丰富的软件和硬件工具,如HAL库、CubeMX等,帮助开发者快速创建和调试嵌入式系统。
- 高集成度和设计灵活性:STM32系列单片机全系列产品共用大部分引脚、软件和外设,优异的兼容性为开发人员带来最大的设计灵活性
单片机最小系统原理图如下图所示:
- 实物图:
2.2 舵机控制电路
- SG90舵机的工作原理比较简单。舵机内部有一个基准电压,单片机产生的PWM信号通过信号线进入舵机,与舵机内部的基准电压作比较,获得电压差输出。电压差的正负输出到电机驱动芯片上,从而决定正反转。开始旋转的时候,舵机内部通过级联减速齿轮带动电位器旋转,使得电压差为零,电机停止转动。
- sg90有三个引脚,分别是红线(VCC),棕线(GND)和橙线(信号线)。通常使用5V供电,信号线接单片机引脚,用老来接收单片机发送的PWM。
- 控制sg90舵机旋转也比较简单,只需要给它输出PWM波,修改占空比就可以调整角度。sg90的控制一般需要一个20ms 左右的时基脉冲,脉冲的高电平部分一般在0.5ms~2.5ms。高电平持续时间与旋转角度的对应关系如下
- 其具体电路原理图如下图所示:
- 实物图:
2.3 HC05 蓝牙无线通信电路设计
- HC-05蓝牙模块是一种常用的蓝牙通信模块,广泛应用于物联网、智能家居、无线传感器网络等领域。它可以实现蓝牙设备之间的无线通信,包括数据传输和控制命令的交互。
HC-05蓝牙模块的主要特点和优势包括:
- 低功耗:HC-05蓝牙模块采用低功耗设计,能够在长时间的使用中保持较低的能耗。
- 简单易用:HC-05蓝牙模块具有简单的接口和配置方式,方便开发者快速集成到各种应用中。
- 高稳定性:HC-05蓝牙模块采用成熟的蓝牙通信协议,具有较高的稳定性和可靠性。
- 远距离传输:HC-05蓝牙模块支持较远距离的数据传输,通信距离可达10米以上。
- 多设备连接:HC-05蓝牙模块支持多设备同时连接,可以实现多对一或一对多的通信方式。
HC-05蓝牙模块在Android开发中的应用场景主要包括:
- 远程控制:通过HC-05蓝牙模块,可以实现手机与其他设备(如智能家居设备、机器人等)之间的远程控制,例如远程开关灯、控制机器人运动等。
- 数据传输:HC-05蓝牙模块可以用于手机与其他设备之间的数据传输,例如传输文件、传输传感器数据等。
- 无线音频传输:通过HC-05蓝牙模块,可以实现手机与蓝牙耳机、蓝牙音箱等设备之间的无线音频传输。
其具体电路原理图如下图所示:
实物图如下:
2.4、DHT11温湿度检测电路设计
- DHT11 是一款湿温度一体化的数字传感器。
- 该传感器包括一个电阻式测湿元件和一个 NTC测温元件,并与一个高性能 8 位单片机相连接。通过单片机等微处理器简单的电路连接就能够实时的采集本地湿度和温度。DHT11 与单片机之间能采用简单的单总线进行通信,仅仅需要一个 I/O 口。
- 传感器内部湿度和温度数据 40Bit 的数据一次性传给单片机,数据采用校验和方式进行校验,有效的保证数据传输的准确性。DHT11 功耗很低,5V 电源电压下,工作平均最大电流 0.5mA。
其具体电路原理图如下图所示:
实物图:
2.5、GP2Y1010AU粉尘PM2.5检测电路设计
- 夏普光学灰尘传感器(GP2Y1010AU0F)在检测非常细的颗粒,如香烟烟雾,是特别有效的,并且是常用的空气净化器系统。
- 该装置中,一个红外发光二极管和光电晶体管,对角布置成允许其检测到在空气中的灰尘反射光
- 该传感器具有极低的电流消耗(最大20mA,11毫安典型的),可以搭载高达7VDC的传感器。输出的是一个模拟电压正比于所测得的粉尘浓度,敏感性为0.5V/0.1mg/m3。
检测原理:
- 其原理如下图,传感器中心有个洞可以让空气自由流过,定向发射LED光,通过检测经过空气中灰尘折射过后的光线来判断灰尘的含量。
其具体电路原理图如下图所示:
- 实物图:
3、单片机代码展示
3.1 系统初始化
void DeviceInit(void) {
memset(&MyEnvironment, 0, sizeof(Environment));
Usart1_Init(9600);
DIInit(); //人体传感器初始化
RelayInit(); //继电器初始化
Adc_Init(); //PM25初始化
OLED_Init(); //OLED初始化
OLED_ColorTurn(0);//0正常显示,1 反色显示
OLED_DisplayTurn(0);//0正常显示 1 屏幕翻转显示
DHT11_Init(); //温湿度模块初始化
TIM3_PWM_Init(1999,719); //72000000/(719+1)/(1999+1)=50Hz 1/50*1000=20ms
//设置阈值
MyEnvironment.temp_h_threshold = 30; //温度高阈值
MyEnvironment.humi_h_threshold = 50; //湿度高阈值
MyEnvironment.temp_l_threshold = 28; //温度低阈值
MyEnvironment.humi_l_threshold = 45; //湿度低阈值
MyEnvironment.pm25_threshold = 50; //PM2.5阈值
//上电检测设备
RELAY_1_ON //打开继电器1
RELAY_2_ON //打开继电器2
delay_ms(2000); //等待2s
RELAY_1_OFF //关闭继电器1
RELAY_2_OFF //关闭继电器2
}
3.2 读取PM2.5粉尘浓度数据
float GetGP2Y(void)
{
u32 AD_PM;
double pm;
GP2Y_Low;//LED=0;
delay_us(280);
AD_PM = Get_Adc(ADC_Channel_0); //PA0
delay_us(40);
GP2Y_High;//LED=1;
delay_us(9680);
pm = 0.17*AD_PM-0.1; //转换公式
return pm;
}
u16 Get_GP2Y_Average(u8 times)
{
u32 pm_val=0;
u8 t;
for(t=0;t<times;t++)
{
pm_val+=GetGP2Y();
delay_ms(10);
}
return pm_val/times;
}
3.3 DHT11读取温湿度数据
//从DHT11读取一次数据
//temp:温度值(范围:0~50°)
//humi:湿度值(范围:20%~90%)
//返回值:0,正常;1,读取失败
u8 DHT11_Read_Data(float *hu,float *te)
{
u8 buf[5];
u8 i;
DHT11_Rst();
if(DHT11_Check()==0)
{
for(i=0;i<5;i++)//读取40位数据
{
buf[i]=DHT11_Read_Byte();
}
if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
{
*hu=(buf[0]*10+buf[1])/10.0;
*te=(buf[2]*10+buf[2])/10.0;
}
}else return 1;
return 0;
}