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:
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