Grove Beginner KitでのArduino入門 その10 気圧計(BMP280)

概要

前回は温度と湿度計を使いました。今回は気圧計です。ボッシュのBMP280という有名な気圧計を利用します。

BMP280とは?

上記のI2C接続のセンサーになります。ボッシュのBMP280というセンサーを利用しており、気圧と温度の取得が可能です。ただし、温度に関しては気圧計の補正用であり、あまり精度が高くないみたいです。

似たセンサーでBME280というものもあります。

こちらは気圧の他に湿度センサーも搭載しています。温度も取得できるので、安い環境センサーとして利用されています。ただし気圧計の精度は高いのですが、湿度と温度の精度は高くありません。そのため、今回のキットのように湿度と温度は別センサーで、気圧のみBMP280を使うこともあります。

たとえば、上記の環境センサーでは気圧センサーとしてBMP280と、湿度・温度センサーとしてSHT30を利用いています。湿度・温度センサーは専業メーカーでないとなかなか精度がでないみたいです。

ライブラリ

Grove BMP280で検索してみます。Seeed社はBME280とBMP280は別ライブラリみたいですね。基本的にBME280のライブラリでも動きますが、搭載していない湿度センサーの値が取れません。なので、同じライブラリで動かすことが多いのですが、個別に用意しているんですね。

このライブラリ以外でも動かすことは可能だと思います。「Adafruit_BMP280」などが利用されていることが多いと思います。

スケッチ例を動かす

#include "Seeed_BMP280.h"
#include <Wire.h>

BMP280 bmp280;

void setup() {
  Serial.begin(115200);
  if (!bmp280.init()) {
    Serial.println("Device error!");
  }
}

void loop() {
  float pressure;

  //get and print temperatures
  Serial.print("Temp: ");
  Serial.print(bmp280.getTemperature());
  Serial.println("C"); // The unit for  Celsius because original arduino don't support speical symbols

  //get and print atmospheric pressure data
  Serial.print("Pressure: ");
  Serial.print(pressure = bmp280.getPressure());
  Serial.println("Pa");

  //get and print altitude data
  Serial.print("Altitude: ");
  Serial.print(bmp280.calcAltitude(pressure));
  Serial.println("m");

  Serial.println("\n");//add a line between output of different times.

  delay(1000);
}

ライブラリに入っているものの先頭のコメントを消して、シリアルの速度を変更したものです。使い方はシンプルですね。

Temp: 21.94C
Pressure: 102346.00Pa
Altitude: -84.65m

こんな感じの出力がでています。この中で信じていい数字はPressureの気圧だけです。Tempの温度は精度が悪いです。Altitudeの高度は気圧から変換しただけなので、天気で高度がかわります。上記ですとそもそもマイナスの高度ですね。

DHT11と比べる

#include "Seeed_BMP280.h"
#include "DHT.h"
#include <Wire.h>

#define DHTPIN 3
#define DHTTYPE DHT11

DHT dht(DHTPIN, DHTTYPE);
BMP280 bmp280;

void setup() {
  Serial.begin(115200);
  if (!bmp280.init()) {
    Serial.println("Device error!");
  }
  dht.begin();
}

void loop() {
  float pressure;

  //get and print temperatures
  Serial.print("BMP280->Temp: ");
  Serial.print(bmp280.getTemperature());
  Serial.println("C");

  //get and print atmospheric pressure data
  Serial.print("BMP280->Pressure: ");
  Serial.print(pressure = bmp280.getPressure());
  Serial.println("Pa");

  //get and print altitude data
  Serial.print("BMP280->Altitude: ");
  Serial.print(bmp280.calcAltitude(pressure));
  Serial.println("m");

  //Temp
  Serial.print("DHT11->Temp: ");
  Serial.print(dht.readTemperature());
  Serial.println("C");

  //Humidity
  Serial.print("DHT11->Humi: ");
  Serial.print(dht.readHumidity());
  Serial.println("%");

  Serial.println("\n");//add a line between output of different times.

  delay(1000);
}

両方表示して比べて見ます。

BMP280->Temp: 22.19C
BMP280->Pressure: 102367.00Pa
BMP280->Altitude: -86.38m
DHT11->Temp: 21.00C
DHT11->Humi: 48.00%

DHT11だと21度ですね。BMP280だと22.19度です。実はDHT11の温度計も精度が低いので、BMP280の温度計の方が正しい可能性もあります。個体差もあるので、なんとも言えません。

まとめ

上記でいろいろ比べてみましたが、DHT11はやはり低めに出ますね。BMP280は逆に高めかな。実は家庭用の時計とかについている温度計も結構適当です。ちゃんと温度計の精度を調べるのであれば校正済みの温度計を購入する必要があります。そして、校正も期限が1年から2年ぐらいなので、切れたら新品に買い替えるぐらいみたいなことが必要になるそうです。

続編

コメント

タイトルとURLをコピーしました