この前、タッチパネルを作って、予想以上に上手くいったので、作り方を紹介します。
もっと簡単に作る方法見つけたので、興味ある方はこちら
目次
今回作るタッチセンサーは静電容量方式・充電時間計測型と言われるものです。人間の身体は電気を通すため、電位差のある金属板に触れるとき、金属板と人間の間がコンデンサーのような働きをします。
静電容量方式とは「人間の身体と電極をコンデンサに見立てて、その静電容量の変化を読み取れば触れているかどうか分かる」というもので、充電時間計測型というのは「充電時間を測れば、静電容量の変化が読み取れる」という考え方に基づいています。
要は、「人間と電極の間でコンデンサを作り、そのコンデンサが充電する時間を計測して、静電容量を読み取る」というものです。
//ハイパスフィルタのバッファ数
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];
}
}
実験したところ、アルミホイルでも正しく動きました。
しっかりしたアルミ板などはホームセンター等で購入できるので、是非、お試しあれ。