なんでも作っちゃう、かも。

Arduino/Make/フィジカルコンピューティング/電子工作あたりで活動しています。スタバの空きカップを使ったスタバカップアンプなど製作。最近はもっぱらArduinoと3Dプリンタの自作に興味があります。

Arduinoで赤外線アレイセンサ「Grid-EYE」から2次元の温度データを取得する

Posted by arms22 on 2016年01月03日 19  0

IMGP1082

Grid-EYEはPanasonicが開発した赤外線センサで8x8(64画素)の2次元の温度データを出力します(上写真、四角い窓の缶パッケージ)。視野角60度で広範囲の温度が計測できます。電子レンジやエアコン、また静止した人体の検出も可能なのでデジタルサイネージなどにも使われています。



とある伝でこのICのサンプルを頂いたのでサーモグラフィーを作ってみました。Grid-EYEで取得した2次元の温度データをProcessingを使って表示しています(詳細はサンプルコード2)。


回路


GridEyeサンプル回路
industrial.panasonic.com/cdbs/www-data/pdf/ADI8000/ADI8000CJ1.pdfより引用

Arduinoとの接続
2)SDA -- A4 または SDA
3)SCL -- A5 または SCL
4)INT -- 2番 または 3番
9)VDD -- 3.3V
6)GND -- GND

SDA/SCL/INT端子は10kΩの抵抗でプルアップします。その他のコンデンサ・抵抗は推奨回路どおり接続します。INTピンは割り込み信号を出力する端子です。設定した閾値を超えた時、または下回った時にLOWレベルを出力します。今回は使用しないので未配線でもOKです。電源はAMG883xなら3.3V、AMG885xなら5.0Vを接続します。


ライブラリ

Grid-EYEからピクセル毎の温度を読み込むためのライブラリを作りました。下記URLからzipファイルをダウンロードしてください。ライブラリをインストールするにはArduinoのメニューからスケッチ > Include Library > Add .ZIP Library...を選択し、先ほどダウンロードしたzipファイルを選びます。

arms22/GridEye
https://github.com/arms22/GridEye/archive/master.zip


サンプル1

Arduinoでピクセル温度データを読み込むサンプルです。サーミスタ温度とピクセル温度データを読み込み、シリアル通信で温度を文字列として送信します。シリアルモニタでサーミスタ温度とピクセル温度データが確認できます。サーミスタ温度を読み出す関数thermistorTemp()の戻り値はint型で1LSB=0.0625度です。ピクセル温度データを読み出す関数pixelOut()の第1引数には温度データを格納するint型配列を渡します。1LSB=0.25度です。



サンプル2

Processingを使ってサーモグラフを表示するサンプルです。Arduinoでピクセル温度データを読み込み、シリアル通信で1ピクセルを2バイトのshort型で下位バイト・上位バイトの順で送信します。温度データの送信前に2バイトのヘッダ(0x55、0xaa)をデータの区切りとして送信します。Processing側では130バイトのデータ(ヘッダ2バイト+ピクセル温度データ64*2)がバッファに溜まるのを待ちます。130バイト受信したらヘッダを受信したか確認します。ヘッダを受信したらピクセル温度データを変数に格納します。
受信したピクセル温度データはサーモグラフっぽく見せるために色と温度の対応を調整するのが結構大変でした。Processing側のコードはPythonで記述しています。



赤外線アレイセンサ Grid-EYE | 電子デバイス・産業用機器 | Panasonic
http://industrial.panasonic.com/jp/products/sensors/built-in-sensors/grid-eye


↓本格的なモノは結構高いですな。。



Ads by Google

-19 Comments

says...""
このモジュールは個人でも購入可能ですか?
2016.02.25 11:47 | URL | #- [edit]
arms22 says..."Re: タイトルなし"
小売店では販売されていないようなので難しいと思います。

