旅を楽しくするArduino端末を作る。その5-気圧計を作る-

第5回はバイク走行時に気圧を図るため、温湿度各種センサーを用いて、動作を確認していきます。
第4回はこちらからどうぞ

気圧センサーについて

今回使用する気圧センサーは、BME280を利用します。
BME280はボッシュ社製のセンサモジュールで、温度、湿度、気圧の3つの環境情報を同時に測定できます。
マイコンとの通信方式は、温度計のDHT-11とは異なり、I2CまたはSPIを選択することができます。

私はAmazonで中国製(HiLetgo)の基盤実装型を購入いたしました。
(評価用と呼ばれるものです。基板実装しなくても端子に接続するだけでIOが取得できます。)

※2020/5/26追記
下記リンクのBME280の基板実装型の良い点は5Vで動作するところです。
ICのBME280は動作電圧とロジックレベルは3.3Vなので、Arduinoで利用する際はロジックレベルの変換が必要なのですが、この製品は変換せずともArduinoとI2C通信ができます。
詳しい仕組みは仕様書がないのでわかりませんが、使いやすいことは確かです。

電子工作に慣れている方なら、安さを求めてAmazonやaliexpressなど使うのもよいですが、自身のトラブルシューティングスキルに合わせて、秋月などの電子部品卸店を利用することも検討してください。

回路

接続方法は以下の通りです。
Vin = 3.3V
GND = GND
SCL = SCL
SDA = SDA
CSB = 未使用
SDO = 3.3V
ブレッドボードがなければ直接Arduinoにつないでも問題ありません。
(3.3Vが不足しますので、分岐させて接続させてください。)
評価基盤の動作電圧はMAX5Vですが、センサーは3.3Vで動作するようなので、今回は3.3V出力から電気を供給しました。

I2C接続に関して

今回はBME-280との接続にはI2C接続を用います。
I2C接続の基礎的な部分は教科書等を用いてご自身で、調べていただきたいと思いますが、
簡単に説明するとデジタル信号をアドレスを用いて、数本の線で複数のIOが取れる仕組みです。
難しいことを知らなくても、そのセンサーがどのアドレスに値を出力するのかを知っていれば、簡単なコードで値が取得できる優れものです。

アドレスについてはセンサーのデータシートに記載されているのですが、今回はBME-280をつないだ状態で、どのアドレスに値が出力されているのかを調べることにします。

アドレスの調べ方

Arduino公式サイトにI2Cで接続されている機器のアドレスを調べる「i2c_scanner」が公開されています。

https://playground.arduino.cc/Main/I2cScanner/

ページの下部にあるサンプルコードを、そのままArduinoIDEにコピーしArduinoに書き込みます。

BME-280を接続した状態でシリアルモニターを開くと以下の通りになりました。
「0x77」のアドレスに出力があることがわかります。

コード

#include "SparkFunBME280.h"
#include "Wire.h"
#include "SPI.h"

BME280 Sensor;

void setup() {
  Serial.begin(9600);
  while (!Serial);

  Sensor.settings.commInterface = I2C_MODE; 
  Sensor.settings.I2CAddress = 0x77;
  Sensor.settings.runMode = 3; 
  Sensor.settings.tStandby = 0;
  Sensor.settings.filter = 0;
  Sensor.settings.tempOverSample = 1 ;
  Sensor.settings.pressOverSample = 1;
  Sensor.settings.humidOverSample = 1;

  Serial.println("Starting BME280... ");
  delay(10);
  Sensor.begin();
}

void loop() {
  Serial.print("Temperature: ");
  Serial.print(Sensor.readTempC(), 2);
  Serial.print(" ℃");
  Serial.print("\t Humidity: ");
  Serial.print(Sensor.readFloatHumidity(), 2);
  Serial.println(" %");
  Serial.print("Pressure: ");
  Serial.print(Sensor.readFloatPressure() / 100, 2);
  Serial.println(" hPa");

  delay(1000);
}

このコードでは、sparkFunBME280を利用しています。
コードを実行する前に下記リンクからsparkFunBME280.hをダウンロードし、ArduinoIDEにインストールする必要があります。

https://github.com/sparkfun/SparkFun_BME280_Arduino_Library

ページ中央の「clone or download」からzipファイルを取得できます。

また、先ほど調べたアドレス「0x77」はSensor.settings.I2CAddress = の部分に代入しています。

結果

結果は1秒に1回シリアルモニターに出力されます。
湿度、湿度、気圧ともに0.01%単位で出力されました。
delayの時間を変更すればもう少し更新速度を挙げられますが、普通に使うなら1秒単位で問題ないでしょう。

まとめ

前回使用したDHT-11を使用しなくても温湿度が取得できてしまったので、DHT-11はもう出番がないと思います。

バイク取付用気圧センサーは専用品の販売がないようで、登山用のものをバイクに付けるしか今まではなかったので、自作する理由になると思います。

実は気圧がわかると高度も計算できるのですが、正確な値を出す場合は高度0の気圧が必要になるので、オフラインでの高度算出はあまり現実的ではありません。
GPUセンサーには高度を算出できる機能がありますので、高度計はそちらで実装しようと思います。

旅を楽しくするArduino端末を作る。リンク集

その1-不満点を挙げよう- 
その2-不満点をまとめよう-

その3-電圧測定器を作る-
その4-温湿度計を作る-
その5-気圧計を作る-
その6-方位・高度計をGPSで-
その7-12Vバッテリーから電力供給
その8-Ver1作成-
その9-電圧計の誤差とその代替案-
その10-Ver2へアップデート-
その11-LCDをI2Cで制御しよう-
その12-LCDをI2C化-
その13-Ver3へアップデート-
その14-USB充電の仕様に関して-
その15-Arduino言語を用いながらBluetoothで通信できるESP32-
その16-旅Arduino Ver4 スマホアプリ化-

関連記事一覧

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

PAGE TOP