BMP581による高精度気圧計測 (終了)

プロジェクト開始:2024年06月14日
プロジェクト終了:2024年07月11日

プロジェクト・ステータス:終了
2024年07月11日 マスター側 LCD表示で気圧を表示できるようにした。
2024年06月23日 気圧センサー2つを用いた気圧差による階の判別 結果:OK
2024年06月21日 WiFiをサポートするESP8266EX(WROOM-02)に実装する 結果:OK
2024年06月18日 床(基準)、机の上(約72cm)、目線の高さ(150cm)の高さ判定 結果:OK
2024年06月17日 気圧と温度から高さを計算する 結果:数十cmレベルの高さの変化を計測可
2024年06月17日 BMP581の割り込み機能をテストする 結果:途中でハングする現象発生
2024年06月16日 iirフィルターのテスト 結果: iirフィルターを通した方が明らかにふらつきが小さい
2024年06月14日 マイコンボードArduino UNO とBMP581の接続テスト 結果:OK 計測値(気温、気圧)が計測できた

諸経費:合計 10700円
  購入 BMP581搭載圧力センサー スイッチサイエンス @3670円 2個 計7340円
  購入 TPS62913 低ノイズ・低リップル可変出力降圧モジュール @1680 2個 3360円

工数: k計 15h
2024年07月11日 0h
2024年06月23日 3h
2024年06月21日 2h
2024年06月18日 3h
2024年06月17日 3h
2024年06月16日 2h
2024年06月14日 2h

予定・課題


日誌

2024年07月11日 0h
マスター側にLCDを接続し、マスター側の気温と気圧、スレーブ側の気圧を表示できるようにした。
RS232Cのシリアルモニターでは、他に気圧差、高差、スレーブの階が表示される。

シリアルモニタの表示例(同じ高さで計測 つまり1F)
前からNo. マスターの気温、マスターの気圧、スレーブの気圧、気圧差、計算高差、階
315,30.06,997.9706,997.9828,0.0122,-0.1039,1F
316,30.05,997.9703,997.9806,0.0103,-0.0878,1F
317,30.05,997.9688,997.9805,0.0118,-0.1003,1F
318,30.05,997.9667,997.9789,0.0122,-0.1039,1F
319,30.06,997.9663,997.9789,0.0127,-0.1079,1F
320,30.06,997.9650,997.9792,0.0142,-0.1212,1F
321,30.05,997.9645,997.9783,0.0138,-0.1175,1F

マスターとスレーブ間の通信はP-P UDPを使用しているため、ルーターの無い環境でも通信できる。
(通信可能距離は未確認)
ケース実装 なし

左 マスター 右 スレーブ

2024年06月23日 3h
気圧センサー2つを用いた気圧差による階の判別 結果:OK
課題:ESP8266のWiFi電波が届く範囲(室内 10mは確認)
2つの気圧センサーを使用し、一方を1階に置く。もう一方をエレベーターに載せ、WiFiで通信しながら気圧差を求める
気圧は1m高くなると約0.11hPa下がることから、気圧差より高度を求め、その高度から階を判定する
WiFiはUPDを使用しているのでルーターは不要
マイコンはESP8266を使用