2016.03.10 23:52 | URL | #- [edit]
says...""
やはりそうなんですね… コメントありがとうございました。
2016.03.12 00:39 | URL | #- [edit]
arms22 says..."Re: タイトルなし"
条件付きでもいいから小売りで買えるといいのですが、、
2016.03.13 17:06 | URL | #- [edit]
sho says...""
アリババで売ってますね
2016.12.26 01:20 | URL | #DjcLvXrU [edit]
arms22 says...""
最近RSでも取り扱いはじまりましたね。
http://jp.rs-online.com/web/c/semiconductors/sensor-ics/proximity-sensor-ics/
2016.12.26 07:13 | URL | #j7sy4omY [edit]
says..."管理人のみ閲覧できます"
このコメントは管理人のみ閲覧できます
2017.01.02 18:40 | | # [edit]
arms22 says..."Re: 教えてくださいませんか?"
サンプル2の2つ目のスケッチはProcessing用でPythonで書いていいます。
ダウンロード直後のProcessingはjavaモードしかないのでPythonモードを追加してください。
たしか新しいスケッチを開いたあと、右上のプルダウンボタンからモードの追加でPythonモードのダウンロードが行えたはずです。。
ダウンロードが終わったらPythonモードに切り替えてスケッチを貼り付けてください。

下記の行は適宜書き換えてください。
1か2になると思います。たぶん。。

portIndex = 3 # 環境に合わせて変更してください
2017.01.05 23:27 | URL | #- [edit]
sho says..."まだ動きません"
すぐに御回答頂いたようでありがとうございました.
いま,気が付きました.
仰るとおりに動かしているつもりですが…
なんせ,まったくの初心者でして…
こちらでは,com8になるのですが,それをarduinoが専有したまま,Processingの方からそのデータを読めるのでしょうか?
基本的にやり方が間違っているのかも知れませんが…
grid_eye_view.inoを動かしたままgrid_eye_view.pydeを動かすのですよね.
なお,read_grid_data.inoは正常にデータを読み込んでくれています.

どうか,よろしくお願いいたします.

2017.01.22 15:18 | URL | #DjcLvXrU [edit]
arms22 says..."Re: まだ動きません"
arduinoからProcessingにグリッドデータをシリアルポート経由で送っています。
grid_eye_view.pydeがシリアルポートを開けなくなるので、
arduino ソフトウェアのシリアルモニタは閉じてください。
2017.01.23 20:12 | URL | #- [edit]
sho says...""
たびたびすみません.
牛歩のあゆみですが…

arduino ソフトウェアのシリアルモニタは閉じています.

portIndex = 8 # 環境に合わせて変更してください > となっています.
print "Connecting to", Serial.list()[portIndex]
この行が黄色く表示されます.

array(java.lang.String, [u'COM8'])
Connecting to
processing.app.SketchException: IndexError: index out of range: 8
at jycessing.mode.run.SketchRunner.convertPythonSketchError(Unknown Source)
at jycessing.mode.run.SketchRunner.access$300(Unknown Source)
at jycessing.mode.run.SketchRunner$3.run(Unknown Source)
at java.lang.Thread.run(Thread.java:745)
というエラーが表示されます.
これでなにか原因がわかりますでしょうか?
よろしくお願いいたします.

2017.01.31 21:25 | URL | #DjcLvXrU [edit]
arms22 says...""
そのエラー出力の前にポートの一覧が表示されていると思います。
その中からcom8が何番目か調べてください。
調べたらその番号を portIndex に代入してください。
com8だからといって8とは限らないようです。
2017.02.01 00:23 | URL | #j7sy4omY [edit]
sho says...""
御教示ありがとうございます.

実は,1から順に18位まで試してみたのですが,同様でした…
私には無理なのかもしれません.
2017.02.03 15:42 | URL | #DjcLvXrU [edit]
arms22 says...""
0も試してみてください。
それとログにでてくるシリアルポートの一覧もここにはりつけてください。
なにかわかるかもしれません。
2017.02.03 20:07 | URL | #j7sy4omY [edit]
sho says...""
お付き合いありがとうございます.
公開の場所ですみません.

0もやってみました
>シリアルポート
ですが,エラーは次がすべてで,18しか表示されないようです.

