闪电传感器

概述

Gravity:闪电传感器采用AMS独具创新的AS3935数字闪电传感芯片与Coilcraft的MA5532-AE专用天线,可在室内或室外,安全地检测方圆40km范围内发生闪电的距离,闪电强度与统计闪电发生次数。

模块内嵌专门抗干扰算法可有效避免各类家用电器所产生的电气干扰。除了让一般气象爱好者也能简单、高效、准确地测量统计当地的雷暴数据,得益于模块小巧的身材与40km的探测距离,也可以将其嵌入各类智能可穿戴设备中,为户外爬山旅游,登高作业的人们提供早于人所能感知的早期雷雨天气预警,让人们提早做好预防措施。也可将其嵌入于室内对雷电敏感设备的保护装置内,在闪电来即将临之际自动触发保护装置,将设备切换到备用电源与电网隔离以保障贵重设备的安全。当然也可以利用模块的中断引脚IRQ,在闪电发生瞬间,使IRQ输出的中断脉冲触发开启快门,帮助摄影爱好者准确抓拍闪电发生的震撼瞬间。

特性

  • 40km范围内闪电距离测量
  • 雷电相对强度检测
  • 室内外均可使用
  • 内嵌专用算法抗电气干扰,防误检测

应用场景

  • 智能气象站(闪电测量统计)
  • 智能穿戴设备(户外雷雨早期预警)
  • 雷电保护装置
  • 闪电拍摄

技术规格

  • 工作电压:3.3V~5.5V
  • 工作电流:2.2mA
  • 闪电最大测量距离:40 km
  • 测量距离分辨率:1~4 km
  • 闪电测量强度:21位,即0 ~ 16777201
  • I2C地址:三个可选0x03,0x02,0x01
  • 工作温度:-40℃-80℃
  • 接口类型注1:Gravity I2C 4P接口
  • 安装孔间距:15.0mm
  • 产品尺寸:30.0mm×22.0mm
  • 产品重量: 3g

注1:I2C逻辑电平同VCC。即当供电VCC为5V时,SCL和SDA逻辑电平为0-5V。当供电VCC为3.3V时,SCL和SDA逻辑电平为0-3.3V。

接口说明



标号 名称 功能描述
1 VCC 电源正极(3.3~5.5V)
2 GND 电源负极
3 SCL I2C时钟线
4 SDA I2C数据线
5 ADDR I2C地址选择拨码开关
6 IRQ 闪电报警中断引脚
7 PWR 电源指示灯(红色)

关于闪电距离与强度测量

  • 闪电发生距离的最大测量值为40km,受限于固有测量方式与算法,距离测量分辨率为1~4km,共15个距离值,具体见下表:
序号 距离(km)
1 40
2 37
3 34
4 31
5 27
6 24
7 20
8 17
9 14
10 12
11 10
12 8
13 6
14 5
15 闪电就在附近!

闪电测量距离一览表

  • 闪电强度数值为21位,即0 ~ 16777201,并无实际物理意义,但可用于比较不同闪电之间的相对强度。

Arduino使用教程

准备

  • 硬件

    • Arduino UNO控制板(或类似控制板) x 1
    • Gravity:闪电传感器 x 1
    • Gravity 4P传感器连接线(或若干杜邦线) x 1
  • 软件

⚠注意:

  • DFRobot AS3935库的“examples”文件中含有两份样例代码,其中“DFRobot_AS3935_lightning_sensor_ordinary”为标准板,代码简单,参数均为默认值,烧录至Arduino后即可运行,无需调整,适合于大部分初次接触该模块的用户。“DFRobot_AS3935_lightning_sensor_detailed”版为高级用户提供更多可调用的接口函数,便于对模块各项细节参数的调整。

连线图



样例代码

  • 将模块与Arduino按照连线图相连。I2C地址默认为0x03,对应代码中的AS3935_ADD3。如果需要修改I2C地址,可先通过模块上的拨码开关配置硬件I2C地址,并修改样例代码中I2C地址的宏定义“#define AS3935_I2C_ADDR AS3935_ADDx”,其中x可以为1,2,3。拨码开关与I2C地址参数对应关系如下:
    • AS3935_I2C_ADDR1:0x01, A0=1, A1=0
    • AS3935_I2C_ADDR2:0x02, A0=0, A1=1
    • AS3935_I2C_ADDR3:0x03, A0=1, A1=1
  • 安装DFRobot AS3935库。如何安装库?
  • 打开Arduino IDE,将下面的代码上传到Arduino UNO。
  • 打开Arduino IDE的串口监控视器,把波特率调至115200,观察串口打印结果。
