Jump to content
PLC Forum


martin1984

rilevatore di fulmini arduino

Recommended Posts

martin1984

salve

io sarein interessato ad costruire un rilevatore di fulmini  ed ho visto online che si potrebbe creare un rilevatore di fulmini con una radio am ed dei led che indicano la intensita dei fulmini tramite arduino , ma non spiegano come costruirlo ed come avere il file da caricare su arduino

 

qualcuno sa come aiutarmi ?

 

grazie

z232347d.jpg

Share this post


Link to post
Share on other sites

Livio Orsini
13 ore fa, martin1984 scrisse:

ma non spiegano come costruirlo ed come avere il file da caricare su arduino

 

Il file te lo devi realizzare facendo l'apposito programma su arduino.

La teroria è abbastanza semplice.

Sintonizzi la radio in OM su una freqeunza dove non ci sono trasmissioni.

In audio senti dei "crak" in corrispondenza delle scariche elettriche dei fulmini; più èforte il crak maggkiore è l'energia della scarica.

Colleghi l'uscita di bassa frequenza ad un circuito rivelatore di picco e questo lo fai entrare in un ingresso analogico di arduino.

 

Ora un paio di domande a te:

  1. Hai mai fatto alcun lavoro di programmazione software?
  2. Quali sono le tue cono9scenze teorico-pratiche di elettronica?

Share this post


Link to post
Share on other sites
martin1984
3 ore fa, Livio Orsini scrisse:

.

 

Ora un paio di domande a te:

  1. Hai mai fatto alcun lavoro di programmazione software?
  2. Quali sono le tue cono9scenze teorico-pratiche di elettronica? 

  -no non ho mai fatto ed da tempo che ho il progammatore arduino ma non l'ho mai usato , spesso faccio lettu ed riscitture di epprom , ma non scrivere i linguaggi

-  io mi occupo di riparazioni elettroniche sul schede pc , ma non nel creare circuiti

 

Colleghi l'uscita di bassa frequenza  ! dove si trova ?

Edited by martin1984

Share this post


Link to post
Share on other sites
gabri-z

😊

Il più alto livello lo trovi ai capi del altoparlante, ma forse ti conviene farti aiutare da qualcuno che cambia componenti perché sa che sono guasti, non a caso. 

La radiolina non è una scheda di PC che inserisci, vedi se va il PC e se no, rimetti la vecchia, devi sapere come funziona per poterla usarla in altri scopi che ascoltare il giornale. 

Share this post


Link to post
Share on other sites
martin1984

io mi occupo proprio di riparazione di componenti guasti , ho tutte i strumenti di saldatura ,  ma su schede di pc , ma radio è nuova non penso sia gia guasta 😀

Share this post


Link to post
Share on other sites
gabri-z

Forse mi sono espresso male, qualcuno ti saprà spiegare meglio.

Secondo me hai bisogno di aiuto, e non credo che basti quello che puoi trovare " a distanza " 

Comincia con leggere qualcosa sul principio di funzionamento di un ricevitore radio, almeno in grosso modo. 

La cosa è fattibile, con quale precisione, non si sa, dipende da te. 

Edited by gabri-z

Share this post


Link to post
Share on other sites
gabri-z

Per dire la verità, dipende anche dai materiali impiegati, avrai un risultato con la radiolina da 4 € ed un altro se usi un ricevitore russo degli anni '80 che giravi la manopola mezzo giro per spostarti di 1 Hz..... 

Share this post


Link to post
Share on other sites
Livio Orsini
4 ore fa, martin1984 scrisse:

ma radio è nuova non penso sia gia guasta 😀

 

non devi ripararla, ma mofificarla leggermente.

 

4 ore fa, martin1984 scrisse:

io mi occupo proprio di riparazione di componenti guasti , ho tutte i strumenti di saldatura

 

Cosda fai cambi solo i componenti o sai fare anche la ricerca guasto?

Se sai fare la ricerca guasti dovresti avere anche una discreta conoscenza dei circcuiti che vai a riparare, quindi puoi almeno immaginare che non basta recuperare tutti i componenti per realizare un circuito.

 

Da quanto ho capito io, ma potrei sbagliarmi, non si tratta di darti una mano da di farti tutto il progetto Hw e Sw.

 

poi vedendo i componenti della fotografia cosa vuoi che faccia arduino, oltre a leggere il segnale? accendere i LEDs in funzione dell'ampiezza?, indicarli sul visualizzatore? far suonare il cicalino? (ma c'è già l'altoparlante della radio) con quale logica?

 

Share this post


Link to post
Share on other sites
martin1984
il 7/7/2019 at 15:52 , Livio Orsini scrisse:

Cosda fai cambi solo i componenti o sai fare anche la ricerca guasto?  

 si giusto

 

il 7/7/2019 at 15:52 , Livio Orsini scrisse:

 

poi vedendo i componenti della fotografia cosa vuoi che faccia arduino, oltre a leggere il segnale? accendere i LEDs in funzione dell'ampiezza?, indicarli sul visualizzatore? far suonare il cicalino? (ma c'è già l'altoparlante della radio) con quale logica? 

 

