電子ブザーと圧電スピーカーを使ってみる(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/
・電子ブザーは、極性(+-)がありますから間違えないように設置します。


スケッチです。
1 2 3 4 5 6 7 8 9 10 11 12 13 | // 大域変数宣言 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秒停止と繰り返しでいると思います。
では、もう一つ、
スケッチしてみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | // 大域変数宣言 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音を順番に繰り返し鳴らしてみます。
回路は図の通りです。
・製品にもよると思いますが、私が使用した製品には極性(+-)はありません。


スケッチです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | // 変数宣言と初期化 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 に書き込んで実行してみます。

ドレミファソラシドを鳴らせてみます。
少し工夫して、スケッチしてみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | // 変数宣言と初期化 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 に書き込んで実行してみます。

配列と繰り返し文法を利用すると、
短く記述することができます。
ドレミファソラシド
を繰り返し鳴らしていると思います。