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

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;                     //打开定时器0ET0=1;                     //使能定时器0EA=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\nLcdWriteData(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;elseread_flag=0;
}

4.获取源工程

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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

竞赛选题 题目:基于大数据的用户画像分析系统 数据分析 开题

文章目录 1 前言2 用户画像分析概述2.1 用户画像构建的相关技术2.2 标签体系2.3 标签优先级 3 实站 - 百货商场用户画像描述与价值分析3.1 数据格式3.2 数据预处理3.3 会员年龄构成3.4 订单占比 消费画像3.5 季度偏好画像3.6 会员用户画像与特征3.6.1 构建会员用户业务特征标签…

ABAP: JSON 报文解析——/ui2/cl_json

1、JSON数组 报文格式如下&#xff0c;是JSON 数组类型的。 [{"I_TYPE":"V","I_BUSINESSSCOPE":"1001"},{"I_TYPE":"V","I_BUSINESSSCOPE":"1002"} ] json转换为SAP内表&#xff1a; TYP…

数字IC芯片验证流程及验证工具推荐?收藏专用

验证其实是一个“证伪”的过程&#xff0c;从流程到工具&#xff0c;验证工程师的终极目的都只有一个&#xff1a; 发现所有BUG&#xff0c;或者证明没有BUG&#xff0c;以保证芯片功能性能的正确性和可靠性。 验证环节对于一颗芯片的重要性也是不言而喻的&#xff1a; 从项…

spring-boot集成mybatis-generator

通用 Mapper 在 1.0.0 版本的时候增加了 MyBatis Generator (以下简称 MBG) 插件&#xff0c;使用该插件可以很方便的生成实体类、Mapper 接口以及对应的 XML 文件。 下面介绍了 mybatis-generator 在 spring-boot 中的使用过程 一、引入pom依赖 <dependencies><de…

视频合并方法:视频剪辑、合并,高效操作,轻松制作大片

在数字媒体时代&#xff0c;视频剪辑已经成为展示创意和表达自我的重要方式。通过剪辑和合并视频片段&#xff0c;可以将不同的素材组合在一起&#xff0c;制作出更加丰富和有表现力的作品。在视频合并之前&#xff0c;要对视频素材进行剪辑。通过剪辑&#xff0c;可以删除不需…

怎么把视频声音提取成MP3?一分钟解决!

有的时候&#xff0c;我们在看一些综艺访谈节目的时候&#xff0c;觉得里面干货满满&#xff0c;会忍不住想单独把音频下载出来单独听&#xff0c;还可以防止会员到期后不可以再播放&#xff0c;下面就向大家介绍三种好用的视频音乐提取成MP3的方法。 方法一&#xff1a;使用野…

〔005〕虚幻 UE5 像素流多用户部署

✨ 目录 ▷ 为什么要部署多用户▷ 开启分发服务器▷ 配置启动多个信令服务器▷配置启动客户端▷多用户启动整体流程和预览▷注意事项▷ 为什么要部署多用户 之前的像素流部署,属于单用户,是有很大的弊端的打开多个窗口访问,可以看到当一个用户操作界面的时候,另一个界面也会…

计算机毕业设计 基于SpringBoot的智能停车场计费系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

CSC公派博士后|管理学老师赴韩国首尔大学达成目标

J老师自身背景正好卡在CSC公派博士后申报条件的边缘&#xff0c;为增大通过概率&#xff0c;其提出优选亚洲范围内的世界知名高校、专业相符、2年博士后职位的要求。最终我们用韩国首尔大学的邀请函助其顺利获批CSC&#xff0c;实现了所有既定目标。 J老师背景&#xff1a; 申…

Nginx Openresty通过Lua+Redis 实现动态封禁IP

需求 为了封禁某些爬虫或者恶意用户对服务器的请求&#xff0c;我们需要建立一个动态的 IP 黑名单。对于黑名单中的 IP &#xff0c;我们将拒绝提供服务。并且可以设置封禁失效时间 环境准备 linux version: centos7 / ubuntu 等 redis version: 5.0.5 nginx version: nginx…

FreeRTOS源码阅读笔记6--event_groups.c

通常用的事件标志组是一个32位的变量uxEventBits&#xff0c;可设置的位有24位&#xff0c;一共就是24 种事件。 事件组的结构体类型&#xff1a; 6.1创建事件组xEventGroupCreate() 6.1.1函数原型 返回值&#xff1a;事件组句柄&#xff0c;指向事件组。 6.1.2函数框架 ①…

科技与教育:未来教育的新趋势

在21世纪&#xff0c;科技的快速发展正在深刻地改变教育行业。从在线学习平台到虚拟现实教室&#xff0c;科技为教育带来了革命性的变化。本文将探讨科技如何影响现代教育&#xff0c;并预测未来教育的发展趋势。 一、科技在教育中的应用 在线学习平台&#xff1a;通过平台如C…