今回は赤外線グリッドセンサMLX90621を試食してみたので、
ご紹介します。
赤外線グリッドセンサは安価なサーモカメラという感じです。
非接触で物体の温度の分布を取得することができます。
Digikey等で日本国内で購入できる
赤外線グリッドセンサとして下記があります。
・MLX90621 解像度16x4 Digikey MELEXIS製 5千円程度
検出角で3種類有
・D6T44L06 解像度4x4 Digikey オムロン製 7千円程度
8x1の解像度も有
他に AM8832 解像度8x8 パナソニック製 3千円程度
がありますが、日本では個人で購入できないようです。
※参考
ガチなサーモカメラモジュール
FLIR LEPTON 秋月電子通商は80x60で高解像度
ただ、価格も10倍、5万円弱・・・
環境はこれまで同様、
・STM32F303K8
+SW4STM32(System Workbench for STM32)
+STM32CubeMX(F3_1.6.0)
です。
赤外線グリッドセンサMLX90621のデータ資料を見ると、
I2Cの通信に少し癖があることが分かりました。
一般的な通信としては
デバイスアドレス1byte+レジスタ1byte+デバイスアドレス1byte+データXXbyte
という流れです。
一方、
赤外線グリッドセンサMLX90621は一部の通信では
デバイスアドレス1byte+レジスタ4byte+デバイスアドレス1byte+データXXbyte
という感じでレジスタが4byteです。
STM32のHALライブラリではI2Cの関数として
HAL_I2C_Mem_Read
HAL_I2C_Mem_Write
が用意されており、簡単に通信可能ですが
レジスタ長が1byteもしくは2byteです。
4byteには対応していません。
そのため、HALライブラリのI2Cを一部、変更して
レジスタ長が3byteと4byteに対応させました。
※MLX90621自体は3byteは未使用
HAL_I2C_Mem_Read2
I2C_RequestMemoryRead2
を
stm32f3xx_hal_i2c.c に作成。
#define I2C_MEMADD_SIZE_24BIT (0x00000003U)
#define I2C_MEMADD_SIZE_32BIT (0x00000004U)
#define I2C_MEMADD_SIZE_32BIT (0x00000004U)
を
stm32f3xx_hal_i2c.hに追加しました。
追加した関数の詳細やMLX90621の処理の詳細は
STM32F303_i2c_MLX90621.zipを参考にどうぞ。
パスはブログ名です。
実際にハンダごてを観察してみた結果を
UartでPCへ出力してエクセルの条件書式カラースケールで
色分けしてみました。
中心付近が200度程度になっていることが分かります。
物体によって放射率が異なるため、
補正しないと温度として正しく読めませんが、
温度の分布を得るには十分だと思いました。
温度補正の他に画素補間技術等で
更に高分解能にしてみるのも面白いと思います。
I2Cの通信に少し癖がありましたが、
ライブラリ関数を少し手直しするだけで動作できました。
最近、秋月から発売されたシリアルカメラと組み合わせて
応用ができそうです。