Očitavanje PM vrijednosti
Što prikazuje ovaj primjer
Očitavanje PM10, PM2,5 i PM1 s BMV080 senzora u načinu kontinuiranog mjerenja te provjera blokira li nešto senzor. Senzor daje novo očitanje otprilike jednom u sekundi; skica traži očitanje svakih 100 ms i ispisuje redak samo kada stigne novo.
Kod primjera
Ovo je simpleReading.ino iz fiksirane (pinned) biblioteke, bez uvodnog komentara. Sama skica je točno onakva kakva se isporučuje. Koristi zadanu adresu pločice, 0x57.
#include "BMV080-SOLDERED.h"
BMV080 bmv080; // Create an instance of the BMV080 class
#define BMV080_ADDR 0x57 // BMV080 default address
void setup()
{
Serial.begin(115200);
while (!Serial)
delay(10); // Wait for Serial to become available.
Wire.begin();
if (bmv080.begin(BMV080_ADDR, Wire) == false)
{
Serial.println(
"BMV080 not detected at default I2C address. Check your jumpers and the hookup guide. Freezing...");
while (1)
;
}
/* Initialize the Sensor (read driver, open, reset, id etc.)*/
bmv080.init();
/* Set the sensor mode to continuous mode */
if (bmv080.setMode(BMV080_MODE_CONTINUOUS) == true)
{
Serial.println("BMV080 set to continuous mode");
}
else
{
Serial.println("Error setting BMV080 mode");
}
}
void loop()
{
if (bmv080.readSensor())
{
float pm10 = bmv080.PM10();
float pm25 = bmv080.PM25();
float pm1 = bmv080.PM1();
Serial.print("PM10: ");
Serial.print(pm10);
Serial.print("\t");
Serial.print("PM2.5: ");
Serial.print(pm25);
Serial.print("\t");
Serial.print("PM1: ");
Serial.print(pm1);
if (bmv080.isObstructed() == true)
{
Serial.print("\tObstructed");
}
Serial.println();
}
delay(100);
}
Očekivani rezultat, iz probnog rada na ovoj pločici (u tom radu nije zabilježeno koji je kontroler korišten):
BMV080 set to continuous mode
PM10: 9.84 PM2.5: 7.12 PM1: 5.06
PM10: 10.27 PM2.5: 7.39 PM1: 5.21
PM10: 10.03 PM2.5: 7.25 PM1: 5.14
PM10: 9.71 PM2.5: 7.01 PM1: 4.98
PM10: 9.92 PM2.5: 7.18 PM1: 5.09
Novi redak pojavljuje se otprilike jednom u sekundi, a svaka je vrijednost u µg/m³. Redak završava s Obstructed kada je pogled senzora blokiran. Vaši će brojevi ovisiti o zraku oko senzora. Ako senzor ne odgovori, skica ispisuje BMV080 not detected at default I2C address. Check your jumpers and the hookup guide. Freezing... i zaustavlja se.
Korištene funkcije
BMV080()returns NoneStvara objekt senzora. Ne prima argumente: adresa i Wire port zadaju se u begin().
ReturnsKonstruktor; nema povratne vrijednosti.
begin(const uint8_t address = BMV080_DEFAULT_ADDRESS, TwoWire &wirePort = Wire)returns boolPostavlja I2C adresu i Wire port koje biblioteka koristi te provjerava odgovara li senzor na toj adresi. Ne pokreće I2C sabirnicu, zato prvo pozovite Wire.begin(), kao u primjeru.
Returnstrue ako je senzor odgovorio na adresi, inače false.
Parametri
| Naziv | Tip | Opis |
|---|---|---|
address | uint8_t | I2C adresa senzora. Zadano je BMV080_DEFAULT_ADDRESS, a to je 0x57, zadana adresa pločice. |
wirePort | TwoWire & | I2C port koji se koristi. Zadano je Wire. |
init()returns boolPriprema senzor preko Boschova upravljačkog programa: čita verziju upravljačkog programa, otvara senzor, izvodi programski reset i čita ID senzora. Pozovite je nakon begin() i prije bilo čega drugog.
Returnstrue ako su svi koraci uspjeli, false ako je neki korak neuspješan.
setMode(uint8_t mode)returns boolPokreće mjerenje u odabranom načinu rada.
Returnstrue ako je Boschov upravljački program pokrenuo mjerenje, inače false.
Parametri
| Naziv | Tip | Opis |
|---|---|---|
mode | uint8_t | BMV080_MODE_CONTINUOUS za kontinuirano mjerenje ili BMV080_MODE_DUTY_CYCLE za rad s radnim ciklusom. |
readSensor(bmv080_output_t *bmv080_output = nullptr)returns boolOmogućuje Boschovu upravljačkom programu da jednom dohvati i obradi podatke sa senzora. Kada stigne novo očitanje, biblioteka ga pohranjuje za PM10(), PM25(), PM1() i isObstructed(). Pozivajte je redovito, kao što primjer radi u loop().
Returnstrue ako je tijekom ovog poziva stiglo novo očitanje, inače false.
Parametri
| Naziv | Tip | Opis |
|---|---|---|
bmv080_output | bmv080_output_t * | Neobavezno. Boschova izlazna struktura u koju se kopira novo očitanje. Primjer je izostavlja. |
PM10()returns floatVraća PM10 vrijednost posljednjeg očitanja: čestice promjera 10 µm ili manje.
ReturnsMasena koncentracija PM10 u µg/m³.
PM25()returns floatVraća PM2,5 vrijednost posljednjeg očitanja: čestice promjera 2,5 µm ili manje.
ReturnsMasena koncentracija PM2,5 u µg/m³.
PM1()returns floatVraća PM1 vrijednost posljednjeg očitanja: čestice promjera 1 µm ili manje.
ReturnsMasena koncentracija PM1 u µg/m³.
isObstructed()returns boolVraća zastavicu zaprečenosti posljednjeg očitanja. Senzor je postavlja kada se nepomičan predmet nalazi na njegovu optičkom putu; kratkotrajne zapreke, poput ruke koja prođe pokraj, filtriraju se.
Returnstrue ako je posljednje očitanje bilo zaprečeno, inače false.
Sastavljanje svega zajedno
Redoslijed je važan: Wire.begin(), zatim begin() s adresom, zatim init(), pa setMode(). Nakon toga često pozivajte readSensor() i vrijednosti čitajte samo kada vrati true. Ako adresu promijenite jumperima JP2 i JP3, promijenite i BMV080_ADDR da se podudara.