ここから本文です

BOSCH製 温湿度気圧センサー BME280について、 温度、湿度、圧力データがそれぞれ...

アバター

ID非公開さん

2019/3/2318:45:48

BOSCH製 温湿度気圧センサー BME280について、
温度、湿度、圧力データがそれぞれ16bitでレジスタに格納されますが、
変換式はどう考えれば良いでしょうか?

例えば、湿度データ0xAAAAの場合、湿度は何%になるのでしょうか。

閲覧数:
20
回答数:
1
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

spy********さん

2019/3/2623:15:47

>湿度データ0xAAAAの場合、湿度は何%になるのでしょうか
0xAAAAは、何%になるのか解りませんが、 “47445” は、 46.333 %RHになると書かれています。

具体的な読み出し方法は、
http://akizukidenshi.com/download/ds/bosch/BST-BME280_DS001-10.pdf
に詳しく説明されています。

抜粋
データの読み出しは、0xF7から0xFC(温度と圧力)までのバースト読み出しによって行われ、0xF7から0xFE(温度、圧力、湿度)まで、データは符号なしで読み出されます。
圧力と温度の両方のための20ビットフォーマットと、湿度のための符号なし16ビットフォーマット。
Bosch Sensortecから入手可能なBME280 APIを使用することを強くお勧めします。
圧力、温度、湿度の補正されていない値「ut」、「up」、「uh」の後に実際の湿度、圧力、温度は、次の式を使って計算する必要があります。

API
// Returns humidity in %RH as unsigned 32 bit integer in Q22.10 format (22 integer and 10 fractional bits).
// Output value of “47445” represents 47445/1024 = 46.333 %RH
BME280_U32_t bme280_compensate_H_int32(BME280_S32_t adc_H)
{
BME280_S32_t v_x1_u32r;
v_x1_u32r = (t_fine – ((BME280_S32_t)76800));
v_x1_u32r = (((((adc_H << 14) – (((BME280_S32_t)dig_H4) << 20) – (((BME280_S32_t)dig_H5) * v_x1_u32r)) +
((BME280_S32_t)16384)) >> 15) * (((((((v_x1_u32r * ((BME280_S32_t)dig_H6)) >> 10) * (((v_x1_u32r *
((BME280_S32_t)dig_H3)) >> 11) + ((BME280_S32_t)32768))) >> 10) + ((BME280_S32_t)2097152)) *
((BME280_S32_t)dig_H2) + 8192) >> 14));
v_x1_u32r = (v_x1_u32r – (((((v_x1_u32r >> 15) * (v_x1_u32r >> 15)) >> 7) * ((BME280_S32_t)dig_H1)) >> 4));
v_x1_u32r = (v_x1_u32r < 0 ? 0 : v_x1_u32r);
v_x1_u32r = (v_x1_u32r > 419430400 ? 419430400 : v_x1_u32r);
return (BME280_U32_t)(v_x1_u32r>>12);

これを読み解く元気がありません。
頑張って、読み解いてください。

この回答は投票によってベストアンサーに選ばれました!

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる