BMP280
Modul koji ću sada predstaviti imam jako dugo (kao i još gomilu drugih) i
sada je došao na red. U pitanju je BMP280 senzor na modulu sa oznakom
GY-BM E/P 280 koji dolazi iz velikog Bosch-a. Prvenstvena namena ovih
senzora je ugradnja u pametne uređaje ali se ugrađeni u odgovarajuće
module mogu naći i za SBC platforme, kao u našem slučaju Arduina.
BMP280
je relativno malih dimenzija sa otvorima za šest pinova sa oznakama
VCC, GND, SCL, SDA, CSB i SDO. Sa Arduinom se može povezati na više
načina: I2C i SPI gde se ako koristimo SPI može povezati na dva načina.
Ako koristimo SPI metod, koji je i brži, možemo birati između
hardverskog i softverskog SPI povezivanja. Ako idemo na hardverski SPI
pinove modula osim na izvor napajanja povezujemo i na 10, 11, 12 i 13
pinove Una ili 50, 51, 52 i 53 Mege koja će ovaj put biti korištena. Ako
se koristi softverski SPI, onda može bilo koji digitalni pin. Potrebno
je samo u okviru skeča uključiti podršku za odgovarajuće povezivanje a
ostalo staviti pod komentare.
Modul
je kao što sam pomenuo zasnovan na Bošovom Piezo-resistive senzoru.
Odlikuje se visokom preciznošću i otpornosti ka EMC. U stanju je da meri
temperature u opsegu od -40 do +85°C. Vazdušni pritisak meri u rasponu
od 300 do 11000hPa. Preko dobijenih podataka o vazdušnom pritisku,
senzor posredno vrši računanje i nadmorske visine. Ovo zadnje, s obzirom
da je uslovljeno vazdušnim pritiskom koji je varijabilan, pa se tako
može desiti da u jednom trenutku vaša kuća bude na 255 metara nadmorske
visine a u drugom na 220m. Ovo se može ispraviti zadavanjem određenih
parametara u okviru skeča ukoliko nam je potrebna tačna vrednost.
Neophodne podatke možete naći na zvaničnom sajtu Hidrometeorološkog
Zavoda. Dalje, vrlo je bitno da naglasim da modul radi na 3,3V i
neophodno je VCC pin povezati na odgovarajući naponski izlaz.
Za
ovaj tekst BMP280 ću povezati na sporiji I2C uz upotrebu samo SDA i SCL
pinova. Dakle, ako pravite ovakav projekat treba vam Mega, ekran Nokie
5110, BMP280, malo žica i prototipska ploča. Žice povezujemo prema
Fritzing šemi, gde treba voditi računa koja ploča se koristi. Na Megi su
SCL i SDA pinovi u Comunication sekciji (20 i 21).
Osim
neophodnih komponenti potrebno je preuzeti i par biblioteka. Meni
nekako više leže Adafruit biblioteke, stoga ću i ovaj put koristiti
njihove: Adafruit_Sensor, Adafruit_BMP280, kao i Adafruit_PCD8544 za
ekran 5110. Nakon povezivanja, prvo što radimo je da postavimo pravu I2C
adresu u okviru drajvera. Otvaramo fajl Adafruit_BMP280.h i u I2C
podešavanjima na liniji 37 menjamo adresu na 0x76. Ukoliko ne dobijete
očitavanja, potrebno je da prethodno pustite I2C skener jer je možda
adresa vašeg modula drugačija a o njemu sam pisao kada je bilo reči o
OLED ekranima.
---------------------
/*-----------------------------------------------------------------*
* Skeč za potrebe članka na www.itstreet.org
* Author: Petrović Dejan
* Date: 12/03/2017
* Arduino MEGA, BMP280, ekran NOKIA 5110
*-----------------------------------------------------------------*/
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>
Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);
Adafruit_BMP280 bmp;
void setup() {
if (!bmp.begin()) {
display.setCursor(0,0);
display.println("Failed!");
while (1);
}
display.begin();
display.setContrast(45);
}
void loop() {
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(BLACK);
display.setCursor(0,0);
display.println("METEO station");
display.println();
display.print("Press:");
display.print(int(bmp.readPressure()/100));
display.println("mbar");
display.print("Temp :");
display.print(int(bmp.readTemperature()));
display.println("C");
display.print("Alt :");
display.print(int(bmp.readAltitude(1013.25)));
display.print("m");
display.display();
delay(2000);
}
-----------------------------------
Da
prokomentarišem malo skeč. Uključujemo nekoliko biblioteka gde je Wire
neophodna za komunikaciju sa BMP280 putem I2C interfejsa. Sa druge
strane SPI je neophodna za Nokiin ekran, kao i Adafruit_GFX i Adafruit_PCD8544. Nakon ovih biblioteka idu one neophodne za BMP280 senzor: Adafruit_Sensor i Adafruit_BMP280.
Dalje ide pravljenje objekata ekrana i senzora gde u vezi ekrana imamo
da navedemo koje pinove smo upotrebili za SPI povezivanje. U setup
funkciji proveravamo BMP280 da li je pokrenut i komandom while(1)
privremeno zaustavljamo izvršavanje do trenutka kada se reset signal
pojavi. Pokrećemo ekran i zadajemo kontrast koji se u slučaju mog ekrana
najbolje pokazao sa vrednošću 45. U loop funkciji formatiramo prikaz na
ekranu i ispisujemo dobijene vrednosti. Varijablom int forsiramo da nam očitane vrednosti budu zaokružene na ceo broj. Funkcijom bmp.readPreassure() dobijamo vrednost u Paskalima koju prostim deljenjem pretvaramo u milibare, nama svakako jasnije. Isto važi i za bmp.readAltitude()
funkciju gde se pojavljuje i jedan mali problem. Naime, s obzirom na
posredno računanje nadmorske visine preko vazdušnog pritiska, pojavljuju
se nelogična očitavanja usled promene istog. Tako ćemo doći u poziciju
da nam recimo, pri 982mbara nadmorska visina bude na 255m a već sutra
dan pri 990mbara to bude 200m. Pri tom nam je kuća i dalje na istom
mestu. Ovo se rešava deljenjem dobijenih vrednosti sa standardnim
vazdušnim pritiskom za određeno područje na nivou mora, ali za taj dan.
BMP280
je zgodan mali senzor pogodan za pravljenje Meteo stanice u kućnoj
varijanti. Mali potrošač, dosta precizan i lako se koristi. Ono što sam
primetio je problem u nekim slučajevima prilikom očitavanja vrednosti,
takozvanog bursta. Dešava se da nakon reseta Arduina senzor ima problem
sa slanjem svih vrednosti odjednom. Prilikom ispisivanja na ekranu 5110
to se i ne primećuje ali se primećuje prilikom testiranja i ispisivanja
na Serijal monitoru.