実際の判定(1Fを0mとして2F 0.72m 3F 1.0m 4F 1.5m 5F 1.8mで実験)
1F(0m)の範囲 0 ~ 0.35m
2F(0.72m)の範囲 0.65 ~ 0.82m
3F(1.0m)の範囲 0.90 ~ 1.10m
4F(1.5m)の範囲 1.40 ~ 1.60m
5F(1.8m)の範囲 1.70 ~ 1.90m
これ以外の範囲はERRORとなる 判定範囲を密着させればERRORは出なくなる
実際の建物では各階の高差は3.5m以上あるので、十分判定可能である
P(base) 1Fの気圧、P(floor) エレベーターの気圧、Off 気圧差、Elev 計算高度、判定結果
1, T:25.67, P(base):996.5833, P(floor):996.4966, Off:-0.0867, Elev:0.7880,2F
2, T:25.65, P(base):996.5878, P(floor):996.4979, Off:-0.0899, Elev:0.8174,2F
3, T:25.65, P(base):996.5894, P(floor):996.5013, Off:-0.0881, Elev:0.8007,2F
4, T:25.65, P(base):996.5906, P(floor):996.5032, Off:-0.0874, Elev:0.7948,2F
5, T:25.65, P(base):996.5934, P(floor):996.4755, Off:-0.1179, Elev:1.0722,3F
6, T:25.64, P(base):996.5963, P(floor):996.4762, Off:-0.1201, Elev:1.0914,3F
7, T:25.64, P(base):996.5986, P(floor):996.4780, Off:-0.1206, Elev:1.0963,3F
8, T:25.63, P(base):996.5997, P(floor):996.4798, Off:-0.1199, Elev:1.0899,3F
9, T:25.63, P(base):996.6013, P(floor):996.4288, Off:-0.1725, Elev:1.5677,4F
10, T:25.63, P(base):996.6013, P(floor):996.4301, Off:-0.1712, Elev:1.5559,4F
11, T:25.62, P(base):996.6048, P(floor):996.4851, Off:-0.1197, Elev:1.0886,3F
12, T:25.61, P(base):996.6084, P(floor):996.4870, Off:-0.1214, Elev:1.1040,ERROR
13, T:25.61, P(base):996.6067, P(floor):996.4898, Off:-0.1169, Elev:1.0629,3F
14, T:25.61, P(base):996.6106, P(floor):996.5224, Off:-0.0882, Elev:0.8020,2F
15, T:25.60, P(base):996.6117, P(floor):996.5248, Off:-0.0869, Elev:0.7902,2F
16, T:25.61, P(base):996.6148, P(floor):996.6062, Off:-0.0086, Elev:0.0786,1F
17, T:25.60, P(base):996.6166, P(floor):996.6098, Off:-0.0068, Elev:0.0615,1F
18, T:25.58, P(base):996.6172, P(floor):996.6104, Off:-0.0068, Elev:0.0617,1F
19, T:25.59, P(base):996.6205, P(floor):996.5007, Off:-0.1198, Elev:1.0888,3F
20, T:25.58, P(base):996.6219, P(floor):996.5013, Off:-0.1206, Elev:1.0961,3F
21, T:25.58, P(base):996.6231, P(floor):996.4516, Off:-0.1715, Elev:1.5593,4F
22, T:25.57, P(base):996.6269, P(floor):996.4529, Off:-0.1740, Elev:1.5816,4F
23, T:25.57, P(base):996.6261, P(floor):996.4329, Off:-0.1932, Elev:1.7563,5F
24, T:25.57, P(base):996.6289, P(floor):996.4360, Off:-0.1929, Elev:1.7537,5F
25, T:25.56, P(base):996.6314, P(floor):996.4382, Off:-0.1932, Elev:1.7564,5F
26, T:25.56, P(base):996.6328, P(floor):996.5141, Off:-0.1187, Elev:1.0792,3F
27, T:25.56, P(base):996.6347, P(floor):996.5146, Off:-0.1201, Elev:1.0917,3F
28, T:25.56, P(base):996.6363, P(floor):996.5180, Off:-0.1182, Elev:1.0750,3F
29, T:25.55, P(base):996.6397, P(floor):996.5204, Off:-0.1193, Elev:1.0844,3F
30, T:25.55, P(base):996.6411, P(floor):996.5241, Off:-0.1170, Elev:1.0636,3F
31, T:25.55, P(base):996.6423, P(floor):996.5232, Off:-0.1191, Elev:1.0831,3F
32, T:25.54, P(base):996.6450, P(floor):996.5249, Off:-0.1201, Elev:1.0918,3F
33, T:25.54, P(base):996.6478, P(floor):996.5288, Off:-0.1190, Elev:1.0819,3F
34, T:25.53, P(base):996.6491, P(floor):996.5318, Off:-0.1173, Elev:1.0660,3F
35, T:25.52, P(base):996.6523, P(floor):996.5332, Off:-0.1191, Elev:1.0831,3F
36, T:25.53, P(base):996.6541, P(floor):996.5349, Off:-0.1192, Elev:1.0833,3F
37, T:25.51, P(base):996.6573, P(floor):996.5374, Off:-0.1199, Elev:1.0904,3F
38, T:25.52, P(base):996.6584, P(floor):996.5398, Off:-0.1186, Elev:1.0785,3F
39, T:25.51, P(base):996.6606, P(floor):996.5407, Off:-0.1199, Elev:1.0902,3F
40, T:25.50, P(base):996.6631, P(floor):996.5424, Off:-0.1207, Elev:1.0975,3F
41, T:25.51, P(base):996.6642, P(floor):996.5454, Off:-0.1188, Elev:1.0802,3F
42, T:25.50, P(base):996.6678, P(floor):996.5466, Off:-0.1212, Elev:1.1019,ERROR
43, T:25.50, P(base):996.6686, P(floor):996.5485, Off:-0.1201, Elev:1.0918,3F
44, T:25.49, P(base):996.6711, P(floor):996.5510, Off:-0.1201, Elev:1.0918,3F
45, T:25.49, P(base):996.6741, P(floor):996.5537, Off:-0.1204, Elev:1.0942,3F
46, T:25.49, P(base):996.6756, P(floor):996.5559, Off:-0.1197, Elev:1.0884,3F
47, T:25.49, P(base):996.6763, P(floor):996.5585, Off:-0.1178, Elev:1.0705,3F

