【单片机毕业设计】【mcuclub-dz-028】基于STM32智能粮食存储设备的设计与实现

 最近设计了一个项目基于STM32智能粮食存储设备的设计与实现,与大家分享一下:

一、基本介绍

项目名:基于单片机的粮仓环境检测的设计
单片机:STM32F103C8T6
项目编号:mcuclub-dz-028
功能简介:
1、通过火焰检测模块检测是否发生火灾,如果发生,则声光报警,并自动开启水泵进行灭火,同时通过WIFI模块将警报数据发送到手机端
2、通过MQ-135检测有害气体,如果有害气体超过设置最大值,则声光报警,并自动开启风扇进行通风
3、通过MQ-2检测烟雾,如果烟雾超过设置最大值,则声光报警,并自动开启风扇进行通风
4、通过DHT11检测环境温湿度,如果温度大于设置最大值,则声光报警,并自动开启制冷片降温;如果湿度大于设置最大值,则声光报警,则自动开启风扇除湿
5、通过红外热释电感应模块检测是否存在有害动物,如果有,则声光报警,同时通过WIFI模块将警报数据发送到手机端
6、通过按键可设置各阈值
7、通过OLED显示数据
8、通过WIFI模块,手机端可远程查看各数据,手机端可远程设置各阈值

二、32实物图

单片机型号:STM32F103C8T6

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

供电接口:TYPE-C

三、原理图

软件版本:AD2013

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

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

 四、PCB图

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

两层板,上下覆铜接地。

 五、系统框图

此次设计基于STM32智能粮食存储设备的设计与实现,其系统总体设计如图2-1所示,通过火焰检测模块检测是否发生火灾,如果发生,则声光报警,并自动开启水泵进行灭火,同时通过WIFI模块将警报数据发送到手机端;通过MQ-135检测有害气体,如果有害气体超过设置最大值,则声光报警,并自动开启风扇进行通风;通过MQ-2检测烟雾,如果烟雾超过设置最大值,则声光报警,并自动开启风扇进行通风;通过DHT11检测环境温湿度,如果温度大于设置最大值,则声光报警,并自动开启制冷片降温;如果湿度大于设置最大值,则声光报警,则自动开启风扇除湿;通过红外热释电感应模块检测是否存在有害动物,如果有,则声光报警,同时通过WIFI模块将警报数据发送到手机端;通过按键可设置各阈值;通过OLED显示数据;通过WIFI模块,手机端可远程查看各数据,手机端可远程设置各阈值。

六、软件设计流程

系统的主流程图如图4-2所示。在主程序中:首先对各个模块进行初始化,随后进入while主循环,在主循环中,首先进入第一个函数按键函数,该函数主要分为两部分,第一部分为调用按键扫描函数获取按键键值,第二部分通过键值进行相应的处理操作,包括切换界面、设置阈值等;紧接着进入第二个函数监测函数,该函数主要通过调用相应的驱动函数获取测量值,并通过WIFI模块将监测的数据传输到手机端,用户也可以通过手机端发送指令,设备根据用户发送的指令执行对应的处理;紧接着进入第三个函数显示函数,该函数显示监测值及阈值;最后进入第四个函数处理函数,如果火焰检测到,标记火灾警报,如果有害气超过最大值,标记有害气警报,如果烟雾超过最大值,标记烟雾警报,如果温度超过最大值,标记温度警报,如果湿度超过最大值,标记湿度警报,如果有害动物检测到,标记有害动物警报,如果有警报,开启声光报警,如果火焰警报,开水泵,如果有害气体警报或烟雾警报或湿度警报,开风扇,如果温度警报,开制冷,设置界面,关闭声光报警、继电器,有状态改变,发送状态值

 七、部分程序展示

软件版本:keil5

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

