トップ手作りの福祉機器>超音波動き検出スイッチ

超音波動き検出スイッチ

超音波を使った、指の僅かな動きを検出するスイッチを試作しました。

以前、小指だけが少し動かせる筋ジストロフィーの患者さんの支援ツールとして、動きを検出し働くスイッチを試作したことがあり、その内容については、このサイトの「動き検出スイッチ」に書きました。そのときは、黒鉛(鉛筆の芯の粉)と銅線の間の抵抗の変化を利用し、指の動きを抵抗の変化として検出するようにしました。しかし、動作が不確実で、また、時間とともに感度が変化するため、なんとかしなければ、と思っていました。

今回、超音波スピーカと超音波マイクを使い指の動きを検出する装置を作ってみました。スピーカとマイクの間の距離が変わると音が伝わる時間に変化が生じますので、それを検知する、というものです。0.2秒間に2mm程度の動きがあると検知できるようにパラメータを設定してあります。おそらく、実用になるのではないかと期待していますが、これから実際に使用して評価して頂くつもりです。

装置の概要と使い方

この装置は、超音波スピーカと、超音波センサと、音の到達時間の変化を検出するためのPIC(マイクロコントローラ IC)とで構成されています。PICはラッチアンドタイマの機能も含んでいます。下の写真のようなプラスチックケースに実装してあります。

ケースの右側に付いているボリュームは、ラッチアンドタイマの時間設定に使います。ケースの中には、PICと、超音波信号を増幅するOPアンプ、電池などが入っています。出力にはミニプラグを用いており、ラッチアンドタイマ出力と同じ条件で使えるようにしてあります。

超音波動き検出スイッチ

写真の左側にある二つの黒い筒が超音波スピーカと超音波センサです。実は二つとも同じもので、サイズは直径約1cm、長さは1cm弱です。これらを、それぞれ動く指に装着します。下の写真は、小指と薬指に実際に装着した例です。スピーカとセンサはほぼ向かい合いようにします。だいたいの向きが合っていればOKです。写真では、手芸用のワンタッチテープ(マジックテープ?)を使っています。指輪のようなもの、指貫あるいは薄手の手袋などにワンタッチテープを付けて使うとよさそうです。

超音波センサの装着

別の使い方としては、更に下の写真のように、反射音を使うこともできます(反射を使うと感度が高まり、動きが検出しやすくなります)。小指が動く場合の例です。スピーカとセンサを2cmほどの間隔で並行に(少し角度をつけて)並べてシート(板)に固定し、そこから数cm離れたところに小指を置いてスイッチを働かすことができます。写真では、両面テープで留めています。又、指が伸びない場合には、別の方法もありそうです。

超音波センサの装着

なお、ケースの右側のボリュームは、スイッチ付きで、電源のスイッチも兼ねています。ラッチアンドタイマの時間設定用として、0.1秒から60秒まで設定できます。ケースの左側のスイッチは、検出感度調整用になっており、高感度と低感度に設定できます。高感度の場合は、2mm程度の動きで検出できますが、手に震えがある場合を考慮して低感度も用意してあります。また、ケース内に、電池残量のチェックのためのボタンがあります。ボタンを押すと電池があればLEDが光るようになっています。

しばらくの間、電池をONにして放置してみましたが、室内での雑音による誤動作と思しき現象は起きていないようです。40KHzという非常に高い帯域の音を使っていますので、その辺りの周波数では余り室内雑音がないのかもしれません。しかし、実際には、ガラスが割れた音、硬い金属がぶつかったときの音などにかなりの高周波成分があると思いますので、実際の環境で使ってみる必要があります。

実用性

このスイッチを、実際に患者さんに使ってもらったところ、ほぼ確実に動いた、ということでした。

上に書きましたように、このスイッチは直接音/反射音のいずれを使うこともできます。今回は、小指の筋肉のピクッとする動きを検出するように、音を反射させる形で使ったそうです。そして、このスイッチの出力をマウスに接続し(マウスを改造し、スイッチの出力がマウスの左クリックとして働くようにしてあります)、PCの画面の操作に使ったそうです。スイッチが確実に動いたといういことは、つまり、本人の意思で思うとおりに画面を次々と進めることができた、ということで、患者さん本人も満足してくれたそうです。

