51单片机项目(14)——基于51单片机的烟雾报警系统

news2024/12/24 21:24:37

1.设计内容

本次设计的系统功能描述如下:

1.可以测量烟雾浓度并且在屏幕显示,同时显示浓度阈值。

2.可以通过按键对阈值进行加减调节。

3.浓度大于阈值时,蜂鸣器报警,风扇转动,发送报警信息(“to high”字符)到手机。

4.同时浓度是实时往手机端发送。

5.程序会把每分钟的数据存储在AT24C02里面,当触发按键时,会把以往存储的所有数据读出来,发送到手机上,每个数据对应一个地址,根据地址就可以知道它是哪个时刻采集到的数据。

原理图如下:

演示视频如下:

基于51单片机烟雾检测报警系统

2.模块介绍

1.LCD1602

        LCD1602 模块是一种常用的字符液晶显示屏模块,它可以用于显示简单的文本信息。LCD1602 模块通常由一个 16x2 的字符液晶显示屏组成,可以显示 16 列字符和 2 行字符。

以下是 LCD1602 模块的一些基本特点和使用方法:

  1. 引脚:LCD1602 模块通常具有 16 个引脚,其中包括用于数据传输和控制的引脚,以及背光控制引脚。
  2. 控制器:LCD1602 模块通常采用 HD44780 控制器,这是一种广泛使用的字符液晶显示控制器。
  3. 接口:LCD1602 模块可以通过并行接口或者串行接口(如 I2C)与单片机或者其他设备进行连接。
  4. 显示内容:LCD1602 模块可以显示各种字符、数字、符号和自定义图形。
  5. 初始化:在使用 LCD1602 模块之前,您需要通过发送特定的指令来初始化显示屏的模式和参数。
  6. 控制指令:您可以通过发送控制指令来控制 LCD1602 模块的显示内容、光标位置、显示模式等。

2.ADC0832

ADC0832 是一种 8 位分辨率的模拟到数字转换器模块,可用于将模拟电压信号转换为数字信号。ADC0832 模块具有以下特点:

1. 分辨率高:ADC0832 模块具有 8 位分辨率,可以将模拟输入信号转换为 0~255 的数字量。
2. 接口简单:ADC0832 模块的接口简单,只需要连接 VCC、GND、以及模拟输入信号(VIN+ 和 VIN-),同时还需要使用两个 IO 口控制转换开始和完成。
3. 可编程输入范围:ADC0832 模块具有可编程的输入范围,可以选择 0~5V 或者 0~10V 的电压范围。
4. 内部参考电压:ADC0832 模块内部集成了一个稳定的基准电压源,供电时可以使用内部基准电压,获取更为精准的输入电压转换结果。
5. 低功耗:ADC0832 模块工作电压范围为 4.5V~6V,低功耗,适用于各种微控制器系统。

3.蓝牙模块HC08

蓝牙模块 HC08(也称为 HC-08 或 BT05)是一种低功耗蓝牙串口透传模块,可用于在设备之间进行无线数据传输和通信。以下是 HC08 蓝牙模块的一些基本特点和功能:

1. 蓝牙版本:HC08 蓝牙模块基于蓝牙 4.0 技术,支持蓝牙经典和低能耗(BLE)模式。
2. 透传通信:HC08 蓝牙模块可用于建立串口通信连接,将串口数据通过蓝牙进行透传传输。
3. 低功耗:HC08 蓝牙模块采用低功耗设计,适用于需要长时间运行、对电源要求较高的应用场景。
4. 小型化设计:HC08 蓝牙模块的尺寸小巧,体积小,易于集成到各种设备中。
5. 通信距离:HC08 蓝牙模块的通信距离一般在 10 米左右,可根据外部环境和天线设计等因素有所变化。
6. AT 指令控制:HC08 蓝牙模块支持通过发送 AT 指令进行模块控制和参数设置,例如设置蓝牙名称、波特率等。
7. 多种工作模式:HC08 蓝牙模块支持主从模式、设备间点对点通信、多设备连接等多种工作模式。

4.电机模块

该模块自带驱动,不用外接电机驱动,供电后,直接用单片机IO控制即可

5.烟雾传感器MQ2

MQ2 是一种常用的烟雾传感器模块,它可以用来检测环境中的可燃气体和烟雾浓度。以下是 MQ2 烟雾传感器的一些基本特点和功能:

