Skip to main content

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.

Select Board
simpleReading.ino
#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):

Serial MonitorAutoscrollShow timestampNewline115200 baud
Message (Enter to send message to the board)
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 None

Stvara 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 bool

Postavlja 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

NazivTipOpis
addressuint8_tI2C adresa senzora. Zadano je BMV080_DEFAULT_ADDRESS, a to je 0x57, zadana adresa pločice.
wirePortTwoWire &I2C port koji se koristi. Zadano je Wire.
init()returns bool

Priprema 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 bool

Pokreće mjerenje u odabranom načinu rada.

Returnstrue ako je Boschov upravljački program pokrenuo mjerenje, inače false.

Parametri

NazivTipOpis
modeuint8_tBMV080_MODE_CONTINUOUS za kontinuirano mjerenje ili BMV080_MODE_DUTY_CYCLE za rad s radnim ciklusom.
readSensor(bmv080_output_t *bmv080_output = nullptr)returns bool

Omoguć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

NazivTipOpis
bmv080_outputbmv080_output_t *Neobavezno. Boschova izlazna struktura u koju se kopira novo očitanje. Primjer je izostavlja.
PM10()returns float

Vraća PM10 vrijednost posljednjeg očitanja: čestice promjera 10 µm ili manje.

ReturnsMasena koncentracija PM10 u µg/m³.

PM25()returns float

Vraća PM2,5 vrijednost posljednjeg očitanja: čestice promjera 2,5 µm ili manje.

ReturnsMasena koncentracija PM2,5 u µg/m³.

PM1()returns float

Vraća PM1 vrijednost posljednjeg očitanja: čestice promjera 1 µm ili manje.

ReturnsMasena koncentracija PM1 u µg/m³.

isObstructed()returns bool

Vrać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.