giovedì 6 febbraio 2014

Meteo - Anemometro

ANEMOMETRO

- Stazione meteo con Arduino - 

- Weather Station with Arduino -

- 05/02/2014 -

  Con questo post continua la costruzione della "nostra"  stazione meteorologica.

This post continue the project for the weather station.


Oggi vedremo come utilizzare un anemometro a coppette.










Ogni stazione meteorologica dovrebbe avere un anemometro, occorre misurare almeno intensità, e direzione del vento.

L'anemometro a coppette da me acquistato ha al suo interno un sensore reed che chiude il contatto al passaggio di un piccolo magnete, il magnete è solidale alla parte in movimento ( quella con le coppette) e quindi ogni giro passa in prossimità del sensore che si chiude.
In questo modo si hanno inpulsi in numero proporzionale alla velocità del vento.


Arduino dovrà contare il numero degli impulsi e il tempo trascorso.

Per calcolare la velocità del vento con questo anemometro occore conoscere: (r) il raggio, o braccio ( distanza asse coppette in metri), il numero dei giri al secondo (f), e quindi: 

Velocità =  r * 6.28 * f  = Velocità in m/s.  Per Velocità in Km/h = (Vm/s * 3,6)

 

 

Attenzione! il sensore che ho acquistato ha due calamite quindi ogni giro 2 impulsi.

 

 

Per collegare l' anemometro ad Arduino ho usato il seguente schema:

 L'antirimbalzo è queello pubblicato sul sito di Arduino.

Lo sketch esegue il conteggio degli impulsi e conteggia il tempo ( due secondi), quindi applica la formula descritta qui sopra ( tenendo conto che sono 2 impulsi per giro).

Lo sketch è commentato completamente.

 /*
//*********************************************************
  Sergio  & Adiano Prenleloup

 ***** Stazione meteo *********
 *** Prova per anemometro ****
 *** Versione 1.04 ************
 ******   31/01/2014 **********
 ******************************
Sketch per la prova anemometro trasparente
L'anemometro ha due magneti che chiudono
il contatto reed ( ogni giro 2 impulsi).

*/
const float Pi = 3.141593; // Pigreco
const float raggio = 0.06; // raggio dell'anemometro in metri
const int reedPin = 2; // pin assegnato al contatto reed


int Statoreed = 0; // variabile per la lettura del contatto
int Statoreed_old = 0; // variabile per evitare doppio conteggio

int Conteggio = 0;// variabile che contiene il conteggio delle pulsazioni
unsigned long int TempoStart = 0; // memorizza i  millisecondi dalla
                                 //prima pulsazione conteggiata
                               
unsigned long int Tempo = 0; // per conteggiare il tempo trascorso dalla prma pulsazione

unsigned long int TempoMax = 2000;// numero di millisecondi (2 seondi)
                  //per azzerare il conteggio e calcolare la Velocità
                  // così non si conteggiano brevi folate di vento

void setup() {
    Serial.begin(9600);   //attiva la porta seriale
    pinMode(reedPin, INPUT);// mette in ascolto del reed il pin 2
  
}

//--------------------------------------------
// loop principale
//--------------------------------------------

void loop()
{
  Statoreed = digitalRead(reedPin); // legge il contatto reed

  if (Statoreed != Statoreed_old) // si verifica se è cambiato
  {
    Statoreed_old = Statoreed;   // se SI si aggiorna lo stato
 
   if (Statoreed == HIGH)  // si controlla SE è alto ( passaggio magnete)
    {
      if (Conteggio == 0){ TempoStart =  millis();} // se E' il primo passaggio
                                                 // si memorizza il tempo di partenza
  
      Conteggio = Conteggio + 1; // si aggiorna il contatore    
  
      Tempo = ( millis() - TempoStart); // si conteggia il tempo trascorso dallo start conteggio
  
        
           if (Tempo >=  TempoMax)   // se il tempo trascorso è maggiore o uguale al tempo impostato
                                     // si eseguono i calcoli e la stampa della velocità
          {
     
           float deltaTempo = ( Tempo/1000.0); // si trasforma in secondi
       
           float Metris= (Conteggio*Pi*raggio)/deltaTempo;      // si calcola la velocità in metri/s
        
           float Kmora = (3.6*Conteggio*Pi*raggio)/deltaTempo; //formula per il calcolo della velocità
                                                             // in Km/h
           float Node = (Metris/0.514444); // si porta in nodi
       
           //--------------------------------------
           // stampa i valori sul monitor
           //---------------------------------------
           Serial.print("Velocità m/s = ");
           Serial.println(Metris);
           Serial.print("Velocità nodi = ");
           Serial.println(Node);
           Serial.print("Velocità Km/h = ");
           Serial.println(Kmora);
   
           Conteggio = 0; // azzeriamo il conteggio per nuova lettura
           delay(5000);// attesa per altra lettura        
          }
    }
  }
}

 

