Modulul senzor de presiune barometric BMP180

    Acest modul este foarte util in detectia presiunii atmosferice. Aceasta presiune atmosferica variaza in  functie de vreme si de altitudinea la care ne aflam.
    Modulul se alimenteaza cu tensiune cuprinsa intre 3.3V si 5V. Acesta comunica cu Arduino prin intermediul interfetei I2C. Adresa I2C a acestui circuit este 0x77. De asemenea modulul are in componenta lui pe langa senzorul barometric si un senzor de temperatura.
    Presiunea poate fi citita pe o scala aflata intre 300hPa si 10000hPa (de la -500m la 90000m de la nivelul marii).
    Temperatura poate fi citita intre -40 si 85 grade Celsius cu o acuratete de ± 1 grad Celsius.
    De asemenea acest circuit are un consum foarte mic, in timpul masurarii consumand maxim 1mA iar in stare de repaus 5μA.
    Modulul este cel din poza de mai jos:

    Pentru a utiliza acest modul impreuna cu Arduino va trebui sa folosim o librarie externa.
    Afisarea informatiilor returnate de catre modul le vom face pe un display LCD 1602 cu interfata I2C (pentru a economisi numarul de conexiuni), informatii despre conectarea acestuia fiind in acest articol.

    Libraria folosita este BMP180 Breakout Library de la Sparkfun si poate fi descarcata de aici:
    Dupa instalarea acestei librarii vom incepe sa scriem codul sursa pentru a citi informatiile returnate de catre modul. La inceputul programului va trebui sa includem aceasta noua librarie instalata:

#include <SFE_BMP180.h>

    In urmatoarea linie de cod vom initializa clasa librariei:

SFE_BMP180 bmp;

    Dupa aceste linii de cod vom adauga cateva instructiuni in functia setup(). In prima linie vom initializa modulul:

bmp.begin();

    Pentru a face programul mai interesant la initializarea librariei vom afisa un mesaj de succes al initializarii sau un mesaj de eroare. Pentru a face acest lucru la initializarea modulului vom salva valoare intr-o variabila booleana numita succes.

bool succes = bmp.begin();

    Apoi in functie de valoarea aceste variabile noi stim daca modulul a fost initializat in mod corect sau nu. Si folosind instructiunea conditionala if... else vom afisa mesajul corect pe display:

if (succes) {
    //afisam un mesaj de initiaslizare cu succes
} else {
    //afisam un mesaj de eroare
}

    Mai departe vom adauga cod in functia loop(), cod cu care vom afisa temperatura si presiunea citita de catre senzor. Pentru acest lucru vom scrie urmatoarele linii de cod. In prima linie de cod vom declara o variabila noua numita val. In aceasta variabila vom stoca informatiile returnate de catre senzor:

char val;

    In urmatoarea linie de cod vom mai declara 2 variabile, una pentru temperatura si una pentru presiune:

double temp, pres;

    Dupa declararea acestor variabile vom face prima citire din senzor folosind functia startTemperature(); fara a-i adauga nici un parametru.

val = bmp.startTemperature();

    Mai departe vom verifica daca continutul variabilei val este diferit de 0 (zero). Daca este diferit vom seta o intarziere de 10 milisecunde apoi vom citi temperatura folosind functia getTemperature(variabila_temperatura); unde adaugam ca parametru variabila pentru temperatura. Valoarea temperaturii va fi stocata in aceasta variabila si este in grade Celsius.

delay(10);
val = bmp.getTemperature(temp);

    Dupa aceste instructiuni vom mai seta o intarziere de 10 milisecunde apoi vom incepe sa citim presiunea cu ajutorul functiei startPressure(x); unde x este un parametru cu o valoare cuprinsa intre 0 si 3. Acest parametru semnifica rata de esantionare si cu cat numarul este mai mare rata de esantionare este mai mare si, in consecinta, citirea se face mai incet.

delay(10);
val = bmp.startPressure(3);

    Dupa aceste linii de cod vom mai seta inca o intarziere de 10 milisecunde apoi vom folosi functia getPressure(variabila_presiune, variabila_temperatura); pentru a citi si stoca presiunea atmosferica, valoarea fiind in hectoPascali (hPa):

delay(10);
val = bmp.getPressure(pres, temp);

    Pentru a afisa temperatura si presiunea vom folosi urmatoarele linii de cod:

lcd.print("T: ");
lcd.print(temp);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("P: ");
lcd.print(pres);
lcd.print(" hPa");

    Sketchul in forma finala este cel de mai jos:

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
#include <SFE_BMP180.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);
SFE_BMP180 bmp;

void setup() {
  lcd.begin();
  bool succes = bmp.begin();
  lcd.print("Modul BMP180");
  lcd.setCursor(0, 1 );
  if (succes) {
    lcd.print("initializat");
  } else {
    lcd.print("eroare!!!");
  }
  delay(1000);
}

void loop() {
  char val;
  double temp, pres;
  val = bmp.startTemperature();
  
  if (val != 0) {
    delay(10);
    val = bmp.getTemperature(temp); 
    delay(10);
    val = bmp.startPressure(3);
    delay(10);
    val = bmp.getPressure(pres, temp);
  }
  
  lcd.clear();
  lcd.print("T: ");
  lcd.print(temp);
  lcd.print(" C");
  lcd.setCursor(0, 1);
  lcd.print("P: ");
  lcd.print(pres);
  lcd.print(" hPa");
  delay(1000);

}

    Poze cu montajul in functiune sunt mai jos:

 

Nu sunt comentarii in “Modulul senzor de presiune barometric BMP180”

Lasa un comentariu

Raspuns lui Some User

Autentificare