BME280

BME280 to bardzo ciekawy czujnik produkowany przez firmę Bosch. Potrafi mierzyć wilgotność, temperaturę i ciśnienie powietrza z duża dokładnością. Do komunikacji używa SPI lub I2C, zwykle może pracować na napięciach z przedziału od 1,8V do 5,0V. Jak na swoje możliwości jest tani - można go kupić za okolice 15,00zł.

Podłączanie do mikrokontrolera za pomocą I2C

I2C wymaga mniejszej ilości połączeń niż SPI, dlatego preferuję ten sposób podłączania. Wykorzystamy następujące PINy czyjnika:

  • VCC
  • GND
  • SDA (dane)
  • SCL (taktowanie)

Domyślny adres czujnika to 0x76, jeżeli potrzebujemy podłączyć dwa czujniki do jednego kontolera to na drugim czujniku należy zewrzeć SDO do VCC, w ten sposób czujnik otrzyma adres 0x77.

Do obsługi tego sensora w Arduino potrzeba będzie biblioteka Adafruit_BME280 i Adafruit Unified Sensor.

Przykładowy kod obsługujący czujnik:

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>

Adafruit_BME280 bme;

void setup() {
  Serial.begin(9600);
  while(!Serial);    // time to get serial running
  Serial.println("Czujnik BME280");

  unsigned status;

  status = bme.begin(0x76);  
  if(!status) {
    Serial.println("Nie udalo sie polaczyc z czujnikiem");
    while(1) delay (1000);
  }
}

void loop() {
  Serial.print("Temperatura: ");
  Serial.print(bme.readTemperature());
  Serial.println("*C");

  Serial.print("Cisnienie: ");
  Serial.print(bme.readPressure() / 100.0F);
  Serial.println("hPa");

  Serial.print("Wilgotnosc: ");
  Serial.print(bme.readHumidity());
  Serial.println("%");

  Serial.println();
  Serial.println();

  delay(5000);
}

Poniższy kod obsłuży dwa czujniki na raz:

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>

Adafruit_BME280 bme76;
Adafruit_BME280 bme77;

void setup() {
  Serial.begin(9600);
  while(!Serial);    // time to get serial running
  Serial.println("Czujnik BME280");

  unsigned status;

  status = bme76.begin(0x76);
  if(!status) {
    Serial.println("Nie udalo sie polaczyc z czujnikiem 76");
    while(1) delay (1000);
  }

  status = bme77.begin(0x77);
  if(!status) {
    Serial.println("Nie udalo sie polaczyc z czujnikiem 77");
    while(1) delay (1000);
  }

}

void loop() {
  Serial.print("Temperatura 76: ");
  Serial.print(bme76.readTemperature());
  Serial.println("*C");

  Serial.print("Cisnienie 76: ");
  Serial.print(bme76.readPressure() / 100.0F);
  Serial.println("hPa");

  Serial.print("Wilgotnosc 76: ");
  Serial.print(bme76.readHumidity());
  Serial.println("%");

  Serial.print("Temperatura 77: ");
  Serial.print(bme77.readTemperature());
  Serial.println("*C");

  Serial.print("Cisnienie 77: ");
  Serial.print(bme77.readPressure() / 100.0F);
  Serial.println("hPa");

  Serial.print("Wilgotnosc 77: ");
  Serial.print(bme77.readHumidity());
  Serial.println("%");

  Serial.println();
  Serial.println();

  delay(5000);
}

Poprzedni wpis