BMP180 ...Problemino con la pressione atmosferica e l'altitudine!!

Buongiorno a tutti!!
Oggi mi sono imbattuto in un BMP180 per registrare la pressione atmosferica e l’altitudine
Quello che mi chiedo è che vedendo molti esempi in rete ho visto che mettono una variabile del tipo “SeaLevelPressure”…
Quello che non mi è chiaro è che valore mettere in questa variabile…
Posto anche il codice, se serve:

#include <Wire.h>
#include <BMP180.h>

BMP180 barometer;
float seaLevelPressure = 103000;

void setup()
{
  
  Serial.begin(9600);
  
  Wire.begin();
  
  barometer = BMP180();
  
  if(barometer.EnsureConnected())
  {
    Serial.println("Connected to BMP180."); // Output we are connected to the computer.
    
    // When we have connected, we reset the device to ensure a clean start.
    barometer.SoftReset();
    // Now we initialize the sensor and pull the calibration data.
    barometer.Initialize();
  }
  else
  { 
    Serial.println("No sensor found.");
  }
  
  delay(500);
}
void loop()
{
  if(barometer.IsConnected)
  {
    // Retrive the current pressure in Pascals.
    long currentPressure = barometer.GetPressure();
    // Retrive the current altitude (in meters). Current Sea Level Pressure is required for this.
    float altitude = barometer.GetAltitude(seaLevelPressure);
    // Retrive the current temperature in degrees celcius.
    float currentTemperature = barometer.GetTemperature();
    Serial.println(); // Start a new line.
    
    Serial.print(currentPressure);
    Serial.print(" Pa;");
    Serial.print (altitude);
    Serial.print (" m;");
    Serial.print (currentTemperature);
    Serial.print (" C;");
    delay(1000); // Show new results every second.
  }
}

con questo codice l’altitudine è sbagliata (io mi trovo a circa 42m dal livello del mare…)

Grazie a chi mi sarà di aiuto!!! :slight_smile: :slight_smile: :slight_smile:

Ciao, la pressione al livello del mare la devi aggiornare tutte le volte che vuoi usare l’altimetro poichè la pressione atmosferica non è costante ma varia di giorno in giorno.

Cerca la stazione meteo nella località marittima più vicina a te e inserisci la pressione odierna, in Pascal :wink:

ok grazie! e per cercare la stazione meteo più vicina c'è qualche sito di riferimento?? non saprei da che parte guardare sinceramente! ahah

Google :smiley:

una strada alternativa è ricavarsi la pressione al livello del mare partendo da un'altitudine e relativa pressione note. In questo modo cerchi la stazione meteo più vicina a casa tua e non deve essere per forza al mare. Non so se nella libreria che stai usando è contemplata questa strada, da datasheet si può fare.

In ogni modo la pressione di riferimento deve essere aggiornata ogni volta che intendi usare l'altimetro.

#include <Wire.h>
#include <BMP180.h>

BMP180 barometer;
float seaLevelPressure = 102780;

void setup()
{
  
  Serial.begin(9600);
  
  Wire.begin();
  
  barometer = BMP180();
  
  if(barometer.EnsureConnected())
  {
    Serial.println("Connected to BMP180."); // Output we are connected to the computer.
    
    // When we have connected, we reset the device to ensure a clean start.
    barometer.SoftReset();
    // Now we initialize the sensor and pull the calibration data.
    barometer.Initialize();
  }
  else
  { 
    Serial.println("No sensor found.");
  }
  
  delay(500);
}
void loop()
{
  if(barometer.IsConnected)
  {
    // Retrive the current pressure in Pascals.
    long currentPressure = barometer.GetPressure();
    // Retrive the current altitude (in meters). Current Sea Level Pressure is required for this.
    float altitude = barometer.GetAltitude(seaLevelPressure);
    // Retrive the current temperature in degrees celcius.
    float currentTemperature = barometer.GetTemperature();
    Serial.println(); // Start a new line.
    
    Serial.print(currentPressure);
    Serial.print(" Pa;");
    Serial.print (altitude);
    Serial.print (" m;");
    Serial.print (currentTemperature);
    Serial.print (" C;");
    delay(1000); // Show new results every second.
  }
}