1. 灵敏度:MQ2 烟雾传感器对各种可燃气体和烟雾具有较高的灵敏度,可以检测到燃气和烟雾的存在并量化其浓度。
2. 多种气体检测:MQ2 烟雾传感器可以检测多种可燃气体,例如甲烷、丙烷、丁烷、液化气、烟雾等。
3. 模拟输出:MQ2 烟雾传感器以模拟输出方式提供检测数据,输出电压信号与检测到的气体浓度成正比。
4. 可调灵敏度:MQ2 烟雾传感器通常提供可调的灵敏度电位器,可以根据需要调整传感器的灵敏度。
5. 快速响应时间:MQ2 烟雾传感器具有快速的响应时间,可以迅速感知到环境中的可燃气体和烟雾变化。
6. 低功耗:MQ2 烟雾传感器功耗较低,适用于长时间运行和电池供电的应用。
7. 小型化设计:MQ2 烟雾传感器模块体积小巧,易于集成到各种设备中。

3.代码 

主程序main.c如下:

#include "reg52.h"
#include "LCD1602.h"
#include "delay.h"
#include <string.h>
#include <stdio.h>
#include "adc0832.h"
#include "usart.h"
#include "i2c.h"

sbit led=P2^2;
sbit beep=P1^5;
sbit motor=P1^6;
sbit k3=P3^2;	         //阈值+ 
sbit k4=P3^3;           //阈值-
sbit k5=P1^7;           //触发信息发送

char inf[12];           //保存烟雾浓度信息
char inf2[12];          //保存烟雾阈值信息
char alarm[16]="smoke too high\r\n";


int t=0;

int addr=0;
int temp=0;

int smoke_yuzhi=100;
int smoke=0;      //烟雾浓度

int read_flag=0;     //读取信息标志位  由蓝牙控制

char h=0;
int j=0;          //用于遍历AT24C02的地址

void Int0Init()             //定时器初始化 
{  
  
   TMOD|=0X01;                  //定时器工作在方式1下,即16位定时器
   TH0=(65536-50000)/256;
   TL0=(65536-50000)%256;   
   TR0=1;                     //打开定时器0
   ET0=1;                     //使能定时器0
   EA=1;                     //打开总中断
   
}

void main(void)
{  
   
   char i=0;
   
   char history[]="addr:     is     \r\n";
   LcdInit();    //LCD显示器初始化
   UsartInit();  //串口初始化
   Int0Init() ;        //定时器初始化
   
   while(1)
   {  
      smoke=read_ad(0);
      sprintf((char*)inf,"yanwu:%d\r\n",smoke);
      sprintf((char*)inf2,"yuzhi:%d\r\n",smoke_yuzhi);
       LcdWriteCom(0x01);            //清屏
       for(i=0;i<strlen(inf)-2;i++)             //-2是为了不显示\r\n
            LcdWriteData(inf[i]);
       LcdWriteCom(0x40+0x80);            //切换到第二行显示
       for(i=0;i<strlen(inf2)-2;i++)            
            LcdWriteData(inf2[i]);
      
      if(smoke>smoke_yuzhi)         //烟雾浓度大于阈值
      {
         led=!led;
         beep=0;                 //蜂鸣器低电平触发
         motor=1;                //开风扇
         Uart1Sends(alarm);      //发送报警信息到手机
      }
      else
      {
         led=1;         //灯灭
         beep=1;
         motor=0;
      }
      
      Uart1Sends(inf);
      
      if(k3==0)
      {
         delay_nms(20);
         if(k3==0)
         {
            smoke_yuzhi++;
         }
      }
      if(k4==0)
      {
         delay_nms(20);
         if(k4==0)
         {
            smoke_yuzhi--;                                 
                         
         }        
      }
      
       if(read_flag==1)        //蓝牙按钮3触发对过去24h数据的读取
      {                                
               for(j=0;j<addr;j++)
               {   
                 
                   history[5]=j/1000+0x30;
                   history[6]=(j/100)%10+0x30;
                   history[7]=(j/10)%10+0x30;      //写入地址
                   history[8]=j%10+0x30;
                   history[10]=h/10+0x30;
                   history[11]=h%10+0x30;
                   temp=At24c02Read(j);            //读取对应地址里面存储的数据
                   history[13]=temp/1000+0x30;
                   history[14]=(temp/100)%10+0x30;
                   history[15]=(temp/10)%10+0x30;
                   history[16]=temp%10+0x30;
                   Uart1Sends(history);             //发送读取到的数据
              }
                         
                 
      }
   
   
      delay_nms(1000);        //延迟1000ms
      
   }
   
}