anche solo  far scattere un relè , che poi ci collego un cicalino ed un lempeggiatore a led .

 

Volevo precisare che il rilevatore lo metteri fuori ed i led ed il cicalino in casa , cosi quando che chiuso riesco a capire ugulmente se arriva un temporale

 

 

Share this post


Link to post
Share on other sites
Livio Orsini

Si ma torniamo da capo.

Anche per far suonare un cicalino e lampeggiare un LED è comunque necessario fare un poco di progettazione Hw e scrivere il programma Sw.

 

Questo devi farlo tu, noi del forum possiamo aiutarti a svilupparlo, ma non possiamo farlo per te.

Share this post


Link to post
Share on other sites
martin1984

ok provo a farlo da solo , poi se ho dubbi scrivo qui

Share this post


Link to post
Share on other sites
martin1984

siamo riusciti a trovare un codice , ma vorrei fare delle modifiche ,( ho provato a farle ma non ho capito la procedura ) !

 

se vi posto il file qualcuno di voi ha la possibilita di modificarlo ?

Share this post


Link to post
Share on other sites
gabri-z
14 minuti fa, martin1984 scrisse:

se vi posto il file qualcuno di voi ha la possibilita di modificarlo ?

Tu postalo , spiega cosa vuoi ottenere e di sicuro qualcuno ti aiuterà (io non sono in grado ) , basta che trovi il tempo .

Share this post


Link to post
Share on other sites
martin1984

l'altro progetto era molto semplice , questo invece è piu completo : con un lcd che rileva la distanza :

ho gia acquistato il materiale ed lo sto assemblando.

 

Questo sarebbe il codice , io vorrei aggingere un led verde che lampeggi ad ogni rilevazione ed un un rele che si attivi ad 10 rilevazioni continue.

poi i tempi li potete mettere a piacimento , poi mi dite i punti che devo modifiacre per quando farò la taratura dello strumento

 

(non ho trovato altro modo per allegare il codice )

 

https://github.com/raivisr/AS3935-Arduino-Library

 

 

*/

#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();

// Function prototype that provides SPI transfer and is passed to
// AS3935 to be used from within library, it is defined later in main sketch.
// That is up to user to deal with specific implementation of SPI
// Note that AS3935 library requires this function to have exactly this signature
// and it can not be member function of any C++ class, which happens
// to be almost any Arduino library
// Please make sure your implementation of choice does not deal with CS pin,
// library takes care about it on it's own
byte SPItransfer(byte sendByte);
// tunecap is needed to display the calibration register value
int tunecap;

// Iterrupt handler for AS3935 irqs
// and flag variable that indicates interrupt has been triggered
// Variables that get changed in interrupt routines need to be declared volatile
// otherwise compiler can optimize them away, assuming they never get changed
void AS3935Irq();
// volatile int AS3935IrqTriggered; - not needed anymore

// First parameter - SPI transfer function, second - Arduino pin used for CS
// and finally third argument - Arduino pin used for IRQ
// It is good idea to chose pin that has interrupts attached, that way one can use
// attachInterrupt in sketch to detect interrupt
// Library internally polls this pin when doing calibration, so being an interrupt pin
// is not a requirement
AS3935 AS3935(SPItransfer,3,2); //change to AS3935(SPITransfer,9,3) if using slot #2
// AS3935 AS3935(SPItransfer,77,26); //if using Flip & Click socket A

void setup()
{
  serLCDInit();
  backlightOn();   
  clearLCD();
  lcdPosition(0,3);
  LCD.print("Lightining");
  lcdPosition(1,5);
  LCD.print("Sensor");
  delay(1500);
  clearLCD();
 
  Serial.begin(9600);
  // first begin, then set parameters
  SPI.begin();
  // NB! chip uses SPI MODE1
  SPI.setDataMode(SPI_MODE1);
  // NB! max SPI clock speed that chip supports is 2MHz,
  // but never use 500kHz, because that will cause interference
  // to lightning detection circuit
  SPI.setClockDivider(SPI_CLOCK_DIV16);
  // and chip is MSB first
  SPI.setBitOrder(MSBFIRST);
  // reset all internal register values to defaults
  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);

  // since this is demo code, we just go on minding our own business and ignore the fact that someone divided by zero

  // first let's turn on disturber indication and print some register values from AS3935
  // tell AS3935 we are indoors, for outdoors use setOutdoors() function
  // AS3935.setOutdoors();
  // turn on indication of distrubers, once you have AS3935 all tuned, you can turn those off with disableDisturbers()
  AS3935.enableDisturbers();
  printAS3935Registers();
  // AS3935IrqTriggered = 0;
  // Using interrupts means you do not have to check for pin being set continiously, chip does that for you and
  // notifies your code
  // demo is written and tested on ChipKit MAX32, irq pin is connected to max32 pin 2, that corresponds to interrupt 1
  // look up what pins can be used as interrupts on your specific board and how pins map to int numbers
  // ChipKit Max32 - irq connected to pin 2, or Arduino with irq connected to pin 3
  // Uncomment the next line if using slot #2 of the Arduino mikroBUS adapter
  // attachInterrupt(1,AS3935Irq,RISING);
  // uncomment line below and comment out line above for Arduino Mega 2560, irq still connected to pin 2
  attachInterrupt(0,AS3935Irq,RISING);
  // attachInterrupt(digitalPinToInterrupt(26),AS3935Irq,RISING); // if using Flip & Click socket A
}

