Non ci sono prodotti a carrello.
Sta arrivando un temporale? Scopriamolo con questo circuito basato su un sensore di scariche elettriche atmosferiche in grado di dirci quanto รจ lontano e intenso.
I centri meteorologici effettuano il monitoraggio, oltre che dei parametri atmosferici allo scopo di stimare la probabilitร di precipitazioni e la loro consistenza, anche dei temporali e dei fenomeni elettrostatici loro correlati, come i fulmini.
In alcune nazioni esposte a consistenti fenomeni elettrici atmosferici e ai rischi che comportano, tale attivitร assume particolare rilievo.
Senza scomodare la cinematografia, che non ci ha fatto mancare lungometraggi del genere catastrofico con fulmini โassassiniโ, possiamo comprendere come le saette che vediamo solcare il cielo o abbattersi al suolo possano essere pericolose, per lโenergia notevole che possono cedere precipitando dal cielo (dove si formano) a terra, su edifici, alberi e purtroppo anche sullโuomo.
Una pericolositร che diviene ancora maggiore in quelle aree dove possono verificarsi fulmini quasi a ciel sereno, ovvero in maniera inaspettata. Senza contare i danni che i fulmini caduti vicino alle linee di distribuzione elettrica e di telecomunicazioni causano, sotto forma di sovratensioni indotte, agli apparati elettrici e soprattutto elettronici.
Lโattivitร di analisi dei fenomeni elettrici atmosferici viene svolta con varie metodiche (la piรน antica delle quali fu lโaquilone di Benjamin Franklin) basate sulla valutazione preventiva degli accumuli di elettricitร statica nellโatmosfera e sullโintercettazione delle scariche elettriche, con apparati complessi e costosi, tuttavia si puรฒ condurre anche in maniera amatoriale, a casa propria, grazie a dispositivi come il sensore basato sullโintegrato AS3935 della AMS, del quale in queste pagine vi facciamo vedere unโapplicazione. Il componente utilizzato riesce a captare i disturbi radioelettrici causati dallo scoccare di archi elettrici (e i fulmini sono tali) e, tramite unโopportuna elaborazione, fornisce un segnale che corrisponde al rilevamento di un fulmine e della sua intensitร .
Un poโ di teoria
I fulmini sono scariche elettriche atmosferiche aria-aria o aria-terra che si innescano a causa dellโaccumulo di una consistente carica elettrica, ovvero quando si crea tra due punti dellโatmosfera o tra lโaria e la terra (ma anche il mare o i corsi dโacqua) un forte scompenso di carica elettrica; nel momento in cui la differenza di potenziale dovuta allo scompenso di carica รจ tale da superare la rigiditร dielettrica del mezzo interposto (lโaria, di solito, che sia piรน o meno umida…) scocca lโarco elettrico, vale a dire la saetta, che comporta un flusso di corrente attraverso un mezzo per sua natura isolante.
La luce che ne deriva รจ causata dalla ionizzazione dei gas componenti lโaria compresa tra i punti tra i quali scocca lโarco, ovvero dal ritorno nei legami atomici degli elettroni asportati forzatamente dal fortissimo campo elettrico durante la scarica; lโenergia restituita dallโelettrone prima del rientro nel legame produce un fotone, ossia una particella di luce, che nei fulmini รจ in buona parte collocata nello spettro del visibile.
Tale attivitร elettrica รจ percettibile a distanza come fosse un segnale radioelettrico trasmesso da unโemittente: lo dimostrรฒ lโesperimento di Hertz, il quale fece scoccare delle scintille e rilevรฒ a distanza con un dipolo la debole tensione che ne risultava.
Infatti possiamo immaginare lo scoccare di un fulmine come fosse unโoscillazione che stimola elettricamente lโaria e fa propagare una carica elettrica a una distanza che dipende dalla composizione dellโaria e dalle sue condizioni, nonchรฉ dalle prestazioni dellโantenna ricevente e del dispositivo utilizzato per la ricezione.
Utilizzando un sensibile ricevitore RF ed elaborando il segnale ricevuto mediante un algoritmo proprietario, lโintegrato AS3935 determina se lโattivitร elettrica captata รจ causata da un fulmine, ovvero stima la probabile distanza sulla base dellโintensitร del segnale; per distanza si intende verosimilmente quella dallโinizio del temporale o tempesta nellโambito del quale scoccano i fulmini e il chip puรฒ determinarla con sufficiente approssimazione tra un massimo di 40 km e un minimo di 1km.
Lโalgoritmo serve a discernere, con una certa approssimazione, tra fulmini (scariche atmosferiche) e scariche elettriche prodotte ad esempio da spinterogeni e candele di motori a benzina, motori elettrici a spazzole, forni a microonde.

