Cum să utilizăm corect senzorul BME280

BME280 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 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).

1

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

3

Ușurința conectării și disponibilitatea unei biblioteci 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. Î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.

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, humidOverSamplenumărul de eșantioane preluate la o singură citire 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 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;

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;

mySensor.settings.filter = 5;

mySensor.settings.tempOverSample = 1;

mySensor.settings.pressOverSample = 2;

mySensor.settings.humidOverSample = 0;

În funcție de destinația 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.