/*!
 * @file DFRobot_AS3935_lightning_sensor_ordinary.ino
 * @brief SEN0290 Lightning Sensor
 * @n This sensor can detect lightning and display the distance and intensity of the lightning within 40 km
 * @n It can be set as indoor or outdoor mode.
 * @n The module has three I2C, these addresses are:
 * @n  AS3935_ADD1  0x01   A0 = 1  A1 = 0
 * @n  AS3935_ADD2  0x02   A0 = 0  A1 = 1
 * @n  AS3935_ADD3  0x03   A0 = 1  A1 = 1
 * @copyright   Copyright (c) 2010 DFRobot Co.Ltd (http://www.dfrobot.com)
 * @license     The MIT License (MIT)
 * @author [TangJie](jie.tang@dfrobot.com)
 * @version  V1.0.2
 * @date  2019-09-28
 * @url https://github.com/DFRobor/DFRobot_AS3935
 */

#include "DFRobot_AS3935_I2C.h"

volatile int8_t AS3935IsrTrig = 0;

#if defined(ESP32) || defined(ESP8266)
#define IRQ_PIN       0
#else
#define IRQ_PIN       2
#endif

// Antenna tuning capcitance (must be integer multiple of 8, 8 - 120 pf)
#define AS3935_CAPACITANCE   96

// Indoor/outdoor mode selection
#define AS3935_INDOORS       0
#define AS3935_OUTDOORS      1
#define AS3935_MODE          AS3935_INDOORS

// Enable/disable disturber detection
#define AS3935_DIST_DIS      0
#define AS3935_DIST_EN       1
#define AS3935_DIST          AS3935_DIST_EN

// I2C address
#define AS3935_I2C_ADDR       AS3935_ADD3

void AS3935_ISR();

DFRobot_AS3935_I2C  lightning0((uint8_t)IRQ_PIN, (uint8_t)AS3935_I2C_ADDR);

void setup()
{

  Serial.begin(115200);
  Serial.println("DFRobot AS3935 lightning sensor begin!");

  while (lightning0.begin() != 0){
    Serial.print(".");
  }
  lightning0.defInit();

  #if defined(ESP32) || defined(ESP8266)
    attachInterrupt(digitalPinToInterrupt(IRQ_PIN),AS3935_ISR,RISING);
  #else
    attachInterrupt(/*Interrupt No*/0,AS3935_ISR,RISING);
  #endif

  // Configure sensor
  lightning0.manualCal(AS3935_CAPACITANCE, AS3935_MODE, AS3935_DIST);
  // Enable interrupt (connect IRQ pin IRQ_PIN: 2, default)

//  Connect the IRQ and GND pin to the oscilloscope.
//  uncomment the following sentences to fine tune the antenna for better performance.
//  This will dispaly the antenna's resonance frequency/16 on IRQ pin (The resonance frequency will be divided by 16 on this pin)
//  Tuning AS3935_CAPACITANCE to make the frequency within 500/16 kHz ± 3.5%
//  lightning0.setLcoFdiv(0);
//  lightning0.setIRQOutputSource(3);

}

void loop()
{
  // It does nothing until an interrupt is detected on the IRQ pin.
  while (AS3935IsrTrig == 0) {delay(1);}
  delay(5);

  // Reset interrupt flag
  AS3935IsrTrig = 0;

  // Get interrupt source
  uint8_t intSrc = lightning0.getInterruptSrc();
  if (intSrc == 1){
    // Get rid of non-distance data
    uint8_t lightningDistKm = lightning0.getLightningDistKm();
    Serial.println("Lightning occurs!");
    Serial.print("Distance: ");
    Serial.print(lightningDistKm);
    Serial.println(" km");

    // Get lightning energy intensity
    uint32_t lightningEnergyVal = lightning0.getStrikeEnergyRaw();
    Serial.print("Intensity: ");
    Serial.print(lightningEnergyVal);
    Serial.println("");
  }else if (intSrc == 2){
    Serial.println("Disturber discovered!");
  }else if (intSrc == 3){
    Serial.println("Noise level too high!");
  }
}
//IRQ handler for AS3935 interrupts
void AS3935_ISR()
{
  AS3935IsrTrig = 1;
}

