静電容量タッチと基板を裏から光らせる手法の実験

この記事ははJLCPCBの提供でお送りします。

JLCPCBとは

jlcpcb.jp (↑こちらは日本語版のログインページで、お得なクーポンも配布されています。)

JLCPCBとは、プリント基板製造などで有名な香港の企業です。

日本からでもWebページでポチポチするだけでKiCADなどで作成した基板データの製造を依頼できます。

値段もかなりお手頃で、ホビー電子工作ユーザーの間では広く利用されています。

これは何?

静電容量タッチを使った実験として、以前ESP32の静電容量タッチでフリック入力を実現してみた - inajob's blogを作りました。

今回は、さらに実験を行おうと、新しい基板を作成しました。

仕様

  • 8×8 のパッド (静電容量タッチセンサーが16個必要)
  • それぞれのパッドに対応した8×8のLED
  • マイコンは実装せず、手元の適当なマイコンをつなげて制御する

設計

8×8のパッドはそれぞれのパッドを2つの静電容量タッチの端子を組み合わせることで16個のタッチセンサーで8×8=64個のキー入力を認識できるようにします。

(後で気づきましたが、この方式は複数キー同時押しに対応できません)

単にスイッチとLEDがあるだけの単純な回路図となりました

LEDは基板の裏面に実装し、その光を表面に透過させる方式としました。 基板の裏面にLEDのパッドを配置し、その部分の両面のソルダマスクをなしに指定することで、光を透過しやすくします。

裏面が発行するチップLED部品もあるようですが、我が家の部品庫には一般的なチップLEDしかないので、これを表裏逆向きにはんだ付けする作戦で行きます。

前回の実験では静電容量タッチ部分はソルダマスクを除外しましたが、今回はソルダマスク付きで設計しました。結果的にはこれでも問題なく静電容量タッチが検出できました。

JLCPCBに発注

今回も発注はJLCPCBです。今回の基板は紫色にしてみました。

名刺基板のサイズは10cm×10cm以内なので、非常に安く作ることが出来ます(5枚で$2 + 送料)

jlcpcb.jp (↑こちらは日本語版のログインページで、お得なクーポンも配布されています。)

実装

TTP229モジュールで制御してみる

手元にTTP229という16ポートの静電容量タッチを扱うICを使ったモジュールがあったので、これを流用できないか試してみました。

このモジュールは16個の静電容量タッチパッドがついていますが、すべての端子が引き出されているので、今回製作した基板とも接続することが出来ました。

しかし、Arduino UNOと接続してTTP229モジュールと通信することで、タッチ状態を認識できるかと試行錯誤してみましたが、どうもキャリブレーションが柔軟に行えないようで、うまく今回の基板のタッチを認識できないようでした。

モジュールにもともとついている16個のパッドの認識はうまくできているので、TTP229自体には問題はなく、今回のように利用することが想定外なのか、何か細かいキャリブレーションを行う手法があるのかわからないですが、とにかく今回のケースではうまく動かなかったです。

ここはもしかしたら深堀したら良いやり方が見つかるかもしれませんが、一旦別の方法を試すことにしました。

ESP32の静電容量タッチを利用する

以前の以前ESP32の静電容量タッチでフリック入力を実現してみた - inajob's blogと同じ方法で、ESP32の静電容量タッチの機能を使うことを試してみることにしました。

ただしESP32-WROOMには静電容量タッチで利用できるピンが9個(本当は10個なのですが、開発ボードでは1つ利用できないため)しかないので、8×8のパッドのうちの4×5の領域で動作を確認することにしました。

LEDも上記の4×5の領域にのみ実装し、9個のGPIOで制御することにしました。

TTP229モジュールではうまく認識できませんでしたが、ESP32ではすんなりとタッチを認識できました。

LEDで裏面から照らす部分の実装

通常表面に光る側を向けて実装しますが、今回は表裏をひっくり返して実装します。

うまく実装できるか心配でしたが、ちょっとはんだを多めに盛ることで実装できました。

ここで1つトラブルがありました。

LEDの光が基板を透過するようにソルダマスクに穴をあけたのですが、一部の配線がソルダマスクの穴の部分に存在しており、はんだ付けの際に気を付けないと、意図しない配線がショートしてしまうという実装しづらいものとなっていました。

ソフトウェア実装

さて、静電容量タッチ、LED部分ができれば、後はソフトウェアです。

とりあえず、パッドをタッチしたら、そのパッドに対応するLEDが消えるという簡単な動作確認プログラムを作成してみました。

静電容量タッチセンサーの読み取りを10回行い、タッチが検出し続けることができればタッチとして認識するというようなロジックを組むことで、それっぽく動くものが出来ました。

雑なコードですが、一応掲載しておきます。

ESP32の静電容量タッチの認識と、マトリクス方式でLEDを駆動しているだけです。

gist.github.com

動作の様子

パッドを触るとその部分のLEDが消える様子がわかるかと思います

まとめ

マトリクス方式で静電容量タッチを試すための基板を作成し、TTP229とESP32で制御できるか試してみました。

TTP229ではうまくタッチを認識できずESP32を使うこととなりました。このため8×8すべてのパッドを認識できず一部4×5の領域で動作確認することとなりました。

静電容量タッチをマトリクス方式で利用するこの手法は、キーの数を増やすことはできますが、複数同時押しが認識できないので、注意が必要です。

基板裏面からLEDを照らす方式は、通常のチップLEDを逆向きに実装するという荒業で、期待通り動作することがわかりました。 ソルダマスクの指定をうまくやらないと、配線が露出して、はんだ付けしづらくなるというトラブルについても学ぶことが出来ました。