Grove Beginner KitでのArduino入門 その5 ブザー

概要

前回はポテンションメーターでアナログ入力を使いました。今回はアナログ出力を使ってブザーを鳴らしたいと思います。

ブザーとは?

ボードの左上にあるのがブザーです。D5に接続されていますね。ブザー系には2種類あります。

アクティブブザー

アクティブブザーは電圧をかけると音がなるブザーです。電圧に応じて音が変わります。仕組み的にかんたんですので、単純な仕組みで音を鳴らすことができます。仕組み的には電圧に応じて音の周波数を出力する部品が内蔵されています。ピーみたいな音を出すのには適しています。

パッシブブザー

普通のスピーカーと同じように、音の素となる周波数を出力することで音がでるブザーです。周波数をコントロールすることでアクティブブザーよりいろいろな音が出力しやすいです。反面周波数をコントロールする必要があるので、単純な回路では音を鳴らすことができません。

ある程度音楽を鳴らすことはできますが、簡易的な電子メロディーです。このキットに搭載しているのはパッシブブザーのようでした。

スピーカー

原理的にはパッシブスピーカーと同じなのですが、比較的高音質なものはスピーカーと呼ばれます。ブザーと表現されている場合には音質が悪いと思うぐらいの認識でもよいと思います。

スケッチ例

int BuzzerPin = 5;

void setup() {
  pinMode(BuzzerPin, OUTPUT);
}

void loop() {
  // 音を鳴らす
  analogWrite(BuzzerPin, 128);
  delay(200);

  // 音を止める
  analogWrite(BuzzerPin, 0);
  delay(1000);
}

D5に接続しているので、5ピンに出力をしています。analogWrite()関数はアナログ出力で、255段階中128段階目の出力を設定し、200ミリ秒待機。その後出力を0にしてから1000ミリ秒(1秒)待機をするサンプルです。

実行するとピッと音がでるのが1秒ちょっとで繰り返すと思います。

オシロスコープを使って、D5の信号を確認してみました。音が出ているときには電圧が上がり、幅が約200ミリ秒、音が出ていないときには電圧が下がり、幅が約1秒ありました。設定通りですね。

信号を拡大してみました。約1kHzで信号が5.3Vと0Vにオンオフしていました。Arduino UNOは5Vで動いているボードですので、HIGHのときは5Vのはずです。5.3Vとなっていますがおそらく誤差の範囲だと思います。USB接続した場合にはUSBに5Vよりちょっと高い電圧が供給されている場合があり、どうしても誤差がでてしまいます。

analogWrite()という関数なのですが、実はアナログ出力ではありません。

analogWrite(BuzzerPin, 64)に変更してみました。全体は1kHzですが、信号がHIGHの間隔が狭くなっていますね。

PWMとは?

PWM(Pulse Width Modulation)とは、擬似的にアナログ出力をするための仕組みです。高速にオンオフを繰り返すことで、実際の出力する電圧を擬似的にコントロールする方法です。

Arduino UNOの場合1サイクルが1kHzでしたので、上記のように255個のスロットに区切っています。このスロットをどれぐらいHIGHにするのかを制御するのがPWMでの出力です。

128を指定した場合には、上記のように1-128までがHIGHになり、残りがLOWになります。つまり半分の時間HIGHですので、流れる電流の量は約半分になります。

64を指定すると、64/255=約0.25ですので25%の時間HIGHになっています。オシロスコープの波形と同じような形になっていますね。

つまり、0を指定するとHIGHになっている時間は無し。255を指定すると常にHIGH担っている状態になります。

LEDをPWMで光らせてみる

Groveケーブルを利用して、D5端子からLEDに接続します。この状態だとLEDはD4とD5の両方に接続されている状況になります。両方のピンを出力に設定するのはやめてください。かならずどちらかの端子のみを利用するようにします。

この状態で先程のスケッチを動かすと音がなるタイミングで、LEDが光ると思います。写真ではうるさいのでブザーにマスキングテープを貼って、音量を落としています。

PWMの数値を変えると、LEDの明るさが変わるのが確認できます。0だと音もならないですし、光りません。255の場合にはほとんど音がならないのですが、LEDは非常に明るいです。これはパッシブブザーはオンオフがある信号を音に変換するので、常にオンの場合には音がなりません。

256にすると小さい音が出て、LEDは暗く光っていると思います。255段階ですので256は1と同じ扱いになっているようでした。

まとめ

Arduino UNOのanalogWrite()はアナログ出力のようですが、実際にはデジタル出力を高速でオンオフして制御しています。LEDなどの明るさはオンオフしていても、残像でチカチカ点滅しているようには見えない速度なのでPWMで十分制御が可能です。

また、Arduino UNOは特定のピンでないとPWM制御ができません。

上記のようにボードのピン番号の横に~マークがあるピンでのみ利用可能です。LEDはD4に接続されているので、analogWrite()は利用できないのがわかると思います。

Arduino UNOのPWMは255段階ですが、ボードによって違うので注意してください。ESP32の場合には変更できますがよく使うのが256段階になります。0で出力なしは同じなのですが、出力の最高は微妙に違うことがあるので確認してから使ってみてください。

続編

コメント

タイトルとURLをコピーしました