Raspberry PiとAMG8833でサーモカメラを自作する方法

はじめに

今回は、AMG8833 サーマルカメラ(赤外線アレイセンサ)を使って、Raspberry Pi で人や物体の温度分布を可視化する方法を紹介します。

AMG8833の動作原理

AMG8833 は、Panasonic製の8×8赤外線センサアレイです。
64個のセンサがエリアごとの温度を検出し、最大10回/秒で読み取ることができます。

特徴

・解像度 : 8×8ピクセル(64点)
・温度検出範囲 : 0 ~80℃
・検出距離 : 最大7m(人間など)
・通信 : I2C接続

動作原理(ざっくり)

物体が放射する赤外線を、センサ1つ1つがキャッチして、放射強度を温度に換算し、配列の形で出力しています。
これで、非接触で温度の分布がわかります。

配線

ラズベリーパイを使用します

RaspberryPi AMG8388
GPIO 1VCC
GPIO 6GND
GPIO 2SDA
GPIO 3SLC
()内はピン番号

温度分布を描写する

正しく接続されているか、まずは下記で確認ください。デフォルトでは0x68に設定されています。

i2cdetect -y 1

以下のコードで描写できます。

import smbus2
import time
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation

# i2c
I2C_BUS = 1
AMG8833_ADDR = 0x68

# i2c bus
bus = smbus2.SMBus(I2C_BUS)

def read_thermopile():
    raw_data = []
    for i in range(4):
        raw_data += bus.read_i2c_block_data(AMG8833_ADDR, 0x80 + i * 32, 32)
        
    pixels = np.zeros(64)
    
    for i in range(64):
        low = raw_data[2 * i]
        high = raw_data[2 * i + 1]
        value = (high << 8) | low
        if value > 2047:
            value -= 4096
        pixels[i] = value * 0.25
    
    return pixels.reshape((8,8))

# heatmap
fig, ax = plt.subplots()
cbar = None

def update(frame):
    global cbar
    data = read_thermopile()
    ax.clear()
    heatmap = ax.imshow(data, cmap='plasma', interpolation='bicubic', vmin=20, vmax=40)
    
    if cbar is None:
        cbar = plt.colorbar(heatmap, ax=ax)
    
    ax.set_title("AMG8833 Thermal Camera")
    return heatmap,

ani = animation.FuncAnimation(fig, update, interval=200)
plt.show()

bus.close()

参考に、matplotlibのカラーマップ(cmap)の一覧を示します。サンプルではplasmaとしています。

カラーマップ名説明
inferno暗い背景+明るい強調
plasma明るく鮮やか、バランス型
magma暗い紫~明るいオレンジのグラデ
hot黒→赤→黄→白(熱感重視)
viridis緑系ベース、色覚バリアフリー対応
coolwarm青→白→赤、温度差を視覚化に最適
cividis色覚バリアフリー重視、落ち着いたトーン
Greysグレースケール

また、補完(interpolation、ピクセルの滑らかさ)もいろいろありますので、一部を紹介します。
今回のモジュールは8×8と低解像度ですので、滑らかにするかどうか?などを決められます。

名前見た目の効果
nearest拡大してもそのまま。ドット感が残る(カクカク)
bilinear線形補間。少しなめらかになる
bicubic三次補間。よりなめらかになる
hamming, hanning, gaussian特殊なぼかし(効果弱い)
lanzos精密な補間。時間かかるがキレイ

まとめ

温度が可視化でき、非常に面白いと思います。物体の温度値を画面に表示したり、人間(34-40℃)を検知したら別のモジュールを作動させるなどいろいろなことができると思います。ぜひ試してみてください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする