LINE Thingsを使ってすこし実用的なサーモグラフィーを作った話

まず、LINE Thingsとは何かということについて、簡単に知りたい方はこちらのブログを参考にしてください。

https://engineering.linecorp.com/ja/blog/line-things-prototype/


今回紹介するのはLINE Thingsを用いて、LINEアプリ上でデータを見ることが出来るサーモグラフィーです。

![liff_pcb.jpg](https://qiita-image-store.s3.amazonaws.com/0/354978/f5fe9602-0334-b91c-4fe6-461160dc215d.jpeg)

サーモグラフィーというのは温度を表示できるカメラのようなもので、その物体が発している温度を色に変換して可視化することができるデバイスです。
原理としては、絶対零度(マイナス273.15℃)以上のすべての物質は、赤外線が放出されています。その赤外線放出量は絶対温度の4乗に比例しているため、それをセンサーで読み取ることで、最終的に物体の温度を得ています。

いつか作ってみたいなと思っていましたが使用するデバイスが大変高価であることと、入手性の悪さからなかなか取り掛かれずにいました。
また、ディスプレイ表示が必要ですが、ある程度マシンパワーが必要で、小さなマイコンでは限界があったというのも理由の一つです。

製作したデバイスでは、サーモグラフィーのセンサからデータを取得し、それをBLE経由でNotifyとして転送するまでをデバイスが行います。
その他の処理、例えば取得したデータを可視化する際の補間や温度色変換などのマシンパワーが必要な処理はLIFFアプリ上で行っています。

まずはどんなものなのか、動画でご連ください。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr"><a href="https://twitter.com/hashtag/linethings?src=hash&amp;ref_src=twsrc%5Etfw">#linethings</a> LINE Thingsを使って少し実用的なサーモグラフィーを作ってみた。<a href="https://t.co/EFm18cgEN8">https://t.co/EFm18cgEN8</a></p>&mdash; CPUの人 (@cpu_labs) <a href="https://twitter.com/cpu_labs/status/1093781821597208577?ref_src=twsrc%5Etfw">2019年2月8日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>





# LIFFアプリの説明
<img width="375" alt="liff.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/354978/9ac459b1-e305-7334-6277-365c1391a748.png">

この画像はサーモグラフィの前でピースサインをしています。しっかり取れていますね。

LIFFアプリはLINE Things starterをベースとして作っています。温度を示している色画像の他に領域内の最大・最低温度を表示できるようにしています。

https://github.com/line/line-things-starter

サーモグラフィーのセンサから送られてくる画像は8x8の超低解像度情報です。そのため、このまま表示してもドットがそのまま表示されているような感じで、実際のところ何を表示しているかがよくわかりません。もともとこのセンサーは電子レンジやエアコンの温度検出のために作らられているようで、サーモグラフィーのためのデバイスではないんですね。
しかし、専用のデバイスは桁が違うほど高かったり、そもそも輸出規制などがあり簡単には入手できないためそれらを使うわけには行きませんでした。

とはいえ、拡大表示する際の補間方法としてバイキュービック補間を行ってみたところそれなりに対象物の輪郭が見えてきました。写真で紹介したように2本指もしっかりと認識しているようです。
こんなマシンパワーが必要な処理はデバイス側で行う必要性が全く無いので、LIFF側で行っています。



# ハードウェアの説明


![pcb_top.JPG](https://qiita-image-store.s3.amazonaws.com/0/354978/a90b74f4-ad72-7073-1d1f-e90486f96bf4.jpeg)

サーモグラフィに使ったセンサーはパナソニックのAMG8834というセンサーです。赤外線アレイセンサ Grid-EYEというシリーズで、-20℃から100℃までを計測可能です。このセンサはI2C接続で比較的簡単に8x8の64画素を取得することができます。

BLEモジュールはRaytac社のMDBT42Qを使用しています。このモジュールは技適を取得しているため日本国内でBLEを使用する際も安心して使用することが可能です。
なお、このMDBT42Qは実際にはBLE通信機能を搭載したマイコンとなっており、デバイス全体の制御もこのマイコンで行っています。

電源はCR2032の電池駆動か、USBコネクタから給電することが可能です。BLE自体は非常に低消費電力ですが、今回使用する用途として連続してデータ通信を行う必要があり、ある程度の電池消費があります。
そのため、ダイオードを挟んで2つのCR2032電池を並列接続することで駆動時間を長くしています。CR2450などを使用するアイディアもありましたが、別プロジェクトでCR2032を使用していたため共有化したくそうしました。






# デバイスからLIFFの温度データ転送方法
使用したセンサの解像度は8x8ピクセルの合計64ピクセルです。それぞれのピクセルは8bitでピクセルごとの温度を持たせています。
しかし、低消費電力規格のBLEではデフォルトでは一度に転送できるデータが20Byteほどなので、一度にすべてのデバイスからLIFFに転送することができません。
ATT_MTU拡張という方式を使うことでこれも可能になるのですが、対応しないデバイスがあるなど、デバイス依存があるようなのでなるべくこれを採用したくはありませんでした。

そのため、今回は1フレームあたり16ピクセルのフレームを4回に分けてデータ転送を行っています。各フレームごとに0~3のアドレスをもたせ、デバイスが送信するアドレスとLIFF側で同期をとっています。

このフレームアドレスの格納方法ですが、フレームにアドレス領域を1Byte持たせて1フレーム17Byteにしても良かったのですが、電池駆動の事も考えて可能な限り効率よくしたかったため、
1フレーム16Byteのまま、フレームの1, 2Byte目の最上位bitをそれぞれアドレスbitとして、その2bitでフレームアドレスを示すようにしています。
1ピクセル1Byte確保していましたが、そもそもセンサの特性上-20~100℃までしか測れないので、オフセットを加算すればギリギリ7bitで表示できます。



# まとめ
サーモグラフィーはいつか作りたいと思っていたものでした。しかし、デバイスが高価であったことと、マイコンを使った工作では画面表示はめんどくさいなっていうのがありました。
しかし、デバイスも比較的安価になり、LINE Thingsを使うことで比較的簡単に表示・コントロールもLINE上で行うことが出来るようになりました。
デバイス側はただひたすら単純なセンサリードをして、LIFF側はそのデータを解析して表示する。これぞまさにIoTシステムっぽい感じがしますよね。
デバイスもバッテリ駆動ですし、ケーブル不要でスマホとデバイスがあればすぐに使用できるので大変便利です!