Sunteți pe pagina 1din 7

Textul și imaginile din acest document sunt licențiate

Attribution-NonCommercial-NoDerivs
CC BY-NC-ND

Codul sursă din acest document este licențiat


Public-Domain

Ești liber să distribui acest document prin orice mijloace consideri (email, publicare pe website /
blog, tipărire, sau orice alt mijloc), atât timp cât nu aduci nici un fel de modificări acestuia. Codul
sursă din acest document poate fi utilizat în orice fel de scop, de natură comercială sau nu, fără nici
un fel de limitări dar autorii nu își asumă nici o răspundere pentru pagubele pricinuite de
implementările realizate de utilizatori. Schemele și codul sursă au un rol educativ și nu sunt gândite
pentru a fi utilizate în mediu de producție (industrial, casnic sau comercial).
Cum să utilizăm corect senzorul BME280
BME280 [1] este un senzor digital integrat ce
permite măsurarea temperaturii, umidității și
presiunii atmosferice. Utilizat cu precădere în
dispozitive mobile, datorită dimensiunii reduse și a
consumului mic, senzorul BME280 oferă
performanțe bune la un preț scăzut. Din acest motiv
acest senzor este extrem de popular și este folosit în
multe proiecte ce utilizează plăci de dezvoltare
Arduino, ESP8266 sau Raspberry Pi. Bineînțeles,
formatul LGA [2] face
ca senzorul să fie
dificil de integrat în
scheme electronice personale dar, din fericire, există
disponibile componente brick / breakout ce permit
conectarea simplă la o placă de dezvoltare în montaje
bazate pe breadboard și fire de interconectare (de
exemplu, SparkFun Atmospheric Sensor Breakout -
BME280 [3]).

Pentru comunicația cu o placă de dezvoltare senzorul permite conectarea prin


intermediul magistralei I2C sau, alternativ, prin intermediul magistralei SPI. Având în
vedere faptul că senzorul funcționează la 3.3V, conectarea prin intermediul magistralei
I2C se poate face fără probleme cu o placă ce funcționează la 5V (Arduino Uno,
Arduino Leonardo) dar, în cazul magistralei SPI, necesită adaptor a nivelurilor logice
3.3V <-> 5V [4]. Pentru plăcile ce funcționează la 3.3V (Adafruit Feather, NodeMCU,
Raspberry Pi) nu există nici un fel de problemă. Pentru mai multe detalii legate de
conectarea senzorului la diverse plăci de dezvoltare se poate parcurge materialul
„SparkFun BME280 Breakout Hookup Guide” [5].

https://www.robofun.ro/forum/
Ușurința conectării și disponibilitatea unei biblioteci [6] de lucru cu acest senzor ne
face să ignorăm complexitatea funcționării acestuia. De cele mai multe ori preluăm
codul dat ca exemplu în cadrul bibliotecii și nu alocăm timpul necesar înțelegerii
modului de funcționare. Montajele vor funcționa dar vom utiliza corect senzorul? Să
luăm ca exemplu programul I2C_ReadAllData.ino din cadrul bibliotecii Sparkfun
BME280 [6]. În cadrul acestui exemplu în partea de inițializare se realizează
următoarele setări, preluate de cele mai multe proiecte ca atare:

mySensor.settings.runMode = 3;
mySensor.settings.tStandby = 0;
mySensor.settings.filter = 0;
mySensor.settings.tempOverSample = 1;
mySensor.settings.pressOverSample = 1;
mySensor.settings.humidOverSample = 1;

Ce reprezintă aceste setări? Sunt potrivite pentru orice proiect?

runMode – configurează modul de funcționare al senzorului. Există trei moduri de


funcționare: Sleep mode – senzorul nu efectuează nici o operație dar registrele interne
sunt accesibile (mySensor.settings.runMode = 0;); Forced mode – senzorul efectuează
o singură citire și revine în starea de Sleep mode (mySensor.settings.runMode = 1 sau
2;); Normal mode – senzorul efectuează o succesiune continuă de citiri
(mySensor.settings.runMode = 3;). Sleep mode este modul în care se află senzorul după
pornire. În funcție de domeniul de utilizare se poate configura în Forced mode sau în
Normal mode.

https://www.robofun.ro/forum/
tStandby – reprezintă timpul între două achiziții succesive în Normal mode. Chiar
dacă din program noi citim la un interval de câteva secunde, minute sau ore, intern
senzorul realizează achiziția la intervale de: 0, 0.5ms; 1, 62.5ms; 2, 125ms; 3, 250ms;
4, 500ms; 5, 1000ms; 6, 10ms; 7, 20ms;

filter – numărul de coeficienți utilizați în filtrarea parametrilor achiziționați. Poate avea


valorile: 0 – nu se aplică filtru, 1– 2 coeficienți, 2 – 4 coeficienți, 3 – 8 coeficienți, 4
– 16 coeficienți. Procesul de filtrare asigură stabilitatea procesului de achiziție
rejectând fluctuațiile generate de perturbații, mai ales pentru temperatură și presiune
atmosferică, crește rezoluția dar crește și timpul de achiziție.

tempOverSample, pressOverSample, humidOverSample – numărul de eșantioane


