CircuitPythonのI2C接続で8X8の赤外線アレイセンサAMG8833のデータを取り込むことができました。

温度をサーモグラフィのようなカラー表示にしてみたいので,8x8のNeopixelLEDマトリックスをつないでみました。


[ハード構成]

・Cytron Maker Pi RP2040ボード,Circuitpython
・8x8 赤外線アレイセンサAMG8833モジュール(スイッチサイエンス)
・8x8 NeoPixel RGB LED(WS2812B )マトリックス

 なお,LEDには5Vを別電源で供給しましたが,信号は3.3Vで出力しています。





センサからの温度データをサーモグラフィもどきに表示してみたところです。





写りは悪いのですが,,動画も撮ってみました(^^;;;;;。







[Circuitpythonのプログラム]
 ギクシャクとしたプログラムですが,なんちゃってサーモグラフィとしては動いています(^^),。

1.初期設定部
 NeoPixelLEDとセンサのI2Cの初期設定,データの宣言をしています。なお,今回使ったCircuitpythonにはNeoPixelのモジュールがあらかじめ組み込まれています。






2.センサからの温度データ読み取りとRGB変換部
 温度データはI2Cで読み取り,2byteを合成してデータとします。
また温度データを色に変換するのは,超手抜きのなんちゃって版です。






3.データを読み取り,色変換したデータをLEDに表示するメインループ部
 ほぼすっからかんのメインループ部ですが,Neopixelのバッファに書き込む際にこのLEDマトリックスに合わせるように少し働いています(^^)。




このNeopixelLEDマトリックスはLEDテープを折り曲げたように連続していて,LED番号がジグザグしています。

今回の場合,センサデータとLEDパネルを右上をデータのスタートポイントにして並べると下図のような関係になりました。



これがメイン部でLEDバッファに書き込む時に行の偶数奇数で何やらやっている事です(^^)。

いろいろなLEDパネルに対応するには座標のインデックスをつけたデータにした方がスッキリするかもしれませんね。




以上,どうにかやってみたい事の基礎はできましたが,色表現の仕組みを周囲の温度との関係を考慮した表示の最低値,最高値の設定など,もう少しちゃんとしたものにしたいですね。

色については下記がとても参考になると思います。

値の大きさをサーモグラフィのような色に変換する(@krsak,Qiita)
サーモグラフィ風の色変化をシグモイド関数で再現する(@masato_ka,Qiita)