基于stm32单片机的智能家居环境监控系统

news2024/11/13 8:55:59

​一.硬件方案

智能家居环境监控系统的整体电路主要由stm32单片机最小系统,光MQ-2烟雾传感器电路,红外人体检测电路,DS18B20温度传感器,LCD1602显示电路,水泵驱动电路,风扇驱动电路,LED指示灯,蜂鸣器报警电路;原理图如图:
在这里插入图片描述

PCB如下:
在这里插入图片描述

二.设计功能

1.通过MQ-2烟雾传感器及检测电路对周围环境中的烟雾浓度值数据进行采集,由模数转换电路将mq-2检测电路输出的模拟量转换成数字量,根据电压值换算出当前烟雾浓度,通过DS18B20温度传感器检查当前环境温度,采用单总线的通信发送,最后将数据传送给微控制器,并由微控制器对数据进行处理分析。
2.单片机将烟雾传感器的检测数据显示在LCD1602液晶显示屏上,使烟雾温度浓度检测结果一目了然,方便人们随时随地的了解周围的烟雾浓度状况。
3.当系统检测到烟雾浓度超过报警值时,水泵开启,蜂鸣器报警,并发送短信。
4.如果温度浓度过高,便由微控制器通过报警电路进行必要的提醒,此时蜂鸣器响起,风扇开启,并发送短信。
5.人体红外通过热释电模块检查是否有人,如果开启防盗模式,检查到有人通过gsm来发送短信,并蜂鸣器报警。
6.设有的5个按键可对各个传感器参数的报警值进行调整;分别为设置键、加一键、减一键、一键报警键、报警开关键。

三.软件设计

主程序源码

int main(void)
{	
  u16 test_adc,count=0;
	u8 shanshuo=0;
	u8 RT_BJ = 0;
	u8 send_flag1=0;
	u8 send_flag2=0;
	u8 send_flag3=0; 
	
	delay_init();	    	 //延时函数初始化	  
	NVIC_Configuration(); 	 //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
	KEY_IO_Init();                                                                                
	DS18B20_Init();
	delay_ms(300);
  BEEP_DISENABLE(); 
	RTHW_Init();  
	LCD_Init();          // 1602初始化 
	LCD_Write_String(0,0,"   GSM Init...  ");
	Usart1_Init(9600);
	gsm_init();//gsm初始化
	Adc_Init();
	delay_ms(100);
	LCD_Write_String(0,0, "T:   C SMOKE:  %");//进入主页面,第一行显示的内容
  LCD_Write_String(0,1, "FD:OFF          ");//进入主页面,第二行显示的内容
	LCD_Write_Char(4,0,0xDF);//温度的小圆圈
  memset(STM32_RX1_BUF, 0, STM32_RX1BUFF_SIZE);//清除缓存
	STM32_Rx1Counter = 0;
  while(1)
	{
		  SMS_Receive();
		  KEY_SCAN();//按键扫描
      if(count++ >= 300 && setn==0)//大概延时300毫秒,执行以下代码
			{
				  count = 0;
				
				  shanshuo =!shanshuo;
				
					test_adc = Get_Adc_Average(ADC_Channel_9,20);//读取通道9的20次AD平均值
					PPM = test_adc*99/4096;//转换成0-99百分比
					PPM = PPM >= 99? 99: PPM;//最大只能到百分之99
					Temperature = DS18B20_Get_Temp()/10;//读取温度
				
				  短信内容装载
				  TEXT1[23]=TEXT2[35]=Temperature/10+0x30;
					TEXT1[27]=TEXT2[39]=Temperature%10+0x30;
					TEXT1[51]=TEXT3[35]=PPM/10+0x30;
					TEXT1[55]=TEXT3[39]=PPM%10+0x30;
				
				  if(Temperature>=Temperature_MAX && shanshuo)//温度超标,闪烁显示
					{
							LCD_Write_Char(2,0,' ');
						  LCD_Write_Char(3,0,' ');
						  LCD_Write_Char(4,0,' ');
						  LCD_Write_Char(5,0,' ');
					}
					else
					{
							LCD_Write_Char(2,0,'0'+Temperature/10);
						  LCD_Write_Char(3,0,'0'+Temperature%10);
						  LCD_Write_Char(4,0,0xDF);
						  LCD_Write_Char(5,0,'C');
					}
					
					if(PPM>=PPM_MAX && shanshuo)//烟雾超标,闪烁显示
					{
							LCD_Write_Char(13,0,' ');
						  LCD_Write_Char(14,0,' ');
						  LCD_Write_Char(15,0,' ');
					}
					else
					{
							LCD_Write_Char(13,0,'0'+PPM/10);
						  LCD_Write_Char(14,0,'0'+PPM%10);
						  LCD_Write_Char(15,0,'%');
					}
					if(sendFlag == 1)//判断它是否等于1
					{
							sendFlag = 0;
							sim800_send(TEXT1);//发送短信
					}
					if(Temperature>=Temperature_MAX)//温度超标
						{
							BEEP=1;RELAY2=1;//开启风扇
							if(send_flag1 == 0)//为了报警只发送一条短信
							{
									send_flag1 = 1;
								  sim800_send(TEXT2);//温度超标,发送短信
							}
						}else
					  {	
							send_flag1 = 0;RELAY2=0;
						}
						
					  if(PPM>=PPM_MAX)//烟雾超标
						{
							BEEP=1;RELAY1=1;//开启水泵
							if(send_flag2 == 0)
							{
									send_flag2 = 1;
								  sim800_send(TEXT3);//烟雾超标,发送短信
							}
						}else
						{			
							send_flag2 = 0;RELAY1=0;
						}
						
					  if(RTHW==1 && Mode==1)//在防盗模式下,检测到有人
						{
							BEEP=1;
							LCD_Write_String(8,1, "Somebody");RT_BJ = 1;
							if(send_flag3==0)
							{
									send_flag3 = 1;
								  sim800_send("8B66544AFF0168C06D4B523067094EBAFF01");//发送短信“警告!检测到有人!”
							}
            }
						else 
            {
							LCD_Write_String(8,1, "        ");RT_BJ = 0;
							send_flag3 = 0;
            }
						if(Temperature < Temperature_MAX && PPM < PPM_MAX && RT_BJ==0 && SD_baojing==0)BEEP=0;//关闭蜂鸣器
      }
			delay_ms(1);
  }
}

