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.
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
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.....
Non è che si può avere lo schema di montaggio??
RispondiEliminaSi sul post Stazione meteo v.103 trovi lo schema realizzato con friz. dovrebbe essere molto chiaro.
EliminaIn caso contrario contattatemi ancora e pubblicherò altro.
Sergio
si potrebbe avere lo schema di montaggio
RispondiEliminaSi sul post Stazione meteo v.103 trovi lo schema realizzato con friz. dovrebbe essere molto chiaro.
EliminaIn caso contrario contattatemi ancora e pubblicherò altro.
Sergio
è possibile avere lo schema friz.. solo di sti componenti invece che di tutto
RispondiEliminaCiao!
EliminaDovrebbe 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
ciao invece i collegamenti con un i2c lcd seriale ?
RispondiEliminaCiao!
EliminaGrazie 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.