BME680 Sensore: pressione, temperatura, umidità, VOC

Il Sensore  BME680 è prodotto dalla Bosch Sensortec, si tratta di un sensore digitale 4 in 1 con misurazione di gas, umidità, pressione e temperatura. Ultima evoluzione di questa categoria di sensori, vedere per esempio il sensore MPL3115A2  oppure il BMP180.
Il sensore è in grado di rilevare diversi parametri ambientali come: la temperatura, l’umidità, la pressione barometrica ed i composti organici volatili (VOC).

Descrizione del sensore BME680

Il sensore BME680  costituito da un package LGA che misura 3 x 3 x 1 mm con coperchio metallico e 8 pin , integra sensori di gas, pressione, umidità e temperatura ad elevata linearità e accuratezza. È progettato per consumi ottimizzati a seconda delle specifiche modalità di funzionamento, stabilità a lungo termine e robustezza EMC elevata.
I sui utilizzi possono essere:

  • Misurazione della qualità dell’aria
  • Stazione meteo personalizzata
  • Consapevolezza del contesto, ad esempio rilevamento dell’umidità della pelle, delle variazioni nell’ambiente
  • Monitoraggio fitness/benessere
  • Avvertimento in caso di aria secca o temperature elevate
  • Misurazione del volume e del flusso d’aria
  • Controllo automazione domestica (ad es. HVAC)
  • Miglioramento GPS
  • Navigazione indoor (rilevamento del cambio di piano, rilevamento spostamenti in ascensore)
  • Tracciamento dell’altitudine e del consumo di calorie per le attività sportive

Il BME680 contiene un piccolo sensore contiene un piccolo sensore MOX (Metal- OXide).
L’ossido metallico riscaldato modifica la resistenza in base ai composti organici volatili (COV – Volatile Organic Compounds ) presenti nell’aria, quindi può essere utilizzato per rilevare gas e alcoli come etanolo, alcool e monossido di carbonio ed eseguire misurazioni della qualità dell’aria.
Il BME680 consente all’utente di regolare individualmente le velocità di campionamento per ciascun componente del sensore (temperatura, umidità, pressione e gas), nonché di impostare il ritardo di inter-misurazione e il coefficiente di campionamento del filtro IIR .
La combinazione di queste impostazioni consente un controllo molto preciso dei tempi di misurazione e della precisione della misurazione, nonché la gestione dell’energia.

Rilevamento della temperatura

Il BME680 misura temperature tra -40 ° C e 85 ° C con un intervallo di precisione tra 0 ° C e + 65 ° C. La precisione è di ± 0,5 ° C con una risoluzione completa di 0,01 ° C. Poiché il sensore di temperatura nella confezione piccola è legato alla scheda PCB su cui è saldato in posizione e ha anche un po ‘di auto-riscaldamento, la lettura della temperatura sarà di solito al di sopra dell’ambiente.

Rilevazione dell’umidità

L’umidità senza condensa tra lo 0% e il 100% viene misurata con una precisione di ± 3% ad una risoluzione massima dello 0,008%.

Rilevamento della pressione

Il sensore di pressione funziona a temperature comprese tra -40 ° C e + 85 ° C sebbene la zona di massima precisione vada da 0 ° C a + 65 ° C. La pressione viene misurata tra 300 hPa e 1100 hPa con una precisione di ± 1,0 hPa e una risoluzione di 0,2 Pa

Rilevamento di gas nell’ambiente

Il sensore di gas funziona riscaldando internamente una piccola superficie e misurando la resistenza dello strato di gas.
Ciò indica la quantità di componenti volatili nell’aria e può essere utilizzato come mezzo indiretto per misurare la qualità dell’aria.
Si noti però che il sensore fornirà solamente un valore di resistenza, relativo al contenuto complessivo di VOC, ma non può differenziare gas o alcoli.
Si noti inoltre che questo sensore, come tutti i sensori VOC / gas, ha una variabilità e per ottenere misurazioni precise è necessario calibrarlo in base a fonti note! Detto questo, per i sensori ambientali generali, ti darà una buona idea di tendenze e confronti.
Si consiglia, per misure accurate di lasciare in funzione il sensore per almeno 48 ore quando lo si utilizza la prima volta per eliminare residui sul sensore.
Per i successivi utilizzi, sempre che sia coinvolgano la lettura relativa ai gas il periodo di preriscaldo potrà essere limitata a 30 minuti.
Questo perché i livelli di sensibilità del sensore cambieranno durante l’uso precoce e la resistenza aumenterà lentamente nel tempo mentre il MOX si riscalda fino alla lettura di base.

