Non vi sono articoli nel carrello

Introduzione all'uso del Sensore BME680 con Arduino

15 lug 2020
Il Sensore BME680 è prodotto dalla Bosch Sensortec (https://www.bosch-sensortec.com/), si tratta di un sensore digitale 4 in 1 
in grado di misurare l'umidità, la pressione atmosferica, la temperatura ed i composti organici volatili  gas volatili (VOC) 
e rappresenta l'ultima evoluzione della serie di sensori BMP.
Il Sensore BME680 è prodotto dalla Bosch Sensortec (https://www.bosch-sensortec.com/products/environmental-sensors/gas-sensors-bme680/) rappresenta l'ultima evoluzione della serie di sensori BMP, è un sensore digitale 4 in 1 in grado di misurare l'umidità, la pressione atmosferica, la temperatura ed i composti organici volatili (VOC).

Indice

1. Descrizione del sensore BME680
1.1 Rilevamento della temperatura
1.2 Rilevazione dell’umidità
1.3 Rilevamento della pressione
1.4 Rilevamento di gas nell’ambiente
2. Tipologia di moduli
3. Schema elettrico del modulo
4. Pin del modulo
5. Libreria di gestione del sensore
6. Primo test del sensore
6.1 Cablaggio I2C
6.2 Cablaggio SPI
7. Lettura dei valori e visualizzazione su display


1. Descrizione del sensore BME680

Il sensore BME680 è realizzato in un package LGA con contenitore metallico che misura 3 x 3 x 1 mm e connessione ad 8 pin, è in grado di misurare la pressione atmosferica, l'umidità, la temperatura ed i gas volatili (VOC), offre buone doti di linearità ed accuratezza, una buona stabilità a lungo termine, una elevata robustezza EMC ed è stato progettato per ottenere anche dei consumi ottimizzati in funzione delle specifiche modalità di funzionamento, i dati in uscita sono disponibili tramite I2C oppure SPI. 

Il sensore BMP680 può essere utilizzato per:

  • Misurazione della qualità dell’aria
  • Realizzazione di stazioni meteo personalizzate
  • Consapevolezza del contesto, ad esempio rilevamento dell’umidità della pelle e delle variazioni nell’ambiente
  • Monitoraggio fitness/benessere
  • Generazione di avvisi in caso di aria secca o temperature elevate
  • Misurazione del volume e del flusso d’aria
  • Controllo per l'automazione domestica (ad es. HVAC)
  • Integrazione di sistemi 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 MOX (Metal- OXide), l’ossido metallico riscaldato modifica la propria resistenza in base ai composti organici volatili (VOC – 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 e della precisione della misurazione, nonché della gestione dell’energia.

1.1 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.
La lettura della temperatura sarà di solito leggermente superiore a quella ambiente a causa dell'auto-riscaldamento.

1.2 Rilevamento dell'umidità

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

1.3 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.

1.4 Rilevamento di gas nell’ambiente

Il sensore di gas funziona riscaldando internamente una piccola superficie e misurando la resistenza dello strato di gas, questa misura può essere utilizzato come mezzo indiretto per misurare la qualità dell’aria.
Occorre notare che il sensore fornirà solamente un valore di resistenza, relativo al contenuto complessivo di VOC, ma non può differenziare la singola tipologia di gas o alcoli.
Si noti inoltre che questo sensore, come tutti i sensori VOC/gas ha necessità di essere calibrato utilizzando fonti note e, per ottenere misure accurate, si consiglia di lasciare in funzione il sensore per almeno 48 ore quando lo si utilizza la prima volta 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, per i successivi utilizzi, sempre che si coinvolgano la lettura relativa ai gas, il periodo di preriscaldamento potrà essere limitata a 30 minuti.

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, essendo piuttosto complessi 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.


2. Tipologia di moduli
Per il sensore sono disponibili diverse tipologie di moduli che ne permettono l'utilizzo o la valutazione.



Il modello che sarà utilizzato in questo articolo (vedi sotto) misura 19 x 16 mm con un peso di 1,3g, può essere alimentato con una tensione compresa tra 3,3Vcc e 5Vcc, i dati in uscita sono disponibili sia su I2C sia su SPI.

Vista lato superiore

Vista lato inferiore

3. 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 un array di due MOSFET a canali N con le relative resistenze e svolge la funzione di level shifting permettendo il collegamento dei dispositivi che presentano livelli logici a 5Vcc con il sensore che ha invece livelli logici a 3.3 Vcc.
Le resistenze R1 e R2 infine mantengono a livello alto le linee CS e SDO per evitare fluttuazioni.
Lo schema è realizzato utilizzando il programma online EasyEDA



4. Pin del modulo



VCC: Pin di alimentazione, compresa tra 3.3Vcc e 5Vcc
GND: Pin di massa
SCL: I2C/SPI Clock Line
SDA: I2C/SPI Data Line
SDO: SPI Data Line
CS: SPI Slave Device Enable

5. Libreria di gestione del sensore
Per facilitare la gestione ci vengono aiuto, come sempre, 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 Library“, premendo su “More info..” apparirà il tasto “Installa” cliccare il tasto 



a fine installazione apparirà la scritta “INSTALLED”



6. Primo test del sensore

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



6.1 Cablaggio I2C

Di seguto le connessioni da utilizzare per il test tramite l’interfaccia I2C, per impostazione predefinita l’indirizzo i2c è 0x77.

VCC: all'alimentazione 5Vcc
GND: al pin di massa
SCL: al pin SCL specifico oppure A5
SDA: al pin SDA specifico oppure A4

 
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 andranno controllate le connessioni, è anche possibile verificare se il sensore viene riconosciuto, per fare questo è possibile utilizzare lo sketch “i2c_scanner” 

Sketch i2c_scanner: HTTPS://www.adrirobot.it/wp-content/uploads/2020/05/I2C_scanner.zip 

Dovrete aprire il Monitor Seriale, a questo punto potranno comparire due messaggi: il primo, evidenzia che il device è stato trovato e risponde all’indirizzo 0x77 che è il valore atteso.



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



6.2  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” dove devono essere utilizzati i seguenti pin: 

VCC: all'alimentazione 5Vcc
GND: al pin di massa
SCL: al PIN SCL specifico ma è possibile utilizzzare 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:



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 correttamente aprendo il monitor seriale dovrebbero apparire i valori letti dal sensore



7. Lettura valori e stampa su display

Il programma utilizzato (https://win.adrirobot.it/display_tft/Display_tft_2_Inch_176x220_SPI.htm) mostra i valori letti su di un display TFT a colori con retroilluminazione, i il display utilizzato misura 2″ di diagonale ha una risoluzione di 176 x 220 pixel, è basato sul chip ILI9225 ed è in grado di visualizzare 262.144 colori, la connessione del display è effettuata 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



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,

 

 

 

Sketch Test_BME680_TTF

 

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