【IoT】智能烟雾报警器
设计简介
硬件设计由AT89C51单片机、DS18B20温度传感器、4位共阳数码管、电源模块、报警模块、按键模块、MQ-2烟雾检测模块和ADC0832模数转换模块组成。
烟雾传感器MQ-2检测空气中的烟雾气体,通过ADC0832进行数据转换,经过单片机的运算处理后在数码管上显示浓度,同时采用DS18B20温度传感器检测环境温度,经过转换再经过单片机的运算也在数码管上进行显示。
单片机程序采用C语言编写,用Proteus仿真软件进行了仿真实验,并在仿真的基础上进行了实物的调试与制作。实物测试结果:当实际中的烟雾浓度和环境温度值大于设置的烟雾浓度和设置温度值时,蜂鸣器便发出报警声。通过实验表明本系统能够实现温度在测量范围从0度到99度报警以及在0-9等级烟雾浓度范围内的报警功能。
设计目标
制作一个可以实现以下功能的基于封闭环境下的烟雾报警系统,一是可以检测到可燃气体和烟雾,二是可以通过单片机对相应的驱动负载和报警设备进行控制,三是能够通过数码管实时显示烟雾的浓度值,并且可以通过按键来设定阀值。
该项目主要完成的任务包括以下三部分:
(1)硬件部分:由烟雾传感器的选择,烟雾信号模数转换电路的设计,显示模块的选择以及报警驱动电路设计组成。
(2)软件部分:是由单片机控制程序的编制和原理图的绘制两部分组成的。
(3)系统的调试与分析:在实物和程序都做好以后,要对系统进行一个测试与测验,分析观察系统的可靠性与实用性,来使系统达到正常工作状态。
系统总体设计方案
工作原理:烟雾传感器MQ-2实时检测空气中的烟雾气体,经过ADC0832模数转换芯片进行模数转换,再经过单片机的运算处理后在数码管上把烟雾的浓度显示出来,同时采用DS18B20温度传感器检测环境温度,经过转换,再传给单片机进行运算也显示在数码管上。
还可以用设置按键对烟雾和温度的报警值进行设定。当检测空气中的烟雾浓度和周围温度值大于或等于设置的烟雾浓度值和温度值(报警值)时,便会触发报警,蜂鸣器发出蜂鸣声。出现突发状况的时候可按紧急报警键,同样可以触发报警系统。

整个系统包括主控制模块、显示模块、烟雾检测采集模块、AD数模转换模块、按键控制模块和报警模块。
主控制模块
此设计中主控制模块控制核心是AT89C51单片机,是因为此类单片机具有它特有的优势:容易操作、简便、方便快捷、较强的抗干扰能力和抗静电能力,这样单片机就可以充分发挥出单片机资源丰富、强大控制功能和可位寻址操作功能的优点。
AT89C51单片机位操作指令十分丰富,单片机所有的I/O接口都可以按位寻址。单片机具有的足够的程序空间,来满足此设计,采用51 单片机控制,具有两个16位数据指针DPTRO/DPTR,因此软件编程的可选择性比较大,这样各种算术算法以及各种各样的逻辑控制便可以通过编程来实现,而且51单片机的体积比较小,这样硬件实现就变得简单,安装方便,而且此系统控制模块简单,数据量较小。所以选择ATC89C51作为核心。
主控制最小系统电路如图2-2所示。单片机最小系统硬件部分包括电源电路、复位电路、时钟电路三个部分[4]。AT89C51单片机的工作电压范围:3.3V-5.5V,所以在本设计中给单片机外界5V的直流电源,工作频率范围0-40MHz,但实际工作频率可达48MHz。

