Jednoduchá vývojová deska s čipem AS3935, která je schopná zachytit blesk až do vzdálenosti 40 km.
AS3935 detekuje blesk jak mezi mraky – zemí, tak i mezi mraky.
Franklinův detektor blesků se tak může hodit jako vylepšení vaší stávající či nové meteostanice.
Vzdálenost na jakou může detektor odhalit blesk je od 1 km až do 40 km ve 14 krocích.
Díky širokému napájecímu napětí od 2.4V do 5.5V tak můžete detektor použít s nejrůznějšími deskami ať už Arduino Uno, Micro, Due nebo ESP8266 či ESP32.
Čip má v sobě implementovanou pokročilou detekci rušení a navíc můžete použít watchdog či úroveň přerušení, pro zlepšení filtrace falešných detekcí.
S AS3935 si můžete povídat buď přes sběrnici I2C nebo 4-vodičovou SPI. Čip má také možnost nastavení až čtyř I2C adres (dva adresové piny). V kombinaci s různou volbou kondenzátorů u antény tak můžete dosáhnout velmi širokého spektra blesků, které můžete zachytit – od těch nejmenších až po ty největší.
Spotřeba detektoru se pohybuje od jednotek do stovek μA.
2μA v případě vypnutého vnitřního regulátoru (max. napájecí napětí 3.6V), max. 15μA v případě zapnutého regulátoru (max. napájecí napětí 5.5V), 60μA (70μA se zapnutým regulátorem) v případě poslouchání a 350μA v případě vyhodnocování příchozího signálu.
Význam jednotlivých pinů čipu
Vzorový příklad pro použití s ESP32-LPkit vývojové kitu najdete na
https://github.com/LaskaKit/Testcode_examples/tree/main/Sensors/AS3935
Výstup může být pak následující
Testovací kód pro Arduino:
/*
* Vzorovy kod pro pouziti detektoru blesku s ESP32-LPkit
* Pripojeni pres I2C sbernici
*
* Zapojeni
* A1 - 3.3V
* A0 - 3.3V
* EN_V - Nezapojen
* IRQ - GPIO4
* SI - 3.3V // GND = SPI; 3.3V = I2C
* CS - GND
* MISO - GND
* MOSI - GPIO21
* SCL - GPIO22
* GND - GND
* VCC - 3.3V
*
* Potrebne knihovny
* https://github.com/sparkfun/SparkFun_AS3935_Lightning_Detector_Arduino_Library
*/
#include <Wire.h>
#include "SparkFun_AS3935.h"
#define AS3935_ADDR 0x03
#define INDOOR 0x12
#define OUTDOOR 0x0E
#define LIGHTNING_INT 0x08
#define DISTURBER_INT 0x04
#define NOISE_INT 0x01
SparkFun_AS3935 lightning(AS3935_ADDR);
const int pinPreruseni = 4; // Interrupt pin
int hodnota = 0; // prectena hodnota
void setup() {
// Interrupt pin pro detekci, HIGH = aktivni preruseni
pinMode(pinPreruseni, INPUT);
Serial.begin(115200);
Serial.println("AS3935 Inicializace");
Wire.begin(); // I2C inicializace
// Inicialiazce detektoru blesků
if( !lightning.begin() )
{
Serial.println ("Problem s inicializaci. Zkontrolujte propojeni.");
while(1);
}
else
Serial.println("Detektor blesku pripraven");
// Odkomentujte v pripade, ze chcete pouzit detektor venku
//lightning.setIndoorOutdoor(OUTDOOR);
}
void loop() {
if(digitalRead(pinPreruseni) == HIGH) // Preruseni - blesk, sum nebo ruseni detekovano
{
hodnota = lightning.readInterruptReg(); // kontrola, co aktivovalo interrupt
if(hodnota == NOISE_INT){
Serial.println("Detekovan sum!");
// Pokud preruseni casto způsobuje sum, odkomentujte radek nize
//lightning.setNoiseLevel(Hodnota); // hodnota od 1 do 7
}
else if(hodnota == DISTURBER_INT){
Serial.println("Detekovano ruseni!");
// Pokud prerusni casto zpusobuje ruseni, odkomentujte radek nize
//lightning.watchdogThreshold(Hodnota); // hodnota od 1 do 10
// Pokud vidite casto ruseni, muzete povolit dalsi filtraci
//lightning.maskDisturber(true); // hodnota true nebo false
}
else if(hodnota == LIGHTNING_INT){
Serial.println("Detekovan BLESK!");
// Cteni odhahodave vzdalenosti blesku
byte vzdalenostBlesku = lightning.distanceToStorm();
Serial.print("Priblizne: ");
Serial.print(vzdalenostBlesku);
Serial.println("km daleko!");
// Cteni odhadovane energie blesku
long energieBlesku = lightning.lightningEnergy();
Serial.print("Odhadovana energie blesku: ");
Serial.println(energieBlesku);
}
}
delay(100);
}