Elsaの技術日記(徒然なるままに)

主に自分で作ったアプリとかの報告・日記を記載

MENU

Raspberry PIで赤外線アレイセンサを動かしてみる

そろそろデバイス制御系を触ってみようかな?と思っていたところ、赤外線アレイセンサが入手できたのでこちらを使って遊んでみることにしました!!



■使用構成

使用した赤外線アレイセンサはこちらです。

AMG8833 IR 8 * 8サーマルイメージャーアレイ温度センサーモジュール8x8赤外線カメラセンサー

新品価格
¥5,100から
(2020/10/31 18:10時点)

こちらをRaspberry PIに接続して動かしてみました!!

■amg8833使用方法

Raspberry PIとamg8833の構成の実装方法はこちらに記載されておりました。
https://qiita.com/tm_nagoya/items/904ba8a23868ddcdcc54

同じことをしてもな。。。
と思いましたので、go言語での実装を試みました!!

なぜgo言語なのか??それは、、、何となく🤣
最近go言語を書いてみたい欲??があったので。

で本題ですが、go言語でamg8833の動作させるコードを実装するにあたり、すでにライブラリが用意されていました😅
github.com/jweissig/amg8833
です!!

まずは使用できるように下記でインストール。

go get -u github.com/jweissig/amg8833

そして、amg8833からのセンサ値取得のコードはこちらです。

import (
     "github.com/jweissig/amg8833"
     "fmt"
)

func main() {
	amg, err := amg8833.NewAMG8833(&amg8833.Opts{
		Device: "/dev/i2c-1",
		Mode:   amg8833.AMG88xxNormalMode,
		Reset:  amg8833.AMG88xxInitialReset,
		FPS:    amg8833.AMG88xxFPS10,
	})
	if err != nil {
		panic(err)
	}

	ticker := time.NewTicker(1 * time.Second)
	go Do_Post()
	for {
		grid := amg.ReadPixels()
		fmt.Println(grid)
                <-ticker.C
	}
}

本コードにより、gridに配列数64の一次元配列でセンサ値が格納されます。
例えば、こんな感じで取得できます。

[21.5 21.5 21.25 20.25 21 20 20.75 21 21.25 23.5 25 23 20.5 19.75 20 20.5 21.5 24 26.5 25.75 21.25 20.25 20.25 20.75 21.5 23.25 27 27.5 24.25 22.25 23 24 21.25 23 25 26.5 24.25 23.75 23 21.25 21 22.5 24.25 25.25 24.25 24.5 24.5 23.5 19.5 21.5 25 25.25 24.75 24.25 24.75 24.25 19.5 20 21.5 24.25 25 24.25 24 24.5]

amg8833は8×8でセンサ値が取得できます。
ですので、取得した上記配列数64の値は下記の通り格納されております。
f:id:Elsammit:20201031174639p:plain

■躓いた点

上記コードで実行したところ、

panic: write /dev/i2c-1: remote I/O error

goroutine 1 [running]:
github.com/jweissig/amg8833.(*AMG88xx).SetMode(0x280e248, 0x280e200)

といったエラーが発生しました😢

こちらの対処方法ですが、
github.com/jweissig/amg8833
配下に格納された、
amg8833.go
に記載されたI2Cのアドレスを正しく設定すればOKです。

// Package amg8833 for interacting with the AMG8833 8x8 Thermal Camera Sensor
//
// Mostly ported from Adafruit's AMG88xx Library here:
// https://github.com/adafruit/Adafruit_AMG88xx/
package amg8833

import (
        "time"

        "golang.org/x/exp/io/i2c"
)

// General purpose consts
const (
        AMG88xxADDR                 = 0x68 // default I2C address ←ここの値を変更
・・・

i2cのアドレスって?となった場合には、とりあえずこちらのコマンドを実行すると、

sudo i2cdetect -y 1

こちらのような結果が得られます。

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

ので数値表示されている0x68がI2Cアドレスに該当します!!

■最後に

今回はgo言語での赤外線アレイセンサ(amg8833)を動かしてみました。
ですが、、
ただ、動かすだけではつまらないな🤔
と思い、現在Raspberry Pi-PC間でhttp request/responseによりセンサ値を送受して、グラフ表示する処理を作成中!!
明日には出来るかと思うので、こちらも後でまとめておきたいと思います!!

やはり久しぶりにデバイスを動かすと面白いですね!!😆
息抜きとしてたまには触っていきたいと思います!!👍


■参考
https://github.com/jweissig/amg8833
https://qiita.com/tm_nagoya/items/32d7e5becf73ba8a6110