PR

気圧センサーから温度、湿度、気圧を計測

記事内に広告が含まれています。

 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というのもあってこちらは湿度が計測できないようです。

 

 よく調べてから購入すればよかったです。(湿度はいりませんでした・・・。)さてこれから最適なレジスタ設定見つけていきたいと思います。

 

 最近やりたいことがいろいろ増えてきたのですが・・。なかなか時間が取れません・・。

 

コメント

タイトルとURLをコピーしました