自作記事ではなく自作物解体記事。DIYあるあるですが作成当時のメモが一切ありません。分解した機会に記録しておきたいというわけです。 なぜ体温計を、という理由は本記事末尾に書いています。
外見
モニタと3つのデバイスで構成。
デバイスは、超音波距離センサー、RasberryPi用カメラ、サーマルカメラ(サーモセンサー)
仕組み
・カメラで顔認識し
・顔までの距離と温度分布を取得
・数値補正した温度を表示
ケース背面
・モニタ裏ケース上部:センサーケーブルと冷却ファン穴
・横パネル:左からUSB、HDMI、オーディオ各端子。右端に電源ON/OFF用のタクトスイッチ(一秒押下でON/OFF)と2個のLED。LEDはOS起動・稼働時に点滅・常時点灯します。
・写真反対側の横パネル:大元の電源スイッチとACアダプタ用ケーブル、モニタ電源用のケーブル
中身と部品
最初、なにがどうなっているかわかりませんでした。
主要部品リストは下表です。
サーマルカメラとモニタは新規購入しているようです。どっちも高かったです(合計で15000円ぐらいしたような記憶)。
部品・モジュール名 | 機能 | 備考 |
MLX 90640 | サーマルカメラ | adafruitブレークアウト基板 I2C 3.3V動作 |
HC-SR04 | 超音波距離センサー | 5V動作のためECHO信号は3.3Vに分圧してGPIOに入れている。Trigerへの出力電圧は3.3Vでも動作すると見込んでなにもしていない。 |
Raspberry Pi Camera rev1.3 | カメラ | フラットケーブルでRaspberryPiカメラ端子に接続 |
ATTiny13 | 電源スイッチ用 SSRに接続 | |
HSR312 | SSR | 12V用リレーと5V降圧モジュールのON/OFF信号用リレー |
AE-RELAY 953 | 秋月12Vリレーモジュール | 30Aとオーバースペック。手持ちがあったので利用したらしい |
AE-OKL-T | DC/DCコンバータモジュール | 秋月:RaspberryPi5V電源用 |
XL6009 | DC/DC昇圧 | モニタ12V電源用:入手先不明 FlyingFIshの刻印あり made in china |
Raspberry Pi 3 | model B V1.2 | 2013年版ですね |
7インチモニタ | Smraza [178°全視野モニター] 1080P IPS 7インチ | Amazonで購入 |
ACアダプタ | 8.5V/5.64A | Sony PlayStation 2用アダプタ |
回路配置
写真の右側基板が電源回路です。
写真上から内容を示すと、
(1)5V用降圧モジュール(AE-OKL-T):Raspberry Piの5V:モジュールには電源ON用の端子(ピン1)があるので、下のSSRでGNDと短絡すると出力ONとなる。
(2)5V三端子レギュレータとコンデンサ、ATTiny13、SSR2個:タクトスイッチの押下で5V/12VのON/OFFをする。レギュレータはATTiny13駆動用。6ピンヘッダはATTiny13用ISP端子です。
(3)12V用昇圧モジュール(XL6009)
(4)リレー:上とあわせてモニタ用12Vを供給
要するにこんな感じです。
電源基板とRaspberryPIの間に基板が乗っています。
RaspberryPi電源供給とGPIOとセンサー間の接続用です。
下部コネクタはLED2個に繋がりOS起動信号を出力。
OSとソフトウエア設定
測定用のソフトの確認。DHCPが生きていたのでログインはLAN経由で可能でした(よかった)。
x window起動−>ソフト自動起動−>カメラ画面表示、というだけです。
xとユーザ自動ログインはsudo raspi-configで設定。
ユーザ名がpiだとしてxの起動後、~py/.config/autostart/Thermo.desktop で対象ソフト起動。
[Desktop Entry]
Type=Application
Name=thermo
Exec=/home/pi/thermo_camera.py &
というわけであとは、thermo_camera.pyの内容ですがpythonライブラリを使って各種作例をつなぎ合わせただけのものです。動作順序は次のようです。
(1)piccameraでカメラからstreamで画像をとりこむ。解像度は640×480
(2)成功したら、顔とカメラの間の距離測定。
距離モジュールはGPIO23(Trig),24(Echo)につなげており、50cmから140cmの間で認識した場合にTrueとする
(3)上がTrueの場合 OpenCVと顔認識カスケード分離器の顔正面用(haarcascade_frontalface_default)で顔認識を行う
(4)上がTrueの場合、busioでサーモカメラにI2C接続しadafruit_mlx90640で最高温度を取得
(5)距離・温度の実測値(次節参照)を用いて作った回帰方程式(二次回帰)に、上記の(2)測定距離と(4)測定温度を代入し推定体温値を求める
(6)openCVで顔認識部分に赤資格枠、枠外に体温を表示する
以上をループ。
(5)の計算式を出すため次のような治具をつくっていました。測定値のメモは一切ありません(あああ)。
温度補正のための治具
仕組みは簡単です。
・アルミ加熱プレートに温度センサーをつけリレー制御で指定温度を設定する。
・プレートに対しサーモカメラで最大温度を実測。
・あやふやな記憶ですが、(1)35度から40度までの1度単位、(2)60から120cmの距離を20cm間隔、(3)各5回測定。それを配列にして式を求めたようです。
制御はArduionボードで、上と同じリレーモジュールを使ってます。リレーはオーバースペックにもほどがありますね。
解体経緯
Covid-19はDIY世界にもいろいろ影響を与えました。自転車パーツがなかなか手に入らなかったことや(春前に注文した部品が秋のシーズン終了直前にようやく届くのだもの・・・)、SHIMANOさんの値上げは悲しい思い出です。電子工作でも半導体不足がありましたが、他方在宅ワークの話題(VPNとかZoomとか)とか、Covid-19対策の電子デバイスの作成というお題が登場したのが記憶に残るところです。
当方もご多分にもれずCO2検出器とセンサー体温計を作りました。CO2検出器はいまだ現役ですが体温計はもはやお役御免(廃棄扱い)となり、捨てるのも心残りで物置で一年近くほこりまみれとなっていました。今回解体したのはその子です。