こんにちは。ピャペロンです。
今回は市販の赤外線アレイセンサを使って温度の検出をしてみるよ!
前編ではセットアップから実際にセンサを動かして温度を取得できるところまでをやってみよう!
今回行うこと
センサを接続して映像に表示されている物体の温度を取得、簡単なサーモグラフィのようなものを作る
今回使用するハード
- RaspberryPi 3B+以上
- AMG8833 赤外線アレイセンサGrid-EYE搭載モジュール
- RaspberryPi Camera Module V2
- ジャンパー線
- PaPeRo i本体
今回使用するソフト
- Raspbian Buster
- TeraTerm等
- OpenCV
- PIL
- Numpy
赤外線アレイセンサについて
今回使用するセンサーはPanasonic製の赤外線アレイセンサGrid-Eye®シリーズのひとつ、AMG8833を使用するよ!
このセンサは、8*8の計64個のサーモパイルセンサの集合体なんだ!
サーモパイルセンサというのは接触式などで一般的な熱電対などに代表される温度センサとは違って物体に触れずにその表面温度を測定することが出来るのです。
絶対零度以上の物体から放射された赤外線から熱起電力を発生させて、物体のエネルギー量の絶対量から温度を調べるセンサーなんだ!
世の中では温度検出から人体検知、CO2濃度測定など様々な用途で使われているんだ!
接続準備
まずはRaspberryPiとセンサーをつなげるよ!そのための設定をしよう!
RaspberryPiを起動してターミナルに以下のようにコマンドを入れよう!
sudo raspi-config
そうしたら以下の画面の赤くなっている部分の通りに選択して設定しよう!









画像通りに設定できたら下のコマンドで再起動しよう!
sudo reboot -h now
これで接続の準備は終わりです。次にセンサを接続してみよう
接続
次はセンサをRaspberryPiにつないでみよう!RaspberryPiにはGPIOという入出力端子がついているよ!今回はそちらを使ってI2C通信を行います
40ピンあるRaspberryPiのGPIOピンはこのようになっているよ!
その中で今回接続に用いるのが1,3,5,9ピンだよ

RaspberryPiのGPIOピンとセンサーのピンをジャンパー線で繋いでいくよ!今回は以下のように繋ぐけどセンサーによって違うかもしれないからよく調べてから接続しよう!


無事接続できたかな?そうしたら次に実際にセンサを動かしてみよう!
動作確認
接続が終わったら次は実際に動作確認をしてみるよ!
これはカメラとセンサでとらえている場所の温度が表示される簡単なプログラムだよ!
# [dev-biog-29.py]
import numpy as np
from PIL import ImageFont, ImageDraw, Image
import cv2 as cv
import picamera
import smbus
bus = smbus.SMBus(1)
addr = 0x69 # 取得アドレス 0x68と選択式
width = 800
height = int(width*3/4)# 画像サイズ
font = ImageFont.truetype(fontpath, 12)
message = 'PRESS "Q" TO EXIT'
capture = cv.VideoCapture(0)
while(True):
# カメラから画像取得
ret, frame = capture.read()
# センサ情報取得
line_data=[]
for i in range(8):
data = bus.read_i2c_block_data(addr, 0x80+0x10*i, 16)
thisline =[]
for j in range(8):
thisline.append( ((data[2*j+1] & 0x07) *256 + data[2*j]))
line_data.append(thisline)
temp_array = np.asarray(line_data)
# メッセージを表示
cv.putText(frame, message, (0, 10), cv.FONT_HERSHEY_PLAIN, 0.8, (0, 255, 0))
for i in range(8):
for j in range(8):
temp = temp_array[i][j]/4
# 温度ごとに色の変更をする
if temp< 20: # 20度以下は青
color = (255, 0, 0)
elif temp< 40: # 40度以下は緑
color = (0, 255, 0)
else: # それ以上は赤
color = (0, 0, 255)
# 各座標に温度を表示
cv.putText(frame, "%2.2f"%(temp), (100*j-50,75*i-27), cv.FONT_HERSHEY_PLAIN, 0.8, color)
# 画像の表示
cv.imshow('TEST', frame)
# Qを押された時break
if cv.waitKey(1) & 0xFF == ord('q'):
break
capture.release()
cv.destroyAllWindows()
実行すると以下のような画面になるよ!もし動かなかったときは不足しているライブラリを見直してみよう!

このようにカメラとセンサ同時でとらえたもののざっくりとした温度が表示されるよ!
でも、これだとまだ精度が出ていないから次回はこれらの修正から行います!
0