Scarica qui lo sketch

 

Nota integrativa  (09/05/2015) - 1

Nel nostro caso l'anemometro è costituito da coppette solidali fra loro che ruotano sull'asse, descrivendo quindi una circonferenza, misurando quanti giri al secondo e moltiplicando per la misura della circonferenza si ottiene la velocità delle coppette che corrisponde alla velocità del vento.

Il numero dei giri può essere misurato in modi diversi, nel mio caso ci sono due magneti che chiudono un contatto reed. ( quindi ogni giro due impulsi).

Si tratta quindi di cronometrare il tempo e conteggiare il numero dei giri, ed è questo che facciamo con lo sketch proposto.

Cercherò di spiegare meglio la formula indicata: ( 2*Pi*r)*f

Vediamo in dettaglio (2*pi*r) = è la circonferenza percorsa da una coppetta che ruota sull'asse dell'anemometro.
Maggiore è la velocità del vento maggiore sarà la velocità angolare e quindi il numero dei giri al secondo che la coppetta esegue.

f = rappresenta gli impulsi al secondo ovvero il numero dei giri che vengono conteggiati dal magnete chiudendo il reed.
Sarà quindi f = Numero giri/secondi ho usato Conteggio/deltaTempo

per avere la velocità del vento occorre quindi conteggiare quanti giri al secondo e moltiplicarli per la distanza percorsa che nel nostro caso è una circonferenza.

Nella mia formula ho diviso il tutto per 2 perché ho due magneti [(2*pi*r)/2]*f che semplificando diventa : Pi*r*f

La formula finale è dunque Velocità = (Pi*r*Conteggio)/deltaTempo
r = raggio espresso in metri
Pi = 3.14
Conteggio = Numero intero dei giri
deltaTempo = secondi dall'inizio conteggio.

Questo restituisce la velocità in m/s ( metri al secondo ) con anemometro con due magneti
altrimenti non si divide per 2.

Per avere Km/h basta moltiplicare per 3.6 ( 3600 secondi ora / 1000 metri km.) = 3.6

Vi sono anche anemometri a coppette che usano un piccolo generatore di corrente e la misura della velocità del vento è proporzionale alla corrente generata, in altri casi anziché un contatto reed viene utilizzato un encoder.

Spero che questa nota possa chiarire meglio il funzionamento del nostro anemometro.

Lasciate commenti o chiedete per ulteriori chiarimenti.