NOTA: Il calcolo effettivo della “qualità dell’aria interna” è più complesso della misurazione della resistenza, poiché l’umidità relativa, la temperatura e il riscaldamento degli elementi svolgono un ruolo nel determinare tale valore. Questi calcoli non richiedono solo l’uso della matematica in virgola mobile, ma sono piuttosto complessi e richiedono molta memoria e non sono inclusi nelle normali librerie. Se sono necessarie misurazioni IAQ, la soluzione migliore è utilizzare il software BSEC di Bosch, ma in questo caso  non si potranno utilizzare delle schede come Arduino UNO e simili.

Tipologia di moduli

Per il sensore sono stati messi in vendita moti moduli che ne permettono il suo utilizzo.

Pressione Temperatura Umidità BME680

Quello che sarà utilizzato in questo articolo misura 19 x 16 mm con un peso di 1,3 g. Il modulo sensore può essere alimentato con una tensione compresa tra 3,3 V cc e 5 V cc, mentre i dati in uscita sono disponibili sia su I2C sia su SPI.

Pressione Temperatura Umidità BME680

Pressione Temperatura Umidità BME680

Pressione Temperatura Umidità BME680

Contenuto del blister

Dove trovare il sensore

Il sensore BME680 , può essere acquistato presso il sito Homotix, la versione testata ha un costo di 20,75 € al momento della pubblicazione di questo articolo.

Se lo acquisterete presso il sito potrete usufruire di uno sconto inserendo il codice di sconto ADRIROBOT

Schema elettrico del modulo

Lo schema elettrico del modulo ruota intorno al sensore U1 BME680, è poi presente un regolatore di tensione U2 tipo 6206 a basso Dropout che riduce la tensione d’ingresso al valore di 3.3V.
L’integrato Q1 tipo 2N7002DW contiene all’interno due MOSFET – array 2 canali N, con le relative resistenze svolge la funzione di level shifting permettendo il collegamento dei dispositivi che presentano livelli logici a 5V con il sensore che ha invece livelli logici a 3.3 V.
Le resistenze R1 e R2 infine mantengono a livello alto le linee CS e SDO per evitare fluttuazioni.

Pressione Temperatura Umidità BME680

Lo schema e il PCB realizzati tramite il programma online EasyEDA

Scaricare schema

Pin del modulo

Pressione Temperatura Umidità BME680

PinDescrizione
VCCPin alimentazione , compresa tra 3,3-5 V CC
GNDPin di massa
SCLI2C / SPI Clock line
SDAI2C / SPI data line
SDOSPI data line
CSSPI Slave Device Enable
Ourpcb

Libreria di gestione del sensore

Per facilitare la gestione come sempre ci vengono aiuto delle librerie già pronte, tra le tante presenti la scelta è andata a quella fornita dal sito Adafruit, anche se è stata creata per un altro modulo sensore la libreria è perfettamente compatibile.
Per il caricamento occorre aprire sotto il menù Sketch, #include libreria, “Gestione Librerie..”

Nel campo ricerca si inserirà “BME680” trovata la libreria “Adafruit BME680 Libray“, premendo su “More info..” apparirà il tasto “Installa” cliccare il tasto

a fine installazione apparirà la scritta “INSTALLED”

Per utilizzare la libreria BME680, è necessario installare anche la libreria Adafruit_Sensor.
Anche  in questo caso faremo uso della Gestore librerie  ricercando ” Adafruit Unified Sensor “, occorrerà scorrere la cartella e una volta trovata installarla.

Per altre informazioni vedere anche l’articolo Arduino – Tutorial, come installare una libreria

Primo test del sensore

Per i test si potrà utilizzare lo Sketch di test proposto dal produttore.

Cablaggio I2C

Con cablaggio si collega il sensore tramite l’interfaccia I2C, per impostazione predefinita, l’indirizzo i2c è 0x77.

  • VCC all’alimentazione 5 V va bene.
  • GND all’alimentazione GND
  • SCL al pin SCL specifico oppure A5
  • SDA al pin SDA specifico oppure A4