资料链接:https://pan.baidu.com/s/1YH5I6bWCwr8lwUZNipetxQ?pwd=ssil
提取码:ssil

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

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

相关文章

传输方式的分类【图解TCP/IP(笔记五)】

文章目录 传输方式的分类面向有连接型和无连接型面向有连接型面向无连接型 电路交换与分组交换根据接收端数量分类单播&#xff08;Unicast&#xff09;广播&#xff08;Broadcast&#xff09;多播&#xff08;Multicast&#xff09;任播&#xff08;Anycast&#xff09; 传输方…

ModaHub魔搭社区:Zilliz Cloud快速开始教程(一)

目录 前提条件 创建 Collection 查看 Collection 插入数据 本教程涵盖以下 Zilliz Cloud 集群操作指南: 创建 Collection查看 Collection插入数据向量搜索、向量查询、通过 ID 获取 Entity删除 Entity删除 Collection 前提条件 在本文档中,我们将使用 Milvus 的 SDK。…

FL Studio21中文版DAW宿主软件

FL Studio21让你的计算机就像是全功能的录音室&#xff0c;漂亮的大混音盘&#xff0c;先进的创作工具&#xff0c;让你的音乐突破想象力的限制。你有着满腔的音乐才华&#xff0c;想要自己在家里发片吗&#xff1f;还是听 MOBY 的电子舞曲不过瘾&#xff0c;要再帮他做做 REMI…

Mybatis-plus——增删改查相关+id生成策略+多数据操作(删除)+逻辑删除+乐观锁+代码生成器

项目文件总览 Dao层中 domain层中 测试类中含有三个测试方法&#xff0c;分别对应&#xff0c;插入删除和修改 id生成策略 针对不同的场景使用不同的id,用到提供的一个注解TableId 在实体类中使用Tablefiled注解时可以看见有如下的多种策略 使用第一个AUTO策略 运行插入方法得…

Nuxt3 loyouts公共页面布局

1.目录结构 2.在app.vue入口处添加代码 注意&#xff1a;Header首字母我是大写的&#xff0c;然而页面并没有显示头部&#xff0c;只显示尾部 改为首字母小写才会有效

SWAT模型18项典型案例实践、EFDC模型建模方法

SWAT模型“十八般武艺”高阶研修 以18项典型的案例为主线&#xff0c;不仅能够从技术层系统掌握&#xff0c;还能更好的拓展与相关学科的融合创新应用&#xff0c;解决实际的问题&#xff0c;内容讲解具有技术深度与系统、普遍需求、热点创新、实际问题解决等特点&#xff0c;…

计算机组成原理课程论文: Intel 80386/80486 的体系架构调研

摘要 本文以Intel 80386/80486体系架构为研究对象&#xff0c;详细介绍了该体系架构的基本概念、特点和优势&#xff0c;分析了其在不同领域的应用情况&#xff0c;并对其未来的发展做出一定的展望和评价。 首先&#xff0c;我们介绍了研究背景和目的&#xff0c;阐述了Intel 8…

40. 同时在线最多的人数

文章目录 题目需求思路一实现一题目来源 题目需求 根据用户登录明细表&#xff08;user_login_detail&#xff09;&#xff0c;求出平台同时在线最多的人数。 期望结果如下&#xff08;截取部分&#xff09;&#xff1a; cn7 需要用到的表&#xff1a; 用户登录明细表&…

