基于51单片机智能家居监控系统设计

news2024/9/24 6:08:33

文章目录

  • 前言
  • 资料获取
  • 设计介绍
  • 功能介绍
  • 设计程序
  • 具体实现截图
  • 设计获取


前言

💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗
👇🏻 精彩专栏 推荐订阅👇🏻
单片机设计精品实战案例
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人

资料获取

文章底部名片,详细资料联系我。

设计介绍

智能家居是以住宅为平台,利用综合布线技术、网络通信技术、安全防范技术、自动控制技术、音视频技术将家居生活有关的设施集成,构建高效的住宅设施与家庭日程事务的管理系统,提升家居安全性、便利性、舒适性、艺术性,并实现环保节能的居住环境。
本文介绍了基于AT89C51的智能家居的设计方案与软硬件实现。通过NTC热敏电阻实现环境温度的采集,利用MQ2测量烟雾浓度和煤气浓度,采用干簧管实现外人侵入检测。同时,采用蓝牙模块实现数据的无线传输,并能在主机上实时显示,并对异常情况进行声光报警。

在本次课程设计中,虽然对于智能家居的设计要求有所了解,但真正做起来的时候,并不是那么的容易。本来打算采用DS18B20温度传感器测量温度,但由于该模块有时序,软件难度较大,所以采用了精度相对不高的热敏电阻进行测温。但从中也了解了NTC热敏电阻的测温原理,以及测温公式的含义。由于proteus里没有气体检测传感器,所以只能采用电位器模拟MQ2传感器的工作特性;同时该软件也没有磁控开关,但它的本质是开关量,所以用开关来代替。还有,针对无线数据传输方式,proteus里也没有相关的无线模块,考虑到蓝牙模块是可以与单片机的串口通信的,所以采用虚拟串口模块。
由于自身的知识欠缺,加上时间的不足,所以智能家居系统并没有完全实现,比如不能通过远程操控手动取消报警,采集数据的精度也不是很好,另外附加要求也没有实现。

功能介绍

智能家居监控系统设计要求如下:

以提高家居生活的安全性、舒适度、人性化为目的,设计智能家居监控系统。

(1)设计必须实现家居温度、煤气泄漏、外人闯入、火灾(烟雾)的全部检测;

(2)各检测节点可通过无线方式连接到主机,检测到危险信号后,主机采用声光报警或远程报警;

(3)系统具有检测灵敏、报警及时、性价比高等特点;

(4)拓展部分:增加检测项目并具有可行性,除环境检测外也可增加人体信号(心率、体温)检测等。

分析:为实现温度检测、煤气和烟雾等气体检测、监控外人闯入等功能,采用NTC热敏电阻、MQ2气体检测传感器、磁控开关等传感器。

设计程序

