不是普通测距模块
没有雷电或强电磁事件时,长期没有报警是正常现象,不能用手靠近来验证距离。
淘宝 SKU:U2304-2
Overview
AS3935 是一颗可编程雷电传感器芯片,可以检测附近雷电活动,并估算到风暴前沿的距离。芯片带有噪声评估和人为干扰识别算法,因此串口里常见的结果不只有 Lightning,也可能是 Noise 或 Disturber。
没有雷电或强电磁事件时,长期没有报警是正常现象,不能用手靠近来验证距离。
官方 Basic 例程使用 INT 中断提示事件,Arduino 需要把模块 INT 接到数字脚,例如 D4。
电机、继电器、开关电源、长导线和室内电器可能触发 Noise / Disturber,需要调阈值或远离干扰源。
Wiring
自绘无水印示意图。先按这 5 根线接 I2C:VCC、GND、SDA/MOSI、SCL、IRQ/INT。MISO、CS 等 SPI 脚先不要接。
| AS3935 模块 | Arduino UNO / Nano | 说明 |
|---|---|---|
| VCC | 5V 或 3.3V | 按你手里模块丝印供电;芯片资料支持 2.4V 到 5.5V。 |
| GND | GND | 必须共地。 |
| SDA / MOSI | A4 / SDA | I2C 数据线。有些板子丝印写 MOSI,I2C 模式下就是 SDA。 |
| SCL | A5 / SCL | I2C 时钟线。 |
| IRQ / INT | D4 | 事件中断脚,SparkFun Basic I2C 例程默认使用 D4。 |
| MISO / CS | 不接 | SPI 模式用脚,I2C 基础例程先不要接。 |
| A0 / A1 / SI | 按模块默认 | A0/A1 决定地址;SI 决定 I2C/SPI 模式。模块已设好 I2C 时先不要动。 |
Arduino Examples
先放 SparkFun 官方库的 Basic I2C 例程,适合客户验证模块是否能通信、INT 是否触发、串口是否能输出 Noise / Disturber / Lightning。
库安装:Arduino IDE 打开库管理器,搜索并安装 SparkFun AS3935 Lightning Detector。
串口:打开串口监视器,波特率设为 115200。
常见地址:例程默认 AS3935_ADDR 0x03,如果模块跳线不同,需要改地址。
/* SparkFun AS3935 BasicLightning I2C */
#include <SPI.h>
#include <Wire.h>
#include "SparkFun_AS3935.h"
#define AS3935_ADDR 0x03
#define LIGHTNING_INT 0x08
#define DISTURBER_INT 0x04
#define NOISE_INT 0x01
SparkFun_AS3935 lightning(AS3935_ADDR);
const int lightningInt = 4;
void setup() {
pinMode(lightningInt, INPUT);
Serial.begin(115200);
Wire.begin();
if (!lightning.begin()) while (1);
}
void loop() {
if (digitalRead(lightningInt) == HIGH) {
int intVal = lightning.readInterruptReg();
if (intVal == LIGHTNING_INT) {
byte distance = lightning.distanceToStorm();
Serial.print(distance);
Serial.println("km away");
}
}
}
下载官方 Basic I2C 例程
/*
This example demonstrates how to detect lightning! It has a few basic
settings to help with rejecting noise or "disturbers" (false lightning events).
It uses the onboard interrupt hardware pin, so in addition to attaching to
it data lines you'll need to connnect to the interrupt pin labled "INT".
By: Elias Santistevan
SparkFun Electronics
Date: May, 2019
License: This code is public domain but you buy me a beer if you use this and we meet someday (Beerware license).
*/
#include <SPI.h>
#include <Wire.h>
#include "SparkFun_AS3935.h"
// 0x03 is default, but the address can also be 0x02, 0x01.
// Adjust the address jumpers on the underside of the product.
#define AS3935_ADDR 0x03
#define INDOOR 0x12
#define OUTDOOR 0xE
#define LIGHTNING_INT 0x08
#define DISTURBER_INT 0x04
#define NOISE_INT 0x01
SparkFun_AS3935 lightning(AS3935_ADDR);
// Interrupt pin for lightning detection
const int lightningInt = 4;
// This variable holds the number representing the lightning or non-lightning
// event issued by the lightning detector.
int intVal = 0;
int noise = 2; // Value between 1-7
int disturber = 2; // Value between 1-10
void setup()
{
// When lightning is detected the interrupt pin goes HIGH.
pinMode(lightningInt, INPUT);
Serial.begin(115200);
Serial.println("AS3935 Franklin Lightning Detector");
Wire.begin(); // Begin Wire before lightning sensor.
if( !lightning.begin() ) { // Initialize the sensor.
Serial.println ("Lightning Detector did not start up, freezing!");
while(1);
}
else
Serial.println("Schmow-ZoW, Lightning Detector Ready!");
// The lightning detector defaults to an indoor setting at
// the cost of less sensitivity, if you plan on using this outdoors
// uncomment the following line:
//lightning.setIndoorOutdoor(OUTDOOR);
}
void loop()
{
if(digitalRead(lightningInt) == HIGH){
// Hardware has alerted us to an event, now we read the interrupt register
// to see exactly what it is.
intVal = lightning.readInterruptReg();
if(intVal == NOISE_INT){
Serial.println("Noise.");
// Too much noise? Uncomment the code below, a higher number means better
// noise rejection.
//lightning.setNoiseLevel(setNoiseLevel);
}
else if(intVal == DISTURBER_INT){
Serial.println("Disturber.");
// Too many disturbers? Uncomment the code below, a higher number means better
// disturber rejection.
//lightning.watchdogThreshold(threshVal);
}
else if(intVal == LIGHTNING_INT){
Serial.println("Lightning Strike Detected!");
// Lightning! Now how far away is it? Distance estimation takes into
// account any previously seen events in the last 15 seconds.
byte distance = lightning.distanceToStorm();
Serial.print("Approximately: ");
Serial.print(distance);
Serial.println("km away!");
}
}
delay(100); // Slow it down.
}
FAQ
不是。AS3935 不是普通触摸或距离传感器,没有雷电或强电磁事件时可能长时间没有报警。先看串口启动信息,确认能显示模块 Ready。
Noise 表示环境噪声过高,Disturber 表示疑似人为干扰,不一定是真雷电。可以远离电机、继电器、开关电源、电脑电源线,再调整噪声/干扰阈值。
优先检查 VCC/GND、SDA/SCL、I2C 地址和模块通信模式。UNO/Nano 的 I2C 是 A4/A5;如果地址跳线不是 0x03,需要改例程里的 AS3935_ADDR。
室内模式抗干扰更强但灵敏度较低;户外项目可以在例程里启用 lightning.setIndoorOutdoor(OUTDOOR),同时注意防水和远离金属外壳干扰。
References
只放公开可访问链接和官方库入口,不放客户截图、订单信息或聊天隐私。