51单片机项目(14)——基于51单片机的烟雾报警系统_单片机烟雾报警器设计(1)

收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
img
img

如果你需要这些资料,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  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);      //清除数据
      }


![img](https://img-blog.csdnimg.cn/img_convert/84ffe7c04dc13d14cc6894647444fb8c.png)
![img](https://img-blog.csdnimg.cn/img_convert/1b19f13838109b92be80e84b5ff7903d.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618679757)**


**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618679757)**

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值