VOLTECHNO(ボルテクノ)

ガジェットとモノづくりのニッチな情報を伝えるメディア

2020年9月3日

Arduinoでタッチセンサ(静電容量ライブラリ)を使う方法、スイッチレスで外部入力

Arduinoでタッチセンサ(静電容量ライブラリ)を使う方法、スイッチレスで外部入力

タッチセンサでArduinoを動かしてみよう

Arduinoの外部入力にはスイッチやセンサーなど、電子部品を接続して使うのが一般的です。しかし、中にはタッチセンサのような電子部品を使うことなく、配線とプログラムでタッチセンシングを実現できる、静電容量方式と呼ばれる機能でスイッチのような動きを実現することができます。

今回は、Arduinoで静電容量を使ったタッチセンサを実装する方法について解説します

抵抗1本と配線だけでタッチセンサになる

静電容量方式とは、コンデンサ容量の静電容量を測定する方式です。詳しい原理や動作はここでは省きますが、接続された容量のコンデンサの容量を測定する方式として広く使われています。

静電容量の測定とタッチセンサにどんな関係が?と思ってしまいますが、静電容量とタッチセンサは切っても切り離せない関係があります。電気的に考えてみると、人体も抵抗成分や容量成分を持っています。つまり、人体もコンデンサととらえて容量を測定すれば容量の違いによって触れたことを検出できるようになります。

静電容量を測定する原理は以下の回路のようになります。出力と測定端子の間に抵抗を付けて、出力端子から0Vと5Vの電圧を切り替えながら出力すると、測定端子には同じ全くタイミングで0Vと5Vが入力されます。そこに、容量を持つ人体が測定端子に触れると、測定端子とグラウンド間に容量が追加され、測定端子に現れる0Vと5Vの波形は少し遅れてしまいます。この遅れを測定して検出することで、タッチされたことを検知できるようになります。

静電容量ライブラリをArduino IDEにインストール

早速、Arduinoで静電容量を測定するスケッチを試してみましょう。原理自体は簡単なので自分で書くのも良いんですが、Arduinoには静電容量を測定するライブラリが公開されているので、それを活用してスケッチを作ってみます。

Arduinoの静電容量センサライブラリは下記のURLからダウンロードできます

ライブラリをダウンロードしたら、ZIP形式のままArduino IDEにインストールします。

スケッチ-ライブラリをインクルード-ZIP形式のライブラリをインストールを選択
ダウンロードした静電容量ライブラリを開く。インストールに成功しても特に通知は無い
インストールに成功するとファイル-スケッチ例にカスタムライブラリのスケッチ例が追加されるので選択する
スケッチ例のロードに成功するとサンプルスケッチが表示される。

タッチセンサで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 
}

むき出しの配線のままだといまいちタッチセンサっぽくないので、適当な金属製品に触れさせてそれ経由でタッチしてもタッチセンサとして動作します。

金属製品が端子に触れていればだいたいのものはタッチセンサになる。今回は分銅を使う
ワイヤーの裸部分を分銅で押さえつけるだけでOK

感度も良好で、タッチした時だけ13LEDが点灯していることがわかります。しきい値を調節すればし難いようにもできます。

2020年9月3日
Return Top