育苗箱ベンチレータを作成していく中で、給気ファンの風量は差圧から換算して得ることが出来ることが分かりました。この時やったように水柱マノメータを作って大気との差圧を知ることはできますが、差圧が小さすぎて読みにくいという難点がありました。また、育苗箱ケースに水柱マノメータのチューブを差し込む必要があり、どこまで気密をとるかで微妙に悩んだりしました。
そこで、気圧計を2個作って差圧計として組み立てようと思います。片方の気圧計を育苗箱へ入れ、測定した気圧データをbluetoothで外側に置くもう片方の気圧計に転送し、圧力差を差圧として表示しよう、という目論見です。
測定前に、同じ環境で気圧計を立ち上げ、実測値の差を補正値とすることで、ゼロ点合わせも入れようと考えています。
まずは単体の気圧計組み立てです。
HW-611 E/P 280

少し探して用意した気圧測定モジュールは、HW-611 E/P 280です。気圧センサーはBMP-280ですね。使用例が豊富に見つかるので、定番なのかな。
ただ、オープンソースな為なのか、このモジュールHW-611がどのメーカーのものなのかよく分からないですね。探し方が間違っているのか、時々こういうメーカーがよく分からないモジュールを見かけます。不思議な世界ですね。
使い方はSunFounderさんの記事を参考にしました。
温度、湿度、気圧センサー(BMP280) — SunFounder Ultimate Sensor Kit ドキュメント
後は、ArduinoのForumですね。先人達があらかたトラブルを出してくれているので、助かりますね。例えば、I2Cのアドレスについては、先に読んだので悩まなくて済みました。
https://forum.arduino.cc/t/bmp280-hw-611-e-p-280-library-sensor-fault/590528
使い方は既に出来上がっているので、あまり悩むところは無いですね。AdafruitのライブラリAdafruit BMP280 Libraryをarduino IDEにインストールして、ほぼ終わりです。入力電圧範囲が1.8~3.6Vなので、間違って5Vへ接続しないよう注意ですね。
それはそうと、Adafruitは”エイダフルーツ”と読むんですね。アダフルートかと思っていました。ASUSと同じくらいの衝撃です。
接続はI2CかSPIどちらか選べます。とりあえずI2Cを選んでしまいましたが、SPIを勉強する機会なので、最終的にはSPIに変更するかもしれません。
配線

悩むところは無いですね。入力電圧は3.3Vであるところさえ間違えなければ問題なしです。
スケッチ
ライブラリをインストールすると付いてくるサンプルスケッチから不要な部分を削除していくだけなので、中身を理解していなくても使えます。便利すぎて勉強になりません。I2Cのアドレスは何もしないと0x76になるので、その指定を入れているのと、シリアルの速度を115200へ変更しています。
#include <Wire.h>
#include <Adafruit_BMP280.h>
Adafruit_BMP280 bmp; // I2C
void setup() {
Serial.begin(115200);
while ( !Serial ) delay(100); // wait for native usb
Serial.println("BMP280 test");
unsigned status;
status = bmp.begin(0x76); // I2C address
if (!status) {
Serial.println("Could not find a valid BMP280 sensor, check wiring or "
"try a different address!");
Serial.print("SensorID was: 0x"); Serial.println(bmp.sensorID(),16);
Serial.print(" ID of 0xFF probably means a bad address, a BMP 180 or BMP 085\n");
Serial.print(" ID of 0x56-0x58 represents a BMP 280,\n");
Serial.print(" ID of 0x60 represents a BME 280.\n");
Serial.print(" ID of 0x61 represents a BME 680.\n");
while (1) delay(10);
}
/* Default settings from datasheet. */
bmp.setSampling(Adafruit_BMP280::MODE_NORMAL, /* Operating Mode. */
Adafruit_BMP280::SAMPLING_X2, /* Temp. oversampling */
Adafruit_BMP280::SAMPLING_X16, /* Pressure oversampling */
Adafruit_BMP280::FILTER_X16, /* Filtering. */
Adafruit_BMP280::STANDBY_MS_500); /* Standby time. */
}
void loop() {
Serial.print("Temperature = ");
Serial.print(bmp.readTemperature());
Serial.println(" *C");
Serial.print("Pressure = ");
Serial.print(bmp.readPressure());
Serial.println(" Pa");
Serial.print("Approx altitude = ");
Serial.print(bmp.readAltitude(1013.25)); /* Adjusted to local forecast! */
Serial.println(" m");
Serial.println();
delay(2000);
}
ついでについてくる高度の表示も残ったままですね。不要なので最終的には削除します。
動作確認

動作は問題ないですね。補償用の温度とPa単位の気圧、気圧を換算した高度が2秒毎に表示されます。高度は、気圧が刻々と変化するので、大体ズレます。スケッチ上は海抜0mの気圧を入力するようになっているのでこれを入れれば補正が掛かります。標高の確定した場所に気圧計を置いておけば、タイムリーに補正はできると思います。
なお、この時の気圧を手持ちのアナログ気圧計で確認しました。針が大きくて細かく読み取れませんが、1019mbar(1019hPa = 101900 Pa)でした。まあまあいいところが出ていると思います。

I2Cアドレス変更
ところで、途中紹介したArduino Forumに、下のような情報がありました。
https://forum.arduino.cc/t/bmp280-hw-611-e-p-280-library-sensor-fault/590528/3
HW-611はSDOピンがプルダウンされているので、アドレスが0x76になっている。プルアップしてやれば0x77になるよ。とあります。
これは興味深いですね。試してみることにします。まずはI2Cアドレスのビューワーを入れます。既に出来合いのものが知られているので、それをそのまま使います。参考にしたのは、Robo Sapiensさんの記事です。
Arduinoでi2cで通信できているかを確認する | i2cアドレスの確認方法
スケッチはそっくりそのままなので改めて貼り付けはしませんが、冒頭のwire.hのインクルードだけが誤記で欠落になっているので、#include <wire.h>を補って使います。
HW-611のSDOピンは、写真では一番右側のピンです。ここに適当に470Ωの抵抗でプルアップしてみます。

おお!
I2Cアドレスは0x77になった!
一方、プルアップなしでそのままアドレスを読み込むと、下のような感じ。

I2Cアドレスは0x76ですね!
今回は同じI2Cラインに気圧計HW-611を2基繋ぐ予定は無いですが、違うものを作る時には必要が出るかもしれないですね。覚えておこう。
ここまでで単体の気圧計を組み上げることが出来ました。長くなるのでとりあえずここまで。次は、無線デジタル差圧計の準備の為、単体の気圧計のbluetooth接続とLCDでのシリアル表示をやってみます。









コメントを残す