第21回 タッチセンサ(2) 〜タッチ検知の仕組み〜

前回はコンデンサの原理について説明しました。今回はその原理をどのように利用すればタッチを検知できるか説明します。

目次

復習

タッチ検知の仕組みの説明の前に、前回の説明を簡単に復習しておきましょう。

コンデンサは2枚の金属板を向かい合わせにした構造の部品ですが、金属板1枚でも電荷を貯めることができることがわかりました。また、その金属に人が近づくと静電容量が大きくなることがわかりました。

タッチセンサは、金属と人の距離が変わると静電容量が変化することを検知して、タッチを検知する、というところまで説明しました。

それでは、静電容量の変化をどのように検知するか、その仕組みを説明します。

PICマイコンのタッチ検知方法

PICマイコンでタッチセンサを実装する場合、どこかのピンに何らかの金属を接続します。以下の画像は、PIC12F1822の7番ピンにジャパワイヤを接続し、ジャンパワイヤの先にアルミホイルをつけたものです。このアルミホイルと人の距離が変化すると、静電容量が変化します。

Pic app 21 capacitor sample

金属と人の距離が遠いと静電容量は小さくなります。つまり、金属板に貯めることの電荷量は少なくなります。金属部分に貯めることのできる電荷の様子をバケツでイメージするとこんな感じです。

Pic app 21 far

これに対し、金属と人の距離が近くなると、金属板に貯めることの電荷量は多くなります。バケツでイメージするとこんな感じです。

Pic app 21 near

PICマイコンのタッチ検知方法は、「一定時間内に、電荷をこのバケツに何回満杯にできるか」という計測をして、この計測結果の数値を元にタッチを検知します。バケツを電荷で満杯にして、満杯にした電荷を全部捨てて、また電荷を満杯にしては、電荷を全部捨てて、ということを繰り返します。一定時間内にこれを何回できるか数えるわけです。

具体的には、例えば10ms(ミリ秒)の間に、このバケツを何回満杯にできるか、という計測を行います。人が離れている状態ではバケツの容量は小さいため、10msの間に満杯にできる回数は多くなります。ところが、人が近づくとバケツの容量は大きくなりますので、10msの間に満杯にできる回数は少なくなります。

PICマイコンでタッチ検知する場合、一定時間内にバケツを何回満杯にできるか、という計測を続け、満杯にできる回数が一定回数以下になったら人(の指が)近づいた、と判定して、「タッチされた」と判定します。

PICマイコンのタッチ検知例

それでは、実際にどのぐらい数値が変わるか確認してみたいと思います。

先ほどの画像の回路で、100msの時間内に何回バケツを満杯にできるか、計測してみたいと思います。ただ、画像の回路のままですと計測結果を見ることができません。そこで、計測結果がわかるように液晶モジュールを接続して、100ms時間内に何回満杯にできたか、リアルタイムで表示するようにしました。(液晶モジュールの接続・表示方法は応用編の範囲を超えますので、詳細説明は省略いたします。このシリーズの実践編でご紹介する予定です)

まず、以下は電源投入後の定常状態です。数値は11250ぐらいです。なお、この数値は環境(ブレッドボードの回路実装、実験場所、気温、湿度)により異なります。

Pic app 21 sensor value 1

次に、アルミホイルに指を近づけると静電容量は大きくなりますので、満杯にできる回数は少なくなります。

Pic app 21 sensor value 2

さらに金属に触れると静電容量はさらに大きくなりますので、満杯にできる回数はさらに少なくなります。

Pic app 21 sensor value 3

この数値変化をみて人がタッチしたかどうかを判定するわけです。

なお、実際に作品を作る場合はアルミホイルが出ていると見栄えが悪いので、プラスチックケースの裏などにこのアルミホイルのスイッチを貼って、その部分をスイッチにすると見栄えがよくなると思います。

例えばプラスチックケースの裏側にこのようにタッチスイッチ部分を貼り付けて、

Pic app 21 cover switch

動作させると、定常状態ではこのぐらいの値になりました。

Pic app 21 cover switch untouched

この状態でスイッチのあたりに指を触れると、

Pic app 21 cover switch touched

静電容量は増えますので、センサ値はこのように小さくなります。このようにすると、物理的なスイッチは必要なくなりますので、作品のデザインの自由度も上がりそうですよね。

スイッチは金属の「板」?

今までの説明で「1枚の金属の板あるいは薄膜は静電容量を持ちます」と説明してきましたが、もう少し補足説明をしておきます。

金属の板あるいは薄膜を以下のような感じでどんどん幅を狭くしていきます。

Pic app 20 wire capacitance

