Warning: mysqli_select_db() expects parameter 1 to be mysqli, string given in /home/itstreet/public_html/classes/CMySQL.php on line 22

Warning: mysqli_query() expects at least 2 parameters, 1 given in /home/itstreet/public_html/classes/CMySQL.php on line 24
ITstreet -BMP280
Preskoči na sadržaj

ITstreet postovi

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.

Ostavite poruku

Vaša mejl adresa neće biti objavljena.Označena polja su obavezna*