复位电路(图中连接单片机RST的电路)就是确定单片机的初始化操作,目的是让单片机在确定的初始化状态,相当于完成单片机的启动过程。当单片机开始工作接通电源时或者按下复位开关键,便会与RST形成通路,此时便会形成复位信号,从而确定单片机起始状态。当单片机系统在运行的过程中中,受到某些无法预知的因素的影响导致程序错误时,此时可以按下复位按键,则单片机内部的程序便会重新开始运行。
单片机在稳定振荡器以后,在RESET端口连续接收到24个振荡周期即2个机器周期的高电平信号时就可以完成复位[5]。本设计采用的是简单的RC冲放电电路,电阻R18的目的是为了提高高电平的值。
时钟电路(图中XTAL1与XTAL2形成的通路)的作用对单片机来说就好比人的心脏对于人,只有在时钟的驱动下单片机才能工作。因为在AT89C51内部就含有一个晶振,所以在单片机的XTAL1和XTAL2引脚接一个频率为12MHz晶振,便可以形成自激振荡器,这个自激振荡器能在单片机内部产生时钟脉冲信号。
此次的正弦信号是由时钟电路提供。在单片机内部还有一个构成内部振荡器的反相放大器[6]。引脚XTAL1是反向放大器的输入,而引脚XTAL2是反向放大器输出;如果采用外部时钟源驱动,XTAL2则不需要连接;一般情况下同一个系统会使用同样频率的晶振,这样整个系统的每个部分便可以保持一致。
显示模块电路
显示模块用四位数码管显示,数码管显示的速度比较快,原理相对简单,很容易被使用,显示效果简洁,所以选择了数码管。数码管一般分为共阳极数码管和共阴极数码管[7]。本设计用的是共阳极数码管。共阳极数码管是把发光二极管的阳极连接在一起,公共阳极接正电压(通常是+5v),当某个发光二极管的阴极收到低电平的信号时,则这个发光二极管便会发光,此时这个发光二极管相应的段就可以显示出来。根据不同发光段组成想要的数字。

在图中数码管的A-G,DP连接的是单片机的P1口,P1口(P1.0~P1.7,1~8 脚):P1口是一个双向I/O口。数码管的驱动一般分为静态驱动和动态驱动[8]。静态驱动就是数码管的每个LED灯对应单片机的一个I/O接口,这种驱动的优点是简单,但占用较多的I/O接口。图2-3中的三极管是用来做驱动的作用,因为单片机的接口输出电流比较小,从而导致驱动能力较弱,采用三极管起到放大电流的作用,提高了驱动能力。
温度传感器(DS18B20)电路
温度采集电路如图所示,DS18B20的数据脚和电源之间加了一个4.7K的电阻,目的是不仅为了保证数据的稳定,同时起到限流的作用。

温度传感器将采集的信号数据传输到单片机的P3.5口。因为从单片机的P3.5接口到温度传感器DS18B20 直接连接便可,而且温度传感器对温度信号的读、写以及温对度信号的转换的所需的电源而并不需要外部电源由数据线自身就可以提供,所以不需要备份电源,而且可以在1秒内把温度数据转换为数字,具有很高的效率。温度传感器对温度测量范围从-55度到+125度,增量值为0.5度,具有较高的测量温度和精确度,所以选择了DS18B20。
烟雾采集检测电路
烟雾采集检测电路如图2-5所示。烟雾采集检测电路是利用烟雾传感器检测周围空气的烟雾信号传输给模数转换电路。烟雾传感器采用的是MQ-2传感器。当烟雾传感器检测到烟雾时,烟雾时传感器的电阻值下降,通过测量传感器的输出电压值变化便可以反映烟雾浓度的变化,在此设计中,将传感器与电压串联,将电压信号传输到ADC0809A/D转换电路。MQ-2烟雾传感器具有较高的灵敏度、电导率波动范围大、恢复速度快、强大的抗干扰能力、输出的烟雾信号大、使用的时间长和工作相对稳定等优点。

AD模数转换电路
ADC0809模数转换电路如图2-6所示。AD数模转换电路是将烟雾传感器检测到的模拟信号转换成数字信号再次输入到单片机,单片机对接收到的数字信号进行相应的运算[9]。模数转换电路采用ADC0832,经过ADC0832采集后就可以得到烟雾各种气体后经过R14电阻的电阻分压的电压信号转换成数字信号,再传输给单片机,经过单片机运算分析后在数码管上把烟雾的浓度显示出来,
ADC0832芯片接口功能:CS片连接单片机的P3.2。当单片机给予低电平信号时ADC0832开始工作。CH0和CH1是模拟输入接口,接收由烟雾传感器检测的烟雾信号。在本设计中选择了CH0通道。D0与D1是转换数据输出接口,因为DO接口和D1接口在同时工作时并不是同时有效的所以将D0和D1并联 数据信号输出,再与单片机的p3.3相连,将转化的数字信号传给单片机。CLK 芯片时钟输入,连接单片机的P3.4,用于计数。
烟雾信号通过CH0进入ADC0832,D0将转换的数字信号传输到单片机的P3.3(外部中断)。
声音报警电路
烟雾检测仪系统电路采用PNP型S8550三极管驱动,蜂鸣器连接单片机的P3.6接口。当蜂鸣器接收到来自单片机的P3.6口输出的低电平信号时,此时三极管导通,便会触发报警。当蜂鸣器接收到来自单片机P3.6口输出的高电平时,三极管处于截止状态,电路发生断路,蜂鸣器因断电便停止报警。本设计的声音报警电路选择的是蜂鸣报警器电路,但是蜂鸣器的工作电流比较大,单片机的I/0口的电流偏弱并不能直接驱动蜂鸣器,所以此次设计的蜂鸣器前添加了一个PNP型三极管8550,这样就可以放大电流,从而来驱动蜂鸣器。图2-7中的电阻R13起到限流的作用,防止电流过大
系统主程序设计
烟雾报警系统主程序流程图如图3-1所示。需要注意的是当第一次使用时,第一步要给传感器预热,因为MQ-2型烟雾传感器在没有电源供应的情况下放一段时间后,当再次接通电源时,并不能立刻检测烟雾信号,所以预热这一步骤是必须的[11]。当预热结束后一段时间,报警系统才正式进入监控状态。

