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

news2024/11/23 19:47:47

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

  • 前言
  • 一、功能介绍
  • 二、硬件部分
  • 三、软件部分
  • 总结


前言

🔥这里是小殷学长,单片机毕业设计篇3 基于stm32的智能家居控制系统
🧿创作不易,拒绝白嫖(有需可点击最后链接)可私
企鹅号:2836235214

在这里插入图片描述


一、功能介绍

------------------------------------------智能家居系统-----------------------------------------
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届优秀本科毕业论文和毕业设计

在这里插入图片描述

实物+资料

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/872140.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[C++] 一篇带你了解C++中动态内存管理,new让大家都有对象

目录 1、C/C内存分布 2.、C语言中动态内存管理方式:malloc、calloc、realloc 3、C内存管理方式 3.1 new/delete操作内置类型 3.2 new和delete操作自定义类型 3.3 malloc与new的异常处理机制 4、operator new与operator delete函数 4.1 operator new与operat…

寻找适合你的在线客服系统?这里有8款推荐(2023年8月更新)

近年来,随着网站交互性的提升,越来越多的企业开始关注并采用在线客服系统,以便更好地与访客互动和沟通。尤其对于外贸网站等需要频繁沟通的行业来说,选择一个合适的在线客服系统显得尤为重要。在这篇文章中,我们将为您…

小白带你学习linux的Redis3.2集群(三十三)

目录 一、Redis主从复制 1、概念 2、作用 3、缺点 4、流程 5、搭建 6、验证 二、Reids哨兵模式 1、概念 2、作用 3、缺点 4、结构 5、搭建 6、验证 三、Redis集群 1、概述 2、原理 3、架构细节 4、选举过程 四、搭建 1、第一步现在外部使用finalshell 9.9…

【Java】ThreadLocal详细解析

ThreadLocal全面解析 前置知识 具有一定的javase和javaweb基础熟悉synchronized关键字熟悉HashMap熟悉 JDBC技术 学习目标 了解ThreadLocal的介绍掌握ThreadLocal的运用场景了解ThreadLocal的内部结构了解ThreadLocal的核心方法源码了解ThreadLocalMap的源码 1. ThreadLoc…

css 实现 html 元素内文字水平垂直居中的N种方法

上一篇博文写了div 中元素居中的N种常用方法,那么单个html元素:div(块级元素代表),span(行内元素代表)中的文字如何水平垂直都居中呢?实现方法如下: 本文例子使用的 html…

机器学习实战5-KMeans聚类算法

文章目录 概述KMeansKMeans参数&接口n_clusters质心inertia模型评估指标轮廓系数Calinski-Harabaz Index 重要参数init & random_state & n_init:初始质心怎么放好?重要参数max_iter & tol:让迭代停下来重要属性与重要接口 概述 聚类 …

微信公众号开发基础

开发文档 https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Get_access_token.html 一、接入微信公众平台开发 开发者需要按照如下步骤完成: 1.1 填写服务器配置 1.2 验证服务器地址的有效性 开发者提交信息后,微信服务器将发…

【编织时空一:探究顺序表与链表的数据之旅】

本章重点 线性表 顺序表 顺序表OJ题 1.线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结…

Linux命令 -- vim

Linux命令 -- vim 前言一般模式光标移动复制粘贴内容查找 底线命令行模式 前言 用vim指令进入文件。 刚进入时是命令行模式,也叫一般模式。 按i或者insert进入编辑模式,此时可以编辑文件内容。 按esc可从编辑模式退回到一般模式,输入冒号进…

[C++ 网络协议编程] TCP/IP协议

目录 1. TCP/IP协议栈 2. TCP原理 2.1 TCP套接字中的I/O缓冲 2.2 TCP工作原理 2.2.1 三次握手(连接) 2.2.2 与对方主机的数据交换 2.2.3 四次握手(断开与套接字的连接) TCP(Transmission Control Protocol传输控…

【Apollo】阿波罗自动驾驶:塑造自动驾驶技术的未来

前言 Apollo (阿波罗)是一个开放的、完整的、安全的平台,将帮助汽车行业及自动驾驶领域的合作伙伴结合车辆和硬件系统,快速搭建一套属于自己的自动驾驶系统。 开放能力、共享资源、加速创新、持续共赢是 Apollo 开放平台的口号。百度把自己所拥有的强大、…

前后端分离------后端创建笔记(03)前后端对接(上)

本文章转载于【SpringBootVue】全网最简单但实用的前后端分离项目实战笔记 - 前端_大菜007的博客-CSDN博客 仅用于学习和讨论,如有侵权请联系 源码:https://gitee.com/green_vegetables/x-admin-project.git 素材:https://pan.baidu.com/s/…

Reinforcement Learning with Code【Code 6. Advantage Actor-Critic(A2C)】

Reinforcement Learning with Code【Code 6. Advantage Actor-Critic(A2C)】 This note records how the author begin to learn RL. Both theoretical understanding and code practice are presented. Many material are referenced such as ZhaoShiy…

你不得不懂的IT知识-《敏捷项目管理》

国林哥在IBM时,几乎每天都会收到关于“敏捷”相关的邮件,公司鼓励我们去学习邮件里的知识,参加敏捷相关的认证和培训。刚开始我和大多数同事一样不管不顾,后来随着PBC里要求加上成长目标,比如要获得一个认证&#xff0…

为什么要试用CRM系统?有什么优点?

对于那些正在进行CRM选型的企业来说,想要了解一款CRM系统是否好用,亲自试用无疑是最好的方法。那么,有没有可以免费试用的在线CRM系统 CRM系统免费试用的好处 体验产品功能:您可以亲自操作和测试CRM系统的各项功能,如…

从一个GPU到多个GPU

在多GPU运行应用程序时,需要正确设计GPU之间的通信,GPU间数据传输的效率取决于GPU是如何连接在一个节点上并跨集群的 在多GPU系统里有两种连接方式 多GPU通过单个节点连接到PCIe总线上 多GPU连接到集群中的网络交换机上 /* * 本示例演示了如何使用 Open…

【Vue-Router】路由模式

1. WebHashHistory index.ts import { createRouter, createWebHistory, RouteRecordRaw, createWebHashHistory } from "vue-router";// 路由模式 //vue2 mode history -> vue3 createWebHistory //vue2 mode hash -> vue3 createWebHashHistory //vue2 m…

电池的正极是带正电?

首先说明结论:电池正极带正电,负极带负电。 一个错误的实例: 如果说电流是从电池正极流动到电池负极,那么电子就是从负极流动到正极,那么正极就是带负电。----这个说法是错误的。这是因为,根据那么很出名…

verilog学习笔记5——进制和码制、原码/反码/补码

文章目录 前言一、进制转换1、十进制转二进制2、二进制转十进制3、二进制乘除法 二、原码、反码、补码1、由补码计算十进制数2、计算某个负数的补码 前言 2023.8.13 天气晴 一、进制转换 1、十进制转二进制 整数:除以2,余数倒着写 小数:乘…

难解的bug

android.app.RemoteServiceException: Context.startForegroundService() did not then call Service.startForeground(): ServiceRecord 【Android TimeCat】 解决 context.startforegroundservice() did not then call service.startforeground() | XiChens Blog http://www…