Arduino UNO R4 静電容量式タッチセンシングユニット(CTSU) - 感圧センシング編
番外編というか、ちょっとしたお遊びネタですが、感圧センサになり得るか試してみました。タッチパッドを押す強さに応じてサーボモーターを 0°〜 180°まで駆動しています。
これでゲームでも作れれば良いのですが…。悲しいかな、その能力もセンスもありません
さて、コレの肝心なところは、「非タッチ〜タッチ時におけるセンサ出力のダイナミックレンジを如何に上げるか」になります。例えばセンサ出力が 0 〜 100 しかなくて、ちょっと押すと「ビュンッ」と変わるより、0 〜 1000 まであった方が、微妙な操作が可能になりますよネ。
次の図は、試作したタッチパッドの構造です。タッチしたプラ板がたわみ銅板に突き当たるまでの 0.2mm にどれだけのダイナミックレンジを詰め込めるかがポイントというワケです。
センシング感度とダイナミックレンジ
実は前回の「キャリブレーション編」 で報告したオフセットチューニングのアルゴリズムをチョットだけ改良し、センシングの感度を約2倍に引き上げることに成功しました。詳細は面倒なので省きますが(オィ)、これにより湿度の変化や汚れの付着などによる寄生容量ドリフトにも強くなります。
次のグラフは、改良前後のセンサ出力です。改良前のタッチ時出力は、非タッチ時のベースラインからプラス 2000 〜 2500 程度ですが、改良後は 4000 〜 5000 にまでダイナミックレンジが向上しています。
センシング感度とセンサ駆動パルス周波数
ルネサスの資料 によれば、CTSU のセンシング感度には、以下の特性があるとのことです。
- タッチ電極に加えるセンサ駆動パルスの周波数が高いほど、センシング感度が向上する
- ただし、寄生容量が大きい場合は、誤差も大きくなる
これをキャリブレーションの課題に置き直せば、「一番美味しいセンサ駆動パルスの周波数を求める」ことになります。R4_Touch の作者である Delta-G 氏 は、この周波数を数値解析によって予測して見せてくれました。
次のグラフは、Minima の Love ピンにおける ICO 特性の計測結果です。横軸が「センサ駆動パルス周波数」に相当する分周比(2 〜 64)を、縦軸は「タッチ時と非タッチ時の差」を示し、青い四角 ■ が計測結果、赤い四角 ◆ がその一次微分です。
氏によれば、■ の傾きが急なほどセンシング感度が高く、即ち ◆ がピークとなる分周比6辺りがベストとの予測です。これは Love ピン用に改良したキャリブレーション で算出したパラメータとも一致します(div: 2
は CTSU_CLOCK_DIV_6
、つまり分周比6を表します)。
まとめ
色々と CTSU で遊んできたので、その総まとめをしておきます。
-
R4_Touch
静電容量式タッチセンシングユニットを活用するライブラリです。DTC(データトランスファコントローラ)や ELC(イベントリンクコントローラ)の使い方も勉強になります。 -
Let’s play with the CTSU!
Delta-G 氏 による CTSU に関する議論の場です。僕も何度か参加しました。 -
capacitive_touch
試作タッチパッドのテスト用スケッチです。キャリブレーションのコアもここにあります。 -
capacitive_touch_love_pin
キャリブレーションを Love ピン専用にアレンジしたスケッチです。タッチ電極を外付けしないため、寄生容量が最も小さくなるパターンです。 -
capacitive_touch_servo
冒頭で紹介した、感圧センシングのテスト用スケッチです。工夫次第でゲームパッドが作れると思います。サーボモーター SG90 の制御用に「PWM のデューティ比と回転角度の関係を調べて…」とか思っていたら、Servo クラスライブラリ が既にあり、角度を指定するだけで出来ちゃうなんて、Arduino って何て便利なんでしょう!