🌤️ Arduino • BMP180 • Pressione

Barometro con Arduino e BMP180: pressione, altitudine e temperatura

Usiamo il sensore BMP180 con Arduino e un display LCD I2C per leggere pressione atmosferica, temperatura e una stima dell’altitudine.

DifficoltàIntermedia
SensoreBMP180
DisplayLCD 16×2 I2C
In poche parole: Arduino comunica con il BMP180 tramite I2C, legge pressione e temperatura e usa un valore di pressione di riferimento per calcolare l’altitudine stimata. I risultati vengono mostrati sul display LCD.

Cosa imparerai

  • come collegare un sensore BMP180 ad Arduino;
  • come leggere pressione atmosferica e temperatura;
  • come stimare l’altitudine a partire dalla pressione;
  • come usare un display LCD I2C;
  • perché la pressione di riferimento influenza il calcolo dell’altitudine;
  • come verificare dal codice se il BMP180 è correttamente collegato.

Il sensore BMP180

Sensore BMP180 per Arduino

Nel sito questa immagine era visualizzata a circa 220 px.

Il BMP180 viene alimentato a 3,3 V e permette di leggere sia la pressione atmosferica sia la temperatura. A partire dalla pressione possiamo inoltre calcolare una stima dell’altitudine.

Controlla sempre il tuo modulo: in questo circuito il BMP180 viene alimentato a 3,3 V. Se possiedi una breakout board differente, verifica tensione ammessa e piedinatura prima di collegarla.

Materiale necessario

🔌 Arduino Uno
🌤️ Sensore BMP180
🖥️ Display LCD 16×2 I2C
🔗 Cavetti jumper
🧩 Breadboard

🧰 Kit Arduino consigliato

Molti progetti del sito utilizzano sensori, display, breadboard e cavetti. Un kit completo può essere comodo per iniziare.

👉 Guarda il kit Arduino consigliato

Link di affiliazione Amazon: in qualità di Affiliato Amazon ricevo un guadagno dagli acquisti idonei, senza alcun costo aggiuntivo per te.

📘 Vuoi imparare Arduino passo dopo passo?

Se vuoi approfondire e realizzare progetti più completi, puoi dare un’occhiata anche ai miei libri dedicati ad Arduino. All’interno troverai spiegazioni semplici, schemi chiari e molti progetti pratici pensati per chi parte da zero.

👉 Scopri i miei libri su Arduino

Link di affiliazione Amazon: in qualità di Affiliato Amazon ricevo un guadagno dagli acquisti idonei, senza alcun costo aggiuntivo per te.

Schema del circuito

Schema Arduino BMP180 e display LCD I2C

Schema di collegamento del BMP180 con Arduino e display LCD I2C.

Collegamenti principali

ElementoCollegamento
BMP180Bus I2C + alimentazione prevista dal modulo
LCD 16×2 I2CBus I2C
LED indicatoreD13 nello sketch

La pressione di riferimento e l’altitudine

Lo sketch contiene la variabile:

Pressione di riferimento
float seaLevelPressure = 101325;

Questo valore viene passato alla funzione che calcola l’altitudine. Per ottenere un risultato più coerente con la propria posizione, puoi sostituirlo con una pressione di riferimento espressa in pascal.

Esempio calcolo pressione atmosferica di riferimento

Esempio per il calcolo della pressione di riferimento.

Importante: l’altitudine ricavata dalla pressione è una stima. La pressione atmosferica cambia anche con le condizioni meteorologiche, la temperatura e altri fattori; per questo lo stesso punto geografico può restituire valori differenti nel tempo.

Un esempio di pressione di riferimento

Come esempio possiamo usare 92339 Pa al posto dei 101325 Pa predefiniti. Questo valore deve però essere adattato alla pressione di riferimento scelta per la propria posizione e alle condizioni del momento: non va copiato automaticamente.

Librerie usate dal progetto

Lo sketch utilizza:

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

Per il progetto sono disponibili sia bmp180.zip sia liquidcrystal_i2c.zip, insieme allo sketch Arduino.

Compatibilità: diverse librerie per BMP180 e LCD I2C possono usare nomi di classi, costruttori e funzioni differenti. Se utilizzi librerie diverse da quelle indicate qui, il codice potrebbe richiedere adattamenti.

Codice Arduino commentato

BMP180 + LCD I2C – codice commentato
/* =========================================================
 BAROMETRO CON ARDUINO E BMP180
 Pressione, altitudine e temperatura su LCD I2C
 ========================================================= */

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

// Display LCD I2C:
// indirizzo 0x27, 16 colonne e 2 righe
LiquidCrystal_I2C lcd(0x27, 16, 2);

// Oggetto che gestisce il sensore BMP180
BMP180 barometer;

// LED integrato di Arduino usato come indicatore
const int indicatorLed = 13;

// Pressione di riferimento in pascal.
// Il valore predefinito è 101325 Pa.
// Se necessario, sostituiscilo con quello
// scelto per il calcolo dell'altitudine.
float seaLevelPressure = 101325;

void setup() {

 // Inizializza il display LCD
 lcd.init();

 // Avvia il Monitor Seriale
 Serial.begin(9600);

 // Avvia il bus I2C
 Wire.begin();

 // Configura il LED indicatore
 pinMode(indicatorLed, OUTPUT);

 // Inizializza l'oggetto BMP180
 barometer = BMP180();

 // Controlla se il sensore risponde
 if (barometer.EnsureConnected()) {

 Serial.println("Connesso con BMP180.");

 // LED acceso = sensore rilevato
 digitalWrite(indicatorLed, HIGH);

 // Reset software del sensore
 barometer.SoftReset();

 // Inizializzazione del BMP180
 barometer.Initialize();
 }
 else {

 // Il sensore non è stato rilevato
 Serial.println("Sensore BMP180 non collegato.");

 digitalWrite(indicatorLed, LOW);
 }

 // Accende la retroilluminazione del display
 lcd.backlight();

 // Messaggio iniziale
 lcd.setCursor(3, 0);
 lcd.print("Test BMP180");

 lcd.setCursor(0, 1);
 lcd.print("ProgettiArduino");

 delay(5000);
}

