操作する人の動きを検出して入力情報として利用する目的で、赤外線の遮断検出デバイスを試作した。手軽・安価に作るために、汎用の赤外線リモコン受信モジュールを使用した。
システム構成
今回の構成は、赤外線の送信側と受信側のデバイスをそれぞれ別のデバイスとした。送信側から照射される赤外線の信号を受信側で受け、無線(BLE)でPCに送り、ブラウザアプリで処理をしている。
リモコン受信モジュールは、秋月電子で購入したOSRB38C9AAである。出力端子をSTM32マイコンで読み取り、結果をSPIを使ってESP32マイコンへ送信。ESP32マイコンは、PCとのBLE通信用に使用している。
赤外線の送信側のデバイスにもESP32マイコンを使用している。こちらは特にPCと通信を行うわけではないが、赤外線LEDを38kHzでPWM点灯させるのがとても容易だったことが選択の理由である。
赤外線LEDの点灯制御
リモコン受信モジュールで検出させるために、赤外線LEDは38kHzで発光させる必要がある。PWMでの点灯とし、今回はデューティー比として、発光期間を25%としている。
赤外線LEDを38kHzで点滅させ続けていると、想定どおりに最初はリモコン受信モジュールの出力がONになるのだが、すぐに出力がOFFに変化してしまうことがわかった。どうやら直流カットのフィルタか何かが効いてしまうようである。
通常のリモコンでは、赤外線の照射をOFFにする期間を十分にあるため、問題がないものと考えられる。しかし今回の使い方で同じようにOFFの期間を長くとってしまうと、その間は動きを検出できないことになってしまい、応答性に問題が出る。この辺りを考慮して「38kHzで400usの期間点滅させ、その後9msの期間は完全に消灯する」という動作を繰り返す形にすることで、出力がほぼ安定するようになった。
実際にはこれでもまだ、時間経過により出力がOFFになってしまうことがあるため、さらに細かい検証をする予定である。
テスト結果
テストアプリ上で、毎秒100サンプル以上のレートでデータが送られていることが確認できた。遮断がなければ1、手でデバイス間を遮断すると0が送られるようになっている。
画像下部の白点がデータを並べたもので、途中で手を横切らせたことで0に変化している部分がある。このとき、かなり速く手を動かしてデバイス間を横切らせてみたのだが、遮断を検出することができていることがわかる。