void time0() interrupt 1		//定时器0的中断服务函数
{   
   t++;                          //t为1200时,计数满1min 
   if(t==100)                    //(若要保存24h的数据 这里t=1200 也就是相邻两个地址单元的数据间隔1分钟 调试的时候取100就可以,不然很久一次才能观察到现象)    
   {
    t=0;                         //每一分钟 保存一次浓度值   AT24C02有2K空间  足够保存24h的数据
    At24c02Write(addr,smoke);       //向对应地址里面保存浓度信息   
    addr++;             //地址自增
    if(addr%60==0)
      h++;
    if(addr==1440)      //此时存满了24h
    {
      for(j=0;j<addr;j++)
      {
         At24c02Write(j,0);      //清除数据
      }
      addr=0;           //地址清0 从头开始
      h=0;                 //时间清0
   } 
   
    }
     
  
   
   TH0=(65536-50000)/256;
   TL0=(65536-50000)%256;         //重新给定时器赋值
  
	
}

//串口接收中断
void Usart() interrupt 4
{
	unsigned char receiveData;

	receiveData=SBUF;//接收到的数据
	RI = 0;//清除接收中断标志位
   if(receiveData=='A')
      smoke_yuzhi++;
   if(receiveData=='B')
      smoke_yuzhi--;
   if(receiveData=='C')
     read_flag=1;
   else
      read_flag=0;
}

4.获取源工程

需要完整工程的,可以私信我!!!

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

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

相关文章

国标GB28181安防视频平台EasyGBS现场突发播放中断是什么原因?

视频流媒体安防监控国标GB28181平台EasyGBS视频能力丰富&#xff0c;部署灵活&#xff0c;既能作为业务平台使用&#xff0c;也能作为安防监控视频能力层被业务管理平台调用。国标GB28181视频EasyGBS平台可提供流媒体接入、处理、转发等服务&#xff0c;支持内网、公网的安防视…

自动驾驶中的LFM(LED 闪烁缓解)问题

自动驾驶中的LFM Reference: 自动驾驶系统如何跨越LFM这道坎&#xff1f; 从路灯、交通灯&#xff0c;到车载照明&#xff0c;低功耗、长寿命、高可靠的 LED 正在快速取代传统照明方式。但 LED 在道路上的普遍使用&#xff0c;却带来“LED闪烁”现象。“LED闪烁”是由 LED 驱…

【scipy 基础】--空间计算

scipy.spatial子模块提供了一系列用于处理和计算空间数据和几何形状的算法和工具&#xff0c;在许多领域都有广泛的应用&#xff0c;例如计算机视觉、地理信息系统、机器人学、医学影像分析等。 下面&#xff0c;来具体看看scipy.spatial子模块为我们提供的主要功能分类。 1. 主…

网络通信(架构与三要素)

一&#xff0c;通信架构 二&#xff0c;三要素 三&#xff0c;IP地址 四&#xff0c;域名 五&#xff0c;InetAddress&#xff08;操作IP地址的工具类&#xff09; 六&#xff0c;案例 import java.net.InetAddress; import java.net.UnknownHostException;public class IPInet…

计算机网络(超详解!) 第一节计算机网络的性能指标

1.速率 比特&#xff08;bit&#xff09;是计算机中数据量的单位&#xff0c;也是信息论中使用的信息量的单位。 比特&#xff08;bit&#xff09;来源于 binary digit&#xff0c;意思是一个“二进制数字”&#xff0c;因此一个比特就是二进制数字中的一个 1 或 0。 速率是…

探秘数字学习新兴:深度解析知识付费系统

在当今数字化时代&#xff0c;知识付费系统作为一种创新性的学习和知识分享模式正逐渐崭露头角。本文将深入探讨知识付费系统的概念、重要性&#xff0c;并提供一个简单而完整的示例&#xff0c;展示其核心技术和实现方式。 概念与重要性 知识付费系统是一种基于互联网平台的…

Verilog基础:时序调度中的竞争(二)

相关阅读 Verilog基础https://blog.csdn.net/weixin_45791458/category_12263729.html?spm1001.2014.3001.5482 作为一个硬件描述语言&#xff0c;Verilog HDL常常需要使用语句描述并行执行的电路&#xff0c;但其实在仿真器的底层&#xff0c;这些并行执行的语句是有先后顺序…

2019年7月18日 Go生态洞察:新Go商店公告 ️

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

HCIA-H12-811题目解析(2)

