名古屋オフィスに新しいGroveセンサー、Grove - Infrared Temperature Sensor Arrayが届いたので(コッソリと自宅に持って帰って)試してみました。
3.3V/5V両対応で、Grove I2Cに接続可能。
8x8ピクセルの赤外温度センサアレイで、離れたところから温度を測定できます。
WikiにSeeeduinoとRaspberry Piのサンプルが用意されていますが、Seeeduinoの方はSeeeduino、Groveベースシールド、2.8インチTFTタッチシールドを使っていて、部品が手元にないので、、、Raspberry Piで試すことにしました。
あ!
でも、Grove Base Hat for Raspberry Piが無いので、、、代わりにGrovePi+を使うことにw
動かしてみる
パーツはこちら。
結線はGroveなのであっという間に完成。
raspi-config
を実行して、5 -> 1 で、I2Cを有効化します。
pi@raspberrypi:~ $ sudo raspi-config
i2cdetect
で0x68が認識されているか確認します。ヨシヨシ。
pi@raspberrypi:~ $ sudo i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- 04 -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
pi@raspberrypi:~ $
用意されているサンプルコードに必要なパッケージを追加して、
pi@raspberrypi:~ $ sudo apt install build-essential python-pip python-dev python-smbus git
pi@raspberrypi:~ $ sudo apt install python-scipy python-pygame
pi@raspberrypi:~ $ sudo pip install colour
githubのSeeed-Studioから、サンプルコードをクローンします。
pi@raspberrypi:~ $ cd
pi@raspberrypi:~ $ git clone https://github.com/Seeed-Studio/Seeed_AMG8833_Raspberry_Python.git
で、実行。
pi@raspberrypi:~ $ cd ~/Seeed_AMG8833_Raspberry_Python
pi@raspberrypi:~/Seeed_AMG8833_Raspberry_Python $ python thermal_cam.py
すると、新しいウィンドウが表示されて、そこにヒートマップがグラフィカルに表示されます。
最初は手をかざしてみたのですが、温度が低いせいか、全面紫の表示でした。
そこで、センサー前でライターの火を近づけたところ、この画面ショットの表示になりました。20cmくらいの距離です。
多くは語りませんが、、、Grove - Digital Infrared Temperature Sensorと比べて、かなり使いやすいです。
MjGroveに追加しようかな。
ちょっと不思議なのが、、、8x8のセンサアレイなのに、表示の画素は細かいです。ソフトでなにか処理しているんだろうか?
ハードウェアは8x8?
次に、使われているセンサアレイAMG8833のデータシートを確認しました。
- Temperature detection of two-dimensional area: 8x8 (64 pixels)
- Temperature range of measuring object 0 to 80C
- Human detection distance <7m
- Viewing angle Typ. 60deg.
- Frame rate 10frames/sec. or 1frames/sec.
やっぱり、8x8ピクセルですね。
ソフトウェアで拡張?
8x8ピクセルをCubic補間していました。
bicubic = griddata(points, pixels, (grid_x, grid_y), method='cubic')
ちなみに、、、サンプルコードによると、センサの温度分解能は0.25Cでした。