Arduino Leonardoでブザーを鳴らす

前書き

Arduinoの入門スクリプトとしてLEDを点滅させるスケッチはよく見かける。C言語で言うところの”Hello World”みたいなものだろうか。

さて、LEDの代わりに、ブザーを鳴らすことを考えてみよう。

ブザーには2種類ある

ブザーには、ただ電流を流してやれば一定の音がするいわゆるブザーと、スピーカーのように振る舞う圧電ブザーという2種類がある。前者であればLEDの点滅スケッチがそのまま使えるだろう。LEDの代わりにブザーを接続すれば音が出るはずだ。

では、後者の場合は?残念ながら音は出ない。点滅の瞬間にちっちゃなノイズが出るかもしれないが、これでは実用にはならない。

サンプルコード

#define SW 9
#define BZ 8
#define TONE_FREQ 700

void setup()
{
    pinMode(SW, INPUT_PULLUP);
    pinMode(BZ, OUTPUT);
}

void loop()
{
    if (digitalRead(SW) == LOW) {
        tone(BZ, TONE_FREQ);
        while (digitalRead(SW) == LOW); // 離されるのを待つ
        delay(10); // チャタリング除去
    }
    else if (digitalRead(SW) == HIGH) {
        noTone(BZ);
        while (digitalRead(SW) == HIGH); // 押されるのを待つ
    }
    return;
}

動作

スイッチを押している間だけ音が鳴る。ピンはどれでも良いのだけれど、私がこの実験に使ったマイコンのピン配置から考えてちょっと楽だっただけだ。

後書き

小学生の頃、電子工作が好きだった担任の先生が、モールス符号を練習するというキットを作って見せてくれた。完全なアナログ発振回路。ここでやっていることは、その練習機と同等のことだ。スイッチの代わりにキー(電鍵)を接続すれば、モールス練習機になる。

時代は移り変わったとは言え、全く違う考え方や手法を使って同じことを実現しているんだな、と感慨にふけってみた瞬間であった。