Arduinoで静電容量タッチセンサーを作る!!

Arduino

作るもの


今回は、Arduinoを使って静電容量タッチセンサーを作ります。
静電容量センサは、ATMやタッチパッドなどで使用されています。
簡易的なセンサ作成を通して仕組みを理解していきましょう。

今回の仕様は、センサに触れるとLEDが点灯するように設計します。
センサを使うことにより、スイッチを使わずにLEDを制御することができます。

使用するもの

  • PC
  • Arduino R3
  • CUBケーブル
  • ジャンパ線
  • 330Ω抵抗
  • 10MΩ抵抗(10MΩがなければ、直列に接続して作成)
  • LED
  • ブレッドボード
  • 5円玉(電気を通すものならなんでも可)

回路図

回路図は下の画像のように配線しました。
5円玉は、ジャンパ線にテープを張り付けて接続するといいと思います。
私はテープが見当たらなかったので断念(´;ω;`)

↓1MΩの抵抗がびっしり(笑)

プログラム

ライブラリを「CapacitiveSensor.h」を入れる必要があります。

#include <CapacitiveSensor.h>

const int LED_PIN = 7 ; //LEDピンを7番に設定

CapacitiveSensor cs_4_2 = CapacitiveSensor(4,2); //静電容量センサーに4番、2番ピンを使うことを宣言

void setup() {

  pinMode(LED_PIN,OUTPUT); //LED_PINを出力に設定

  Serial.begin(9600);//シリアル通信を9600bpsでする

}

void loop() {

  long cs=cs_4_2.capacitiveSensor(30); //静電量量センサーの出力

  //long 値 = オブジェクト.capacitiveSensor(サンプリング回数);

  //cs_4_2 → CapacitiveSensor(4, 2); で作成したオブジェクト

  //capacitiveSensor(30) → 静電容量の測定を30回繰り返し、その合計値を返す

  //long cs → 取得した測定結果を変数 cs に保存

  Serial.println(cs); //読み取った静電容量を表示

//読み取った静電容量の値が5000以上だったらLEDを点灯。値は実測した値に応じて入力

    if(cs>=5000){

    digitalWrite(LED_PIN,HIGH);

  }else{

    digitalWrite(LED_PIN,LOW);

  }

  delay(100); //100ms待つ

    }

動作の概要

下記が動作のフローチャートです。

  1. 開始初期設定(LEDピン設定、シリアル通信開始)
  2. ループ開始
  3. 静電容量センサーの値を取得
  4. 取得した値をシリアル出力
  5. 値が5000以上か?
    • YES → LED ON
    • NO → LED OFF
  6. 100ms待機
  7. ループの最初に戻る

動作確認

5円玉に触れると無事光りました☆

Arduinoのシリアルモニタで、読み取った値を確認しましょう。
手で5円玉を触れると値が大きくなっています。

原理

Arduino の CapacitiveSensor ライブラリは、RC(抵抗-コンデンサ)回路の充電時間を測定 することで、静電容量を間接的に計測 しています。


🔹 静電容量を読み取る仕組み

  1. 送信ピン(TXピン)から HIGH を出力(電圧をかける)
  2. 抵抗(通常 1MΩ 以上)を通じて、受信ピン(RXピン)へ電荷を送る
  3. 受信ピンの電圧が HIGH(しきい値)に達するまでの時間を測定
  4. 時間が長いほど、静電容量が大きいと判断
  5. この時間の合計値を「静電容量の相対的な値」として出力

🔹 具体的な動作

1️⃣ 抵抗と人体(または対象物)がコンデンサを形成

  • 人体や金属プレートは、周囲との間で静電容量を持つ
  • 送信ピンと受信ピンの間に「静電容量」が存在
  • 抵抗を通じて、送信ピンから受信ピンへ電荷が流れる

2️⃣ RC回路の充電時間を測定

この 時間の長さ を Arduino で測定し、「静電容量の相対値」として出力

静電容量 C と 抵抗 R の組み合わせは RC時定数(τ = R × C) を持つ

静電容量 C が大きくなると、受信ピンの電圧が HIGH になるまでの時間が長くなる

余談

動作中の電圧の波形観測を試みました。電圧プローブを接続したら、センサに触れていないのにも関わらずLEDが点灯しました!?
これは、オシロスコープに抵抗成分とコンデンサの成分が含まれているからです。
オシロスコープ内の静電容量に反応してしまっていると、、、、

私の愛用している、オシロスコープSDS1104 の仕様をしらべると1MΩ、10pFと記載されていました。
解析などするときは、オシロスコープの静電容量、抵抗を考慮して解析を行うと、実測と理論値との乖離が少なくなるのではないでしょうか。

まとめ

静電容量のセンサを作成することができました。
抵抗の値によって、センサの感度を調整できるので調整が必要そうです。

RC回路の時定数の測定を今度実験してみたいですね。

コメント

タイトルとURLをコピーしました