Arduinoで実験 (タクトスイッチでブザー)

2013/03/28


◆ タクトスイッチを使う

スイッチにもいろいろあるがタクトスイッチは基板にはんだ付けして固定するスイッチです。 一般的なタクトスイッチには4本の接点があり2本ずつ内部で結線されており、スイッチを入れると4本すべてが導通します。 どの線とどの線が内部でつながっているかはテスターで確認してください。



タクトスイッチは、押している間だけ導通し、このような機構をモメンタリ(アンラッチ)と呼びます。 これに対して、押すと導通と不通が切り替わるタイプはオルタネート(ラッチ)があり、トグルスイッチ等は見た目が同じなので購入時に確認する必要があります。

他にもスイッチには、トグルスイッチ、スライドスイッチ、ロータリースイッチ等多くの種類があり、他にも電気的な特性を生かした物等あります。

早速LEDを使用したタクトスイッチの実験です。 LEDの実験の際は、LEDに Arduino の5Vを流しましたが、本来は抵抗でLEDに流れる電流を制限する必要があります。 抵抗の値は使用するLEDの定格および電源の電圧により違ってくる。

実験用配線のためにブレッドボードを使用します。

種別 定格・番 個数 備考
マイコン Arduino UNO 1  
タクトスイッチ   1  
抵抗 10KΩ 1 プルダウン用
//
// 02-01 タクトスイッチの実験スケッチ
//

void setup() {
    pinMode( 8, INPUT);  // 8番ピンを入力に設定
    pinMode(13, OUTPUT); // 13番ピンを出力に設定
}

void loop() {
    if (digitalRead(8) == HIGH) {  // 8番ピンの状態を調べる
        digitalWrite(13, HIGH);    //  状態がHIGHならLEDを点灯
    } else {
        digitalWrite(13, LOW);     //  状態がLOWならLEDを消灯
    }
}

タクトスイッチを押すと Arduino 本体の LED が点灯し、離すと消灯します。
タクトスイッチを押すことで赤いコードと黄色いコードが結線され8番ピンへ5Vが送られます。
タクトスイッチが押されていない場合はプルダウン抵抗を経由してGNDと結線されます。
プルダウン抵抗が無くGNDとの結線が無い状態では、スイッチが押されていない間8番ピンは何処とも接続されず電気的に不安定な状態になります。 GNDと結線することにより0Vの入力がある状態にします。
もしプルダウン抵抗が無くGNDと結線すると、5VがGNDに流れ、ショートした状態になるので、抵抗を入れてGND側への流入を制限しています。

プルダウンとは逆のプルアップというのがあり、スイッチを押さない間はHIGHの状態にして、スイッチを押したらGNDと接続するというものです。
Arduinoの心臓部ATmega328Pにはデジタル入力の際に内蔵プルアップを有効にすることができます。 これを利用すると抵抗と配線を省略することができます。

以下は上記と同じ動作を、内蔵プルアップを使用して構成したものです。

//
// 02-02 内蔵プルアップを使用したタクトスイッチの実験スケッチ
//

void setup() {
    pinMode( 8, INPUT_PULLUP);  // 8番ピンを入内蔵プルアップを有効にして力に設定
    pinMode(13, OUTPUT);
}

void loop() {
    if (digitalRead(8) == LOW) {  // 8番ピンの状態を調べる
        digitalWrite(13, HIGH);   //  状態がLOWならLEDを点灯
    } else {
        digitalWrite(13, LOW);    //  状態がHIGHならLEDを消灯
    }
}


◆ チャタリング

マウスで1回クリックしたにもかかわらず、ダブルクリックされたようになりファイルが実行されたことが無いでしょうか。

これはチャタリングと呼ばれる、電気信号が瞬間的にHIGHまたはLOWとなり誤作動を引き起こすためです。 あたらかじめ何らかの対策をとることにより除去することができます。

具体的には、1回クリックをしたかどうかを判断するのではなく、50回位スイッチが押されているかどうかを読み込みその回数が45回以上ならスイッチが押されていると判断するといった具合です。


◆ ブザー

圧電スピーカーや圧電サウンダ。 コーン紙のついたスピーカーほどの音量は出ないが、耳へ情報を伝えるデバイスとしてはお手軽に利用できる。 また、原理的にスピーカーとマイクは同じものなので入力装置としての利用もできる。 ただし、本稿では入力装置としてのブザーは扱わない。

圧電ブザーには極性が無いのでショートさせなければ配線の間違いは起きない。

電気信号を空気の振動に変換するのがスピーカーで、1秒あたりの振動の山の回数が周波数となる。(例:ラ = 440Hz)

Arduino では PWM がありアナログ出力に利用されているが、これも矩形波なのでアナログ出力を行えばブザーは鳴る。 さらに周波数を指定できる tone 関数が標準で使用できる。

早速、音を出してみる。 ブザーの一方の足を Arduino の D3 に配線し、もう一方を GND へ落とします。

//
// 02-03 圧電ブザー実験スケッチ
//

void setup() {
  tone(3, 880, 3000);  // 880Hz の音を 3秒間鳴らす
}

void loop() {
}

 

か。