KKM: BME280

Početnik si s Dasduinom. Ili s elektronikom? Za oko ti je zapeo određeni modul, ali ne znaš kako ga koristiti? Bez brige, tu je KKM! Kako Koristiti Module (KKM) je serija blog tutorijala tvrtke soldered na kojoj ćeš pronaći sve što ti treba kako bi započeo rad sa svojim omiljenim modulom. Tutorijali obuhvaćaju: tehničke karakteristike, princip rada, upute kako povezati modul s Dasduinom te osnovni kod. Sve ostalo prepuštamo tebi na maštu.
UVOD
Ovaj senzor tlaka, temperature i vlage dizajnirala je i proizvela svjetski poznata tvrtka Bosch. Idealan je za bilo kakve projekte koji na neki način uključuju rad s podatcima o vremenskim uvjetima, poput vremenske postaje, motrenje okoline, kontrola grijanja/hlađenja, ali i druge prilike kao npr. pametni satovi za fitness.
Senzor je ugrađen u kompaktno LGA kućište dimenzija 2.5 x 2.5 x 0.93 mm^3. Male dimenzije i vrlo mala potrošnja omogućuju implementaciju ovog senzora u uređaje poput GPS-a ili pametnih satova koji koriste baterije. Odlikuju ga vrlo precizna mjerenja tlaka (+-12 Pa), temperature (+-1 C) te vlage (+- 2%), a iz tih podataka se također može izračunati i nadmorska visina, jer je ona usko povezana s tlakom. Integrirani senzor temperature prvotno je korišten za kompenzaciju temperature senzora vlage i tlaka, no može se koristiti i za mjerenje temperature okoline.
KAKO RADI?
Osnovni princip rada je da senzor napravi mjerenja temperature, tlaka i vlažnosti, zatim nakon perioda mjerenja podatci o temperaturi i tlaku po izboru prolaze kroz nisko-propusni IIR filtar koji uklanja šum kratkotrajnih fluktuacije tlaka uzrokovanih npr. puhanjem vjetra direktno u senzor, zalupljenim vratima, ubrzanjem automobila, itd. Za vlažnost takav filtar nije potreban, stoga nije niti ugrađen.
BME280 ima 3 moda rada: sleep, forced i normal mode:
Sleep mode ima najmanju potrošnju, ne vrši se nikakvo mjerenje, a svi registri su dostupni za očitanje.
Forced mode je prikladan za situacije u kojima nije potrebno napraviti puno mjerenja, na primjer kod očitavanja vremenskih uvjeta. Izvrši se jedno mjerenje, podatci se spreme u registre i senzor se vraća u sleep mode. Na taj način možemo smanjiti potrošnju.
Normal mode konstantno vrši mjerenja uz određeni delay, odnosno neaktivno vrijeme koje možemo podesiti.
Zanimljivo je još da se mjerenje bilo kojih od triju veličina(temperature, tlaka i vlage) posebno može uključiti ili preskočiti.
KAKO POVEZATI?
Korištenje ovog senzora je jednostavno budući da koristi I2C komunikacijski protokol. I2C linije već imaju ugrađene pull-up otpornike na 3.3V, tako da možete direktno spajati na analogne pinove Dasduina. Bitno je da senzor napajate s 3.3V, jer ga veći naponi mogu oštetiti.
3.3V ———–> 3.3V
GND ———–> GND
SDA ———–> Pin A4
SCL ———–> Pin A5
ARDUINO KOD
Ovaj kod će nam na serial monitoru svake sekunde ispisivati očitane podatke o temperaturi, tlaku, visini i vlazi. Za ovaj primjer treba nam BME280 library. Ako se trebate podsjetiti kako instalirati library, pogledajte na linku (ovdje). Nakon instaliranja librarija, kodu možete također pristupiti izravno iz Arduino IDE-a u dijelu “Examples”.
#include "Wire.h"
#include "BME280.h"
uint8_t address = 0;
// default address on e-r BME280 breakout
uint8_t mode = 3;
// normal mode
uint8_t standby = 0;
// recomeded for normal mode
uint8_t filter = 0;
// filter off
uint8_t temp_overSample = 1;
// oversampling temperat x1
uint8_t humi_overSample = 1;
// oversampling humidity x1
uint8_t pres_overSample = 1;
// oversampling pressure x1
BME280 bme;
void
setup
()
{
//Call settings before begin()
bme.settings(address, mode, standby, filter, temp_overSample, humi_overSample, pres_overSample);
bme.begin();
Serial.begin(9600);
}
void
loop
()
{
Serial.print(
"Temperature: "
);
Serial.print(bme.readTemp(), 2);
Serial.println(
" degrees C"
);
Serial.print(
"Pressure: "
);
Serial.print(bme.readPressure(), 2);
Serial.println(
" Pa"
);
Serial.print(
"Altitude: "
);
Serial.print(bme.readAltitude(), 2);
Serial.println(
"m"
);
Serial.print(
"%RH: "
);
Serial.print(bme.readHumidity(), 2);
Serial.println(
" %"
);
Serial.println();
delay
(1000);
}