左のモジュール(サーバー)を1Fに置き、右のモジュール(クライアント)をエレベーターに乗せる
この2つはWiFi UDPで通信し、クライアントが計測した気圧をサーバーに送る
サーバーは1Fの気圧と比較し、クライアントが何階にいるかを判定する
気圧センサーの個体差は温度、気圧ともに補正してある

2024年06月21日 2h
WiFiをサポートするESP8266EX(WROOM-02)に実装する 結果:OK
2つの気圧センサーの個体差を調べ、補正して1mの差を検出する 結果:OK
圧力センサーBMP581は意外と個体差が大きい。このため、ふたつのBMP581を使用して二地点の気圧を計測する場合、温度と気圧の補正(一方に合わせる)が必要。
今回2つのセンサーを1mの高差に置き、1mの差を検出できるかテストの結果

センサー1と2が同じ高さの場合
センサー1 基準        温度 23.90℃  気圧 1004.1423hPa 32.9134m 0mとすると
センサー2 基準と同じ高い   温度 23.85℃  気圧 1004.1441hPa 32.8934m  0.02m

センサー2が1m高い場合
センサー1 基準        温度 23.90℃  気圧 1004.1234hPa 33.0769m  0mとすると
センサー2 基準から1mの高さ  温度 23.84℃  気圧 1004.0084hPa 34.0669m  0.99m
(センサー2の温度と気圧は補正値)

センサーを2つ使い、一方を1階に置き、もう一方をエレベーター内に置けば、その気圧差で階の検出が可能である。
この方法は2つのセンサーの差を計測し高度に変換するので、どのような気圧の時でも計測可能である。
つまり、この方法では気圧の絶対値は必要なく、2つのセンサーの気圧差だけで高差を得るため、気象条件や
設置場所の高度に影響されない。
ただしセンサーの個体差の補正が精度に影響すること、および2つのセンサーの計測値を得て計算するための機構が必要。

2024年06月18日 3h
床(基準)、机の上(約72cm)、目線の高さ(150cm)の高さ判定 結果:OK
確実に現在の高さを判別できた。
この判別は気圧を補正処理し、気圧が変化しても正しい高度が計算できるようにした。
以上のように、約72cmの高差でも十分判別できる。

実際のエレヴェーターでは各階の高差は3m以上あるので、十分判別可能である。
配慮すべき点としては、エレベーターの加速中は大きい気圧がかかる可能性があるので、加速度センサーなどでエレベーターが加速中か、停止しているかを判定する必要があるかも知れない。

BASEは床、MIDは机の上、TOPは目線の高さを表す。
No. 温度(℃) 気圧(hPa) 高度(m) 判定
1,24.04,1003.1389,24.7776,BASE
2,24.05,1003.1398,24.7727,BASE
3,24.05,1003.1370,24.7946,BASE
4,24.05,1003.0574,25.4867,MID
5,24.04,1003.0553,25.5028,MID
6,24.05,1003.0555,25.5036,MID
7,24.06,1002.9761,26.1913,TOP
8,24.07,1002.9747,26.2080,TOP
9,24.07,1002.9719,26.2302,TOP
10,24.07,1002.9738,26.2137,TOP
11,24.08,1003.0538,25.5227,MID
12,24.09,1003.0539,25.5232,MID
13,24.10,1003.0539,25.5240,MID
14,24.11,1003.0533,25.5304,MID
15,24.11,1003.0549,25.5144,MID
16,24.11,1003.1365,24.8053,BASE
17,24.12,1003.1358,24.8117,BASE
18,24.12,1003.1370,24.8008,BASE
19,24.15,1003.1362,24.8083,BASE
20,24.14,1002.9721,26.2364,TOP
21,24.15,1002.9716,26.2422,TOP
22,24.14,1002.9689,26.2638,TOP
23,24.18,1003.0535,25.5310,MID
24,24.17,1003.0552,25.5193,MID
25,24.17,1002.9685,26.2660,TOP
26,24.18,1002.9682,26.2726,TOP
27,24.19,1003.0552,25.5209,MID
28,24.20,1003.0535,25.5324,MID
29,24.20,1003.1358,24.8186,BASE
30,24.20,1003.1330,24.8400,BASE
31,24.20,1003.1362,24.8129,BASE
32,24.20,1003.1347,24.8295,BASE
33,24.20,1003.1365,24.8128,BASE
34,24.19,1003.1365,24.8124,BASE

