通常のスイッチは、金属同士がつながったり離れたりすることでONとOFFを実現しています。しかし、触るだけでONとOFFが切り替えられるスイッチも存在します。このようなセンサーはタッチセンサーと呼ばれています。この実験では、静電容量型と呼ばれるタッチセンサーを抵抗1つの簡単な回路とArduinoマイコンで実現します。
実験装置の全体像を図1に示します。
まず、図2に示すように、Arduino UNOの8番ピンと9番ピンを100kΩの抵抗でつなぎます。そして、9番ピンとコインをクリップケーブルで接続します。実験装置は以上です。
次に、以下のプログラムをArduinoの開発環境(Arduino IDE)を使ってArduino本体に転送して実行します。
void setup() {
// シリアル通信設定
Serial.begin(115200);
// 8番ピン設定
pinMode(8、 OUTPUT); // ディジタル出力
// 9番ピン設定
pinMode(9、 INPUT); // ディジタル入力
// 13番ピン設定(LED)
pinMode(13、 OUTPUT);
}
void loop() {
// カウンタ変数の初期化
int c = 0;
// 8番ピンをHIGHに変化させる
digitalWrite(8、 HIGH);
// 9番ピンがHIGHになるまで待つ
while (digitalRead(9) != HIGH) {
// カウントアップ
c++;
}
// 500マイクロ秒待つ
delayMicroseconds(500);
if ( c > 2 ) { // 値2は必要に応じて調整してください
// LEDを点灯
digitalWrite(13、 HIGH);
} else {
// LEDを消灯
digitalWrite(13、 LOW);
}
// 値を転送(デバッグ用)
Serial.println(c);
// 8番ピンをLOWにする
digitalWrite(8、 LOW);
// 放電するまで待つ
delayMicroseconds(500);
}
すると、コインをタッチすると基板上のLED(写真2参照)が点灯し、離すと消灯します。LEDの点灯がうまくいかない場合は、Arduino IDEのシリアルモニターを立ち上げて、タッチしていないときの変数cの値とタッチしているときの変数cの値を調べ、コインをタッチしたときのみ24行目のif文が成立するように24行目の数値を2から別の値に変更します。
作成した実験装置の等価回路を図3に示します。100kΩの抵抗は、8番ピンと9番ピンを接続した抵抗です。また、C0とChはコンデンサーを表します。実験装置では、コンデンサーの部品は使用していませんが、通常、電気回路は浮遊容量と呼ばれる微小な静電容量を持ちます。それを表したのがC0です。一方、Chは人間がコインに触れた時に生じる静電容量を表します。
図4はコインをタッチしていないときの各ピンの電圧波形を表しています。オレンジが8番ピン、緑が9番ピンに対応しています。8番ピンの電圧が立ち上がると、9番ピンの電圧が若干遅れて立ち上がります。この遅れは、コンデンサーC0を充電するために生じたものです。
この状態でコインをタッチすると9番ピンの電圧応答は図3のようにゆっくり立ち上がるようになります。理由は、コインをタッチすると静電容量がC0からC0+Chに変化するため、充電に時間がかかるからです。
作成したプログラムでは、次のようにして立ち上がりの変化をとらえ、タッチの有無を判定しています。まず、16行目で8番ピンを立ち上げます。そして、18行目のwhile文で、変数cを1ずつ増加させながら、9番ピンがHIGHになるまで待ちます。したがって、変数cは、9番ピンがHIGHになるまでにかかった時間に比例した値になります。そして、24行目のif文でタッチの有無を判定し、26行目と29行目でLEDのON/OFFをしています。32行目は、変数cの値をシリアル通信でPCへ転送するためのものです。
私たちが考える未来/地球を救う科学技術の定義 | 現在、環境問題や枯渇資源問題など、さまざまな問題に直面しています。 これまでもわたしたちの生活を身近に支えてきた”工学” が、これから直面する問題を解決するために重要な役割を担っていると考えます。 |
学部