Collegamento di Arduino al sensore fulmini e al display seriale

Collegamento di Arduino al sensore fulmini e al display I2C
Il sensore di fulmini
Per rendere piรน facilmente utilizzabile il sensore di scariche atmosferiche abbiamo realizzato una breakout board contenente lโintegrato AS3935.
Il cuore รจ chiaramente lโintegrato, del quale portiamo allโesterno lโalimentazione, il bus per la comunicazione con circuiti esterni a microcontrollore, oltre che i principali segnali di controllo. Tutte le linee da collegare allโesterno o gestire dallโesterno sono riportate a una fila di piazzole a passo 2,54 mm poste su un lato, alle quali รจ possibile applicare un pin-strip.
La connessione dati con lโesterno avviene serialmente tramite IยฒC-Bus o SPI; in questโultimo caso impieghiamo le linee:
โข MISO (Master Input Slave Output) che รจ lโuscita della breakout board con la quale vengono inviati ad Arduino i dati relativi ai fulmini rilevati;
โข MOSI (Master Output Slave Input) che รจ lโuscita dati di Arduino con la quale vengono comunicati alla breakout board messaggi di impostazione o di conferma;
โข CS (Chip Select) ovvero la linea di uscita di Arduino che abilita la breakout board allโinterazione sul bus SPI; il CS serve perchรฉ sullโSPI possono affacciarsi vari dispositivi e per evitare collisioni dei dati occorre che ad ogni sessione di comunicazione ne venga abilitato uno solo per volta.
โข SCL (clock) che corrisponde al segnale con cui viene sincronizzata la comunicazione sul bus.
I predetti segnali vengono riportati al CN1; per la linea di clock SCL e per il MOSI sono state inserite le resistenze di pull-up.
Notate che il piedino 8 dellโAS3935, vale a dire il CS, in assenza di diversa impostazione viene mantenuto a livello alto dal proprio resistore di pull-up interno, ma puรฒ essere forzato a zero logico dal jumper JCS laddove non si preveda la gestione dallโesterno.
Quanto alla modalitร di comunicazione seriale, nella breakout board si puรฒ selezionare tramite un secondo jumper, siglato SI, che interviene sul piedino 9 (Select Interface); lโintegrato AS3935 funziona:
โข in modalitร SPI se il piedino 9 รจ posto a zero logico;
โข in modalitร IยฒC se il Select Interface รจ posto a VDD.
Nella nostra applicazione abbiamo optato per la prima, perciรฒ vedete che il jumper รจ stato chiuso.
Abbiamo poi il piedino IRQ (10), riportato al contatto 3 del connettore CN1, che comunica al microcontrollore quando IRQ รจ unโuscita che lโAS3935 porta a livello logico alto quando viene intercettato un fulmine e scritto in uno dei registri interni (REG0x03[3:0]) il valore corrispondente.
Procediamo con lโanalisi dello schema elettrico passando allo stadio dโingresso, che รจ quello attraverso cui captiamo il disturbo radioelettrico corrispondente al fulmine; esso fa capo ai piedini 2 e 3, che sono lโinput del radioricevitore presente nellโintegrato, il quale richiede allโingresso un circuito antirisonante allo scopo di sintonizzare una certa banda ed escludere disturbi a bassa frequenza e di natura estranea allo scopo.
Il circuito di sintonia รจ composto da una bobina (induttanza AF) acquistabile giร pronta e da due condensatori in parallelo, che assicurano il valore di capacitร richiesto per determinare la frequenza di centro banda voluta. La bobina fa anche da antenna ricevente ed assicura unโottima sensibilitร .
Il resistore R3, posto in parallelo al circuito antirisonante, peggiora il fattore di merito dello stesso ma limita superiormente lโampiezza del segnale introdotto nello stadio di sintonia; peggiorando il fattore di merito si allarga la banda sintonizzabile, il che ci va benissimo perchรฉ dobbiamo rilevare scariche elettriche che non hanno una precisa frequenza, ma cadono entro un ampio spettro.
La frequenza di centro banda dello stadio di sintonia รจ determinata dalla formula:
f = 1/6,28 x โLC
dove L รจ lโinduttanza della bobina e C la somma di C4 e C5. Il fattore di merito Q รจ invece dato dal rapporto:
Q = f/Bw
dove Bw รจ la larghezza di banda del circuito antirisonante.
Il radioricevitore รจ del tipo ad amplificazione diretta e dispone di AGC, per regolare il guadagno in funzione del livello atteso allโuscita; il condensatore C3 determina il tempo di intervento dellโAGC.
Il segnale fornito viene quindi analizzato dallโapposito blocco interno al chip, che lo confronta con la media del rumore di fondo e tramite lโapposito algoritmo determina cosa puรฒ essere un fulmine e cosa va scartato, quindi il risultato produce una stringa di dati che viene depositata nellโapposito registro e, laddove il valore corrisponda a quello di un fulmine, genera un impulso sullโIRQ (piedino 3 del connettore CN1).
Concludiamo lโanalisi dello schema elettrico della scheda sensore con i piedini ADD0 e ADD1, che servirebbero per impostare lโindirizzo dellโintegrato laddove per la comunicazione venisse utilizzato il bus IยฒC e che in questo caso, essendo inutilizzati, sono portati a livello logico alto collegandoli allโuscita VREG (piedino 6) del regolatore di tensione interno allโintegrato; la tensione fornita da tale pin viene filtrata dal ripple mediante il condensatore C1.
Ciรฒ detto, passiamo a vedere come la breakout board รจ utilizzata nel circuito.
Listato 1
#include <SPI.h> #include <AS3935.h> #include <SoftwareSerial.h> #define LCD_pin 5 // LCD data signal const int NoDetect = 30; int counter; int NumDisturber = 0; SoftwareSerial LCD = SoftwareSerial(0, LCD_pin); void printAS3935Registers(); byte SPItransfer(byte sendByte); void AS3935Irq(); AS3935 AS3935(SPItransfer, 3, 2); //change to AS3935(SPITransfer,9,3) if using slot #2 void setup() { serLCDInit(); backlightOn(); clearLCD(); lcdPosition(0, 3); LCD.print(โLightiningโ); lcdPosition(1, 5); LCD.print(โSensorโ); delay(1500); clearLCD(); Serial.begin(9600); SPI.begin(); SPI.setDataMode(SPI_MODE1); SPI.setClockDivider(SPI_CLOCK_DIV16); SPI.setBitOrder(MSBFIRST); AS3935.reset(); delay(10); AS3935.setOutdoors(); AS3935.registerWrite(AS3935_NF_LEV, 2); //write 2 in the Noise Level register //AS3935.registerWrite(AS3935_SREJ,0); //write 2 in the Noise Level register and run calibration // if lightning detector can not tune tank circuit to required tolerance, calibration function will return false if (!AS3935.calibrate()) Serial.println(โTuning out of range, check your wiring, your sensor and make sure physics laws have not changed!โ); // now we print the value in the calibration register TUN_CAP it is in the range 0 - 15 tunecap = AS3935.registerRead(AS3935_TUN_CAP); //Internal calibration Serial.print(โTuning cap register isโ); Serial.println(tunecap); AS3935.enableDisturbers(); printAS3935Registers(); // AS3935IrqTriggered = 0; } void loop() { delay(1000); Serial.println(โWaiting...โ); if (counter == 0) { NumDisturber = 0; counter = NoDetect; clearLCD(); lcdPosition(0, 1); LCD.print(โNo lightiningโ); lcdPosition(1, 4); LCD.print(โdetectedโ); } else { counter = counter - 1; } } void printAS3935Registers() { int noiseFloor = AS3935.getNoiseFloor(); int spikeRejection = AS3935.getSpikeRejection(); int watchdogThreshold = AS3935.getWatchdogThreshold(); Serial.print(โNoise floor is: โ); Serial.println(noiseFloor, DEC); Serial.print(โSpike rejection is: โ); Serial.println(spikeRejection, DEC); Serial.print(โWatchdog threshold is: โ); Serial.println(watchdogThreshold, DEC); } // this is implementation of SPI transfer that gets passed to AS3935 { return SPI.transfer(sendByte); } void AS3935Irq() { int irqSource = AS3935.interruptSource(); // returned value is bitmap field, bit 0 - noise level too high, bit 2 - disturber detected, and finally bit 3 - lightning! if (irqSource & amp; 0b0001) Serial.println(โNoise level too high, try adjusting noise floorโ); if (irqSource & amp; 0b0100) { NumDisturber += 1; Serial.println(โDisturber detectedโ); clearLCD(); lcdPosition(0, 0); LCD.print(โDisturb.Det: โ); LCD.print(NumDisturber, DEC); counter = NoDetect; } if (irqSource & amp; 0b1000) { // need to find how far that lightning stroke, function returns approximate distance in kilometers, // where value 1 represents storm in detectorโs near victinity, and 63 - very distant, out of range stroke // everything in between is just distance in kilometers int strokeDistance = AS3935.lightningDistanceKm(); if (strokeDistance == 1) { Serial.println(โStorm overhead, watch out!โ); lcdPosition(1, 1); Serial.println(โStorm overheadโ); lcdPosition(1, 3); Serial.println(โWATCH OUT!โ); counter = NoDetect; } if (strokeDistance == 63) { Serial.println(โOut of range lightning detected.โ); lcdPosition(0, 2); Serial.println(โOut of rangeโ); lcdPosition(1, 0); Serial.println(โlightning detectโ); counter = NoDetect; } if (strokeDistance & lt; 63 & amp; & amp; strokeDistance & gt; 1) { Serial.print(โLightning detectedโ); Serial.print(strokeDistance, DEC); Serial.println(โkilometers away.โ); lcdPosition(1, 0); LCD.print(โDistance: โ); LCD.print(strokeDistance, DEC); LCD.print(โkmโ); counter = NoDetect; } } }
Prevedere i fulmini con Arduino
Il progetto che vi proponiamo di realizzare consta sostanzialmente di tre elementi: il sensore di fulmini, disponibile su breakout board, una scheda Arduino Uno o Fishino Uno, il cui compito รจ analizzare il segnale fornito dal sensore ed elaborarlo per poi mostrare sul display LCD (che รจ il terzo elemento circuitale) le informazioni che ne desume, vale a dire il numero di scariche elettriche rilevate che si possono ritenere โfiglieโ di un temporale e la distanza stimata.
Negli esempi scaricabili troverete lo sketch per gestire il sensore fulmini con Arduino e visualizzare i dati rilevati su un display seriale o I2C.
Il tutto devโessere collegato come mostrato nel disegno di cablaggio visibile in queste pagine, dove la breakout board sensore fulmini si interfaccia ad Arduino tramite il connettore dellโICSP, grazie al fatto che questโultimo veicola il bus SPI completo, ossia a 4 linee.
La connessione con la breakout board avviene sfruttando le linee del bus SPI riportate sul connettore ICSP; ci sono poi GND (la massa) e Vcc (collegato al +5V) con cui la scheda prende lโalimentazione da Arduino.
Il CS (attivo a livello logico zero) viene gestito dal digital I/O 3 di Arduino, impostato dallo sketch come uscita e lโIRQ della breakout board รจ invece interfacciato al digital I/O 2, inizializzato come input, dato che, nello specifico, IRQ avvisa Arduino o un eventuale microcontrollore interfacciato allโintegrato o alla sua breakout board che puรฒ leggere il contenuto del registro.
Quando IRQ torna a zero logico รจ prevista una pausa di almeno 2 ms prima della lettura del registro.
Per la gestione del sensore fulmini da Arduino allo scopo di leggere i dati rilevati, รจ stata utilizzata una libreria sviluppata da un appartenente alla community (Raivis Rengelis) e scaricabile da github.
La gestione รจ affidata a uno sketch il cui codice riportiamo nel Listato 1.
Quanto al display LCD seriale, รจ collegato ad Arduino tramite i contatti 5V e GND per lโalimentazione e il digital I/O 5, impostato come uscita, che invia i dati serialmente al contatto RX dellโLCD.
Il progetto mostra come leggere i dati rilevati dalla breakout, in particolare viene rilevato un eventuale temporale mostrando lโindicazione su un display LCD a comunicazione seriale.
Normalmente viene mostrata lโindicazione del temporale rilevato con il numero di rilevamenti negli ultimi 60 secondi. Se entro 60 secondi non avvengono altri rilevamenti, allora viene mostrata lโindicazione a display โNo lightining detectedโ (Fig. 1). Se nel registro dellโintegrato รจ disponibile la distanza di rilevamento, allora viene mostrato anche questo dato nella seconda riga del display, con un messaggio del tipo:
Disturb Det. x
dove al posto di โxโ รจ indicato quante scariche sono state rilevate. Sotto, appare la scritta (Fig. 2):
Distance: n km
dove viene indicata, al posto di โnโ la distanza stimata da dove รจ scoccato il fulmine. Se la distanza รจ inferiore al minimo, il display mostra nella prima riga Storm overhead e nella seconda WATCH OUT!

