Program Resource

開発者向け各種コード、アルゴリズム、リソース情報ライブラリ もしくはねふぁの覚え書き

先日Aliexpressから安価な非接触赤外線温度センサーGY-906を購入した。送料込み約500円。

写真中央にある円柱のモジュールがそれである。Arduinoから使おうと使えるライブラリを調べてみると、AdafruitのMLX90614用ライブラリが使えるらしい。

https://github.com/adafruit/Adafruit-MLX90614-Library

通信はI2C通信でアドレスは0x5A。すんなり動くと思いきや、読み取る値は1037.55固定。色々な掲示板の情報を調べて試してみると、I2Cのクロック周波数を変えると動く事が分かった。50000にすると動く様だ。

しかし、単体であればWire.beginの際に周波数を指定すれば良いが、読み取った値をOLEDディスプレイに表示させようとすると途端にOLEDは動くがセンサーの方が動かなくなる。

最終的に、Adafruitのライブラリのソースコード Adafruit_MLX90614.cpp のI2C通信部分の前後で動的に周波数を調整する事で、OLEDもセンサーも動く様になった。通信の前後にsetClockで調整を入れている。

uint16_t Adafruit_MLX90614::read16(uint8_t a) {
  uint16_t ret;

  Wire.setClock(50000);
  Wire.beginTransmission(_addr); // start transmission to device
  Wire.write(a);                 // sends register address to read from
  Wire.endTransmission(false);   // end transmission

  Wire.requestFrom(_addr, (size_t)3); // send data n-bytes read
  ret = Wire.read();                  // receive DATA
  ret |= Wire.read() << 8;            // receive DATA

  uint8_t pec = Wire.read();
  
  Wire.setClock(100000);

  return ret;
}

Print Friendly, PDF & Email

This post is also available in: 英語

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


*

CAPTCHA