#include "lcd5110.h"
#include "adc0809.h"
#include <math.h>
sbit tube = P3^2;//干簧管
sbit beep = P3^6;//蜂鸣器
sbit led = P3^7;//LED灯
uint temperature;//温度
uint smoke;//煤气浓度
uint fire;//烟雾浓度
uchar index;//定义发送数据个数
uchar ad_Value[3];//定义AD采集数据
float getVoltage[3];//定义电压采集数值
uchar receivedata;//定义串口接收数据
bit people_flag;//外人闯入标志位
bit temper_flag;//温度异常标志位
bit smoke_flag;//煤气浓度异常标志位
bit fire_flag;//烟雾浓度异常标志位
bit cancel_flag;//取消报警标志位
void delay(uint num)
{
		uint x,y;
	  for(x=num;x>0;x--)
				for(y=110;y>0;y--);
}
void init_interrupt(void)
{
	  TMOD = 0x02;
    TH0 = 0xfb;
    TL0 = 0xfb;
    EA = 1;
    ET0 = 1;
    TR0 = 1;
}
void ex_init(void)
{
	  IT0 = 1;
	  EX0 =1;
	  EA = 1;
}
void usart(void)
{
		TMOD |= 0x20;
	  SCON = 0x50;
	  PCON = 0x00;
	  TH1 = 0xfd;
	  TL1 = 0xfd;
	  TR1 = 1;
	  EA = 1;
	  ES = 1;  
}
//显示函数
void display(void)
{
	  //显示温度
	  LCD_Set_XY(0,1);
	  LCD_Write_Char(temperature/1000+0x30);
		LCD_Write_Char((temperature%1000)/100+0x30);
		LCD_Write_Char((temperature%100)/10+0x30);
	  LCD_Write_Char('.');
	  LCD_Write_Char(temperature%10+0x30);
	  //显示煤气浓度
	  LCD_Set_XY(0,3);
		LCD_Write_Char(smoke/1000+0x30);
		LCD_Write_Char((smoke%1000)/100+0x30);
		LCD_Write_Char((smoke%100)/10+0x30);
	  LCD_Write_Char('.');
	  LCD_Write_Char(smoke%10+0x30);
	  //显示烟雾浓度
		LCD_Set_XY(0,5);
	  LCD_Write_Char(fire/1000+0x30);
		LCD_Write_Char((fire%1000)/100+0x30);
		LCD_Write_Char((fire%100)/10+0x30);
	  LCD_Write_Char('.');
	  LCD_Write_Char(fire%10+0x30);
}
//报警函数
void alarm(void)
{
	  //报警判断
	  if(temperature/10>=45)
		{
				temper_flag = 1;//自动报警
		}
		else
		{
				temper_flag = 0;//取消报警
		}
		if(smoke/10>=30)
		{
				smoke_flag = 1;//自动报警
		}
		else
		{
				smoke_flag = 0;//取消报警
		}
		if(fire/10>=30)
		{
				fire_flag = 1;//自动报警
		}
		else
		{
				fire_flag = 0;//取消报警
		}
		//声光报警
	  if(people_flag==1||temper_flag==1||smoke_flag==1||fire_flag==1)
		{
				if(!cancel_flag)
				{
						beep = 1;
						delay(20);
						beep = 0;
						delay(20);
						led = 1;
				}
				else
				{
						beep = 1;
			      led = 0;
				}
		}
		else
		{
				beep = 1;
			  led = 0;
		}
}
//数据格式转换
uchar change(uchar dat)
{
		uchar result;
	  uchar temp_H,temp_L;
	  temp_H = dat/10;
		temp_L = dat%10;
		result = temp_H*16+temp_L;
	  return result;
}
void main(void)
{
	  uchar channel;//定义ADC通道号
	  float Rt,temper;//NTC测温相关参量
	  beep = 0;//声光报警初始化
	  led = 0;
	  LCD_Init();//显示初始化
	  LCD_Write_English(0,0,"temperature");
	  LCD_Write_English(0,2,"smoke");
	  LCD_Write_English(0,4,"fire");
	  init_interrupt();//定时器初始化
	  ex_init();//外部中断初始化
	  usart();//串口初始化
	  while(1)
		{		
			  //采集数据
			  for(channel=0;channel<3;channel++) 
        {
						ad_Value[channel] = ADC0809(channel);
				}
				//处理数据
				for(channel=0;channel<3;channel++)
				{
						getVoltage[channel] = (float)(ad_Value[channel])/255*5;//采集电压
				}
				Rt = getVoltage[0]*4700/(5.0-getVoltage[0]);//计算阻值
				temper = 1/(log(Rt/10000)/4050+1/(273.15+25))-273.15;//计算温度
				temperature = (uint)temper*10;
				smoke = getVoltage[1]*200;
				fire = getVoltage[2]*200;
				//显示数据
        display();
				//发送数据
				index = index>2?0:index+1;
			  switch(index)
				{
					  case 0:SBUF = change((uchar)(fire/10));break;
					  case 1:SBUF = change((uchar)(temperature/10));break;
					  case 2:SBUF = change((uchar)(smoke/10));break;
					  default:break;
				}
				//报警系统
        alarm();				
		}
}
void timer_T0(void) interrupt 1
{
	  clk = ~clk;
}
void ex0(void) interrupt 0
{
	  delay(5);
		if(tube==0)//干簧管被触发
		{
				people_flag = ~people_flag;
		}
}
void usart_int(void) interrupt 4
{
		if(RI==1)
		{
				RI = 0;
			  receivedata = SBUF;
			  if(receivedata==0x30)
				{
						cancel_flag = 1;
				}
				else
				{
						cancel_flag = 0;
				}
		}
		else
		{
				TI = 0;  
		}
}

