BMP085

BMP085

Sensore di pressione  BMP085

Le migliori performance le ho avute con questo sensore

Comunica col protocollo I2c con 2 fili solamente ed è molto facile interfacciarsi.

La precisione è molto più accurata. Le specifiche sono queste

  • Pressure sensing range: 300-1100 hPa (9000m to -500m above sea level)
  • Up to 0.03hPa / 0.25m resolution
  • -40 to +85°C operational range, +-2°C temperature accuracy
  • 2-pin i2c interface on chip
  • V1 of the breakout uses 3.3V power and logic level only
  • V2 of the breakout uses 3.3-5V power and logic level for more flexible usage

Al suo interno ha anche la possibilità di conoscere la temperatura, ma non ho usato questa funzionalità in quanto poco precisa.

Il collegamento è il  seguente:

Immagine presa da adafruit

 

lo sketc è il seguente con inserito anche la parte per il DHT22

 

#include <Wire.h>
#include <Adafruit_BMP085.h>
#include <dht.h>

Adafruit_BMP085 bmp;
dht DHT; //dichiaro una variabile globale per la classe del sensore
#define DHT22_PIN 8 //imposto il pin a cui è connesso il sensore


void setup() {
   Serial.begin(9600);
   bmp.begin();
}

void loop() {

   Serial.print("Temperature = ");
   Serial.print(bmp.readTemperature());
   Serial.println(" *C");

   Serial.print("Pressure = ");
   Serial.print(bmp.readPressure());
   Serial.println(" Pa");

// Calculate altitude assuming 'standard' barometric
// pressure of 1013.25 millibar = 101325 Pascal

   Serial.print("Altitude = ");
   Serial.print(bmp.readAltitude());
   Serial.println(" meters");

// you can get a more precise measurement of altitude
// if you know the current sea level pressure which will
// vary with weather and such. If it is 1015 millibars
// that is equal to 101500 Pascals.


   Serial.print("Real altitude = ");
   Serial.print(bmp.readAltitude(101460)); //devo conoscere la pressione al livello del mare
   Serial.println(" meters");
   Serial.println();
   int chk = DHT.read22(DHT22_PIN);//leggo dal sensore e ritorna un valore corrispondente all'andamento della lettura
   switch (chk)//controllo
   {
         case 0: //valore di ritorno : 0 -> Lettura andata a buon fine

             Serial.print("Temperatura: ");
             Serial.print(DHT.temperature,1);//scrivo il dato della temperatura, specificando che voglio un solo decimale
             Serial.print(" *C");
             Serial.println();
             Serial.print("Umidità: ");
             Serial.print(DHT.humidity,1);//scrivo il dato dell'umiditò, specificando che voglio un solo decimale
             Serial.print(" %");
             Serial.println();
         break;

         case -1: //valore di ritorno : -1 -> Sono stati letti dei dati, ma risultano corrotti
             Serial.print("Checksum error");
         break;

         case -2: //valore di ritorno : -2 -> Nessuna lettura effettuata, ho atteso troppo tempo
            Serial.print("Time out error");
         break;

         default: //qualsiasi altro valore di ritorno definisce un errore diverso
             Serial.print("Unknown error");
         break;
   }

Serial.println();

delay(2000);
}

 

Si può aggiungere ovviamente il display lcd come gli esempi precedenti.