電子ブザーと圧電スピーカーを使ってみる(Arduino)
今回は、
・電子ブザー(アクティブブザー)
・圧電スピーカー(パッシブブザー)
を使ってみます。
機器の動作状態を知らせるために、
音を利用することがよくあります。
Arduinoには、標準で音を出す機能はありませんから、
ブザーやスピーカーを回路に加えることになります。
一般に、
・電子ブザー(アクティブブザー)は、
発振回路が内蔵されていて、動作電圧を掛けると、
内蔵の発振回路を使った音程の音が鳴ります。
・圧電スピーカー(パッシブブザー)は、
外部から与えた音声周波数(信号)に従った音が鳴ります。
普通のスピーカーと同じです。
が利用されているのではと思います。
私が所有している製品です。
私の所有製品とは違いますが、類似商品のご紹介です。
・電子ブザー 12mm UDB-05LFPN
¥80- [UDB-05LFPN]
秋月電子通商
http://akizukidenshi.com/catalog/g/gP-09704/
・圧電スピーカー(圧電サウンダ)(13mm)PKM13EPYH4000-A0
¥30- [PKM13EPYH4000-A0]
秋月電子通商
http://akizukidenshi.com/catalog/g/gP-04118/
まず、電子ブザー(アクティブブザー)を使ってみます。
電子ブザーは、電流を流す、流さないの2つの選択です。
・電流を流す(HIGH):ブザーが鳴る
・電流を流さない(LOW):ブザーは鳴らない
です。
回路は図の通りです。
この回路図の作図には fritzing を利用させて頂いております。
https://fritzing.org/home/
・電子ブザーは、極性(+-)がありますから間違えないように設置します。
スケッチです。
// 大域変数宣言
int pinNo = 9; // 9番ピン設定
void setup() {
// put your setup code here, to run once:
pinMode( pinNo, OUTPUT ); // 9番ピンを出力設定
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite( pinNo, HIGH ); // ブザーを鳴らす
delay( 500 ); // 500ms停止
digitalWrite( pinNo, LOW ); // ブザーを止める
delay(1000); // 1000停止
}
LED点灯、消灯させるスケッチと同様ですね。
Arduino に書き込んで実行してみます。
音色は製品によって違いますが、
0.5秒鳴り、1.0秒停止と繰り返しでいると思います。
では、もう一つ、
スケッチしてみます。
// 大域変数宣言
int pinNo = 9; // 9番ピン設定
void setup() {
// put your setup code here, to run once:
pinMode( pinNo, OUTPUT ); // 9番ピンを出力設定
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite( pinNo, HIGH ); // ブザーを鳴らす
delay( 500 ); // 500ms停止
digitalWrite( pinNo, LOW ); // ブザーを止める
delay( 50 ); // 50ms停止
// ON、OFFのタイミングを早くする
for( int i = 0; i < 20; i++ ){
digitalWrite( pinNo, HIGH ); // ブザーを鳴らす
delay( 20 ); // 20ms停止
digitalWrite( pinNo, LOW ); // ブザーを止める
delay( 20 ); // 20ms停止
}
delay( 1000 ); // 1000ms停止
}
Arduino に書き込んで実行してみます。
音色は、内蔵の発振回路で決まってしまいますが、
ON(HIGH)、OFF(LOW)のタイミングを変えることで、
音が変化して聞こえるのではないでしょうか。
続いて、圧電スピーカー(パッシブブザー)を使ってみます。
圧電スピーカーは、普通のスピーカーと同じく、
音声信号(周波数)に従った音が鳴ります。
音階 | 周波数(Hz) |
ド4 | 261.6 |
レ4 | 293.6 |
ミ4 | 329.6 |
ファ4 | 349.2 |
ソ4 | 391.9 |
ラ4 | 440.0 |
シ4 | 493.8 |
ド5 | 523.2 |
圧電スピーカーに、周波数を送るには、
tone( ) 関数を使用します。
tone( ) 関数の書式は、
tone ( ピン番号, 周波数(Hz), 出力する時間 )
で、
・デジタルピン9番を使用
・262HZの周波数(ド4)
・200ms間(200ミリ秒)
の場合、
tone ( 9, 262, 200 )
delay( 200 )
となります。
delay( 200 )
ですが、
これは、次の動作に入るのを避けるため、
200ms間、音が鳴っている間、停止させます。
簡単ですが、ドレミの3音を順番に繰り返し鳴らしてみます。
回路は図の通りです。
・製品にもよると思いますが、私が使用した製品には極性(+-)はありません。
スケッチです。
// 変数宣言と初期化
int pinNo = 9; // 使用デジタルピン番号設定
void setup() {
// put your setup code here, to run once:
}
void loop() {
// put your main code here, to run repeatedly:
tone( pinNo, 262, 200 ); // ドの音を発信
delay( 200 );
tone( pinNo, 294, 200 ); // レの音を発信
delay( 200 );
tone( pinNo, 330, 200 ); // ミの音を発信
delay( 2000 ); // 2000ms停止
}
Arduino に書き込んで実行してみます。
ドレミファソラシドを鳴らせてみます。
少し工夫して、スケッチしてみます。
// 変数宣言と初期化
int sound_type[8] = {
262, 294, 330, 349, 392, 440, 494, 523 // ドレミファソラシド
};
// 変数宣言と初期化
int pinNo = 9; // 使用デジタルピン番号選定
void setup() {
// put your setup code here, to run once:
}
void loop() {
// put your main code here, to run repeatedly:
// 配列に設定された音を順番に発信する
for( int i = 0; i < 8; i++ ){
tone( pinNo, sound_type[i], 200 ); // 発信
delay( 200 ); // 停止
}
// 配列に設定された音を逆順に発信する
for( int i = 7; i >= 0; i-- ){
tone( pinNo, sound_type[i], 200 ); // 発信
delay( 200 ); // 停止
}
delay( 2000 ); // 2000ms停止
}
Arduino に書き込んで実行してみます。
配列と繰り返し文法を利用すると、
短く記述することができます。
ドレミファソラシド
を繰り返し鳴らしていると思います。