array(java.lang.String, [u'COM18'])
Connecting to COM18
processing.app.SketchException: java.lang.NullPointerException
at processing.core.PImage.set(PImage.java:884)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.python.core.PyReflectedFunction.__call__(PyReflectedFunction.java:186)
at org.python.core.PyReflectedFunction.__call__(PyReflectedFunction.java:204)
at org.python.core.PyObject.__call__(PyObject.java:515)
at org.python.core.PyObject.__call__(PyObject.java:521)
at org.python.core.PyMethod.__call__(PyMethod.java:171)
at org.python.pycode._pyx11.draw$2(grid_eye_view.pyde:85)
at org.python.pycode._pyx11.call_function(grid_eye_view.pyde)
at org.python.core.PyTableCode.call(PyTableCode.java:167)
at org.python.core.PyBaseCode.call(PyBaseCode.java:124)
at org.python.core.PyFunction.__call__(PyFunction.java:403)
at org.python.core.PyFunction.__call__(PyFunction.java:398)
at jycessing.PAppletJythonDriver.draw(Unknown Source)
at processing.core.PApplet.handleDraw(PApplet.java:2418)
at processing.awt.PSurfaceAWT$12.callDraw(PSurfaceAWT.java:1540)
at processing.core.PSurfaceNone$AnimationThread.run(PSurfaceNone.java:316)

at jycessing.mode.run.SketchRunner.convertPythonSketchError(Unknown Source)
at jycessing.mode.run.SketchRunner.access$300(Unknown Source)
at jycessing.mode.run.SketchRunner$3.run(Unknown Source)
at java.lang.Thread.run(Thread.java:745)
2017.02.03 20:31 | URL | #DjcLvXrU [edit]
arms22 says...""
setup()を下記の1行のみに変更してその結果を教えてください。
print Serial.list()
arduinoが接続されているシリアルポートを正しく指定できていないように思います。
ちなみにcom18にarduinoが接続されているのでしょうか。
2017.02.05 11:31 | URL | #j7sy4omY [edit]
arms22 says...""
と思ったけど、draw()の中で例外吐いてるのかな。。
draw()の処理1つ1つにprint文を入れてどこまで処理が進んだか確認してみてください。
これでどこで問題が起きているかわかると思います。
2017.02.06 11:41 | URL | #j7sy4omY [edit]
sho says...""
お世話になっております.

comが増えすぎたので削除して,現在com3です

>setup()を下記の1行のみに変更してその結果を教えてください。
>print Serial.list()

エラーは

array(java.lang.String, [u'COM3'])
processing.app.SketchException: NameError: global name 'myPort' is not defined
at jycessing.mode.run.SketchRunner.convertPythonSketchError(Unknown Source)
at jycessing.mode.run.SketchRunner.access$300(Unknown Source)
at jycessing.mode.run.SketchRunner$3.run(Unknown Source)
at java.lang.Thread.run(Thread.java:745)
となります.



com3をモニターすると,
ronngtuvtrqqosursqpqptttuttqnstrspqqqpprqqqnkUェvurtolbcvtsrpnhbrurspolhtutssppmttsrsqnprsrtsqopssrqqqsnrpqpoponUェwwtrqmaavtrsoohcsssrqpmhtttsqrnnsttsrpqqtrsssqqotsrtqpqorqqpqnnnUェxwtrsoedvusspnjftutsropnvsutrqqprtstqqqouqsvsrppussqqqrqpqqsrnqoUェ
のような,英字の文字列が出力されています.
なんか,ちがいますよね.
数字が出ると思うのですが…
もちろんProcessingのときは切っています.


2017.02.10 00:07 | URL | #DjcLvXrU [edit]
arms22 says..."Re: タイトルなし"
シリアルポートは1つだけみたいなので
portIndex = 0
でよさそうですね。

portIndex = 0
としたときのエラーは上記だとした場合、
Processingのバージョンか環境要因によるものかもしれませんね。。

> なんか,ちがいますよね.
> 数字が出ると思うのですが…
> もちろんProcessingのときは切っています.

あっています。
2byteの整数値を送っているのでシリアルモニタで開くと文字化けします。

2017.02.10 07:54 | URL | #- [edit]

Leave a reply






管理者にだけ表示を許可する

該当の記事は見つかりませんでした。
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。