接口性能优化技巧

背景 我负责的系统在去年初就完成了功能上的建设&#xff0c;然后开始进入到推广阶段。随着推广的逐步深入&#xff0c;收到了很多好评的同时也收到了很多对性能的吐槽。 刚刚收到吐槽的时候&#xff0c;我们的心情是这样的&#xff1a; 当越来越多对性能的吐槽反馈到我们这里的…

阿里云服务器架构X86_GPU_裸金属_超级计算集群详解

阿里云服务器架构有什么区别&#xff1f;X86计算、ARM计算、GPU/FPGA/ASIC、弹性裸金属服务器、超级计算集群有什么区别&#xff1f;阿里云服务器网分享云服务器ECS架构详细说明&#xff1a; 目录 阿里云服务器ECS架构说明 X86计算 ARM计算 GPU/FPGA/ASIC 弹性裸金属服务…

基于simulink使用SAD方法进行运动检测(附源码)

一、前言 此示例演示如何使用绝对差分总和 &#xff08;SAD&#xff09; 方法来检测视频序列中的运动。此示例将 SAD 独立应用于视频序列的四个象限。如果在象限中检测到运动&#xff0c;则示例会以红色突出显示该象限。 二、模型 下图显示了移动侦测示例模型&#xff1a; 三…

一文搞懂Java线程池执行原理核心参数

文章目录 前言一、为什么要使用线程池创建线程&#xff1f;二、线程池的核心参数&#xff08;重点&#xff09;1.核心线程数2.最大线程数3.救急线程的存活时间4.救急线程的时间单位5.任务队列6.线程工厂7.任务拒绝策略 三、线程池的执行原理四、一个小案例总结 前言 最近面试过…

CEC2018动态多目标优化算法:基于自适应启动策略的混合交叉动态约束多目标优化算法(MC-DCMOEA)求解CEC2018

一、动态多目标优化问题 1.1问题定义 1.2 动态支配关系定义 二、 基于自适应启动策略的混合交叉动态多目标优化算法 基于自适应启动策略的混合交叉动态多目标优化算法&#xff08;Mixture Crossover Dynamic Constrained Multi-objective Evolutionary Algorithm Based on Se…

Blender基础入门(1):Blender建模系统简单介绍

文章目录 我个人的Blender专栏前言偏好设置推荐常用组合按键空格&#xff08;需在偏好设置里面选择空格->工具&#xff09;ShiftA&#xff08;添加物体&#xff09;右键&#xff1a;物体对象操作I:显示关键帧操作~&#xff08;1左边的波浪号&#xff09;&#xff1a;视角选择…

【算法与数据结构】1047、LeetCode删除字符串中的所有相邻重复项

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;这道题和【算法与数据结构】20、LeetCode有效的括号类似&#xff0c;本质上都是找一个字符的匹配字符。…

深入理解Linux网络——内核是如何接收到网络包的

文章目录 一、相关实际问题二、数据是如何从网卡到协议栈的1、Linux网络收包总览2、Linux启动1&#xff09;创建ksotfirqd内核线程2&#xff09;网络子系统初始化3&#xff09;协议栈注册4&#xff09;网卡驱动初始化5&#xff09;网卡启动 3、迎接数据的到来1&#xff09;硬中…

Python潮流周刊#10:Twitter 的强敌 Threads 是用 Python 开发的!

△点击上方“Python猫”关注 &#xff0c;回复“1”领取电子书 你好&#xff0c;我是猫哥。这里每周分享优质的 Python 及通用技术内容&#xff0c;大部分为英文&#xff0c;已在小标题注明。&#xff08;标题取自其中一则分享&#xff0c;不代表全部内容都是该主题&#xff0c…

Vue+elementUI实现下拉框多选和反选

Vue代码如下&#xff1a; <el-form-item label"下拉框名称&#xff1a;"><el-select size"mini" v-model"testModelName" focus"getSelectInfo" :disabled"SelectStyle" filterable clearable placeholder"&…

SpringBoot实战(二十)集成Druid连接池

目录 一、简介1.定义2.特点3.竞品对比 二、搭建测试项目1.Maven依赖2.yaml配置2.1 JDBC配置2.2 连接池配置2.3 监控配置 三、测试1.查看监控页面2.单元测试 四、补充&#xff1a;1.如何打印慢SQL&#xff1f;2.去除广告3.如何手动获取监控内容 一、简介 1.定义 Druid数据库连…

简析电力系统网络靶场建设的价值、挑战与趋势

在当下已经演变为持久战的俄乌地区冲突中&#xff0c;通信、交通、能源供应等相关国家关键基础设施一直是双方互相攻击的重点目标。同时&#xff0c;“网络战”作为先行战场&#xff0c;也把关基设施作为主阵地&#xff0c;不断以相对轻量级成本制造比想象中更广泛的破坏和社会…