1、【单选题】 在以太网这种多点访问网络上PPPOE服务器可以通过一个以太网端口与很多PPPOE客户端建立起PPP连接&#xff0c;因此服务器必须为每个PPP会话建立唯一的会话标识符以区分不同的连接PPPOE会使用什么参数建立会话标识符? 2、【单选题】PPP协议定义的是OSI参考模型中…

二叉树题目:结点与其祖先之间的最大差值

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;结点与其祖先之间的最大差值 出处&#xff1a;1026. 结点与其祖先之间的最大差值 难度 5 级 题目描述 要求 给…

树莓派 cpolar实现内网穿透

树莓派 cpolar实现内网穿透 cpolar官网介绍 cpolar官网 树莓派安装cpolar 使用ssh连接树莓派终端&#xff0c;输入以下命令&#xff0c;即可安装cpolar curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash安装完成后可输入cpolar v…

AIGC系列之:Transformer原理及论文解读

目录 模型概述 Transformer输入 Word Embedding Positional Encoding Transformer的输出 Self Attention Multi-Head Attention Encoder结构 最后层的输出 Masked Multi-Head Attention Decoder输入 Decoder的输出 Transformer训练和推理过程 《Attention is All …

网络工程师应知必会的网络故障排查手段,你用过几个?

你们好&#xff0c;我的网工朋友。 网络排错对于网络工程师或运维人员甚至对很多人&#xff08;搞IT的朋友们&#xff09;都是基操。 所以知道网络排错的详细流程和流程中每一步的原理&#xff0c;就显得很关键了。 当网络出现问题时&#xff0c;你能迅速排查出网络问题所在…

Pytorch深度学习实战2-1:详细推导Xavier参数初始化(附Python实现)

目录 1 参数初始化2 Xavier参数初始化原理2.1 前向传播阶段2.2 反向传播阶段2.3 可视化思考 3 Python实现 1 参数初始化 参数初始化在深度学习中起着重要的作用。在神经网络中&#xff0c;参数初始化是指为模型中的权重和偏置项设置初始值的过程。合适的参数初始化可以帮助模型…

阿里云服务器部署node和npm

目录 1.链接服务器2.找到node 下载地址3获取链接地址4下载到linux5.解压6.重命名 解压后的文件7.配置环境变量7.1复制当前的bin目录7.2vim /etc/profile7.3在按下ESC按键 8.重启环境变量9.输入node10.npm配置加速镜像 1.链接服务器 2.找到node 下载地址 https://nodejs.org/d…

C++——解锁string常用接口

本篇的内容是记录使用string接口的测试与使用&#xff0c;方便后续使用时查阅使用 首先介绍 string::npos; size_t&#xff08;无符号整型&#xff09;的最大值。NPOS 是一个静态成员常量值&#xff0c;具有 size_t 类型元素的最大可能值。当此值用作字符串成员函数中 len&am…

希宝猫罐头怎么样?专业人士告诉你性价比高的猫罐头推荐

作为一家经营猫咖店已有6年的店长&#xff0c;我在这段时间里接触过不少于30种不同的猫罐头。在猫罐头上我还是有话语权的。通过本文&#xff0c;我将与大家分享值得购买的猫罐头&#xff0c;分享猫罐头喂养的技巧。那么希宝猫罐头表现怎么样呢&#xff1f; 希宝猫罐头可是采用…

Python GUI 图形用户界面程序设计,Python自带 tkinter 库

文章目录 前言GUI介绍简单操作tkinter组件介绍向窗体中添加按钮控件使用文本框控件使用菜单控件使用标签控件使用单选按钮和复选按钮组件使用绘图组件关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集…

【多线程】-- 04 静态代理模式

多线程 3 静态代理 这里以一个现实生活中的例子来解释并实现所谓的静态代理模式&#xff0c;即结婚者雇用婚庆公司来帮助自己完成整个婚礼过程&#xff1a; package com.duo.lambda;interface Marry {void HappyMarry();//人生四大乐事&#xff1a;久旱逢甘霖&#xff1b;他…

自动化测试|我为什么从Cypress转到了Playwright?

以下为作者观点&#xff1a; 早在2019年&#xff0c;我就开始使用Cypress &#xff0c;当时我所在的公司决定在新项目中放弃Protractor 。当时&#xff0c;我使用的框架是Angular&#xff0c;并且有机会实施Cypress PoC。最近&#xff0c;我换了工作&#xff0c;现在正在使用R…