ok questo è il codice, con pressione atm aggiornata alle 11.17 da una stazione meteo vicina a me… unica cosa che l’altitudine è sbagliata (mi da 2-3 m)… :frowning:

Prova float seaLevelPressure = 102780.0;

no ho provato e purtroppo non cambia nulla!!

Dove hai preso quella pressione? Al livello del mare, ho guardato La Spezia, siamo a 103200 Pa

L'ho preso dalla stazione meteo a me più vicina (qui)

No non va bene, per lo sketch che stai usando devi obbligatoriamente inserire la pressione a livello del mare.

L'alternativa che ti ho proposto funziona in modo diverso e non so se è applicabile a quella libreria

ok ora con il valore di pressione atmosferica di La Spezia che mi hai fornito funziona correttamente
Infatti mi fornisce:

102691 Pa;40.62 m;23.20 C;
102701 Pa;41.28 m;23.20 C;
102698 Pa;40.87 m;23.10 C;
102694 Pa;41.28 m;23.10 C;
102701 Pa;41.53 m;23.20 C;
102704 Pa;41.28 m;23.20 C;
102693 Pa;41.53 m;23.20 C;
102696 Pa;41.12 m;23.20 C;
102690 Pa;41.36 m;23.20 C;
102698 Pa;40.87 m;23.20 C;
102695 Pa;40.95 m;23.20 C;
102695 Pa;41.77 m;23.20 C;
102697 Pa;41.44 m;23.30 C;
102700 Pa;41.20 m;23.30 C;
102695 Pa;41.20 m;23.30 C;
102695 Pa;41.77 m;23.20 C;
102698 Pa;41.20 m;23.30 C;

che solo valori attendibili...Grazie mille!!

Ora ho una domanda da farti: come mai devo per forza prendere la pressione di una località marittima e quella che invece io avevo fornito non va bene?

Grazie mille per l'aiuto!! :slight_smile: :slight_smile:

Quel che forse non hai capito è che la pressione atmosferica varia continuamente in qualunque luogo. Quindi se vuoi dedurre l'altitudine dalla pressione che misuri in un certo istante, puoi farlo solo "per differenza", conoscendo il valore della pressione attuale ad un'altitudine nota.

La pressione al livello del mare è appunto questo, ovvero quella misurata ad altitudine 0.

In alternativa, puoi misurare la pressione attuale nella zona in cui ti trovi e, a patto di non spostarsi più di tanto da lì, usare questo valore per derivare l'altitudine di qualcos'altro, (ad esempio un drone che vola in zona) relativamente a quella di dove hai effettuato la misura. Ovviamente se conosci l'altitudine di casa tua, puoi facilmente ricavare l'altitudine "assoluta".

Però questo funziona solo per un periodo relativamente breve, ogni tanto (qualche ora, diciamo) è necessario ripetere la misura a terra ed aggiornare i dati usati per i calcoli.

quoto quanto detto da sukko :slight_smile:

ok grazie mille ad entrambi!!!

Ti consiglio la rete meteo tra l'altro ci sono pure io da ormai 5 mesi :smiley:
La pressione varia continuamente, ecco quella attuale adesso

Qui quella dei GPT a 500hPa e la pressione al livello del mare elaborate da un modello matematico


Quell'altimetro funziona solo se tiene conto continuamente della pressione attuale al livello del mare 0m s.l.m.
Si misura al livello del mare per avere una convenzione sui minimi depressionari e sulle alte pressioni e anticicloni o cicloni. Se ognuno misurasse la sua, cambierebbe ad ogni altitudine: ad esempio nello stesso posto a 1500 metri circa (a seconda dei vari spostamenti depressionari dell'atmosfera cambia la pressione anche qui) ci sono 850hPa e nello stesso posto al livello del mare ci sono mediamente 1013hPa
A 5500 metri circa trovi anche 500hpa

La pressione atmosferica varia per 2 cose: l' altitudine perché c'é meno aria sopra di noi e per la situazione atmosferica perché a secondo del tempo ci sono differenze di pressione. Per poter confrontare le pressioni di diverse stazioni meteo non viene dato la pressione misurata ma calcolata sul livello del mare. In questo modo le pressioni atmosferiche sono confrontabili tra di loro e non é necessario sapere l'altitudine del posto di misura.

Ciao Uwe

grazie mille per le risposte molto esaustive!! Grazie mille!!