目次
タッチセンサでArduinoを動かしてみよう
Arduinoの外部入力にはスイッチやセンサーなど、電子部品を接続して使うのが一般的です。しかし、中にはタッチセンサのような電子部品を使うことなく、配線とプログラムでタッチセンシングを実現できる、静電容量方式と呼ばれる機能でスイッチのような動きを実現することができます。
今回は、Arduinoで静電容量を使ったタッチセンサを実装する方法について解説します
抵抗1本と配線だけでタッチセンサになる
静電容量方式とは、コンデンサ容量の静電容量を測定する方式です。詳しい原理や動作はここでは省きますが、接続された容量のコンデンサの容量を測定する方式として広く使われています。
静電容量の測定とタッチセンサにどんな関係が?と思ってしまいますが、静電容量とタッチセンサは切っても切り離せない関係があります。電気的に考えてみると、人体も抵抗成分や容量成分を持っています。つまり、人体もコンデンサととらえて容量を測定すれば容量の違いによって触れたことを検出できるようになります。
静電容量を測定する原理は以下の回路のようになります。出力と測定端子の間に抵抗を付けて、出力端子から0Vと5Vの電圧を切り替えながら出力すると、測定端子には同じ全くタイミングで0Vと5Vが入力されます。そこに、容量を持つ人体が測定端子に触れると、測定端子とグラウンド間に容量が追加され、測定端子に現れる0Vと5Vの波形は少し遅れてしまいます。この遅れを測定して検出することで、タッチされたことを検知できるようになります。
静電容量ライブラリをArduino IDEにインストール
早速、Arduinoで静電容量を測定するスケッチを試してみましょう。原理自体は簡単なので自分で書くのも良いんですが、Arduinoには静電容量を測定するライブラリが公開されているので、それを活用してスケッチを作ってみます。
Arduinoの静電容量センサライブラリは下記のURLからダウンロードできます
ライブラリをダウンロードしたら、ZIP形式のままArduino IDEにインストールします。
タッチセンサでLEDの点滅を制御してみる
回路はデジタル2pinと4pinの間に1Mの抵抗を挿入して、2pinにセンサ用の裸端子を出せばOKです。これだけで下のスケッチを書きこんで、2pinの裸端子を素手で触るだけでArduinoに実装された13pinのチップLEDが反応します。
#include <CapacitiveSensor.h>
CapacitiveSensor cs_4_2 = CapacitiveSensor(4,2); // 10M resistor between pins 4 & 2, pin 2 is sensor pin, add a wire and or foil if desired
void setup()
{
cs_4_2.set_CS_AutocaL_Millis(0xFFFFFFFF); // turn off autocalibrate on channel 1 - just as an example
Serial.begin(9600);
pinMode(13, OUTPUT);
}
void loop()
{
long start = millis();
long total1 = cs_4_2.capacitiveSensor(30);
Serial.print(millis() - start); // check on performance in milliseconds
Serial.print("\t"); // tab character for debug windown spacing
Serial.print(total1); // print sensor output 1
Serial.println("\t");
if(total1>=800){
digitalWrite(13, HIGH);
}
else{
digitalWrite(13, LOW);
}
delay(10); // arbitrary delay to limit data to serial port
}
むき出しの配線のままだといまいちタッチセンサっぽくないので、適当な金属製品に触れさせてそれ経由でタッチしてもタッチセンサとして動作します。
感度も良好で、タッチした時だけ13LEDが点灯していることがわかります。しきい値を調節すればし難いようにもできます。