*******处理函数
*****/
void Manage_function(void)
{
	if(flag_display == 0)																//测量界面
	{
		if(flag_fire == 1)																//如果火焰检测到,标记火灾警报
			alarm_fire = 1;
		else
			alarm_fire = 0;
		if(gas_value > gas_max)														//如果有害气超过最大值,标记有害气警报
			alarm_gas = 1;
		else
			alarm_gas = 0;
		if(smog_value > smog_max)													//如果烟雾超过最大值,标记烟雾警报
			alarm_smog = 1;
		else
			alarm_smog = 0;
		if(temp_value > temp_max*10)											//如果温度超过最大值,标记温度警报
			alarm_temp = 1;
		else
			alarm_temp = 0;
		if(humi_value > humi_max*10)											//如果湿度超过最大值,标记湿度警报
			alarm_humi = 1;
		else
			alarm_humi = 0;
		if(flag_animal == 1)															//如果有害动物检测到,标记有害动物警报
			alarm_animal = 1;
		else
			alarm_animal = 0;
																											//如果有警报,开启声光报警
		if(alarm_fire == 1 || alarm_gas == 1 || alarm_smog == 1 || alarm_temp == 1 || alarm_humi == 1 || alarm_animal == 1)
		{
			if(time_num % 3 == 0)
			{
				LED = ~LED;
				BEEP = ~BEEP;
			}
			if(alarm_fire == 1)															//如果火焰警报,开水泵
				RELAY_2 = 1;
			else
				RELAY_2 = 0;
			if(alarm_gas == 1 || alarm_smog == 1 || alarm_humi == 1)	//如果有害气体警报或烟雾警报或湿度警报,开风扇
				RELAY_1 = 1;
			else
				RELAY_1 = 0;
			if(alarm_temp == 1)															//如果温度警报,开制冷
				RELAY_3 = 1;
			else
				RELAY_3 = 0;
		}
		else
		{
			LED = 1;
			BEEP = 0;
			RELAY_1 = 0;
			RELAY_2 = 0;
			RELAY_3 = 0;
		}
	}
	else																								//设置界面,关闭声光报警、继电器
	{
		LED = 1;
		BEEP = 0;
		RELAY_1 = 0;
		RELAY_2 = 0;
		RELAY_3 = 0;
	}
																											//有状态改变,发送状态值	
	if(fire_old != flag_fire || gas_old != gas_value || gas_max_old != gas_max || smog_old != smog_value || smog_max_old != smog_max || 
		 temp_old != temp_value || temp_max_old != temp_max || humi_old != humi_value || humi_max_old != humi_max || animal_old != flag_animal ||
		 state_RELAY_1 != RELAY_1 || state_RELAY_2 != RELAY_2 || state_RELAY_3 != RELAY_3)
	{
		flag_timer_begin_5s = 0;
		Aliyun_Send_Data();
		fire_old = flag_fire;
		gas_old = gas_value;
		gas_max_old = gas_max;
		smog_old = smog_value;
		smog_max_old = smog_max;
		temp_old = temp_value;
		temp_max_old = temp_max;
		humi_old = humi_value;
		humi_max_old = humi_max;
		animal_old = flag_animal;
		state_RELAY_1 = RELAY_1;
		state_RELAY_2 = RELAY_2;
		state_RELAY_3 = RELAY_3;
	}
	else																		//没有数据改变,每5s发送一次数据,防止设备掉线																						
	{
		flag_timer_begin_5s = 1;
		if(flag_5s == 1)
		{
			flag_timer_begin_5s = 0;
			Aliyun_Send_Data();
			fire_old = flag_fire;
			gas_old = gas_value;
			gas_max_old = gas_max;
			smog_old = smog_value;
			smog_max_old = smog_max;
			temp_old = temp_value;
			temp_max_old = temp_max;
			humi_old = humi_value;
			humi_max_old = humi_max;
			animal_old = flag_animal;
			state_RELAY_1 = RELAY_1;
			state_RELAY_2 = RELAY_2;
			state_RELAY_3 = RELAY_3;
			flag_timer_begin_5s = 1;
		}
	}
}

  • 0
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

单片机俱乐部--官方

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值