汎用マイコンで作るタッチ・センサの実験です。単にタッチ・センサといっても、その実現方法には抵抗膜式、赤外線式、SAW式、静電式、その他いろいろあります。今回は電極と対象物の間に発生する静電容量を検出する静電式で実験してみます。静電式タッチ・センサはポータブルPCのポインティング・デバイスとして、すっかりお馴染みとなっていますね。
静電式では、右の図に示すように指などの導電体の近接によって生じる静電容量の変化を検出します。その静電容量の検出にもいくつかの方法があり、積分式とチャージ-トランスファ(C-T)方式の二つがよく使われます。後者についてはこちらで解説・実験しています。今回はデジタル容量計で使用した積分式を応用してみました。静電容量の変化量Cxは1~10pF程度と僅かですが、容量計は20fF程度のカウント分解能だったので、この方法で十分に検出が可能です。
この回路構成では人体がアースされていないとCxの回路が形成されないはずですが、次のような理由から実際には良好に動作します。人体のようにある程度の表面積のある導電体はそれ単体で静電容量を持っています(球状・無限遠基準の場合、C = 4π・ε0・r)。実際の値はESD試験の人体モデルから100pF程度と見られ、これはCxに比べて十分に大きいといえます。したがって、人体はアースされていなくても接地体と見なすことができるのです。もちろん、機器側にもアースか同様な静電容量が要求されます。実際は多くの浮遊容量が存在し、アースまたは人体と結合しています。小さなポータブル機器では単体の静電容量やアースとの結合はあまり期待できませんが、手に持って操作されるので人体に強く結合し、やはりCxの回路が形成されます。
検出電極は、10mm角の銅箔を生基板の部品面(半田面はベタ・グランド)に貼り、その上を絶縁テープで保護しただけの単純な構造となっています。マイコンはATtiny2313で、プルアップ抵抗は1MΩとしました。定常状態での積分時間は、プルアップ抵抗と浮遊容量で決まる一定の時間になります。検出電極に触れるとそれだけ積分時間が増加するので、この変化分を検出してやればよいことになります。実際の積分時間は数μs~数十μs程度となります。
まず、最初にキャリブレーション(各チャネルの浮遊容量の取得・記憶)を行います。その後、周期的にスキャンして、増加分があるスレッショルドを超えたら検出と見なします。スレッショルドには適当にヒステリシスを設けておかないと出力がばたつきます。各チャネルの検出動作に要する時間は積分時間そのものであるため、高速に計測できます。
容量計ではアナログ・コンパレータ+入力キャプチャ機能を使って1クロック(100ns)単位の分解能で測定していましたが、この機能は全てのポートにあるわけではありません。したがって、タッチ・センサを任意のポートで行うにはソフトウェア・ポーリングする必要があり、分解能は3クロック(375ns)と悪化します。リニア動作などもっと高分解能に取得したい場合は、プルアップ抵抗を高めにしてやると積分時間が延びてより高分解能に取れるようになります。
実験の結果、AVRのような汎用マイコンでも手軽にタッチ・センサが実現できることが確認できました。オーバーレイの厚さは1mm程度(誘電率によって可能な厚さは異なる)までなら安定に動作しました。任意のポートが使えるので、たとえばATtiny2313をタッチ・センサに専念させた場合、15チャネル程度の制御が可能になります。遊んでいるポートがあるなら、それをタッチ・センサにすれば操作スイッチ類を置き換えることもできるでしょう。
今回は単なる実験レベルで、あらゆる環境での動作まではテストしていません。誘導ノイズや水場などの悪条件下では、何らかの誤動作防止処理が必要になるかも知れません。
