こんにちは、ENGかぴです。
Arduinoに標準搭載されているライブラリを使用してPWM波形を生成することでブザーを鳴らすことができます。電子ブザーをPWMのデューティ比を変更しながらブザーを鳴らす方法と音程の変化についてまとめています。Arduino UNOを対象としています。
今回は標準ライブラリであるanalogWrite()を使用する方法でブザーを鳴らしています。seeeduino XIAOを使ってキャリア周波数を変更ながらブザーを鳴らした結果を下記にまとめています。
seeeduino XIAOの標準ライブラリでブザーを鳴らす方法
Arduino UNO(以下Arduinoとします。)を対象とします。Arduinoのライブラリを使用して動作確認したことをまとめています。
Arduinoで学べるマイコンのソフト開発と標準ライブラリの使い方
ArduinoのPWMでブザーを鳴らす方法
電子ブザーは発振回路がついており極性があるものが多く電圧を加えるとブザーが鳴りますが、電流を流し続けると発熱などの問題があるためパルス波形を与えて電流が流れ続けないようにしながら電圧を加えることが推奨されます。
ブザーの構造でコイルが使われている場合、電圧の変化によって逆起電力が発生することがあるため注意が必要な場合もあります。マイコンで動作させられる程度のブザーであれば気にならない程度ですが、電源電圧がDC12V以上のものになると対策が必要になるケースがあります。
逆起電力はコイルによって-側の電圧が高くなるためマイナス側にダイオードのアノード(A)をつなぐようにしてブザーに並列に接続することで対策できます。
標準ライブラリを使用する
#define PIN_PULSE 6
void setup() {
analogWrite(PIN_PULSE,duty); //最大値255に対して値を入れて比率を決める
}
Arduinoの標準ライブラリであるanalogWrite()関数を使用することでPWM波形が生成でき簡単にブザーを鳴らすことができます。引数1はPWM出力するピン番号、引数2には最大値255に対してパルスを切り替える値を指定します。最大値に対して指定した値がHIGHになる区間になります。
例えばデューティ比を50%を指定する場合は引数2に127を指定します。0にすると理論的にはPWM波形が生成されませんが、実際は僅かに誤差の範囲で出力されることがあります。最大値の255の場合についても同様で電圧出力が100%にならないことがあります。
Arduinoはピンによってキャリア周波数が変化します。その関係を以下の表にまとめています。今回は6ピンを使用しています。
対象ピン | キャリア周波数 |
---|---|
3・9・10・11ピン | 490Hz |
5・6ピン | 980Hz |
analogWrite()関数をコールするとPWM波形が出力し続けるためブザーが鳴り続けます。ブザー音を長く聞いていると耳障りに感じることも多いのでブザーを止めたい場合は引数に0を入れて一時的に停止することができます。
PR:わからないを放置せず、あなたにあった最低限のスキルを身に着けるコツを教える テックジム 「書けるが先で、理解が後」を体験しよう!
PWM波形について

analogWrite()関数で生成したPWM波形のキャリア周波数は一定となります。引数に設定した値によってデューティ比が高くなっていきます。
デューティ比が高くなるほどHIGHの区間が長くなるため平均した電圧は高くなります。
電子ブザーは電圧を変化させると若干音程を変えることができるためデューティ比を変化させることで若干音程を変えることができます。
void ChngBuz(){
switch(buzmode){
case 0:
duty = 0;
break;
case 1:
duty = 60;
break;
case 2:
duty = 120;
break;
}
analogWrite(PIN_PULSE,duty);//デューティ比を可変しながら音程を変更
}
電子ブザーのコイルなどの負荷によってデューティ比を変化させても電圧が変化しにくくなり、音程の変化を大きく感じることができません。
動作確認

Arduinoの3ピンはLEDの点灯用に使用し6ピンは電子ブザーを鳴らします。ブザーはインピーダンスが高いものを使用していれば抵抗は不要です。短絡故障したときにマイコンに負荷がかかるため実装した方が良い場合もありますが、今回は手持ちの抵抗を実装すると音が小さくなりすぎたため直接接続しています。
ブザーを持続して鳴らしていると耳障りに感じることがあるため100ms間鳴らした後900msはOFFするようにしています。
SWはPWM波形のデューティー比を変更するために実装しています。SWを押すとPWMのデューティー比が変更されブザーの音程が変更され「ピッ」と1秒間隔で鳴っていることが確認できました。LEDも1秒間隔で点灯/消灯しますがデューティー比が高くなるほど輝度が上がっていることが確認できました。
LEDの3ピンとブザーの6ピンを入れ替えるとブザーの音程が低くなるためキャリア周波数が変わっていることも確認できます。
ソースコード全体
ソースコードは記事作成時点において動作確認できていますが、使用しているライブラリの更新により動作が保証できなくなる可能性があります。また、ソースコードを使用したことによって生じた不利益などの一切の責任を負いかねます。参考資料としてお使いください。
リンクからZIPファイル形式のファイルをダウンロードし、任意の場所に展開していただくとテキストファイルが生成されます。
関連リンク
Arduinoのライブラリを使って動作確認を行ったことを下記リンクにまとめています。
Arduinoで学べるマイコンのソフト開発と標準ライブラリの使い方
Seeeduino XIAOで学べるソフト開発と標準ライブラリの使い方
ESP32-WROOM-32Eで学べるソフト開発と標準ライブラリの使い方
最後まで、読んでいただきありがとうございました。