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

​一.硬件方案

智能家居环境监控系统的整体电路主要由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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL数据库架构

MySQL数据库架构 MySQL架构自顶向下大致可以分为连接层 , SQL层 , 存储引擎层 , 物理文件层。架构如下 连接层 -- 查看最大连接数 show variables like %max_connections%;客户端连接器&#xff0c;MySQL向外提供交互接口连接各种不同的客户端。 客户端/应用程序&#xff1a;客…

银河麒麟服务器v10 sp1 redis开机自动启动

接上一篇&#xff1a;银河麒麟服务器v10 sp1 安装 redis_csdn_aspnet的博客-CSDN博客 将redis_init_script文件复制到/etc/init.d下&#xff0c;重命名为redisd&#xff1a; rootxxx-pc:cp /usr/local/redis/redis-7.0.11/utils/redis_init_script /etc/init.d/redisd 内容如…

MFC 单文档模式

Doc类利用自带框架存数据 void CCADDoc::Serialize(CArchive& ar) {if (ar.IsStoring()){// TODO: 在此添加存储代码//保存数据到文件ar << m_nShapeCount;for (int i 0; i < m_arrShapes.GetSize(); i){CShape* pShape NULL;pShape (CShape*)m_arrShapes[i];…

【C的葵花宝典进阶篇】之指针进阶(一)

【C语言进阶篇】之指针进阶&#xff08;一&#xff09; 1. 字符指针2. 指针数组2.1 整形指针数组2.2 用指针数组模拟二维数组 3. 数组指针3.1 数组指针的表示方法3.2 深度剖析&数组名和数组名3.3 数组指针的使用3.3.1 在同一函数内直接将数组的地址赋给数组指针3.3.2 数组指…

【Spark】RDD转换算子

目录 map mapPartitions mapPartitionsWithIndex flatMap glom groupBy shuffle filter sample distinct coalesce repartition sortBy ByKey intersection union subtract zip partitionBy reduceByKey groupByKey reduceByKey 和 groupByKey 的区别 a…

C#学习之路-常量

C# 常量 常量是固定值&#xff0c;程序执行期间不会改变。常量可以是任何基本数据类型&#xff0c;比如整数常量、浮点常量、字符常量或者字符串常量&#xff0c;还有枚举常量。 常量可以被当作常规的变量&#xff0c;只是它们的值在定义后不能被修改。 整数常量 整数常量可…

跨境平台做测评、采退、Lu卡、lu货要怎么做安全?

大家好&#xff0c;我是珑哥测评&#xff0c;今天和大家聊聊比较小众的圈子&#xff0c;也就是测评衍生出来的分支&#xff0c;采购和退款。因为最近也有很多客户咨询这个问题&#xff0c;由于沃尔玛风控升级了&#xff0c;很多客户下不成功的问题。 大家都知道无论是做测评还是…

从源码全面解析 dubbo 服务端服务调用的来龙去脉

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱敲代码的小黄&#xff0c;独角兽企业的Java开发工程师&#xff0c;CSDN博客专家&#xff0c;阿里云专家博主&#x1f4d5;系列专栏&#xff1a;Java设计模式、Spring源码系列、Netty源码系列、Kafka源码系列、JUC源码…

Docker自学记录笔记

安装联系Docker命令 1. 搜索镜像 docker search nagin 2. 下载镜像 3. 启动nginx 强调文本 强调文本 加粗文本 加粗文本 标记文本 删除文本 引用文本 H2O is是液体。 210 运算结果是 1024. 插入链接与图片 链接: link. 图片: 带尺寸的图片: 居中的图片: 居中并…

OpenCV的remap实现图像垂直翻转

以下是完整的代码: #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <iostream>int main() {

Redis10大性能优化点(上)

1.Redis真的变慢了吗&#xff1f; 对 Redis 进行基准性能测试 例如&#xff0c;我的机器配置比较低&#xff0c;当延迟为 2ms 时&#xff0c;我就认为 Redis 变慢了&#xff0c;但是如果你的硬件配置比较高&#xff0c;那么在你的运行环境下&#xff0c;可能延迟是 0.5ms 时就…

flutter:实现一个简单的appBar上的搜索框、一个简单的搜索历史

搜索框 效果图 代码 import package:flutter/material.dart;class NovelSearch extends StatefulWidget {overrideState<StatefulWidget> createState() > _NovelSearchState(); }class _NovelSearchState extends State<NovelSearch> {String searchVal ;o…

Debian 12 静态IP / 固定IP的设置

环境&#xff1a;Debian 12 amd64-lxde 局域网&#xff1a;PT925E电信光猫 手机APP 网络管家 一般用动态IP就可以了&#xff0c;但如果软件环境比较小众&#xff0c;问题就随之而来。起始问题&#xff1a;路由器无法解析设备名和IP&#xff0c;网络管家也不让设置固定IP&…

基于深度学习的高精度水果检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度水果&#xff08;苹果、香蕉、葡萄、橘子、菠萝和西瓜&#xff09;检测识别系统可用于日常生活中或野外来检测与定位水果目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的水果目标检测识别&#xff0c;另外支持结果可视…

Python教程(2)——开发python常用的IDE

为什么需要IDE 在理解IDE之前&#xff0c;我们先做以下的实验&#xff0c;新建一个文件&#xff0c;输入以下代码 total_sum 0 for x in range(1,101):total_sum x print(total_sum)非常非常简单的一个程序&#xff0c;主要就是计算1加到100的值&#xff0c;我们将它重命名…

SpringBoot第19讲:SpringBoot 如何保证接口幂等

SpringBoot第19讲&#xff1a;SpringBoot 如何保证接口幂等 在以SpringBoot开发Restful接口时&#xff0c;如何防止接口的重复提交呢&#xff1f; 本文是SpringBoot第19讲&#xff0c;主要介绍接口幂等相关的知识点&#xff0c;并实践常见基于Token实现接口幂等。 文章目录 Spr…

动态规划之343 整数拆分(第6道)

题目&#xff1a; 给定一个正整数 n &#xff0c;将其拆分为 k 个 正整数 的和&#xff08; k > 2 &#xff09;&#xff0c;并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 示例&#xff1a; 解法&#xff1a; 其实可以从1开始遍历 j &#xff0c;然后有两种…

通用分页【下】(将分页封装成标签)

目录 一、debug调试 1、什么是debug调试&#xff1f; 2、debug调试步骤 3、实践 二、分页的核心 三、优化 分页工具类 编写servlet jsp代码页面&#xff1a; 分页工具类PageBean完整代码 四、分页标签 jsp代码 编写标签 tld文件 助手类 改写servlet 解析&…

CTFshow-pwn入门-栈溢出pwn49(静态链接pwn-mprotect函数的应用)

pwn49 首先我们先将pwn文件下载下来&#xff0c;然后赋上可执行权限&#xff0c;再来查看pwn文件的保护信息。 chomd x pwn checksec pwn file pwn我们可以看到这是一个32位的pwn文件&#xff0c;并且保护信息开启了NX和canary&#xff0c;也就是堆栈不可执行且有canary。最最…

html案例2

效果 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width, initia…