34 commenti:

  1. Il condensatore da quant'è?

    RispondiElimina
  2. Io ho utilizzato 100nF, ma in alcuni schemi ho visto utilizzare anche 22nF con la resistenza anziché da 10k da 22k.
    Lo schema come ho scritto si trova nel forum di arduino.
    In ogni caso lo schema ed i valori utilizzati funzionano.
    100 omm, 10k, e 100nF.
    Ciao!

    RispondiElimina
  3. Uso un anemometro come il tuo, e non capisco perché' nelle specifiche viene riportato che 4 contatti al secondo equivalgono a 10kmh
    secondo la formula (velocità' angolare) dovrebbe essere 2,713 kmh per 4 contatti al sec.
    Lumi?

    Ciao, Stefano

    RispondiElimina
  4. Probabilmente è invertito, non si tratta di 10 Kmh, ma di 10 ms.
    Infatti se fai ( 10/3.6) = 2.777 appunto kmh.

    La formula utilizzata è teorica, bisogna vedere quanto si riesce a misurare con esattezza il raggio del nostro anemometro, perché i valori siano corretti.
    Ma un amico mi ha promesso in prestito un anemometro professionale, in questo modo potrò verificare meglio tutta la questione.
    Come ho fatto a suo tempo con il luxmetro (vedi post).
    Ti ringrazio per l'osservazione, segui il blog perché appena potrò collaudare e tarare (pluviometro e anemometro ) pubblicherò i risultati.
    A presto!

    RispondiElimina
    Risposte
    1. Ho testato il nostro anemometro con un commerciale prestato le velocità segnate dal nostro corrispondono.
      Se farò ulteriori esperimenti segnalerò la cosa.
      Cordiali saluti
      Sergio

      Elimina
    2. Ottimo! Grazie Sergio!

      Elimina
  5. salve, io ho un anemometro con un solo magnete, che parametro dovrei modificare x il mio anemometro?
    grazie

    RispondiElimina
    Risposte
    1. Ciao!
      Come puoi leggere nel post la formula è : Velocità = r * 6.28 * f = Velocità in m/s.
      In pratica circonferenza = ( 2*Pi*r)*f = con (r espresso in metri) ed ( f giri o impulsi al secondo).
      Nel tuo caso ogni impulso corrisponde ad un giro quindi applichi la formula senza dividere per 2.
      Nel listato io ho scritto = (Conteggio*Pi*raggio)/deltaTempo;
      Basterà che scrivi così = (Conteggio*2*Pi*raggio)/deltaTempo;
      Ho verificato recentemente con altro anemometro e tutto corrisponde.
      Cordiali saluti
      Sergio

      Elimina
  6. Salve, questo progetto è perfetto per prendere spunto su come risolvere un problema ad un mio progetto appena realizzato

    RispondiElimina
  7. Vorrei realizzare una stazione meteo completa, con anche l'orologio. Ho tutti i sensori ma, data la mia poca esperienza in programmazione, gradirei qualche consiglio su come assemblare i vari sketch dei sensori in un unico sketch. Meglio uno unico o un main program con le vari subroutine? Come devo procedere? Grazie Alberto

    RispondiElimina
    Risposte
    1. Si la cosa è fattibile ma occorre definire dei punti fermi.

      Gli sketch che ho postato sul mio blog sono volutamente, di tipo generale per poter essere adattati ad un proprio progetto, ho inserito tutti i commenti anche a questo scopo.

      Un progetto completo parte da scelte che vanno fatte solo ad esempio:
      E' alimentato da rete o altra fonte di energia?
      Visualizza i dati su un display?
      Invia i dati in rete?
      Via cavo o wi-fi?
      Quali sono i dati che si vogliono monitorare?
      Li vogliamo memorizzare se si come?
      Ci sono altre domande a cui rispondere, io poi non sono un meteorologo e quindi non so una volta raccolti i dati come dare loro una giusta interpretazione.
      Certo che se ci limitiamo a temperatura ed umidità la cosa è fattibile.
      Fatemi sapere se interessa un progetto di "Stazione meteo minimale" come progetto completo.
      Saluti e Buone Feste
      Sergio

      Elimina
  8. Ciao Sergio,
    forse non ti è arrivata la mia risposta. Mi interessa molto il progetto della "Stazione meteo minimale", dove è possibile reperirlo?

    Ti serve la mia mail?

    Auguri di buon anno

    Ciao

    Alberto

    RispondiElimina
    Risposte
    1. Ciao! Alberto, penso che ti riferisca al commento su questo post del 21/12/14.
      Bene allora vada per la "stazione meteo minimale".
      Ora nelle feste ho difficoltà a dedicarmi in quanto ho ospiti, ma dal 7 Gennaio, mi dedico alla cosa.
      Si tratta solo di mettere insieme vari sketch che già sono apparsi su questo blog.
      Quindi c'è tutto va solo composto i pezzi del puzzle a formare un unico progetto.
      Pubblicherò presto un post per questo progetto di "stazione meteo minimale"
      Auguri anche a Te
      Sergio.

      Elimina
    2. Grazie, non ho fretta. Provo poi ti farò sapere. Se ti interessa ho un mini sito, dove ho pubblicato un servo flash fatto con un PIC. http://home.teletu.it/albertofm. Ciao ed auguri di buon anno Alberto

      Elimina
    3. Ciao!
      Ho pubblicato il post stazione meteo v.103 prendiamolo come assaggio ma continuo a lavorarci perchè la cosa è molto interessante.
      Saluti, e grazie per il commento.
      Sergio

      Elimina
  9. Ciao potresti consigli armi nell'acquisto di un anemometro a un buon prezzo? Non riesco a trovarlo da nessuna parte

    RispondiElimina
    Risposte
    1. Ciao!
      Scusa il ritardo nella risposta, ma ho rivisto solo oggi la tua domanda.
      Ho acquistato il sensore a coppette sul sito di Futura Elettronica

      "SENSORE VENTO TRASPARENTE CON STAFFA
      Codice Prodotto: 6710-WIND02
      Prezzo: 27,00€ "
      Ho visto lo stesso prodotto anche su Robot Domestici
      Il prezzo è contenuto, in realtà è un ricambio che produce una ditta che vende tende, ma non so dirti molto di più di quello che trovi sul mio blog.
      Ti saluto e ti ringrazio per il commento.
      Fammi sapere come va anche con altro commento, potrà servire così anche ad altri che ci leggono!
      Sergio

      Elimina
  10. Ciao uso un anenometro uguale ma con un magnete, però ho un problema, quando l'anemometro è fermo e casca proprio sul magnete inizia a contare ugualmente, riesci ad aiutarmi?
    Grazie

    RispondiElimina
    Risposte
    1. Stai utilizzando lo sketch che ho scritto?
      Non dovrebbe succedere perché ho inserito il controllo sul cambiamento di stato.
      Se utilizzi altro sketch prova a modificarlo seguendo il mio
      E' questa la parte che dovrebbe risolvere il problema:


      {
      Statoreed = digitalRead(reedPin); // legge il contatto reed

      if (Statoreed != Statoreed_old) // si verifica se è cambiato
      {
      Statoreed_old = Statoreed; // se SI si aggiorna lo stato

      Prova e fammi sapere...
      Ciao!
      Sergio

      Elimina
  11. Salve,
    posso chiederle perchè ha utilizzato un condensatore? Per evitare solo gli sbalzi di corrente?
    Sono alle prime armi con l'elettronica.

    Grazie mille !

    RispondiElimina
    Risposte
    1. Ciao!
      Il condensatore e le due resistenze formano un circuito che serve come anti-rimbalzo.
      Il contatto reed si chiude al passaggio del magnete ma la velocità del vento essendo molto variabile può in certi casi dare origine a contatti incerti.
      Nel circuito che ho realizzato il condensatore si carica alla chiusura del contatto reed e successivamente si scarica sulla resistenza da 10k questo dovrebbe creare un segnale sul pin di Arduino più stabile.
      I valori proposti sembrano funzionare.
      Grazie per il commento
      Sergio

      Elimina
    2. ho riscritto il codice come il tuo , funziona, adesso devo provare con la velocità, il mio sensore sembra uguale al tuo ha solo un magnete

      Elimina
    3. Ciao!
      Come puoi leggere nel post la formula è : Velocità = r * 6.28 * f = Velocità in m/s.
      In pratica circonferenza = ( 2*Pi*r)*f = con (r espresso in metri) ed ( f giri o impulsi al secondo).
      Nel tuo caso ogni impulso corrisponde ad un giro quindi applichi la formula senza dividere per 2.
      Nel listato io ho scritto = (Conteggio*Pi*raggio)/deltaTempo;

      Basterà che scrivi così = (Conteggio*2*Pi*raggio)/deltaTempo;

      Così dovrebbe funzionare bene!!
      Avevo già dato questa indicazione a Leonardo, non ho avuto una conferma se è riuscito o meno a risolvere, ma credo di si che abbia risolto il dopo tre giorni c'è un grazie mille anonimo ma penso che sia in risposta a questo problema.
      Se queste indicazioni risolvono il problema ti sarei grato di un messaggio in tal senso.
      A presto
      Sergio.

      Elimina
  12. Salve,
    non mi è chiara la formula per calcolare la velocità. Perchè ha utilizzato il PiGreco? A cosa serve la circonferenza in questo ambito?

    Grazie ancora per il chiarimento !

    RispondiElimina
    Risposte
    1. Ciao!
      Ho integrato il post con una spiegazione più dettagliata della formula.
      Spero che adesso si comprenda meglio.
      Ti ringrazio per il commento e penso che l'integrazione al post sia utile anche ad altri.
      Sergio

      Elimina
    2. Salve,
      sto provando a realizzare il suo progetto, ed essendo un neofita volevo farle delle domande.
      Il sensore reed raffigurato nell'immagine del circuito non è altro che il sensore installato all'interno dell'anemometro? Da altri progetti che utilizzano lo stesso anemometro leggo che è stata apportata una modifica al sensore poiché montato in posizione errata, lei lo ha fatto?
      Per quanto riguarda il condensatore, ho in dotazione questi tre:
      101 suntan;
      100uf lelon;
      u1J63;
      tra i tre posso integrarne qualcuno, oppure devo acquistarlo e dove?

      P.s. se non le chiedo troppo potrebbe postare una foto con l'intero circuito montato?

      Grazie mille!

      Elimina
    3. Ciao! Grazie per il commento.
      Comincio dal condensatore:
      Ho utilizzato un condensatore ceramico da 100nF.
      In base al codice a 3 cifre utilizzato per i condensatori (le prime due indicano il valore di capacità, la terza il numero degli zeri ed il valore si riferisce ai pF)
      quindi avremo 100 nF = 100.000 pF segnato 104
      Il tuo condensatore 101 dovrebbe essere di 100 pF ( troppo piccolo per avere l'effetto cercato)

      il secondo sembra essere da 100 microfarad.
      Il terzo sembra da 1 microfarad.
      Per quanto riguarda l'acquisto dipende se sei vicino ad una grande città sicuramente trovi un negozio che fornisce questi componenti, altrimenti su internet trovi moltissime occasioni.
      Semmai ti consiglio di acquistare un kit con più pezzi e con più valori ( per altri schemi o altri usi).

      .... nell'immagine del circuito non è altro che il sensore installato all'interno dell'anemometro? SI
      Nel mio anemometro il reed era in posizione corretta.
      Nel post stazione meteo c'è la foto del circuito realizzato ( ma ci sono anche tutti gli altri sensori)
      Non ho realizzato un circuito con il solo anemometro.
      Ho solo realizzato il circuito sulla BB ( che puoi vedere disegnato con friz)
      Dopo aver provato i singoli sensori ho assemblato tutto insieme nella stazione meteo realizzando una specie di shield .

      Fammi sapere gli sviluppi.
      Saluti
      Sergio

      Elimina
  13. buon pomeriggio scusate il mio italiano così come brasiliano , sto facendo un progetto con un sensore di parità chiedevo se u avere alcuna idea di come fare dopo scoppiò volta sembra che / s la velocità necessaria e 0m/s

    RispondiElimina
    Risposte
    1. I write to your email, I did not understand the problem.

      Sergio.

      Elimina
  14. ciao sergio comlimenti per la guida. Ho comprato questo sensore http://www.ebay.it/itm/SENSORE-VENTO-PER-STAZIONE-METEO-WS1080-E-WS3080-WS1080-WS-/331583037184?hash=item4d33e39f00:g:ssUAAOSw~OdVfvly

    come si calcola il raggio dell'anenometro? o meglio come devo prendere la misura? scusami ma in matematia sono zero.

    RispondiElimina
    Risposte
    1. Io ho misurato il raggio dell'anemometro dall'asse di rotazione all'estremità di una delle coppette.
      Se non riesci ad individuare l'asse puoi misurare il diametro esterno del cerchio e dividere per due.
      Bisogna tener conto che questa è un'operazione da fare in mancanza dei dati tecnici che il costruttore dovrebbe fornire.
      Se infatti il costruttore indica la velocità del vento in corrispondenza del numero degli impulsi in uscita , la cosa si semplifica.
      Va detto ancora che la formula da me indicata è molto semplificata rispetto ai sistemi professionali.
      Ma visto che l'applicazione è quella di aggiungere il dato velocità del vento in una "stazione meteo " mi sembra sufficiente la precisione raggiungibile con questo metodo.
      Tieni conto inoltre che successivamente ho controllato utilizzando un anemometro prestatomi da un'amico.
      Niente vieta di verificare le misure ottenute effettuando una taratura dell'anemometro.
      Spero di esserti stato utile.
      Cordiali saluti
      Sergio

      Elimina
  15. Salve, intanto grazie per la guida. Due piccole domande se è possibile. Quella in foto è una normalissima ampolla reed? Dove colleghi i due capi del sensore? Grazie mille

    RispondiElimina
    Risposte
    1. Ciao!
      Si è una semplice ampolla reed.
      Un capo viene collegato alla GND.
      L'altro capo è collegato alla resistenza da 100 omm, e da li al pin digitale 2, con condensatore da 100nF e resistenza da 10k come indicato con friz.
      Si comprende meglio nello schema generale che ho fatto nel post sulla stazione meteo.
      vedi http://avventurarduino.blogspot.it/2015/01/stazione-meteo-v103.html
      Grazie per il commento, e se ci sono altri problemi contattami.
      Sergio

      Elimina

Vi ringrazio per la lettura e vi invito al prossimo post.
Se il post vi è stato utile, vi è piaciuto oppure no, scrivete un commento.

Un saluto a tutti.
Sergio

Copyright - Condizioni d’uso - Disclaimer
http://avventurarduino.blogspot.it/2012/10/inizia-lavventura-arduino-12-settembre.html