この前、タッチパネルを作って、予想以上に上手くいったので、作り方を紹介します。

もっと簡単に作る方法見つけたので、興味ある方はこちら

参考サイト:http://kousaku-kousaku.blogspot.jp/2008/10/arduino.html

 今回作るのは静電容量方式・充電時間計測型と言われるものです。静電容量方式とは「人間と電極でコンデンサ作って、その静電容量の変化を読み取ればいいじゃん!」というもので、充電時間計測型というのは「充電時間を測れば、静電容量の変化よみとれるじゃん!」という考え方です。

 要は、「人間と電極の間でコンデンサを作り、そのコンデンサが充電する時間を計測して、静電容量を読み取る」というものです。

<用意するもの>

  • Arduino
  • 金属板
  • 抵抗(1Mくらいの抵抗が大きいもの

[13番ピン]-[抵抗]-[A]-[金属板]-[指]-[GND]
として、Aの電位を12番ピンで読み取ります。

//ハイパスフィルタの変数
int const N = 10;

int a[N];

void setup(){
  for(int i=0; i<N; i++){
    a[i] = 0;
  }
  Serial.begin(9600);

//タッチパネル本体
  pinMode(13,OUTPUT);
  pinMode(12,INPUT);
  //確認用LED
  pinMode(5, OUTPUT);
}

void loop(){
  //充電時間用の変数
  a[0] = 0;
  //一度HIGHにして
  digitalWrite(13, HIGH);

//12番ピンがHIGHになるまで(=充電時間)をカウント
  while (digitalRead(12)!=HIGH){
    a[0]++;
  }
  //LOWに戻す
  digitalWrite(13, LOW);

//たまに値がぶれるのでローパスフィルタをかける。
  float ave = 0;
  for(int i=0; i<N; i++){
    ave += a[0];
  }
  ave /= N;

//値チェック
  Serial.println(a[0]);

//この20という数字が大きければ鈍感に、小さければ敏感になります
  if(ave > 20){
    digitalWrite(5, HIGH);
  }else{
    digitalWrite(5, LOW);
  }

//変数をずらす。
  for(int i=0; i<N-1; i++){
    a[i+1] = a[i];
  }
}

抵抗と金属板だけで良い感じに反応するタッチセンサが簡単に作れます。おためしあれ。