開発ブログ

第29回 パペロで赤外線アレイセンサを動かしてみよう!【前編:簡易サーモグラフィを作ろう】

投稿日時:2020年7月22日 16:07

こんにちは。ピャペロンです。
今回は市販の赤外線アレイセンサを使って温度の検出をしてみるよ!
前編ではセットアップから実際にセンサを動かして温度を取得できるところまでをやってみよう!

今回行うこと

センサを接続して映像に表示されている物体の温度を取得、簡単なサーモグラフィのようなものを作る


今回使用するハード

  1.  RaspberryPi 3B+以上
  2.  AMG8833 赤外線アレイセンサGrid-EYE搭載モジュール
  3.  RaspberryPi Camera Module V2
  4.  ジャンパー線
  5.  PaPeRo i本体

今回使用するソフト

  1. Raspbian Buster
  2. TeraTerm等
  3. OpenCV
  4. PIL
  5. 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

最新開発ブログ一覧  (一覧で確認
2020年8月19日 14:08
開発ブログ
第30回 パペロで赤外線アレイセンサを動かしてみよう!【中編:顔の表面温度を測ってみよう】
by 管理者
2020年7月22日 16:07
開発ブログ
第29回 パペロで赤外線アレイセンサを動かしてみよう!【前編:簡易サーモグラフィを作ろう】
by 管理者
2019年11月20日 17:11
開発ブログ
第28回 パペロでJulius4.5を実行してみた
by 管理者
2019年11月13日 09:11
開発ブログ
第27回 JuliusをPaPeRoi向けにクロスコンパイルしてみた
by 管理者
2019年9月19日 17:09
開発ブログ
第26回Linaro Toolchainでクロスコンパイルしてみた
by 管理者

コメントは受け付けていません。