このように金属の幅を狭くしていくと、静電容量は小さくなっていきますが、それでも静電容量はあります。一番右の状態、つまり金属板の幅がとても狭い状態って、これってほとんど金属の電線ですよね。

ということで、実はジャンパワイヤなどの電線も静電容量を持ちます。

以下は、PIC12F1822の7番ピンにジャンパワイヤのみ接続して、定常状態の時の画像です。

Pic app 21 wire sensor

この状態で、ジャンパワイヤのどこかに指を触れると、

Pic app 21 wire sensor touched

静電容量が増えるので、センサ値は小さくなります。

これまでの動作を動画にしてみましたので、興味があればみてみてください。

スマホ画面のタッチ検知

以上がPICマイコンのタッチセンサの仕組みですが、スマホはタッチの検知だけでなく、画面のどの位置でタッチしたかを判定していますよね。スマホはどのようにして画面のタッチ位置を検知しているのでしょうか。

スマホの画面では静電容量を持つ線を以下のように網目状に配置しています(縦の線と横の線は接触しないようにタッチパネルに埋め込みます)。

Pic app 21 touch panel

この状態で、A〜Gの線、1〜9の線の静電容量を調べると、ある値で定常状態となっています。スマホなどのタッチパネルでは、1秒間に何回も縦の線と横の線の静電容量を調べます。

ここで、例えばユーザがピンクの丸印のところに指でタッチしたとします。

Pic app 21 touch panel sensing

すると、先ほどのジャンパワイヤに触れた時に静電容量が大きくなったように、DとEの線と、7の線の静電容量が大きくなります。この結果から、スマホは横の位置はDとEの間、縦の位置は7の場所でタッチされたと判定して、タッチの応じた処理を行います。

なお、スマホなどのタッチパネルは多くの線の静電容量を調べるため、先ほどのように一定時間内に何回満杯にできるかを計測するのではなく、どのぐらいの時間で満杯になるかを計測するなど、高速で静電容量を計測するようになっています。

次回からPICマイコンのタッチセンサプログラムを作っていきます。

更新履歴

日付 内容
2017.10.29 新規投稿
通知の設定
通知タイミング
guest
0 コメント
本文中にフィードバック
全てのコメントを見る
タッチ検討中
タッチ検討中
4 年 前

分かりやすい解説ありがとうございます。
1点教えていただきたいです。
仕事でタッチスイッチの新規検討をしているのですが、
樹脂板の表面に不連続な金属膜があり、裏面にタッチ電極を配置した構造で、
表面に指でタッチした場合、静電容量(自己容量)によるタッチ検出は可能でしょうか?
・不連続さ:~100nm程度の微小サイズにひび割れているイメージ
不連続であってもタッチ電極との間に静電容量が発生し、タッチ検出に影響が出そうな気がしています。
ひび割れのすき間から指とタッチ電極の静電容量が形成され検出がかろうじてできるかも。。。
というのが現在の想像です。
ご意見、ご存知のところがあればご教示いただけますと幸いです。

管理者
管理者
返信  タッチ検討中
4 年 前

ご質問どうもありがとうございます。

樹脂板の表面に不連続な金属膜、というのはデザインの関係でそのようになっているのかと思いますが、そのようなケースはどうなるか、というのはなかなか難しいですね…

記事でも説明しましたが、タッチセンサの原理は、金属の検知部分と指先の間の静電容量の変化を検知しています。

例えば、金属検知部分と指先の間にプラスチックなどの樹脂がある場合、プラスチックの電荷は動きにくいため、指先と樹脂間、樹脂と金属検知部分に静電誘導が働き検知できるようになっています。

この樹脂に金属膜がある場合ですが、不連続な金属膜ということで、その金属膜が小さい面積で独立していれば、タッチ検知はできるのではないかと予想しています。ただ、その金属膜が独立おらず繋がっている場合は、電子が動いてしまいますので、検知は難しくなるのではないかと思っています。

すみません、こちらで検証できる環境がありませんので、予想になってしまいますが、このように予想しています。

なおPICマイコンでタッチ検知をする場合、このシリーズでご紹介しました機能は最近のPICマイコンのモデルではほとんど搭載されていません。Microchip社は、ADコンバータを利用してタッチ機能を実装するように推奨しています。ADコンバータを利用したタッチ機能の実装はゼロから行うと大変ですが、Microchip Code Generatorでパラメータを設定するとソースコードを自動生成してくれる機能があり、それを利用することを推奨しています。

またAVRマイコンであれば、ライブラリがリリースされていると思います。さらに他のマイコン、H8やARMマイコンを使用されるのであれば、PICマイコンのADコンパータを利用したタッチ検知が参考になりますので、移植できるのではないかと思っています。

ご質問の回答になっておらずすみません。

目次