Pressione Temperatura Umidità BME680

Verificare che la line utilizzata sia quella riportata in grassetto

Adafruit_BME680 bme; // I2C
//Adafruit_BME680 bme(BME_CS); // hardware SPI
//Adafruit_BME680 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK);

Attivando la funzione “monitor seriale ” saranno mostrai i valori letti del sensore

Se i dati mostrati non sono coerenti oppure viene segnalato errore, controllare i cablaggi, oppure potete verificare si il sensore viene riconosciuto. Per fare questo potete utilizzare lo sketch “i2c_scanner”

Download Sketch

Una volta caricato lo sketch su Arduino dovrete aprire il Monitor Seriale, sono possibili due messaggi.
Il primo, evidenzia che il device è stato trovato e risponde all’indirizzo 0x77 che corrisponde la valore atteso.

Il secondo messaggi, evidenzia il messaggio che la device non è stata trovata, e se il led è correttamente acceso potrebbe essere dovuto per esempio all’inversione del collegamento dei pin SDA e SCL, per cui provate ad invertirli.

Cablaggio SPI

Poiché si tratta di un sensore compatibile con SPI, possiamo utilizzare il protocollo SPI sia hardware che  “software”.  Vediamo la versione SPI “software”. Devono essere utilizzati i seguenti pin:

  • VCC all’alimentazione 5V
  • GND all’alimentazione GND
  • SCL al  PIN  SCL, pin specifico oppure  ma è possibile utilizzare qualsiasi pin in un secondo momento
  • SDO al  PIN # 12 ma è possibile utilizzare qualsiasi pin in un secondo momento
  • SDA al PIN # 11 ma è possibile utilizzare qualsiasi pin in un secondo momento
  • CS al PIN # 10 ma è possibile utilizzare qualsiasi pin in un secondo momento

i collegamenti sono quelli riportati nella figura sottostante

Pressione Temperatura Umidità BME680

Unica modifica da fare è verificare che la line utilizzata sia quella riportata in grassetto

//Adafruit_BME680 bme; // I2C
//Adafruit_BME680 bme(BME_CS); // hardware SPI
Adafruit_BME680 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK);

Se tutto funziona aprendo il monitor seriale dovrebbero apparire i valori letti dal sensore

Lettura valori e stampa su display

Una versione più completa del programma  che mostra i valori letti su un display TFT a colori.
Il display utilizzato è un display TFT di tipo retroilluminato che misura 2″ di diagonale, con risoluzione di 176 x 220 pixel, basato sul chip ILI9225, 262.144 colori. Questo chip, è in grado di collegarsi direttamente a un microprocessore esterno tramite un’interfaccia SPI. I dati possono essere memorizzati all’interno della memoria RAM on-chip da 87120 byte.

Il collegamento delle varie parti è riportato nella figura sottostante

Arduino UNODisplay TFTBME680
5VVCC
GNDGND
A1CLK
A2SDA
A3RS
A4RST
A5CS
D8VCC
D9GND
D10CS
D11SDA
D12SDO
D13SLC

Noterete una particolarità, l’alimentazione del sensore non è presa dai canonici pin +5V e GND ma dai pin digitali D8 (+5V) e D9 (GND).
Per questo motivo dopo averli impostati come OUTPUT, tramite il comando digitalWrite il pin D9 che è collegato a GND del sensore viene portato a livello LOW, mentre il pin D8 collegato a VCC del sensore viene portato a livello HIGH.

Pressione Temperatura Umidità BME680

Download Sketch

Pressione Temperatura Umidità BME680

Il programma mostra anche il dato di altitudine locale.
Tuttavia, per avere un risultato accurato occorre inserire nel programma la pressione hPa a livello del mare per la vostra posizione.
Si consideri poi che il sensore è abbastanza preciso ma se non ha i dati aggiornati per il giorno corrente, e può essere difficile ottenere una precisione maggiore di 10 metri.

Download Sketch

Esempi di utilizzo

Collegato a modulo Wemos D1 mini

In questo articolo vedremo come collegare il sensore BME680 al modulo Wemos D1 mini, i dati rilevato saranno riportati su un display TFT a colori.

Collegato a scheda ESP32 Devkit V1

Vediamo in questo articolo come leggere i valori forniti dal sensore BME 680 con un modulo ESP32 Devkit V1.sensore BME680 ESP32 Devkit