2024年06月17日 3h
気圧と温度から高さを計算する 結果:数十cmレベルの高さの変化を計測可
Normal Mode
試験内容:部屋の床、机の上(床から75cm)、目線(床から150cm)の三点の高さを計測してみた。
グラフから数十cmレベルの高さ検出は十分可能と判断できる。
床の高さを0とした相対値で高さを表し、各階の高さにある程度マージンをみて階を判断すればよい。
日々、時々刻々気圧は変化するので、床の高さを都度補正する必要がある。

No.temp press elevation

1 28.99 1,007.3195 20.87910 <- 見方 No.1 温度 28.99℃ 気圧1007.3195hPa 計算高度 20.87910m
2 28.98 1,007.2997 21.05050
3 28.97 1,007.2971 21.07190
4 28.98 1,007.2989 21.05600
5 28.98 1,007.2981 21.06690
6 28.99 1,007.3024 21.02900
7 29.00 1,007.3019 21.03490
8 29.00 1,007.3019 21.03530
9 29.00 1,007.3022 21.02990
10 29.01 1,007.3058 20.99700
11 29.02 1,007.3041 21.01420
12 29.02 1,007.2827 21.20250
13 29.03 1,007.2317 21.65220
14 29.02 1,007.2311 21.65700
15 29.02 1,007.2308 21.65690
16 29.01 1,007.2332 21.63410
17 28.99 1,007.2342 21.62710
18 28.97 1,007.2360 21.60960
19 28.97 1,007.1610 22.26840
20 28.97 1,007.1649 22.23570
21 28.98 1,007.1636 22.24700
22 28.98 1,007.1668 22.21970
23 28.99 1,007.1678 22.20910
24 28.99 1,007.1691 22.19840
25 29.01 1,007.2516 21.47330
26 29.01 1,007.2544 21.45160
27 29.01 1,007.2562 21.43500
28 29.00 1,007.2606 21.39510
29 28.99 1,007.2609 21.38930
30 29.02 1,007.2658 21.35210
31 29.03 1,007.3475 20.63270
32 29.03 1,007.3488 20.62140
33 29.03 1,007.3508 20.60490
34 29.03 1,007.3525 20.59400
35 29.03 1,007.3524 20.59400

2024年06月17日 3h
BMP581の割り込み機能をテストする 結果:途中でハングする現象発生
原因不明。解除されるとしばらく正常に動く

2024年06月16日 2h
iirフィルターのテスト 結果: iirフィルターを通した方が明らかにふらつきが小さい
マイコンボードArduino UNO とBMP581
ノーマル(iirフィルター無し)の場合と、iirフィルター 係数128を通した場合の、計測データーのふらつきを観測した。
ノーマルとiirフィルターを通した場合でそれぞれ10秒間隔で256サンプリング(所要時間約43分)し、散布図を描いた。
その結果、明らかにiirフィルターを通した方がふらつきが少ない。

ノーマルで10秒間隔に256サンプリング(約43分間の気圧変化)

iir128を通して10秒間隔に256サンプリング(約43分間の気圧変化)

グラフのように、気圧は時々刻々変化するが、あまり変化していない時間帯の20サンプリングで偏差値を比較した。

ノーマル(サンプリング81~101): 偏差値 0.010135
iirフィルター 係数128(サンプリング94~114): 偏差値 0.007895

iirフィルタは観測点の外乱(窓やドアの開け閉め、送風機の風など)を排除する目的があるが、そのような外乱が無くても逐次変化する気圧を平均化するために有効と思われる。

2024年06月14日 2h
マイコンボードArduino UNO とBMP581の接続テスト 結果:OK 計測値(気温、気圧)が計測できた
温度、および気圧を以下のように読み込めることを確認した。
PressureはPa(パスカル)値なので、1/100してhPa(ヘクトパスカル)で使用する。
熊谷(最寄りの気象観測所)の海面気圧 1006.1hPa
現在地の標高は約24m、気温32.8℃なので、換算すると1003.41hPaとなり、計測値に近い。

MLabo