Arduino(マイコン)から気圧センサー(BME280)の温度、湿度、気圧を取得するところまでやってみました。
amazonでノーブラン品のものを購入。安いですね・・。
▼届いた気圧センサー▼
はんだ付け後の写真です。
今回はI2C接続で情報取得してみます。センサーが3.3V仕様なのでArduinoUNOとは直接接続できません。ので電圧レベル変換IC通して接続しました。
▼Aruduinoと繋いだところ▼
いろいろ映り込んでますがブレッドボードに立ってるのが気圧センサーです。L型ピンヘッダー使ってしまいました・・・。
使い方はSwitchScienceさんのページを参考にしました。
ただそこでは32bitで気圧算出をしていたのですが、精度(分解能)ができるだけ欲しかったので64bitの算出方法に変更しました。
▼64bit計算にかえたところ▼
inline uint32_t computePres64(int32_t adc_P) { int64_t var1, var2, p; var1 = ((int64_t)t_fine) - 128000; var2 = var1 * var1 * (int64_t)dig_P6; var2 = var2 + ((var1 * (int64_t)dig_P5) << 17); var2 = var2 + (((int64_t)dig_P4) << 35); var1 = ((var1 * var1 * (int64_t)dig_P3) >> 8) + ((var1 * (int64_t)dig_P2) << 12); var1 = (((((int64_t)1) << 47) + var1)) * ((int64_t)dig_P1) >> 33; if (var1 == 0) { return 0; } p = 1048576 - adc_P; p = (((p << 31) - var2) * 3125) / var1; var1 = (((int64_t)dig_P9) * (p >> 13) * (p >> 13)) >> 25; var2 = (((int64_t)dig_P8) * p) >> 19; p = ((p + var1 + var2) >> 8) + (((int64_t)dig_P7) << 4); return (uint32_t)p; }
データシートよりそのまま持ってきただけです・・。さっそくシリアルモニタで値を出力してみました。
▼取得した値▼
32bitと64bitで気圧値を比較してます。精度はよくわかりませんが十分な分解能です。湿度は出力してません・・・。
値を取得するだけなら割と簡単です。
ドローン(クアッドコプター)の姿勢制御プログラムに位置(高度)制御を加えようと思って購入したのですが、似たようなBMP280というのもあってこちらは湿度が計測できないようです。
よく調べてから購入すればよかったです。(湿度はいりませんでした・・・。)さてこれから最適なレジスタ設定見つけていきたいと思います。
最近やりたいことがいろいろ増えてきたのですが・・。なかなか時間が取れません・・。
コメント