【单片机毕业设计3-基于stm32c8t6的智能家居系统】

【单片机毕业设计3-基于stm32c8t6的智能家居系统】


前言

🔥这里是小殷学长,单片机毕业设计篇3 基于stm32的智能家居控制系统
🧿创作不易,拒绝白嫖 可私

在这里插入图片描述


一、功能介绍

------------------------------------------智能家居系统-----------------------------------------
a. 通过DHT11温湿度传感器模块与显示屏结合将实时采集的环境温湿度的数据进行显示监控,当温度低于或高于我们所设阈值时则会触发蜂鸣器发出相应的警报;
b. 红外传感器模块,通过红外感应进行灯光的控制。
c. MQ2烟雾传感器进行可燃气体的检测;
d. 雨滴传感器检测是否有下雨,通过发出警报提醒居家者;
e. 火焰传感器实时检测当前环境是否有火灾,并发出警报警示居家者及时处理;
f. 震动传感器,类似声控灯,检测到震动后就会打开灯光;
g. 8组继电器实现电器的模拟控制(空凋、冰箱、电视、风扇、灯等);
h. 语音模块(SU-03T)通过智能公元AI平台进行相应命令配置从而与单片机进行串口通信控制;
i. 蓝牙模块(HC-05)通过手机端蓝牙APP实现控制;
j. WIFI (ESP826601s)模块,通过OneNet云端平台进行数据上传监测和指令下发控制。
功能可定制


在这里插入图片描述

🔥 实物展示

在这里插入图片描述

在这里插入图片描述

二、硬件部分

下面为该毕设中所用到的相关硬件说明,具体参数不做细节描述

硬件材料

在这里插入图片描述
在这里插入图片描述

PCB和原理图

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

三、软件部分

在这里插入图片描述

部分流程图

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

程序

main.c部分代码

 int main(void)
 {	
	unsigned char *dataPtr = NULL;
	unsigned short timeCount = 0;	//发送间隔变量
	delay_init();	    	   //延时函数初始化	  
	NVIC_Configuration();  //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
    Led_Init();            //LED初始化
	Init_MQ2();            //MQ2初始化
	Beep_Init();           //蜂鸣器初始化
	InitRelay();           //继电器初始化
	Fire_Init();           //火焰初始化
	Rain_Init();           //雨滴初始化
	Shake_Init();          //震动初始化
	Infrared_Init();       //红外初始化
	TIMER3_Init();         //定时器初始 1ms
	Init_Usart();          //串口初始化
	LCD_Init();	           //液晶屏初始化
	//温度初始化
	if(!DHT11_Init())
	{
		printf(" Error! T DHT11 HAS NO RESPOND...\n");
	}
	else
	{
	  printf("\r\n THE DHT11 HAS RESPOND");
	}
	Init_Inteface();	      //界面初始化

	ESP8266_Init();					//初始化ESP8266 
	//printf("8266_INIT_END\n");
	while(OneNet_DevLink())			//接入OneNET
	delay_ms(500);
	printf("接入onenet成功");
	delay_ms(500);
	Show_Str(180,280,RED,BLUE,(unsigned char *)"WIFI加载成功...",16,0);	
	LCD_Clear(WHITE);
	delay_ms(500);	
	onenet_flag = 1;          //WIFI接入成功后将其标志位置1 在定时器中进行相关OneNet数据上报处理
	while(1) 
	{		
		if(temp > set_temp || humi > set_humi)
		{
			Buzzer_Action(5);
		}
		Param_Interface();      //参数界面实时刷新
		Sensor_Task();          //传感器任务
		Usart_Task();           //串口任务
		if(++timeCount >= 150)		//时间间隔1s
		{
				 //传感器检测
				if(DHT11_Read_Data(&temp,&humi) == 1)
				{
					delay_ms(100);
					//printf("temp:%02d  humi:%02d \r\n",temp,humi);
				}
				OneNet_SendData();//发送数据给onenet
				
				//printf("send_data_end\n");
				timeCount = 0;
				
				ESP8266_Clear();
		}	
		dataPtr = ESP8266_GetIPD(0);//获取平台返回的数据
		if(dataPtr != NULL)//如果返回数据不为空
			OneNet_RevPro(dataPtr);//平台返回数据检测		
		delay_ms(10); 		
	}
}
 
//1 蓝牙 RX- PA9  TX-PA10
void USART1_IRQHandler(void)
{
	if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断
	{
		Usart_cmd = USART_ReceiveData(USART1);
		USART_ClearFlag(USART1, USART_FLAG_RXNE);
	}
}

//2 语音 RX-  PA2  TX-PA3
void USART2_IRQHandler(void)
{
    if(USART_GetITStatus(USART2,USART_IT_RXNE) != RESET)
    {
       Usart_cmd = USART_ReceiveData(USART2);				
	   USART_ClearFlag(USART2, USART_FLAG_RXNE);
    }
}


void TIM3_IRQHandler()
{
	static unsigned int t = 0,set_t = 0,set_t1 = 0,temp_t,onenet_t,t2 = 0,t3 = 0;  
	if(TIM_GetITStatus(TIM3, TIM_IT_Update))
	{
		t++;                //时间变量
		temp_t++;           //温度刷新变量
		if(t == 1000)  //1s
		{
			t = 0;
			sec++;
			if(sec == 60) //1hour
			{
				sec = 0;
				hour++;
				if(hour == 24)
				{
					hour = 0;
				}
			}
		  sprintf(strtime,"%4d-%02d-%02d %02d:%02d:%02d\r\n",year,month,day,hour,min,sec);  //更新时间
			//printf("%02d:%02d:%02d\r\n",hour,min,sec);  //调试打印信息 不用的时候屏蔽
		}
		//========================定时功能==============================
		if(light_flag == 1)  //开启灯光定时模式
			{
				corridor_light(1);
				set_t++;  
				if(set_t  == 1000)  //1s
				{
					set_t = 0;
					set_light_timer--;
					if(set_light_timer == 0)  //时间到
					{
					 corridor_light(0);
					 light_flag = 0;        //关闭定时标志
					 set_light_timer = 10;          //再次重装初值
					}
				}
			}
			if(fan_flag == 1)  //开启定时模式
			{
				//打开风扇
				Relay3_ON();
				set_t1++;  
				if(set_t1  == 1000)  //1s
				{
					set_t1 = 0;
					set_fan_timer--;
					if(set_fan_timer == 0)  //时间到
					{
					 //关闭风扇
					 Relay3_OFF();
					 fan_flag = 0;        //关闭定时标志
					 set_fan_timer = 10;          //再次重装初值
					}
				}
			}	
			
			//下面为温湿度数据更新 200ms
			if(temp_t == 200)
			{
				temp_t = 0;
				DHT11_Read_Data(&temp,&humi);	
			}
			//下面为OneNet云平台数据上报 2S更新一次
			/*
			if(onenet_flag == 1)
			{
				onenet_t++;
			}
			if(onenet_t == 2000)
			{
				OneNet_SendData();//发送数据给onenet
				onenet_t = 0;
			}
			*/
			//下面为红外检测后的功能处理 走廊灯亮5s后自动关闭
			if(people_flag == 1)
			{
					corridor_light(1);
					status[15] = 1;
				  t2++;
				  if(t2 == 5000)     //5s时间到 关闭走廊灯标志位清零  灯光状态置0 
					{
						t2 = 0;
						corridor_light(0);
					  status[15] = 0;
						people_flag = 0;
					}
			}
			
			//下面为震动传感器检测后的功能处理 卧室灯亮5s后熄灭
			if(shake_flag == 1)
			{
				Relay8_ON();
		    status[7] = 1;	
				t3++;
				if(t3 == 5000)   //5s时间到 关闭卧室灯标志位清零  灯光状态置0 
				{
					t3 = 0;
					Relay8_OFF();
		      status[7] = 0;	
					shake_flag = 0;
				}
			}
		TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
	}
}


总结

上面为基于stm32f103c8t6的智能家居控制系统相关的大致介绍,源码,pcb和原理图以及相关文档说明做了详细说明,有需可私

🧿创作不易,拒绝白嫖

很有幸获得2023届优秀本科毕业论文和毕业设计

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 17
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小殷学长

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

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

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

打赏作者

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

抵扣说明:

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

余额充值