具体实现截图

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

设计获取

文章下方名片联系我即可~

精彩专栏推荐订阅:在下方专栏👇🏻

毕业设计精品实战案例

收藏关注不迷路!!

🌟文末获取设计🌟

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

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

相关文章

计算机毕业设计hadoop+hive航班预测系统 飞机票航班数据分析可视化大屏 机票预测 机票爬虫 飞机票推荐系统 大数据毕业设计

《HadoopHive航班预测系统》开题报告 一、课题背景与意义 随着全球航空业的快速发展&#xff0c;航班数据呈现出爆炸性增长的趋势。这些数据包含了航班时间、航线、价格、乘客量、天气条件等多种信息&#xff0c;对于航空公司来说&#xff0c;如何高效处理和分析这些数据&…

大模型培训讲师叶梓:Llama Factory 微调模型实战分享提纲

LLaMA-Factory ——一个高效、易用的大模型训练与微调平台。它支持多种预训练模型&#xff0c;并且提供了丰富的训练算法&#xff0c;包括增量预训练、多模态指令监督微调、奖励模型训练等。 LLaMA-Factory的优势在于其简单易用的界面和强大的功能。用户可以在不编写任何代码的…

高校大数据实训管理平台怎么选择?

泰迪智能科技大数据实训管理平台分为多个方向包括&#xff1a;人工智能方向、大数据方向、商务数据分析方向&#xff0c;不同高校可以结合高校情况选择合适自己院校的相关产品平台。 高校实训管理平台是实验室模块的核心母平台&#xff0c;对实验室的所有课程及实训资源进行统…

【题解】CF2013A

首先抽自己一巴掌&#xff0c;A题自信提交直接WA&#xff0c;故写此题解警示一下&#xff08;顺便水一水&#xff09;。 翻译 原题链接 思路 显然&#xff0c;若搅拌机单位时间能处理的水果数 x x x小于人每次丢进去的数量 y y y&#xff0c;那人只需要一直扔进去就好了&…

【d48】【Java】【力扣】LCR 123. 图书整理 I

思路 方法1&#xff1a;放进list,将list倒置&#xff0c;利用stream&#xff0c;将list改为int类型 方法2&#xff1a;递归&#xff1a;递归通用思路&#xff1b;明确每一层做什么确定返回值确定什么地方接收下层的返回值 每一层&#xff1a;调用下层&#xff0c;然后把自己…

护理陪护小程序|陪护系统||陪护系统开发

在当今社会&#xff0c;随着人口老龄化的加剧和家庭结构的变化&#xff0c;护理与陪护服务的需求日益增长。为了更好地满足这一市场需求&#xff0c;并提升服务效率与质量&#xff0c;护理陪护小程序应运而生。这类小程序不仅为用户提供了便捷、高效的服务预约与管理平台&#…

DANN GRL

域自适应是指在目标域与源域的数据分布不同但任务相同下的迁移学习&#xff0c;从而将模型在源域上的良好性能迁移到目标域上&#xff0c;极大地缓解目标域标签缺失严重导致模型性能受损的问题。 介绍一篇经典工作 DANN &#xff1a; 模型结构 在训练阶段需要预测如下两个任务…

Redis:持久化

1. Redis持久化机制 Redis 支持 RDB 和 AOF 两种持久化机制&#xff0c;持久化功能有效地避免因进程退出造成数据丢失问题&#xff0c; 当下次重启时利⽤之前持久化的文件即可实现数据恢复。 2.RDB RDB 持久化是把当前进程数据⽣成快照保存到硬盘的过程&#xff0c;触发 RDB…

【第十一章:Sentosa_DSML社区版-机器学习之分类】

