zoukankan      html  css  js  c++  java
  • 花 1 小时,开源设计 LoRa 烟感烟雾报警器

    提示1:锐米所有 LoRa 产品严格遵循国标标准的 LoRaWAN 协议
    提示2:您可以免费复制,修改和商用本项目,请注明锐米原创
    提示3:如果您有其他 LoRa 需求或建议,欢迎联系锐米 support@rimelink.com

    LoRa 烟雾报警器

    LoRa 烟雾报警器智能判断火灾,基于 LoRa 传送到服务器和 App,既可现场声光报警,又可以远程联网报警。
    物联网 Arduino LoRa LoRaWAN 烟雾报警

    运行效果

    如下图所示,侦测到烟雾浓度超过阈值,LoRa 烟雾报警器进行声光报警,通过 LoRa 发送消息,App 显示本次火灾事件。

    项目介绍

    全国每年大约会发生 23 万起火灾,有近 2000 人死于火灾,经济损失高达 200 亿元,防火从古以来都是社会的基本需求。

    LoRa 烟雾报警器能预先感知火灾,现场声光报警,通知周围的人们;更重要的是,它能远程联网报警,及时通知处理火情;联网使它维保便捷---故障自检,电池容量等

    LoRa 烟雾报警器可以部署在:家庭,学校,酒店,写字楼,工厂,仓库,古建筑等场景。

    LoRa 智慧消防系统

    无线设计 安装便利

    相比传统的产品,LoRa 烟雾报警器具备的优点为:

    • 安装简单便捷,不需要布线
    • 远程报警,维保便捷
    • 成本低廉,没有流量费用
    • 超低功耗,2节5号电池工作数年

    本项目开源设计 LoRa 烟雾报警器的核心---软件和硬件,用户选择一个漂亮的外壳和电池,即可组成一个产品。
    同时,简介了 LoRa 网络组件,轻松构建一个商用的智慧消防物联网。

    组件和材料

    LoRa 扩展板 x 1 采购链接

    Arduino UNO x 1 采购链接

    光电式烟雾传感器 x 1 采购链接

    蜂鸣器 x 1 采购链接

    (220欧姆电阻x2 + 10M欧姆电阻x1) 采购链接

    天线 x 1 采购链接

    杜邦线 x 8 采购链接

    LED x 1 采购链接

    面包板 x 1 采购链接

    软件和网络

    LoRa网关 采购链接

    LoRaServer 下载链接

    LoRaApp 下载链接

    Arduino IDE 下载链接

    技术细节

    元器件介绍

    这是专为 Arduino 而设计的 LoRa 扩展板,既可以安装在 Arduino UNO 上,也能使用杜邦线连接到 Arduino Pro Mini。

    它能达到空旷 10km 的通信距离,休眠电流仅 1.3uA。精心设计的软件库,使其开发极为容易:

    • 发送数据
    LoRa.write("123", 3);
    
    • 接收数据
    if (LoRa.availabe()) { 
        len = LoRa.read(buf, MAX_LEN); 
    }
    
    Arduino UNO 是最常用的开发板,它便宜简单,接线方便。 光电式烟雾传感器,通过一束红外光和一个光敏感应器来测量烟的浓度,功耗低,成本低,稳定可靠。 470MHz 胶棒天线,增益 3.5dB,特别适合中国 LoRa 频段范围(470~510MHz)。

    硬件接线

    如下图所示,使用杜邦线连接 Arduino、光电式烟雾传感器、LED和蜂鸣器。

    • 光电式烟雾传感器的红外发光二极管串联 220 欧姆的电阻
    • 光电式烟雾传感器的光电二极管串联 10M 欧姆的电阻
    • 蜂鸣器和 LED 串联 220 欧姆的电阻

    通信逻辑

    如下图所示,LoRa 烟雾报警器上报烟雾浓度给服务器和 App

    为此,需要配置如下的网络组件:

    行业第一的超低功耗---休眠仅 1.4uA

    如下图所示(实物拍摄),ArduinoLoRa+ 的低功耗可达 1.4uA,这不仅是行业第一的超低功耗,而且达到了器件极限

    如下图所示,2 节 5 号碱性电池容量约 2890mAH,因为 LoRa 烟雾报警器是”平时休眠,触发供电“,设平均 10 分钟工作一次,电池可工作近 6 年。终端电池寿命计算器

    Arduino 代码

    编译本工程需要添加LoRa 驱动库

    使用 Arduino IDE 打开工程,点击"Sketch -> Include Library -> Add .ZIP Library..."

    Arduino 的 zip 库安装路径一般为:C:UsersAdministratorDocumentsArduinolibraries

    Arduino 的代码简洁,容易理解,下载链接

    • DEBUG 设置为 0 禁止调试功能;设置为 1 它将通过 8 和 9 两个引脚打印调试信息(使用“USB转串口”连接到 PC)
    • 哨兵观察与快速采样算法原理:无烟时每秒仅读取 1 次,一旦发现烟雾浓度超过阈值(哨兵观察),以每 0.12 秒频率快速采集 16 次,计算烟雾浓度平均值。
    #include <lora.h>
    
    lora LoRa;
    
    const int buzzerPin = 13;
    const int photodiodePin = 0;  // A0
    const int smokeThreshold = 80;  // 0 <= no smoke < 80, 80 < thin smoke < 200, 200 < thick smoke <= 1023 
    
    #define DEBUG    0  // 0=disable, 1=enable
    
    #if DEBUG
    #include <SoftwareSerial.h>
    SoftwareSerial debugSerial(8, 9);  // 8=RX, 9=TX
    #endif
    
    void setup()
    {
      pinMode(buzzerPin, OUTPUT);
      Serial.begin(115200);  // for LoRa Node
    #if DEBUG
      debugSerial.begin(115200); // for debug
    #endif
    }
    
    void loop()
    {
      // perfect interval for Arduino watchdog timer is: 15, 30, 60, 120, 250, 500, 1000, 2000, 4000, 8000
      #define FAST_SAMPLE_INTERVAL      120   // 120ms
      #define NORMAL_SAMPLE_INTERVAL    1000  // 1000ms
      #define SAMPLE_NUMBER             16
      
      int val, sum;
      int array[1];
      
      val = analogRead(photodiodePin);
    #if DEBUG  
      debugSerial.println(val);
    #endif  
      if (smokeThreshold < val)  // sentry observation
      {
        // Check fire danger after sentry alert
        sum = 0;
        for (int count = 0; count < SAMPLE_NUMBER; ++count)
        {
          val = analogRead(photodiodePin);
          sum += val;
          delay(FAST_SAMPLE_INTERVAL);
        }
    
        val = sum / SAMPLE_NUMBER;  // get the average value
        if (smokeThreshold < val)
        {
          array[0] = val;
          LoRa.write(array, sizeof(array));
          
          digitalWrite(buzzerPin, HIGH);
          delay(3000);
          digitalWrite(buzzerPin, LOW);
    
        #if DEBUG
          debugSerial.print("get fired, val = ");
          debugSerial.println(val);
        #endif
        }
      }
      
      delay(NORMAL_SAMPLE_INTERVAL);
    }
    

    低成本批量生产

    LoRa 烟雾报警器的硬件成本约 ¥60,这依赖于批量数目和供货渠道。

    批量生产的一些技术挑战:尺寸,成本,功耗,烧录,升级
    我们为您准备好解决方案:低成本快速开发LoRa终端:从1到10000

    工作原理

    光电式烟雾传感器原理

    • 光电式烟雾传感器由光学模块和一个黑暗的烟雾迷宫组成。光学模块采用红外发光二极管(IRED)和光电二极管(PD),2 者的位置是偏离的。
    • 无烟情况下,IRED 沿腔室直线发送光束(类似于激光指示器),PD 接收不到红外光,不产生光电流
    • 有烟情况下,烟雾粒子会将部分光束散射到 PD 上,使其阻抗发生变化,产生光电流

    光电式烟雾传感器实物与内部结构


    光电式烟雾传感器工作原理

    计算 IRED 串联电阻

    红外发光二极管(IRED)需要一个串联电阻来控制电流,否则它会很快烧坏

    与 IRED 串联的电阻被用于控制 IRED 导通时的电流量。为了计算电阻值,需要知道输入电源电压(Vs,Arduino UNO 为 5V,有些 Arduino Pro Mini 为 3.3V),IRED 的正向电压(Vf)和流过 IRED 的电流(I)的数值。
    其电阻欧姆值的计算公式(称为欧姆定律)为:

    R = (Vs - Vf) / I

    在本设计中,用 5V 的输入电源电压和 15mA 电流来驱动正向电压为 1.8V 的 IRED 会使用以下值:

    Vs = 5V, Vf = 1.8V, I = 0.015A

    代入公式则有

    R = (5V - 1.8V) / 0.015A = 213 欧姆

    231 欧姆不是一个标准电阻值,所以把它取整为 220 欧姆。

    该电阻器如接线图所示连接在电源和 IRED 的阳极之间,但它也可以被连接到 LED 的另一侧(阴极和地之间)。

    Arduino 的引脚具有 40mA 的额定最大电流。如果 IRED 需要比这更大的电流,这需要使用晶体管驱动电路。

    计算 PD 串联电阻

    如下图所示,光电二极管是加反向电压,无光时,反向电阻为无穷大;如果有光照,反向电阻随光照强度减小。
    (如果和普通二极管一样加正向电压,光电二极管只有单向导电性,无法表现出它的光电效应。)

    A0 模拟计数的值由负载电阻 R 和 PD 的阻抗决定,即有:

    analogRead() = 1023 * R / (R + PD)

    在本设计中选用的负载电阻 R 为 10M 欧姆,因此有:

    • 无光时,PD 阻抗为无穷大,analogRead() 读数为 0~80
    • 弱光时,PD 阻抗约为 80M 欧姆,analogRead() 读数为 80~200
    • 强光时,PD 阻抗约为 1K 欧姆,analogRead() 读取为 200~1023

    延伸应用

    • 降低功耗
      如上设计所示,红外发光二极管的工作电流达到 15mA,要提升电池的续航时间,这需要降低电流。

      一种可行的办法是间歇驱动,如以每秒 1ms 的脉冲,由于它的占空比为 1/1000 秒,15mA 电流除以 1000,平均仅 15µA 的电流。

    • 提高灵敏度
      行业里,用户经常抱怨烟雾报警器灵敏度不好 --- 对着设备点香烟也不报警!

      为此,可以通过 LoRaApp 下行设置报警阈值,这样,可以按用户的意愿对烟雾浓度做出反应。

    • 避免误判
      电路的噪音可能导致光电二极管阻抗变化,为避免误判火灾,这需要软件在检测到光电流后,多次采样多次判断

    • 及时静音
      当烟雾报警器蜂鸣器响起后,持续的高分贝声音会让周围的人们难受。除了添加按钮静音外,还可以通过 LoRaApp 下行设置静音,后者特别适合不方便接触设备的场景。

    • 检测电池容量
      电池容量对于 LoRa 烟雾报警器的维保意义重大。下面链接的方法可以让 LoRa 烟雾报警器定时检测电池容量,LoRaApp 实时显示和低压提醒。
      花 1 小时,开源设计 LoRa 检测电池容量

  • 相关阅读:
    Linux操作篇之配置Samba
    Chrome扩展实现网页图片右键上传(以E站图片搜索为例)
    Linux开机自动挂载NFS配置的一个误区
    ffmpeg指令解读海康威视摄像头
    linux服务器性能调优之tcp/ip性能调优
    多线程程序设计中的8条简单原则
    初识文件系统
    socket中的listen到底干了哪些事情?
    ip面向无连接?TCP面向连接?HTTP连接方式?
    网络层和数据链层的区别
  • 原文地址:https://www.cnblogs.com/rimelink/p/12400338.html
Copyright © 2011-2022 走看看