第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 スマホアプリ化-
この記事へのコメントはありません。