lunedì 24 febbraio 2014

Meteo - BMP180

 BMP180

- Stazione meteo con Arduino - 

- Weather Station with Arduino -

- 24/02/2014 -

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

This post continue the project for the weather station.

 Oggi utilizziamo il sensore di pressione BMP180

Today we use the pressure sensor BMP180




In questo post riporto le modifiche fatte allo sketch che gestiva il sensore DHT22 ( temperatura e umidità relativa).
Ho aggiuto il sensore di pressione BMP180, al precedente schema.

Vale la pena di segnalare che il sensore BMP180 utilizza la seriale I2C.
Adriano ha integrato lo sketch seguendo le indicazioni del costruttore "sparkfun".
Per quanto riguarda il funzionamento ed i collegamenti alla scheda Arduino abbiamo seguito quanto indicato nel Tutorial bmp180.

Nel Tutorial si trovano le istruzioni per il collegamento, la libreria da utilizzare e lo sketch di esempio. (scaricate la libreria dal tutorial della Sparkfun.)

Quello che abbiamo fatto è stato solo di collegare il sensore , installare la libreria e aggiungere al precedente sketch la parte relativa alla misura della pressione.

Qui sotto parte dello sketch riguardante il funzionamento del sensore BMP180.

Lo sketch completo si può scaricare nel link più in basso


//------------------------------------------------------------------------------------------

// Metodi lettura dati sensore pressione BMP180
// -------------------------------------------------------------------------------- 
void setup_BMP()
{
  Serial.print("Inizializzazione BMP...");
  lcd.print("Configurazione...");

  // Inizializza il sensore di pressione 
  // in questa fase il sensore recupera dei valori memorizzati al suo interno che usa per la sua calibrazione 
  if (pressure.begin())
  {
    Serial.println("OK");
    Serial.print("Altitudine sensore: "); 
    Serial.println(ALTITUDINE); 
  }
  else
  {
    // L'inizializzazione puo' fallire a causa di problemi di connessione con il bus 
    Serial.println("ERRORE!! ");
    while(1); // Attesa infinita --> resettare arduino
  }
}

// legge i valori di temperatura e pressione interrogando il sensore BMP
boolean leggi_temperatura_e_pressione(double& temp, double& pres, double& pr, double& alt)
{
  boolean res = false;
  
  double T, P, p0, a;
  // Prima di poter leggere la pressione e' necessario effettuare una lettura della 
  // temperatura
  
  // Invia il comando per iniziare la lettura della temperatura
  // Se il comando ha successo ritorna il numero di millisecondi da attendere prima di ricevere il dato
  // In caso di errore ritorna 0
  int stat = pressure.startTemperature();
  if (stat != 0)
  {
    // Attende il completamento della lettura della temperatura
    delay(stat);

    // Adesso si puo' recuperare il valore, il valore è salvato in T
    stat = pressure.getTemperature(T);
    if (stat != 0)
    {     
      // si ripete il procedimento per la lettura della pressione
      // Il parametro 3 indica la precisione (lettura piu' lenta)
      stat = pressure.startPressure(3);
      if (stat != 0)
      {
        delay(stat);

        // Si legge il valore della pressione assoluta e si salva in P
        // la funzione richiede la temperatura corrente
        stat = pressure.getPressure(P, T);              

        // calcola la pressione relativa, compensando con l'altitudine locale
        p0 = pressure.sealevel(P, ALTITUDINE); 

        // Infine calcola l'altitudine in base alla pressione misurata e alla pressione al livello del mare
        a = pressure.altitude(P, p0);        

        // la lettura ha avuto successo, si aggiornano le variabili
        res = true;
        pres = P;
        temp = T;        
        pr = p0;
        alt = a;
      }
    }
  }
  
  return res;
}

Come potete leggere nei commenti prima si deve eseguire l'inizializzazione del sensore, successivamente si esegue la misura della temperatura, e solo dopo questa si può misurare la pressione.

Il sensore ha i suoi tempi tutta la procedura non è molto veloce, nell'uso del pulsante per il cambio della visualizzazione sull'LCD si nota un ritardo fra la pressione del pulsante e il risultato mostrato.

Lo scopo dello sketch attuale è solo di verificare l'uso del sensore di pressione, nell'uso definitivo i dati verrano registrati.

Nello sketch si utilizzano le seguenti librerie:

LiquidCrystal.h     // libreria LCD
dht.h                      // libreria sensore temperatura e umidita
SFE_BMP180.h    // libreria sensore pressione
Wire.h                   // wire per comunicazione bus I2C.


Scaricate qui lo sketch per test DHT22 e BMP180.


Il bus I2C 
Questo sistema di comunicazione seriale, che utilizza 2 fili, è molto interessante e prossimamente farò un post con esperimenti che utilizzano questo bus, e soprattutto la libreria che Arduino mette a disposizione per un facile utilizzo,( la libreria Wire.)




Al centro il sensore DHT22 (bianco) a destra il BMP180 (rosso).


Qui sotto un breve filmato.






continua.....


8 commenti:

  1. Non è che si può avere lo schema di montaggio??

    RispondiElimina
    Risposte
    1. Si sul post Stazione meteo v.103 trovi lo schema realizzato con friz. dovrebbe essere molto chiaro.
      In caso contrario contattatemi ancora e pubblicherò altro.
      Sergio

      Elimina
  2. si potrebbe avere lo schema di montaggio

    RispondiElimina
    Risposte
    1. Si sul post Stazione meteo v.103 trovi lo schema realizzato con friz. dovrebbe essere molto chiaro.
      In caso contrario contattatemi ancora e pubblicherò altro.
      Sergio

      Elimina
  3. è possibile avere lo schema friz.. solo di sti componenti invece che di tutto

    RispondiElimina
    Risposte
    1. Ciao!
      Dovrebbe essere semplice basterà cancellare ciò che non si vuole.
      Quali sono i componenti che dovrebbero rimanere?
      Lo schema completo comprende:
      Arduino uno --> SI
      Lcd --> SI ?
      DHT22 --> SI ?
      BMP180 --> SI ?
      Anemometro --> No?
      Pluviometro --> No?
      Direz. Vento --> No?

      Ditemi come e vedo se trovo il tempo per sistemarlo.
      In ogni caso il BMP180 in realtà nello schema è sostituito dal bmp085 in quanto nel mio friz il 180 non c'è fra quelli selezionabili.
      Sergio

      Elimina
  4. ciao invece i collegamenti con un i2c lcd seriale ?

    RispondiElimina
    Risposte
    1. Ciao!
      Grazie per la lettura.
      Ho pubblicato su questo blog 2 post relativi alla I2C.
      Ho pubblicato Rfid, e calcolatrice che fanno uso di un lettore LCD I2C.
      Ricordati che in caso di più elementi sulla linea si dovrebbero mettere 2 resistenze, in ogni caso controlla la documentazione ufficiale del dispositivi che colleghi.
      Anche per selezionare l'indirizzo diverso per ogni dispositivo sulla linea.
      Con LCD e BMP non dovrebbero esserci conflitti in ogni caso è spesso possibile configurare il dispositivo con dei ponticelli ( vedi la documentazione del tuo dispositivo).
      Fai sapere ai lettori se sei riuscito a fare il collegamento.
      Cordiali saluti
      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