preluate la o singură citire [7] pentru parametrii temperatură, presiune atmosferică și
umiditate. Poate avea valorile: 0 – nu se efectuează oversampling, de la 1 la 5 pentru
1, 2, 4, 8, 16 eșantioane. Opțiune utilă pentru reducere zgomotelor în procesul de
achiziție.

În manualul oficial [8] al senzorului se dau următoarele scenarii de utilizare a acestor


parametrii:

Sistem de monitorizare a vremii (curent consumat de senzor aproximativ 0.16 µA)


Forced mode
Oversampling temperatură, umiditate, presiune: 1
Filter off

mySensor.settings.runMode = 1;
mySensor.settings.filter = 0;
mySensor.settings.tempOverSample = 1;
mySensor.settings.pressOverSample = 1;
mySensor.settings.humidOverSample = 1;

https://www.robofun.ro/forum/
Sistem de monitorizare a umidității (curent consumat de senzor aproximativ 2.9 µA)
Forced mode
Oversampling temperatură, umiditate:1, presiune: 0
Filter off

mySensor.settings.runMode = 1;
mySensor.settings.filter = 0;
mySensor.settings.tempOverSample = 1;
mySensor.settings.pressOverSample = 0;
mySensor.settings.humidOverSample = 1;

Sistem de navigare în interior – precizie mare în determinarea altitudinii (curent


consumat de senzor aproximativ 633 µA)
Normal mode, tStanby = 0.5ms
Oversampling temperatură:1, umiditate:0, presiune: 16
Filter coefficient 16

mySensor.settings.runMode = 3;
mySensor.settings.tStandby = 0;
mySensor.settings.filter = 5;
mySensor.settings.tempOverSample = 1;
mySensor.settings.pressOverSample = 4;
mySensor.settings.humidOverSample = 0;

Sistem gaming – răspuns rapid la modificarea altitudinii (curent consumat de


senzor aproximativ 581 µA)
Normal mode, tStanby = 0.5ms
Oversampling temperatură:1, umiditate:0, presiune: 4
Filter coefficient 16

mySensor.settings.runMode = 3;
mySensor.settings.tStandby = 0;

https://www.robofun.ro/forum/
mySensor.settings.filter = 5;
mySensor.settings.tempOverSample = 1;
mySensor.settings.pressOverSample = 2;
mySensor.settings.humidOverSample = 0;

În funcție de funcționalitatea sistemului în care utilizați senzorul BME280 puteți ajusta


acești parametrii pentru a atinge performanțele dorite. Nu utilizați modul Normal
pentru un sistem ce efectuează citiri la intervale mari de timp, modul Forced asigură
un consum mult mai mic. Pentru citiri rapide nu utilizați un număr mare de
oversampling. Dacă aveți nevoie doar de unul sau doi parametrii din cei trei furnizați
de senzor puteți dezactiva parametrul nefolositor prin atribuirea valorii 0 la
oversampling scăzând consumul și crescând viteza de achiziție. Pentru acuratețe mare
în achiziție utilizați un număr mare de coeficienți de filtrare.

În finalul lecției vă recomandăm un nou senzor


al companiei Bosch ce continuă seria de senzori
integrați, din care fac parte deja celebrii senzori
BMP180, BMP280, BME280, cu un nou
membru extrem de atrăgător ca funcționalitate:
BME680 [9], [10] – senzor de măsurare a
calității aerului (temperatură, umiditate,
presiune atmosferică și compuși volatili
organici). Aplicațiile acestui noi membru al
familiei de senzori Bosch sunt diverse: de la
dispozitive de măsurare a calității aerului în
spații închise până la automatizări ale locuinței.

https://www.robofun.ro/forum/
Referințe on-line

[1] BME280
https://www.bosch-sensortec.com/bst/products/all_products/bme280

[2] Land grid array


https://en.wikipedia.org/wiki/Land_grid_array

[3] Senzor Atmosfera - BME280


https://www.robofun.ro/sparkfun-atmospheric-sensor-breakout-bme280?utm_source=newsletter&utm_medium=email&utm_content=productLink&utm_campaign=CURS_EMAIL

[4] Convertor nivel logic Bi-Directional


https://www.robofun.ro/logic-level-converter-bi-directional?utm_source=newsletter&utm_medium=email&utm_content=productLink&utm_campaign=CURS_EMAIL

[5] SparkFun BME280 Breakout Hookup Guide


https://learn.sparkfun.com/tutorials/sparkfun-bme280-breakout-hookup-guide

[6] SparkFun_BME280_Arduino_Library
https://github.com/sparkfun/SparkFun_BME280_Arduino_Library/

[7] Oversampling
https://en.wikipedia.org/wiki/Oversampling

[8] BME280 Combined humidity and pressure sensor


https://ae-bst.resource.bosch.com/media/_tech/media/datasheets/BST-BME280_DS001-12.pdf

[9] BME680
https://www.bosch-sensortec.com/bst/products/all_products/bme680

[10] Senzor de masurarea calitatii aerului (Qwiic) - BME680


https://www.robofun.ro/environmental-sensor-qwiic-bme680?utm_source=newsletter&utm_medium=email&utm_content=productLink&utm_campaign=CURS_EMAIL

https://www.robofun.ro/forum/