今まで、あまり説明していなかった機能について説明します。
今回制作した簡易人感センサーの機能は、下記の2点で、この機能の切替を「簡易人感センサー設定アプリ」で行います
- キーボード動作
動きを感知して、キーコードに変換する機能 - シリアル動作
動きを検知して、シリアル経由でPCに通知する
使用にあたっては残念な点もありますので、そのあたりも含めながら説明させていただきます。
■ 簡易人感センサー設定アプリ 機能説明
このアプリケーションの機能としては、主には以下のような機能を用意しています
- キーのコンフィグレーション機能
キーボードとして動作する際のショートカットキー設定です。 - キーボード動作、シリアル動作の切替機能
キーボード動作、シリアル動作の切替を行います。
シリアル動作は、キーの代わりにシリアル経由で検知結果を通知するモードです。
動体を検知してもキーボードとしては動作しません。
リモートデスクトップ接続や、バックグラウンド動作で利用する際に使用します。
シリアル動作時には、用途に応じて以下の補助機能を用意しています。- キーコード変換機能
主にリモートデスクトップ接続用の機能です。
リモートデスクトップ接続時は、キーボードはクライアント側のキーボードに切り替えられ、リモート側のキーボードは動作しません。(ログイン画面となっています)
この対策として、リモート接続時でもキーボードとして動作するように、シリアル経由で受信したコードをキーボードのコードに変換します。 - バックグランド動作機能
キーボードとしては動作せず、検知したときに特定ファイルを実行する機能です。
主には、監視用途用にバックグラウンド動作での使用を前提としています。
デスクトップにログインしていなくても動作可能ですが、キーボード動作は行いませんので、検知すると指定されたプログラムを起動するだけの機能となります。
- キーコード変換機能
〇 設定アプリの動作環境
Windows上のLibre Calcのシートマクロとして動作します。
キーマップの管理などありますので、表計算ソフトを使った方が楽であることからLibre Calcを使用しました。
あと、Excelのラインセンスを持っていないので、ほぼ必然的に使う感じになりました。
今回は、人感センサー1つのキー設定ですが、今後自分で独自のキーボード、マウスを作る際にも、作成したソフトを利用したかったので、表が簡単に組める環境を選択しました。
〇 シート構成
簡易人感センサー設定アプリには、以下のシートを用意しています。
シート名 | 機能 |
KeyMap | ショートカットキーの設定、動作モード設定、シリアルキーボード動作など、機能を提供するシートです。こちらについては、後ほど「KeyMapシート操作」で使用方法等を説明いたします。 |
CodePage101 | 101キーボード使用時に使用可能なキーコードの一覧です。 ※ 現在は、106キーボードと同じキーに限定してあります。 |
CodePage106 | 106キーボード使用時に使用可能なキーコード一覧です。 ※ 現在は、101キーボードと同じキーに限定してあります。 |
Shortcut | Windowsデスクトップで使用するショートカット:「CTRL+ALT+「文字」」の「CTRL+ALT」の組あわせ一覧です。現在は、CTRL、ALT、SHIFTの組み合わせに限定しています。 |
VirtualeyMap | WindowsのVirtualKeyのマップです。 CodePage101、CodePage106と同じキーに限定してあります。 |
〇 使い方
操作で使用するのは、「KeyMap」シートのみとなります。
下記に「KeyMap」シートの設定項目を示します。
No. | 名称 | 機能 |
① | シリアルポート設定 | 簡易人感センサーのシリアルポートNo.を指定します。 |
② | コートページ選択 | 使用するキーボードにより出力されるコードが変わります。 日本語キーボードを使用していれいば106、英語キーボードを使用しているのであれば101を設定します。 ※ 現在は、101、106とも同じコードとして扱えるものだけに限定してあります。 |
③ | キー名称 | 現在は、「人体検知」固定で、変更不可です。 複数のセンサーやキーが搭載された場合のラベルです。 |
④ | 入力タイプ | 「割り当て可能なキー」で説明したタイプの選択を行います。 shortcut:「CTRL+ALT」+「a」のようなショートカットキーを設定します text:「a」「b」のようにキーの組み合わせを設定します key:検知、未検知イベントに合わせて、キーのpress/release制御を行います undefined:これを選択するとセンサーとして機能しません |
⑤ | キー設定 | 入力タイプごとに指定可能なキーを選択します。 キーボード動作時には、設定されたキーが出力されます。 |
⑥ | コンフィグ状況表示 | ⑨ キー設定確認、⑩ 人感センサーコンフィグ実行時に状況表示を行います。 現在は、「人感検知」だけですが、センサーやキーが増えた際にエラー発生個所がわかりにくいので、メッセージとともに、各設定の状況表示を行うようにしています。 o:コンフィグOK x:コンフィグNG |
⑦ | 動作モード設定 | 「人感検知センサー」の動作モードを設定します。 keyboard:キーコードで検知を通知します serial keyboard:シリアル経由で通知された検知情報ををキーボートとして通知します serial action:シリアル経由で検知情報が通知されると指定されたパスを実行します |
⑧ | シリアルポート設定確認 | ①で指定したシリアルポートが人感センサーのポートかどうかを確認します。 |
⑨ | キー設定確認 | ④、⑤で設定された値が正常であることを確認します。 設定変更時に、設定値が不可能な値になったままとなることがあるので、チェック用に設けています。 |
⑩ | 人感センサーのコンフィグ | ④、⑤の設定値を人感センサーに設定します。 設定後は、人感センサー側で不揮発性メモリに記憶していますので、電源を切っても設定を忘れることはありません。 |
⑪ | シリアル動作用サービス | ⑦で動作モードをserial keyboard、serial actionに選択時した場合に使用する機能です。 serial keyboardは、シリアルデータをキーコードに変換します。 リモートデスクトップ接続時に、リモート側キーボードとして動作させる際に使用します。 serial actionは、シリアルデータを受信すると、⑫で指定されたパスを実行します。 「サービス開始」にチェックを入れると、上記変換サービスが開始され、ウインドが最小化されます。終了を押すとこれら変換機能を終了します。 |
⑫ | serial action起動パス | ⑦動作モード設定が、serial actionに設定されている場合に、人感センサーが検知した際に実行するプログラムやパラメータを記述します。通常は、特定箇所に置いたバッチファイル等を指定するようにしておくとよいかと思います。 |
■ 応用例(やりたかったことの確認)
私自身は、以前作成したRICOH Thetaのマウントの人感センサーに使用したいと思い作成しました。
キーボードとして動作することで、既存ソフトの改造が不要かと思い作ってみた感じです。
100%満足とはいかない部分もありますが、概ね目的達成かと思っています。
私は、下記のような感じで設定して使用しました。
① 簡易人感センサーにショートカット:「CTRL+ALT+x」を設定
② 起動させたいアプリと同じディレクトリに以下のようなバッチファイルを作成する
@echo "motion" > %~dp0shoot.cmd # 撮影指示ファイルを作成、撮影ソフトはこのファイルが存在すると静止画撮影する cmd /c start %~dp0monitor.ods # monitor.ods(撮影ソフト)を起動し撮影開始、起動済みの場合複数起動することはない
③ ②に「CTRL+ALT+x」のショートカットの作成を行う
設定方法はその1:Windows 10のショートカットキー登録手順を参照してください
④ ④で作成したショートカットをデスクトップに移動する
⑤ 「簡易人感センサー」をUSBポートに接続する
あとは、動きを検知すると、バッチファイルが起動され、monitor.ods(撮影ソフト)が起動されることを確認しました。撮影動作も特に問題ありませんでした。
自分に反応してしまうのですが、動くとちゃんと撮影してくれます。
同様にリモートデスクトップ環境においても、「serial keyboard」設定で同じことができました。
さらに、「serial action」設定時には、夜間の機材監視(熱源あり)の動作も監視することができました。
ほぼやりたいことは達成できた感じがします。
意外に検知範囲が広く、感度も良さそうなので、うまく使えばもっと遊べそうな気がしました。
■ 簡易人感センサーの弱点
いいことばかりではなくて、しっかりと弱点があります。
主には、シリアル動作にまつわる制限です。
「serial keyboard」「serila action」動作時には、「シリアルサービス」でソフト的に変換をおこないますので、都合上、バックグラウンドでlibre calcが常に動作しています。
日常的にマクロ等を記述したりデバッグ作業を行う方は、さまざまな制約がでるので、使い物にならないと思います。
また、リモートデスクトップやバックグラウンドでの動作は、0.5秒単位にポーリングを行っているだけですので、少し反応が遅いです。
もっと短いタイミングでポーリングしてもよいかもしれませんが、短くするとPC自体のパフォーマンスを落としてしまうことになるので、控えざるを得ないです。
この辺りは、我慢して使うことになるかと思います。
本当は、C/C++等でプログラムを書いてしまえばいいのですが、UIを作ったり、シート管理したりとDIYとしては少々面倒なので、手を抜いたせいですが。
■プログラム、ケース(STL)のダウンロード
参考程度にプログラムとケースのSTEP/STLを添付しています。
もし、使用される方は自己責任で御使用いただければと思います。
あくまで趣味で作っただけですので、評価をきっちりと行ったわけではありません。
不具合もあるかと思いますが、ご理解の上御使用いただければと思います。
必要な部品、組み立て方法については、「HC-SR501版 Windows用 簡易 人感センサー 制作 その2」を御参照いただくようお願いいたします。
〇 ファームウェア
ファームウェアは、Arduino上で作成しています。
ファームウェアソースを展開後、Arduino IDEを使用してArduino Pro Microに書き込んで御使用ください。なお、環境によっては、Keyboardライブラリを別途導入する必要があるかもしませんので、御留意いただければと思います。
〇 簡易人感センサー アプリ
簡易人感センサーアプリはLibre Officeで作成しています。
LibreOfficeのアプリファイルとともにPhython(timercall.py)の導入が必要となります。
timercll.pyは、下記ディレクトリにコピーして御使用ください。
C:\\Users\ユーザー名\AppData\Roaming\LibreOffice\4\user\Scripts\python
(ユーザー名は、ご自身のアカウント名に置き換えてください)
〇 ケース STL
ケースは、STLとともにSTEPを添付しています。
部品は4つしかありませんので、組み立て図は、STEPを参考にしていただけると助かります。