void loop()
{
  // here we go into loop checking if interrupt has been triggered, which kind of defeats
  // the whole purpose of interrupts, but in real life you could put your chip to sleep
  // and lower power consumption or do other nifty things
 
  // I prefer to move this code inside the interrupt routine itself
  // Here I leave only some code to display "Waiting..." so I know everything works
 
  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
// you can (hopefully) wrap any SPI implementation in this
byte SPItransfer(byte sendByte)
{
  return SPI.transfer(sendByte);
}

// this is irq handler for AS3935 interrupts, has to return void and take no arguments
// always make code in interrupt handlers fast and short
void AS3935Irq()
{
  // there is no need for this flag anymore
  // AS3935IrqTriggered = 1;
   
  // I move all the code for dysplaiying events inside the interrupt routine
  // again there is no need for this flag
  // reset the flag
  // AS3935IrqTriggered = 0;
  // first step is to find out what caused interrupt
  // as soon as we read interrupt cause register, irq pin goes low
    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 & 0b0001)
      Serial.println("Noise level too high, try adjusting noise floor");
    if (irqSource & 0b0100)
    {
      NumDisturber+=1;
      Serial.println("Disturber detected");      
      clearLCD();
      lcdPosition(0,0);
      LCD.print("Disturb. Det: ");
      LCD.print(NumDisturber,DEC);
      counter=NoDetect;
    }  
    if (irqSource & 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 < 63 && strokeDistance > 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;
      }
    }
}

 

 

Edited by martin1984

Share this post


Link to post
Share on other sites
martin1984

salve

 

scusate ancora il disturbo , ho provato ad pendere delle radioline am ma durante un temporale non sentono le scariche elettriche !

 

posso creare un circuito semplice per rilevare le onde lunghe , avete uno schema ed la lista del materiale ?

Share this post


Link to post
Share on other sites
gabri-z

Cerca una del secolo scorso , più vecchia è , più probabile che vada bene per quel che vuoi fare .Parere mio , aspetta anche altri consigli .

Share this post


Link to post
Share on other sites
Livio Orsini
15 ore fa, martin1984 scrisse:

ho provato ad pendere delle radioline am ma durante un temporale non sentono le scariche elettriche !

 

Forse è una questione di antenna.

I fulmini sono trasmettitori a scintilla con uno spettro di freqeunza larghissimo.

Share this post


Link to post
Share on other sites
martin1984

ho usato la sua antenna in ferrite interna , ho provarto anche con un accendigas elettrico ed non sente la scintilla !

Share this post


Link to post
Share on other sites
gabri-z

Butta via la radiolina! Sto scherzando, deve essere una moderna con filtri sopra filtri... Cerca una vecchiotta, a transistor, vedrai che qualche cosa ricevi.

 

Share this post


Link to post
Share on other sites
martin1984

infatti per questo motivo cercavo un circuito da fare ! avevo trovato questo in rete , ma non so se vada bene per il mio caso ?

 

z654467b.jpg

Edited by martin1984

Share this post


Link to post
Share on other sites
martin1984

pero non capisco dove colleagre i pin di ingresso di arduino ?

o trovare in commercio un modulino che rileva le onde lunghe gia pronto ?

Edited by martin1984

Share this post


Link to post
Share on other sites
Livio Orsini

Colleghi l'uscita del secondo operazionale (dove c'è il LED) ad un ingresso di arduino; per sicurezza metti in parallelo all'ingresso uno zener da 5.1V.

Ad ogni scarica rivelata il secondo operazionale dovrebbe dare un impulso.

Share this post


Link to post
Share on other sites
martin1984

ho guardato lo schema con il dataschet del lm324n  , servono 2 integrati o solo 1 ?

Share this post


Link to post
Share on other sites
dott.cicala

Basta anche un solo LM358.

 

In ogni caso quel circuito non potrà mai discriminare l'origine degli impulsi e ti darà false letture.

Basterà lo spike di un interruttore, la scintilla di un qualsiasi accenditore per fornelli a gas o per scaldabagni, lo scintillio di un qualsiasi motore a spazzole....

 

L'analisi del segnale andrà fatta nel  firmware.

 

Ma scusa...se hai  l'AS3935 che già esegue tutte le verifiche necessarie....perché vuoi realizzare il circuito qui sopra?

 

 

Share this post


Link to post
Share on other sites
Livio Orsini

L'integrato è unso solo, contiene 4 amplificatori operazionali e se ne usano 2.

 

Comunque esoste un shield di Arduino specialistica come rivelatore di fulmini

Edited by Livio Orsini

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...