在报警系统工作过程中,烟雾浓度信号经ADC0832由模拟信号转换成数字信号后,再由AT89C51进行处理和运算,判断和控制系统是否触发报警。主程序包括数码管浓度字符显示功能(显示烟雾浓度和温度值)、手动报警功能、报警浓度等级和报警温度设定功能,中断子程序等。
检测烟雾信号浓度的同时检测温度传感器的温度,和设置的阈值做对比,如果大于设置阈值,便会触发报警,蜂鸣器发出滴滴蜂鸣声,此设计中温度报警阈值同样可以设定,这样的设计使报警器更加符合实际情况,是烟雾报警器的功能进一步完善,进一步满足报警器的要求,从而进一步降低火灾发生的几率。
相关文章:
【IoT】智能烟雾报警器
设计简介 硬件设计由AT89C51单片机、DS18B20温度传感器、4位共阳数码管、电源模块、报警模块、按键模块、MQ-2烟雾检测模块和ADC0832模数转换模块组成。 烟雾传感器MQ-2检测空气中的烟雾气体,通过ADC0832进行数据转换,经过单片机的运算处理后在数码管上…...
Python实现定时执行脚本(5)
前言 本文是该专栏的第17篇,后面会持续分享python的各种干货知识,值得关注。 笔者在前面有详细介绍过几种使用python实现定时执行任务的方法,可以说都是简单易上手的那种。而本文,再来详细介绍另外一种定时方法,那就是利用任务框架APScheduler(advanceded python schedu…...
JavaSe第4次笔记
1.转义字符和编程语言无关。 2.斜杠(\)需要转义,反斜杠(/)不需要转义。 3.不能做switch的参数的数据类型:long float double boolean( String可以)。 4.输入的写法:Scanner(回车自动带头文件(import java.util.Scanner;)) Scanner scan …...
epoll机制
预备知识 文件描述符file descriptor 文件描述符是Linux系统中对文件、套接字等I/O资源的抽象,每个打开的文件或套接字都有一个唯一的文件描述符。应用程序可以使用文件描述符来读写文件或进行网络通信。 epoll允许程序监控多个文件描述符,以便在这些…...
Java使用不同方式获取两个集合List的交集、补集、并集(相加)、差集(相减)
1 明确概念首先知道几个单词的意思:并集 union交集 intersection补集 complement析取 disjunction减去 subtract1.1 并集对于两个给定集合A、B,由两个集合所有元素构成的集合,叫做A和B的并集。记作:AUB 读作“A并B”例&#…...
【Android笔记80】Android之Retrofit适配器和文件上传下载
这篇文章,主要介绍Android之Retrofit适配器和文件上传下载。 目录 一、Retrofit适配器 1.1、Retrofit适配器 (1)引入RxJava依赖 (2)定义接口...
Nodejs模块化
1.模块化 1.1.模块化的基本概念 模块化是指解决一个复杂问题时,自顶向下逐层把系统划分为若干模块的过程。对于整个系统而言,模块是可组合、分解和更换的单元。 1.2 编程中的模块化 编程领域的模块化就是把一个大文件拆成独立并相互依赖的多个小模块…...
C++STL基础
STL基础 诞生 cpp的面向对象和泛型编程的思想本质就是提高复用性诞生了STL库 基本概念 STL标准模板库STL从广义上分为容器、算法及迭代器容器和算法之间通过迭代器进行连接STL几乎所有的代码都采用了模板类或者模板函数 基本组件 容器、算法、迭代器、仿函数、适配器、空间配置…...
数学建模经验【更新中】
数学建模简单入门 一、 分工 3人,1人论文,1人代码主力,1人论文代码(前一半时间主代码,后一半时间主论文) Tips: 不养闲人,论文必须要在对代码和题目极其了解并且能跟上队友思路的情况下才能写…...
【python学习笔记】:Excel 数据的封装函数
对比其它编程语言,我们都知道Python最大的优势是代码简单,有丰富的第三方开源库供开发者使用。伴随着近几年数据分析的热度,Python也成为最受欢迎的编程语言之一。而对于数据的读取和存储,对于普通人来讲,除了数据库之…...
如何获取或设置CANoe以太网网卡信息(GET篇)
CAPL提供了一系列函数用来操作CANoe网卡。但是,但是,首先需要明确一点,不管是获取网卡信息,还是设置网卡信息,只能访问CAPL程序所在的节点下的网卡,而不是节点所在的以太网通道下的所有网卡 关于第一张图中,Class节点下,有三个网卡:Ethernet1、VLAN 1.100、VLAN 1.200…...
“终于我从字节离职了...“一个年薪50W的测试工程师的自白...
我递上了我的辞职信,不是因为公司给的不多,也不是因为公司待我不好,但是我觉得,我每天看中我憔悴的面容,每天晚上拖着疲惫的身体躺在床上,我都不知道人生的意义,是赚钱吗?是为了更好…...
【Spring】八种常见Bean加载方式
🚩本文已收录至专栏:Spring家族学习 一.引入 (1) 概述 关于bean的加载方式,spring提供了各种各样的形式。因为spring管理bean整体上来说就是由spring维护对象的生命周期,所以bean的加载可以从大的方面划分成2种形式ÿ…...
第五回:样式色彩秀芳华
import matplotlib as mpl import matplotlib.pyplot as plt import numpy as np第五回详细介绍matplotlib中样式和颜色的使用,绘图样式和颜色是丰富可视化图表的重要手段,因此熟练掌握本章可以让可视化图表变得更美观,突出重点和凸显艺术性。…...
关于@Test单元测试
1、关于doReturndoReturn(new Test()).when(testService).updateStatusByLock(any(), any());在单元测试里这个方法可以执行到这里之间跳过不去执行,返回你想要的返回值2、关于givengiven(user.getName(any())).willReturn("张三");在单元测试里这个方法 …...
【项目实战】WebFlux整合r2dbc-mysql实战
一、背景 Webflux虽然是响应式的,但是没办法,JDBC是基于阻塞IO实现的,所以无法真正的威力发挥不出来。 但是,Webflux一旦整合了R2DBC之后,那么它将不再受限于数据库连接了,真正打通了响应式应用的任督二脉,性能才被释放。 当然,除了Spring推出的R2DBC协议,还有Orac…...
go版本分布式锁redsync使用教程
redsync使用教程前言redsync结构Pool结构Mutex结构acquire加锁操作release解锁操作redsync包的使用前言 在编程语言中锁可以理解为一个变量,该变量在同一时刻只能有一个线程拥有,以便保护共享数据在同一时刻只有一个线程去操作。对于高可用的分布式锁应…...
大数据之Hudi数据湖_大数据治理_简介_发展历史_特性_应用场景---大数据之Hudi数据湖工作笔记0001
支持hive spark flink 美国公司开发的~ 都在使用,这些企业都在用 支持hadoop的,更新,插入,删除 和数据增量处理 支持流式数据处理. hive是离线数仓 hive不支持事物 insert overwrite 底层后来通过这种方式支持了事物 insert overwrite处理数据很低效,因为更新是基于覆盖实现…...
射频功率放大器基于纵向导波的杆状构件腐蚀诊断方法的研究
实验名称:基于纵向导波的杆状构件腐蚀诊断方法研究方向:无损探伤测试设备:信号号发生器、安泰ATA-8202功率放大器、数据采集卡、直流电源、超声探头、钢杆、前置放大器。实验过程:图:试验装置试验装置如图3.2所示。监测…...
Leedcode 二分查找 理解1
一个up的理解 一、二分查找基础例题 力扣https://leetcode.cn/problems/binary-search/ 二、二分查找模板问题 带搜索区间分为3个部分: 1、[mid],直接返回 2、[left,mid-1],设置边界right mid - 1 3、[mid1,right]&#x…...
龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
从面试角度回答Android中ContentProvider启动原理
Android中ContentProvider原理的面试角度解析,分为已启动和未启动两种场景: 一、ContentProvider已启动的情况 1. 核心流程 触发条件:当其他组件(如Activity、Service)通过ContentR…...
