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

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

目次

タッチセンサーの原理(復習)

PICマイコンのタッチ検知方法の説明の前に、タッチセンサーの原理を簡単に復習しておきましょう。

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

また、その金属に人が近づくと静電容量が大きくなることがわかりました。

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

今回の記事では、PICマイコンが静電容量の変化をどのように検知するか、その仕組みを説明します。

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

PICマイコンでタッチセンサを実装する場合、どこかのピンに何らかの金属を接続します。

次の画像は、PIC12F1822の7番ピンにジャパワイヤを接続し、ジャンパワイヤの先にアルミホイルをつけたものです。

このアルミホイルと人の距離が変化すると、静電容量が変化します。

Pic app 21 capacitor sample

金属と人の距離が遠いと静電容量は小さくなります

つまり、金属板に貯めることの電荷量は少なくなります

この「金属部分に貯めることのできる電荷」の様子を「バケツ」でイメージするとこんな感じです。

Pic app 21 far

金属と人の距離が遠い場合、金属に貯めることができる電荷量は少ないので、バケツのサイズは小さめ、というイメージです。


次に、金属と人の距離が近くなると、金属板に貯めることの電荷量は多くなります。

バケツでイメージするとこんな感じです。

Pic app 21 near

金属と人の距離が近い場合は、金属に貯めることができる電荷量が多くなるので、バケツのサイズは大きめ、というイメージです。

ここまで理解できたところで、PICマイコンがどのようにタッチ検知しているか確認していきましょう。


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

バケツを電荷で満杯にして、満杯にした電荷を全部捨てて、また電荷を満杯にして、電荷を全部捨てて、ということを繰り返します。

この繰り返しを一定時間内に何回できるか数えるわけです。

具体的には、例えば10msの間に、このバケツを何回満杯にできるか、という計測を行います。

人が離れている状態ではバケツの容量は小さいため、100msの間に満杯にできる回数は多くなります。(小さいバケツの場合、すぐにいっぱいになるので、100msの間、満杯にして空にする、という繰り返し回数か多くなります)

ところが、人が近づくとバケツの容量は大きくなりますので、100msの間に満杯にできる回数は少なくなります。(大きいバケツは満杯にするまでの時間が長くなるので、100msの間で満杯にして空にする、という繰り返し回数は小さくなります)


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

プラスチックを挟んでも問題なく動作しますので、このタッチセンサーを使う場合は次の画像のように使います。

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

Pic app 21 cover switch untouched

この状態でスイッチのあたりに指を触れると、静電容量は増えますので、センサ値はこのように小さくなります。(8430ぐらい)

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

スマホなどのタッチパネルでは、1秒間に何回も縦の線と横の線の静電容量を調べます

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

Pic app 21 touch panel sensing

すると、先ほどのジャンパワイヤに触れた時に静電容量が大きくなったように、DとEの線と、7の線の静電容量が大きくなります。

この結果から、スマホは横の位置はDとEの間、縦の位置は7の場所でタッチされたと判定して、タッチの応じた処理を行います。

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

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

更新履歴

日付内容
2017.10.29新規投稿
2025.5.27説明補足
通知の設定
通知タイミング
guest
6 コメント
新しい準
古い順 一番投票が多い
本文中にフィードバック
全てのコメントを見る
しょう
しょう
2 月 前

いつもわかりやすい解説をありがとうございます。一点質問させてください。

指を近づけるとアルミと指の間でコンデンサが生成され、静電容量が大きくなる事はわかるのですが、指で金属に触れると、静電容量が大きくなる仕組みを教えていただきたいです。

アルミに溜まった電荷が指に流れ、アルミと指のコンデンサではなく、アルミと指がひとつになり、一枚の電極のようになり、単純に電極の面積が大きくなることで静電容量が大きくなるということでしょうか。
その場合、指が触れると電荷が指側に流れてしまうので、電荷を満杯にできないと思ったのですが、液晶には9700回程電荷を満杯にできたと表示がされており、分かりませんでした。

よろしくお願いいたします。

しょう
しょう
返信  管理者
2 月 前

返信ありがとうございます!
これからも愛読させていただきます!

タッチ検討中
タッチ検討中
6 年 前

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

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

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

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

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

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

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

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

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

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

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

目次