目录 11.1 逻辑回归分类 11.2 决策树分类 11.3 梯度提升决策树分类 11.4 XGBoost分类 11.5 随机森林分类 11.6 朴素贝叶斯分类 11.7 支持向量机分类 11.8 多层感知机分类 11.9 LightGBM分类 11.10 因子分解机分类 11.11 AdaBoost分类 11.12 KNN分类 【第十一章&…

Rustrover2024.2 正式发布:个人非商用免费,泰裤辣

如果这个世界本身 已经足够荒唐 那究竟什么才能算是疯狂 爱情就是这样 一旦错过了 就会有另一个人代替 我们知道 jetbrains 在今年的早些时候正式为 rust 语言发布了专用的 IDE &#xff0c;也就是 rustrover。如今 rustrover 也正式跻身为 jetbrains IDE 系列的一员猛将。…

Dynamic Connected Networks for Chinese Spelling Check(ACL2021)

Dynamic Connected Networks for Chinese Spelling Check(ACL2021) 一&#xff0e;概述 文中认为基于bert的非自回归语言模型依赖于输出独立性假设。不适当的独立性假设阻碍了基于bert的模型学习目标token之间的依赖关系&#xff0c;从而导致了不连贯的问题。为些&#xff0c…

如何使用GLib的单向链表GSList

单向链表是一种基础的数据结构&#xff0c;也是一种简单而灵活的数据结构&#xff0c;本文讨论单向链表的基本概念及实现方法&#xff0c;并着重介绍使用GLib的GList实现单向链表的方法及步骤&#xff0c;本文给出了多个实际范例源代码&#xff0c;旨在帮助学习基于GLib编程的读…

docker如何升级MySQL为最新版本

今天安全扫描发现MySQL存在漏洞&#xff0c;不用想别的升级到最新版。本篇文章有两个目的&#xff0c;1&#xff09;为自己做一个记录&#xff0c;下次升级的时候不用再浪费时间查资料&#xff1b;2&#xff09;给大家一点帮助&#xff1b; 因为我是docker部署&#xff0c;所以…

docker 创建showdoc服务 showdoc容器部署教程

1. 下载最新版本镜像 # 按照最新版本 docker pull star7th/showdoc 2. 创建映射文件夹&#xff1a; # 创建文件夹 mkdir -p /data/showdoc_data# 可写权限 chmod 777 /data/showdoc_data 3.创建容器命令&#xff1a; docker run -d --name showdoc --userroot --privileged…

分享一个vue+spring的前后端项目

管理员页面 用户界面 后面的一部分 后端代码

leetcode第二十六题:删去有序数组的重复项

给你一个 非严格递增排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元素的数量为 k &#xff0c;你…

力扣题解1014

大家好&#xff0c;欢迎来到无限大的频道。 今日继续给大家带来力扣题解。 题目描述&#xff08;中等&#xff09;&#xff1a; 最佳观光组合 给你一个正整数数组 values&#xff0c;其中 values[i] 表示第 i 个观光景点的评分&#xff0c;并且两个景点 i 和 j 之间的 距离…

C++ | Leetcode C++题解之第432题全O(1)的数据结构

题目&#xff1a; 题解&#xff1a; class AllOne {list<pair<unordered_set<string>, int>> lst;unordered_map<string, list<pair<unordered_set<string>, int>>::iterator> nodes;public:AllOne() {}void inc(string key) {if (…

R语言 基础笔记 2

起因&#xff0c; 目的: 偶然看到一个新的教程&#xff0c; 有些知识点&#xff0c;以前没见过&#xff0c;不熟悉&#xff0c; 现在遇到了&#xff0c;记录一下。 基础数据类型 2L&#xff0c; 表示整数 3 ^ 2, 表示求幂 class(a) 查看 类 typeof(a) 查看基本数据类型 s…

C/C++语言基础--C++构造函数、析构函数、深拷贝与浅拷贝等等相关知识讲解

本专栏目的 更新C/C的基础语法&#xff0c;包括C的一些新特性 前言 周末休息了&#xff0c;没有更新&#xff0c;请大家见谅哈&#xff1b;构造函数、析构函数可以说便随着C每一个程序&#xff0c;故学构造函数、析构函数是必要的&#xff1b;C语言后面也会继续更新知识点&am…