void loop() {

 // Esegue le letture solo se il sensore
 // risulta correttamente collegato.
 if (barometer.IsConnected) {

 // Pressione atmosferica attuale in pascal
 long currentPressure =
 barometer.GetPressure();

 // Stima dell'altitudine usando
 // la pressione di riferimento scelta
 float altitude =
 barometer.GetAltitude(seaLevelPressure);

 // Temperatura rilevata dal BMP180
 float currentTemperature =
 barometer.GetTemperature();

 // Pulisce il display prima di aggiornare i dati
 lcd.clear();

 // Prima riga: pressione
 lcd.setCursor(0, 0);
 lcd.print(currentPressure);
 lcd.print(" Pa");

 // Seconda riga, parte sinistra: altitudine
 lcd.setCursor(0, 1);
 lcd.print(altitude);
 lcd.print(" m");

 // Seconda riga, parte destra: temperatura
 lcd.setCursor(9, 1);
 lcd.print(currentTemperature);
 lcd.print(" C");

 // Un aggiornamento al secondo,
 // come nello sketch
 delay(1000);
 }
}

Come funziona il programma

1. Il BMP180 viene verificato all’avvio

EnsureConnected() serve a controllare se il sensore risponde. Se il test va a buon fine, lo sketch accende il LED sul pin 13, esegue un reset software e inizializza il sensore.

2. Lettura della pressione

GetPressure() restituisce la pressione che nello sketch viene mostrata sul display in pascal.

3. Calcolo dell’altitudine

GetAltitude(seaLevelPressure) usa la pressione di riferimento contenuta nella variabile seaLevelPressure. Cambiando quel valore cambia anche l’altitudine stimata.

4. Lettura della temperatura

GetTemperature() restituisce la temperatura letta dal sensore, mostrata nella parte destra della seconda riga del display.

Pressione in Pa e hPa

Lo sketch mostra la pressione in pascal. Per una lettura più compatta puoi anche convertirla in ettopascal dividendo il valore per 100.

Conversione Pa → hPa
float pressioneHpa = currentPressure / 100.0;

lcd.print(pressioneHpa);
lcd.print(" hPa");

Indirizzo I2C del display

Nel codice il display usa l’indirizzo 0x27. Non è però garantito che ogni modulo LCD I2C utilizzi lo stesso indirizzo.

Se il display resta vuoto: oltre ai collegamenti e alla libreria, verifica anche l’indirizzo I2C del tuo modulo. Il valore 0x27 è quello usato in questo progetto, ma non è una regola universale.

Esempi del progetto

Arduino barometro BMP180 esempio
Sketch Arduino BMP180 prima parte
Sketch Arduino BMP180 seconda parte

Scarica i file

⬇️ Sketch Arduino BMP180

⬇️ Libreria BMP180

⬇️ Libreria LiquidCrystal_I2C

Debug rapido

  • controlla alimentazione e piedinatura del BMP180;
  • verifica il collegamento del bus I2C;
  • controlla che le librerie usate siano compatibili con lo sketch;
  • se il BMP180 non viene rilevato, osserva il messaggio sul Monitor Seriale;
  • se il display non mostra nulla, verifica indirizzo I2C e contrasto;
  • se l’altitudine è poco credibile, ricontrolla seaLevelPressure;
  • se compaiono numeri troppo lunghi sul LCD, limita le cifre decimali o usa hPa.

Varianti del progetto

  • mostrare la pressione in hPa;
  • registrare pressione e temperatura su scheda SD;
  • aggiungere un grafico dell’andamento della pressione;
  • visualizzare i dati su OLED;
  • inviare le misure tramite Wi-Fi o Bluetooth;
  • usare la variazione di pressione per un piccolo indicatore meteo sperimentale.

Cosa devi ricordare

  • Il BMP180 misura pressione e temperatura.
  • Il sensore viene alimentato a 3,3 V.
  • La comunicazione con sensore e LCD avviene tramite I2C.
  • Il display usa l’indirizzo 0x27 in questo progetto.
  • La pressione di riferimento influenza il calcolo dell’altitudine.
  • L’altitudine barometrica è una stima e può cambiare con le condizioni atmosferiche.
  • Le librerie necessarie sono scaricabili insieme allo sketch.

Domande frequenti

Il BMP180 misura direttamente l’altitudine?

No. Nel progetto l’altitudine viene calcolata a partire dalla pressione atmosferica e da un valore di riferimento.

Perché devo modificare seaLevelPressure?

Perché il valore di riferimento influisce sul risultato del calcolo dell’altitudine. Il codice parte da 101325 Pa, ma puoi adattarlo alla pressione di riferimento scelta.

Perché il display I2C non funziona con 0x27?

Il tuo modulo potrebbe usare un indirizzo differente oppure una libreria con API diversa. 0x27 è semplicemente l’indirizzo usato in questo progetto.

Posso usare una libreria BMP180 diversa?

Sì, ma lo sketch potrebbe dover essere adattato perché nomi delle classi e delle funzioni possono cambiare tra una libreria e l’altra.