结果

  • 当发生闪电时,中断报警引脚IRQ产生中断脉冲,触发主控显示闪电报警中断“Lightning occurs!”,并显示闪电发生距离和强度。
    SEN0290_Arduino_result1.png

  • 当模块附近有电磁干扰,模块会提示附近有干扰源“Disturber discovered!”,若干扰噪声过大,模块也会发出干扰噪声过大的警报“Noise level too high!”。
    SEN0290_Arduino_result2.png

Mind+(基于Scratch3.0)图形化编程

  1. 下载及安装软件。下载地址:https://www.mindplus.cc 详细教程:Mind+基础wiki教程-软件下载安装
  2. 切换到“上传模式”。 详细教程:Mind+基础wiki教程-上传模式编程流程
  3. “扩展”中选择“主控板”中的“Arduino Uno”。 "扩展"“传感器”中搜索选择“闪电传感器”。详细教程:Mind+基础wiki教程-加载扩展库流程
  4. 进行编程,程序如下图:
  5. 菜单“连接设备”,“上传到设备”
  6. 程序上传完毕后,打开串口即可看到数据输出。详细教程:Mind+基础wiki教程-串口打印

树莓派教程

准备

  • 硬件

    • 树莓派3代B型(或类似)主控板 x 1
    • Gravity:闪电传感器 x 1
    • Gravity 4pin传感器连接线(或若干杜邦线) x 1
  • 软件

接线图



注意:

  • 由于I2C逻辑电平同VCC,而树莓派的I2C电平为3.3V,因此模块在与树莓派相连时,供电VCC只能接3.3V。 |

安装驱动

  1. 启动树莓派的I2C接口。如已开启,可跳过该步骤。
    打开终端(Terminal),键入如下指令,并回车:
    pi@raspberrypi:~ $ sudo raspi-config
    然后用上下键选择“ 5 Interfacing Options ”, 按回车进入,选择 “ P5 I2C ”, 按回车确认“ YES ”即可。重启树莓派主控板。

  2. 安装Python依赖库与git,树莓派需要联网。如已安装,可跳过该步骤。
    在终端中,依次键入如下指令,并回车:
    pi@raspberrypi:~ $ sudo apt-get update
    pi@raspberrypi:~ $ sudo apt-get install build-essential python-dev python-smbus git

  3. 下载驱动库。在终端中,键入如下指令,并回车:
    pi@raspberrypi:~ $ git clone https://github.com/DFRobot/DFRobot_AS3935.git

运行样例代码

  • 将模块与树莓派按照连线图相连。I2C地址默认为0x03,对应代码中的AS3935_ADD3。可先通过模块上的拨码开关配置硬件I2C地址,并修改样例代码中I2C地址,即修改“sensor = DFRobot_AS3935(AS3935_I2C_ADDR3, bus = 1)”中第一个参数AS3935_ADDx,其中x可以为1,2,3。拨码开关与I2C地址参数对应关系如下:
    • AS3935_I2C_ADDR1:0x01, A0=1, A1=0
    • AS3935_I2C_ADDR2:0x02, A0=0, A1=1
    • AS3935_I2C_ADDR3:0x03, A0=1, A1=1
  • 在终端中,依次键入如下指令并回车,运行样例代码:
    pi@raspberrypi:~ $ cd ~/DFRobot_AS3935/RaspberryPi/Python/example
    pi@raspberrypi:~/DFRobot_AS3935/RaspberryPi/Python/example $ python DFRobot_AS3935_ordinary.py

结果

  • 当发生闪电时,中断报警引脚IRQ产生中断脉冲,触发主控显示闪电报警中断“Lightning occurs!”,并显示闪电发生距离和强度。
  • 当模块附近有电磁干扰,模块会提示附近有干扰源“Disturber discovered!”,若干扰噪声过大,模块也会发出干扰噪声过大的警报“Noise level too high!”。
    SEN0290_RP3_result.png

常见问题

更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。

更多

DFshopping_car1.png DFRobot商城购买链接