Fig. 2ย Rilevamento di 11 fulmini a una distanza stimata di 20 km.
Piano di montaggio
Elenco Componenti:
R1รทR4: 10 kohm (0603) C1: 1 ฮผF ceramico (0603) C2: 100 nF ceramico (0603) C3: 10 ฮผF ceramico (0603) C4: 680 pF ceramico (0603) C5: 270 pF ceramico (0603) L1: MA5532-AEB U1: AS3935-BQFT Varie: - Strip maschio 2 vie (2 pz.) - Strip maschio 7 vie - Jumper (2 pz.) - Circuito stampato S1324 (26x26 mm)
I componenti vanno disposti seguendo il piano di montaggio che trovate in queste pagine, dove potete vedere il giusto orientamento di quelli polarizzati; fate attenzione a non surriscaldare la bobina, onde evitare che si sciolga lo smalto e che venga pregiudicato lโisolamento.
Tutti gli elementi vanno montati sul lato superiore. Il componente piรน critico รจ lโintegrato AS3935, incapsulato in contenitore 16LD MLPQ (quadrato da 4×4 mm di lato) che a stretto rigore andrebbe montato con una stazione ad aria calda per il rework degli SMD, dopo aver stagnato e cosparso con il flussante le rispettive piazzole; con un poโ di attenzione e manualitร รจ possibile saldarlo, una volta compiute le predette operazioni, mediante il classico saldatore, avendo cura di toccare i pad lateralmente (il risultato non sarร lo stesso ma funzionerร ugualmente).
Terminate le saldature e verificato che sia tutto a posto, chiudete il ponticello JSI e lasciate aperto JCS, giacchรฉ allโimpostazione del Chip Select provvederร Arduino.
Ora prendete in mano lo schema di cablaggio e, con dei cavetti jumper, collegate tra loro Arduino, il display e la breakout board secondo quanto indicato. Ricordate che lโalimentazione per lโinsieme si fornisce in un unico punto, ossia sul connettore jack di Arduino Uno, mediante un alimentatore da 9 volt, capace di erogare 300 mA.
Prima di dare alimentazione collegate alla presa USB di Arduino un cavo USB A/B che dallโaltro lato inserirete in una presa USB del vostro computer, nel quale avrete avuto cura di installare lโIDE Arduino (va bene qualsiasi versione tra quelle uscite negli ultimi due anni); aprite quindi il file contenente lo sketch, che dovrete aver copiato nella cartella dellโIDE insieme alla libreria, quindi effettuate il download in Arduino. Fatto ciรฒ, staccate il PC e alimentate la vostra Arduino con lโalimentatore, verificando che il display si accenda e mostri i messaggi: inizialmente e in assenza di attivitร , apparirร il messaggio No lightning detected.
Se volete effettuare un test spicciolo del sistema, procuratevi un accendigas piezoelettrico (quelli a scintilla) e, mantenendolo a mezzo metro di distanza dalla breakout board premete piรน volte il pulsante per far scoccare qualche scintilla: il display dovrebbe mostrare il segnale Disturb. Det. con un numero che si aggiorna man mano che premete.
Con questo avete collaudato, seppure in maniera empirica, il sistema e siete certi che funzionerร in campo. Per un utilizzo piรน pratico inserite il tutto in un contenitore in plastica, lavorato per far uscire il display e rendere accessibile il jack di alimentazione di Arduino. La breakout board mettetela sotto al coperchio, fissandola con del silicone sigillante; evitate le viti, che potrebbero interferire, a meno di non utilizzare quelle in teflon.
Non utilizzate contenitori metallici perchรฉ schermerebbero la bobina ricevente della breakout board, con le conseguenze immaginabili, ossia il circuito non potrร rilevare alcun fulmine.
Ultima nota: lo sketch di Arduino prevede attualmente che per lo stadio RF sia impostato il guadagno corrispondente allโutilizzo allโesterno, come evidenziato nella riga di codice AS3935.setOutdoors();.
Se desiderate la modalitร indoor, perchรฉ utilizzate il circuito in casa, dovete cambiare tale riga in AS3935.setIndoor();.
Bene, detto ciรฒ possiamo concludere ricordandovi che il progetto, come tutti quelli open, puรฒ essere personalizzato da ognuno di voi al bisogno.
Sketch di esempio sensore fulmini
1 file(s) 8.71 KB
Per il download di questo file รจ necessario essere registrati al sito
2 Commenti