【Raspberry Pi 4】非接触の体温測定器を開発&紹介!
Raspberry Pi 4で小型の体温測定器を作りました。
今回ご紹介するのは2020年9月21日に完成した技術科部特製の「体温測定器」です。
特徴
普通の体温計と違う点はいくつもあります。「amg8833」と「Raspberry Pi 4」を搭載しています。
「amg8833」は赤外線アレイセンサと言って、表面温度を測ることの出来るセンサで、「Raspberry Pi 4」とはRaspberry Piという小型コンピュータの中でも最新世代で何と出力は4Kのデュアルディスプレイまで対応しているツワモノです。
しかもモバイルバッテリーでも動作が確認できているので本当にどこでも使えます。
設置しても奥行き 15cm とコンパクトさもアピールポイントです。
いくつかのポイント
- スリープ機能
→ 余計な電力消費を抑える & 人感センサーの役割にも - グラデーション付き
→ 視覚効果で一目瞭然 - 動体検知機能
→ 自分が“見える” 見える。。。見えるぞ!!!!
使いみち
これを学校の文化祭で展示しようという計画を立てています。非接触型の体温測定器はイオンなど色々な商業施設にありますが、自作してみるのも面白いかなーと思って作りました。
先生に相談してこの技術を他の方面にも活用したいなとは思っています。
使い方
このように本体とモニタを用意します。(モニタは何でもいい)
そしてRaspberry Piを起動します。
すると、上のような画面が出てくるかと思います。
そこからは指定のファイル(今回は Desktop/festival/LTS_v3.py
)を開きます。
Raspberry Pi に入ってるエディタが起動するので F5
または上にある実行ボタンを押して実行します。
はい!できました! ただ何もせずに5秒すると勝手にintervalに入ってしまうので注意です。
それだけです!!
動作動画
どうでしょう〜 さすがRaspberry Pi 4だけあって動作はサクサクしてます。もちろんどうしてもラグが0.1〜0.3秒生じてしまいますが、頑張ってもここが限界でした。
費用
全部部費なので僕は何も支払ってません……
- Raspberry Pi 4セット:1万1000円
- カメラ:1500円
- 赤外線センサ:6000円
- その他(ケーブル類):1000円
ざっと2万円です。ただ、これだけの用途ならばRaspberry Pi Zeroでも動きそうなのでもし量産するとなったらもっと安いモデルにしようと思います。また、赤外線センサも最近は在庫が増えてきて4000円くらいで買えるようになったので頑張れば1万円で開発できるかなーというところです。
開発の裏側
カメラが認識しない
こいつです。全く認識しなくて何だこいつ!!!!!って独りでキレてたら原因がわかりました。(キレてないです)
Raspberry Piの起動前に挿さないと認識してくれないらしいです。起動してからああだこうだやってたから上手くいきませんでした。USBと同じノリでやっちゃだめですね。これで半日とかしました。
Raspberry Piでのコーディングが辛い
普段PyCharm使ってるのでリファクタリングもコード整形も簡単だったのですが、リアルタイムの描画なのでSSH接続では不可能なわけでVNCからコーディングしてましたがデバッグが辛かったです。
PyCharmはすごかったんだ……
とはいってもコードの整理のためにPyCharmに持ってきて書き直しをしてます。
VNCが最高
リモートデスクトップみたいなものです。マルチプラットフォームなので
- Windows
- mac
- Linux
- Raspberry Pi
- iOS
- Android
- Chromebook
などなど。現行のパソコンのほとんどをカバーしています。最強ですね。しかもラグを感じられないほどの快適さでもう言うことなしです。
開発をするにしても椅子から動きたくないので電源を繋げるだけでメイン機からVNCで接続できるのはとてもありがたいです。
あと必要な理由として、自分の部屋にHDMI端子を受け入れるモニタがないこともあります。今の時代、それで困る人は少ないとは思いますが、自分は老人なのでテレビを使って初期設定してました。
SSHは使わなくなりました。計算オンリーならGUI使わないほうが最大スペック出せるという意味でSSHを使うべきなのかも。(とはいえサーバーのほとんどはSSHか)
透過する画像の扱いがわからなかった
こんな画像です。右上にあるダークテーマのボタンを何度か押してみればわかると思うのですが、この画像は背景が表示されません。(透過になってる)
ちなみにこの画像は、自分が入っている部活のロゴです。
この画像の名称もわからずひたすら「画像 背景 ない」「画像 透過」でググってやっとの思いで背景透過画像を見つけました。
OpenCV上だと alpha
チャンネルで表されるそうです。普通の画像だと全て100(%)なのですが、背景透過画像だと一部が0になることがあるそうです。
この記事に助けられました。
自分はx, y座標を指定したかったので少しソースを改変しました。
GPUメモリを増やしたら起動しなくなった
896 MBに増やしたら虹色の画面で止まりました。死ぬかと思った。
Raspberry Pi が起動時に虹色の画面で止まってしまう話について
これ通りにまずmicro SDカードを抜いてbootファイルをいじったらちゃんと起動しました… マジで助かった。
この開発とは直接関係はしません。でもノリであげちゃいました。
センサのFPSが低すぎる!
10FPSです…… 赤外線センサの中でも最も安いやつなので仕方ないです。とはいってもこれしか売ってなかったのですがw
そこで、5フレームごとに計測するようにしてみたら安定駆動するようになりました。
if count % 5 == 0:
pixels = np.array(sensor.pixels).T
deg = pixels.max()
diff = memo[1] - deg
memo = [memo[1], deg]
グラデーションの更新が速すぎて目が痛い
原因はセンサが0.25℃単位でしか測定できないからです。対処法として、先程の5フレームで徐々に更新していく方法を取りました。すると、最小で1フレームで0.05℃だけの更新になって目に優しくなります。
re_deg = memo[0] - diff * (1 + (count % 5)) / 5
まとめ
ものづくりが楽しい。4連休最高!
あと、普段マシンスペックで殴ってることが多かったのですが今回は環境に優しい開発も意識できて今後も続けたいと思いました。
ソースはgistに置いてあります。
https://gist.github.com/Chizuchizu/cf65e4a5ab4096a330ab2ec26a842bfe
また、自分がRaspberry Piで奮闘した記録はYouTubeに上げてあるのでぜひ見てみてください。