在这里插入代码片
基于stm32单片机的智能按摩坐垫控制系统的设计,与大家分享一下:

一、基本介绍

项目名:基于stm32单片机的智能按摩坐垫控制系统的设计
项目编号:mcuclub-dz-811
单片机类型:STM32F103C8T6
1、通过薄膜式压力传感器检测是否有人在坐垫上,如果有人坐在坐垫上,此时开始计时,当计时时间超过设定的最长时间,则语音提醒“请劳逸结合,注意起身运动”
2、通过DHT11检测温湿度,当温度不在设定的范围内,则控制加热和散热,当湿度大于设置最大值(出现汗液),进行风干
3、通过按键设置各阈值,坐下时长,手动控制加热、散热、风干、按摩开关
4、通过OLED显示测量数据

二、32实物图

单片机型号:STM32F103C8T6

板子为绿色PCB板,两层板,厚度1.2,上下覆铜接地。元器件基本上为插针式,个别降压芯片会使用贴片式。

供电接口:TYPE-C
请添加图片描述

三、原理图

软件版本:AD2013

电路连线方式:网络标号连线方式

注意:原理图只是画出了模块的引脚图,而并不是模块的内部结构原理图
请添加图片描述

四、PCB图

由原理图导出,封装很大一部分都是作者自己绘制,不提供封装库,只提供连接好的源文件。中间有一个项目编号,隐藏在单片机底座下,插入单片机后不会看到。

两层板,上下覆铜接地。
请添加图片描述

五、系统框图

请添加图片描述

六、软件设计流程

请添加图片描述

七、部分程序展示

软件版本:keil5

逻辑程序和驱动程序分开,分布于main.c和其他.c文件

/**********************************
函数名:处理函数
传参值:无
返回值:无
**********************************/
void Manage_Function(void)
{
	if(display_num == 0)									//测量界面
	{
		if(PRESSURE == 1)										//当有人坐下时,开始计时
		{
			flag_begin_1s = 1;
		}
		else																//否则,计时复位
		{
			time_sit = 0;
			flag_begin_1s = 0;
		}
		
		if(time_sit >= time_hour*3600 + time_minute*60 + time_second)						//坐下时长超过设定时长,进行语音播报
		{
			if(flag_mind == 0) 
			{
				Huart3_Send_Str("请劳逸结合,注意起身运动");
				flag_mind = 1;
			}
		}
		else																//否则,取消语音播报
		{
			flag_mind = 0;
		}
		
		if(PRESSURE == 1)										//有人坐下时
		{
			if(temp_value > temp_max*10)			//温度大于设置最大值时,进行散热
			{
				RELAY_SR = 1;
				RELAY_JR = 0;
				
				flag_relay_temp = 0;
			}
			else if(temp_value < temp_min*10)																			//温度小于设置最小值时,进行加热
			{
				RELAY_JR = 1;
				RELAY_SR = 0;
				
				flag_relay_temp = 0;
			}
			else															//否则,散热加热继电器断开
			{
				if(flag_relay_temp == 0)
				{
					RELAY_JR = 0;
					RELAY_SR = 0;
				}
			}
			
			if(humi_value > humi_max*10)			//如果湿度大于设置最大值时,进行风干
			{
				RELAY_FG = 1;
				flag_relay_humi = 0;
			}
			else															//否则,风干继电器断开
			{
				if(flag_relay_humi == 0)
				{
					RELAY_FG = 0;
				}
			}
		}
		else																//无人坐下时,关闭散热加热风干继电器
		{
			if(flag_relay_temp == 0)
			{
				RELAY_JR = 0;
				RELAY_SR = 0;
			}
			
			if(flag_relay_humi == 0)
			{
				RELAY_FG = 0;
			}
		}
	}
	else																	//设置界面,关闭继电器及清除标志位
	{
		RELAY_JR = 0;
		RELAY_SR = 0;
		RELAY_FG = 0;
		RELAY_AM = 0;
		time_sit = 0;
		flag_begin_1s = 0;
	}
}

更多推荐