読者です 読者をやめる 読者になる 読者になる

マルチタッチパネルの製作(その1:MPR121を使う)

「あの楽器」のマルチタッチ化に向けて少し工作を開始しました。

タッチパネルのプロトタイプを作成する

「あの楽器」で使うには、タッチパネルの下に液晶なりLEDマトリックスなりの表示装置がいるので、電極として銅箔テープなどは使えず、細い銅線か透明電極が必要になります。

アクリル板を加工して、細い銅線をX軸・Y軸に並行に並べるという設計で、とりあえず作っていきます。

アクリル板の端に穴を空けていき、タップでネジ穴を切ります。

こんな感じになりました。

MPR121を使ってみる

まずはスイッチサイエンスさんで取り扱いのあるMPR121搭載の静電タッチセンサーモジュールArduinoを使って実験してみました。

Arduinoソースコードは以下のページのコードをそのまま使いました。 http://bildr.org/2011/05/mpr121_arduino/

データシートと比べながらソースコードを読んでみると、mpr121.h内の以下の定数を変更することで感度を調整できるようです。

#define TOU_THRESH   0x06
#define REL_THRESH   0x0A

TOU_THRESHがタッチと判定するときのしきい値で、REL_THRESHが離したと判定するときのしきい値です。

これらの数値を小さくすると感度が上がり、反応しやすくなります。 ただちょっとのことで反応してしまうので、そこは調整して適当な数値に決めます。

TOU_THRESHを0x02まで下げるとセンサーピンに直接触れなくても、ソケットの黒い部分に指を当てるだけで反応するようになりました。

データシートを見ると、

Typically the touch threshold is a little bigger than the release threshold to touch debounce and hysteresis.

と書いてあるので、TOU_THRESHREL_THRESHよりも少しだけ大きな値にするといいみたいです。 となると、上のサンプルコードと矛盾しているのですが・・・"a little"なので、そこまで大きな影響はなさそうです。

他の設定項目を調べていると、上記のサンプルコードでは変更されていないですが、Debounce Register (0x5B)というものがあり、これは指定した回数反応したときだけタッチ・リリースとしてみなすという設定項目のようです。 ここの回数を増やすと誤反応は減りそうです。

あとはADDRピンがデフォルトでGNDに接続されていますが、ここをVCC、SDA、SCLにつなぎ替えることで、I2Cのアドレスを変更することができるようです。

このMPR121は、専用ICだけあって誤反応が少なく扱いやすいのですが、指が接触しない場合はしきい値をだいぶ下げてやらないとあまり反応しないようです。

しきい値を0x02まで下げても1mmくらいの厚みまでしか反応しない感じです(電極が大きさと間に挟まる空気の厚みが変わればもう少し反応する厚みは大きくなるのかも)。 どちらにせよ、細い銅線ではちょっと間隔が空きすぎて難しそうです。

電極について

透明電極なんて手に入らないよなーと思っていたら、なんとデジットで取り扱いがありました。(デジットBlog:いろんな可能性を秘めている!?透明導電フィルムが入荷!)

ブログを見る感じではアルコールで導電膜をはがせるようなので、MPR121のデータシートにあるような千鳥模様の電極配置もがんばれば作れるのかなーと思っていますが、手作業でそういう模様を作るのは難しそうなので、どうしたものかなーと考え中です・・・。

静電容量タッチパネルの設計についてしらべていると、 Microchip 堅牢なタッチセンシングの設計手法というPDFを見つけました。 通常のスイッチとのノイズの違いや、カバーの厚みや材質・接着剤の種類など細かく書いてあり、非常に参考になります。

  • 誘電率の高いガラスのほうがアクリル板よりもカバーには向いている。
  • 15mm*15mmのセンサーではカバーの厚み3mm以下にしたほうがいい。
  • カバーと電極の間に空気をできるだけ挟まない。 ことが重要そうです。

まとめ

MPR121を使ってX軸Y軸の座標をとるには、さらに工夫が必要そうです。

特に電極の工夫は結構必要そうです。

関連エントリ


GROVE - I2C タッチセンサ

GROVE - I2C タッチセンサ

Arduinoをはじめようキット

Arduinoをはじめようキット