見出し画像

ブザー2種類とドレミ

はじめに

当方手持ちのブザーモジュールには、二種類あります。以前、衝動買いしてしまった37種類のセンサーセット

画像1

中に含まれています。基板のシルク印刷見ても 
「Keyes K845755」 と同じ番号なのですが

・シールがある方は「有源蜂鳴器(アクティブブザー:Active Buzzer)」信号ピンをHighにすれば「ピー」と鳴る。

・シールが無い方は「無源蜂鳴器(パッシブブザー:Passive Buzzer)」信号ピンにHIGH、LOWを交互出力して「音の振動」を作り出してやる必要がある。(音の高低をプログラムで変えられる自由度がある)

ということのようです。試してみましょう。

アクティブブザー

信号をHIGH(5V)に

「ピー」と鳴っています。

パッシブブザー

信号をHIGHにしても音はでないですが、触れたり離したりすると「カリカリ」音がします。

ドレミを鳴らすには

パッシブブザーの方は、音程をコントロールできるわけで、ドレミファソラシドを鳴らしたくなります。音階の基準音は440Hz の「ラ」だそうで、その前後のドレミファソラシドだと、

ド:261.6 レ:293.7 ミ:329.6 ファ:349.2 ソ:392.0 ラ:440.0
シ:493.9 ド:523.3 (Hz)だそうです。

Arduinoでよく使う「一定時間待つ関数」に delay()がありますが、引数がミリ秒(1/1000秒)単位で、ちょっと荒いので、マイクロ秒(1/百万 秒) で指定できる、delayMicroseconds() を使ってみましょう。xヘルツの矩形波を出力するには1.0/(2x)秒おきにオンオフを切り替えればよい。マイクロ秒単位なので100万/(2x) 。あと継続時間を秒単位で与えることにします。

ソースコード


#define IO  7 //信号7番ピン

void setup() {
 // put your setup code here, to run once:
 pinMode(IO, OUTPUT);
}

void mybeep(double hz,double sec){
 int times;
 int period;
 times = round(hz*sec);
 period = round(1000000.0/2.0/hz);
 for (int i = 0; i < times; i++){
   digitalWrite(IO, HIGH);
   delayMicroseconds(period) ;
   digitalWrite(IO, LOW);
   delayMicroseconds(period) ;
 }
}

void loop() {
 // put your main code here, to run repeatedly:
 mybeep(261.6,0.25);//ド
 mybeep(293.7,0.25);//レ
 mybeep(329.6,0.25);//ミ
 mybeep(349.2,0.25);//ファ
 mybeep(392.0,0.25);//ソ
 mybeep(440.0,0.25);//ラ
 mybeep(493.9,0.25);//シ
 mybeep(523.3,0.25);//ド
}

ドレミ鳴りました


いいなと思ったら応援しよう!