どうも、なかしーです。
僕は自動車のマイコンにプログラミングをする組み込みエンジニアとして働きつつ、YouTubeでArduinoの使い方を解説しています。
Arduinoにブザーを繋いで音を出す方法を知りたいなぁ。
という悩みを解決します。
ブザーは電圧をオンとオフ繰り返すことで膜が振動し、音が出るようになっています。
オンとオフを繰り返す時間を変えると音程が変化し、オンとオフの比率を変えると音量が変化します。
「カエルのうた」みたいに簡単な曲ならブザーで再現可能ですよ!
この記事では「Arduinoでブザーから音を出す方法」について紹介します。
ちなみに、動画でも解説しています!
Arduinoでブザーを音を出す方法
電子工作で使われるブザーは、コイルで膜を振動させることで音を出しています。
さらにブザーには電圧を与えるだけで音が出るものとPWM波を与えないと音が出ない二種類があります。
- 自励式:電圧を与える
- 他励振式:PWM波を与える
PWM波を使うブザーの場合は、音程と音量を変化させることが可能です。
Arduinoでブザーの音程を変える方法
音程を変えるには、PWM波の周波数(周期)を変える必要があります。
Arduinoには標準でPWM波の周波数を変えるための関数が用意されています。
Arduinoにブザーを繋いでいるピン番号を引数pinに入力し、周波数をfrequencyに入力します。
このtone関数は1つのピンだけ有効で、複数のピンで同時に使うことができません。
ピンを切り替えたい時は一度noTone関数の後にtone関数を実行してください。
また、31Hz以下の周波数は生成できません。
音程と周波数は次の表を参考にしてください。
音程 | 周波数(Hz) |
ド(C4) | 261.626 |
レ | 293.665 |
ミ | 329.628 |
ファ | 349.228 |
ソ | 391.995 |
ラ | 440.000 |
シ | 493.883 |
ド(C5) | 523.251 |
Arduinoでブザーを鳴らすプログラム
タクトスイッチをデジタルピン4に、ブザーをデジタルピン3に繋ぎました。
タクトスイッチを押すと音程が上がるプログラムを作りました。
unsigned int buzzer[8] = {261,293,329,349,391,440,493,523};
unsigned char count = 0;
void setup() {
pinMode(3,OUTPUT);
pinMode(4,INPUT);
}
void loop() {
tone(3,buzzer[count]);
if(digitalRead(4) == 1) {
count++;
if(count > 7)
count = 0;
while(digitalRead(4) == 1);
}
}
スイッチを押して離すと音階が「ド→レ→ミ」と上がっていきます。
音量を変えるにはオンとオフの比率(デューティー比)を変える必要があるんですが、tone関数では周波数のみしか変更できませんでした。
音量を変えたい方は関数を自作するか、ライブラリをネットで探してみてください。
関数を自作するなら「オン→ディレイ→オフ→ディレイ→オン」を繰り返すようにして、オンとオフのディレイの時間を調整すると音量が変わります。
ちなみに、オンとオフの合計値の逆数が周波数になります。
Arduinoでブザーから音を出す方法|まとめ
この記事では「Arduinoでブザーから音を出す方法」について紹介しました。
ブザーは電圧を与えると音が出る自励式とPWM波を与えることで音が出る他励振式の2種類があります。
他励振式のブザーなら音程と音量を変えることできます。
- 音量:オン時間を変える(デューティー比)
- 音程;周波数(周期)を変える
Arduinoには周波数を変えることができるtone関数があります。
tone関数では音量を変えることが出来ないので、音量を変えたい場合は関数を自作するかライブラリをネットで探す必要があります。
Arduino関連の人気記事
>>【Arduino入門キット】電子工作の勉強におすすめ【こんなに安くていいの?】
>>Arduinoをゼロから勉強する方法を紹介【参考書は不要】
>>Arduinoのプログラムの書き方【基本的なルールは4つある】
当ブログで人気のArduino入門キット