なお、スイッチの設定としては、感度は高い方に設定し、ラッチアンドタイマのインターバルはマウスのクリックと同程度の0.1秒とのことでした。

回路

今回使った主な部品は、

です。電池2本(3V)で動作します。スピーカとセンサーの間の距離は0〜十数cmです。

PICとは、マイクロチップ社のワンチップマイクロコントローラです。大変沢山の種類のICがあります。今回使ったのは、PIC12F675という、8ピンの非常に小さなパッケージにADコンバータまで組み込まれているマイコンです。PICについては、このサイトの「PICの使い方」に書いてありますので参考にして下さい。

この装置は、PICで40KHzの矩形パルスを発生し超音波スピーカに出力し、そして、超音波センサからの信号をPICに入力し受信パターンの変化を検出します。PICにはラッチアンドタイマ機能も持たせています。タイマー機能のために時間の長さを入力する必要がありますので、ADコンバータを使っています。

検出結果は、ラッチアンドタイマと同様、無極性スイッチにするため、フォトMOSFETを介して外部に出力しています。

電源が3Vですので、PICは内部クロックで動かすことしかできません。従って、クロックは4MHz、サイクルタイム(殆どの演算は1サイクルタイムで実行される)は1μ秒ということになります。

超音波スピーカとしてのAT40は、PICで直接駆動しています。なお、PIC出力端子を2本使い、逆相で超音波スピーカを駆動しているため、電源電圧の倍近い出力電圧となっています。

超音波センサ出力は、デュアルのオペアンプで受け60dB程度増幅してからPICに入力しています。

1mm程度の指の動きを検出することを目標性能としましたので、音の伝播時間にして2〜3μ秒程度の分解能が必要になります。これは、3Vで動くPICでは2〜3命令実行する時間に当たります。つまり、2〜3命令で一データを入力し処理することになりますので、まともなパターン判定はほぼ不可能です。今回の試作で構想に費やした時間の大部分はここでした。結果としては、40KHzのパルスを出しながら、2μ秒(2サイクル)で、センサからの信号を入力し、パターン判定をすることに成功しました。とはいえ、電源電圧を上げてクロック周波数を上げればプログラミングは随分と楽になるわけで、今回は、ただ単に「電池2本」にこだわったというだけのお話です。

検出アルゴリズム

先ず、40KHzの超音波を出し、20周期、つまり、0.5msec経ったところで、受信波の入力を開始しています。従って、スピーカとセンサの間隔は十数cm程度まで広げることできることになりますが、電圧3VのPICでスピーカを駆動していますので、それ程距離は延ばせません。距離を広げる場合には回路を少し変更する必要があります。実際には、高々数cmの間隔で使うことになりそうなので、当面はこれでよかろうと判断しています。

受信波入力は2μ秒毎に行いますので、理屈の上では1mm程度の動きまで検出できることになります。動きの判定のための時間は20周期(約0.5msec)としてあります。

判定処理の内容としては、出力パルスと入力信号のEXORを演算し数を数え、その数に変化があったか否かで動きを判定することと等価な処理になっています。実は、この方法には若干問題がありますが、この装置の目的が、微小な動きの検出ですし、カウント数の差だけに注目すればよいので、問題点には目をつぶっています。たぶん支障ないでしょう。何が問題なのかを知りたい方は、私のブログ「作って試して」の記事、「超音波を用いた動き検出スイッチのアルゴリズム」を参照して下さい。

データ入力の数(カウント数)が全部で200回余りとなりますので、ノイズの影響もかなりキャンセルできる計算になります。しばらく動かしてみましたが、ノイズによる誤動作は殆どみられませんでした。実際、オシロスコープで受信波を見ても、数cmの間隔の場合には受信波のSN比が20dB以上はあるようですので、それに基づき誤動作の殆ど生じないパラメータにセットしてあります。