経緯

以前、[電子工作]Arduinoを使ったタッチセンサの作り方という記事を書きました。

うちのブログを見つけてくれる人の中でも「arduino タッチセンサー」と検索して来る人が多いようです。1

基本的なしくみは同じですが、結構、いろいろ放電時間やらなんやらを考えて、ディレイさせないといけなかったりで、ちゃんとした電気回路の知識がないと難しいです。

「あ゛ー」と思って、調べてみると、Arduinoのサイトに同じ静電容量方式のライブラリが公開されていたので、それの使い方を紹介します。

回路

回路はこんな感じ。この記事とおなじ、こういう構成。

回路図

ライブラリダウンロード

ライブラリはここからダウンロードできます。

ダウンロードしたzipファイルを解凍すると、librariesディレクトリを開くと

  • CapacitiveSensor
  • CapacitiveSensorDue

という二つのディレクトリがでてくると思います。これがライブラリの本体になります。

これらをArduinoのSketchが入ったフォルダ(たぶん、標準では~/書類/Arduino)の中にあるlibrariesディレクトリにぶちこんでやればひとまず、OKです。

プログラム

//ライブラリを読み込み
#include<CapacitiveSensor.h>

CapacitiveSensor cs = CapacitiveSensor(13, 12); // inputは13番ピン, outputを12番ピン

void setup() {
  // おまじないと思ってよさそうです。
  // キャリブレーションするための時間とかそういうのだと思います。
  cs.set_CS_AutocaL_Millis(0xFFFFFFFF);
  Serial.begin(9600);
}

void loop() {
  // ここの30はノイズをとる強さと考えればいいと思います。
  // 大きくすればノイズはとれますが、遅くなり、
  // 小さくすれば速くなりますが、あまりノイズはとれません。
  long val = cs.capacitiveSensor(30);

  // 値をシリアルに書き出し
  Serial.print("value:tt")
  Serial.println(cs);

  // 放電
  delay(10);
}

これだけで、タッチセンサーになります。

前回のやつにくらべるとかなり楽に作れるようになっています。

仕組み

なんで、これで、反応するのかというと、指も導体で、金属板も導体なので、指と金属板の間でコンデンサが作られます。

回路図2

コンデンサは電気を充電することができて、導体同士(ここでは指と金属板)が近ければ近いほど、充電できる量が大きくなります。

充電量が大きくなると、当然充電が終わるまでかかる時間も長くなります。

この充電時間を計測して、指と金属板が近づいたかどうかを判断するのが静電容量方式のタッチセンサです。身近なところではiPhoneなんかに使われています。

ほかには、圧電方式のタッチセンサーとかもあります。これは圧力がかかった部分を判断させる方式のタッチセンサーです。身近なところではNintendo DSとかはこの方式ですね。

まとめ

これを増やしたければ、

CapacitiveSensor cs2 = CapacitiveSensor(13, 11);

みたいな感じで増やしていけばOKです。

位置をとらないのであれば、タッチセンサーはいとも簡単に作れます。

ただし、一つ注意点はこのライブラリはライセンス的に商用利用はできません。個人や非商用ならOKだったはず。2


  1. ありがとうございます。 
  2. 記憶ではどこかにそう書いてあった気がするんだけど、見つからなかった。。。どなたか、ライセンスに関することが書いてあるところを、見つけたら教えてください。