Arduinoで圧電スピーカーから音を出す!パッシブブザーで童謡「かっこう」を奏でる【ブロックプログラミングLesson14】
こんにちは、せでぃあ(@cediablog)です。
ArduinoプログラミングLESSON14は「パッシブブザー(圧電スピーカー)をから音を出して、メロディー演奏する」です。
押しボタンスイッチを押すと、パッシブブザーから童謡「かっこう」が奏でられるプログラミングの作り方を紹介します。
本LESSON記事は、プログラミングの学習と電子パーツ「パッシブブザー」の知識を習得するプログラムになっています。
小学生、中学生も安心してプログラミングができるように、スクラッチでのプログラミング方法についても動画付きで紹介しています。
本記事では、スクラッチベースのビジュアルプログラミングツールmBlockとArduinoIDEプログラムどちらも紹介していますが、どちらか一方のプログラミング方法で動作が可能です。
小学生のお子様にはmBlockを使ったプログラミングがおすすめです!
無料のブロックプログラミングツールmBlockのインストール方法については、こちらの記事を参照してください。
- パッシブブザーとはどんな機器なのか
- Arduino IDEでのプログラミング方法
- mBlockを使ったビジュアルプログラミング方法
せでぃあはこんな人物です
✅プライム企業に勤める電気・機械設計エンジニア
✅親子の絆を深めるため、夏休みに子供と一緒に電子工作を製作
✅Arduinoプログラミングを用いて作ったプログラミング電子工作「信GO機」が市の発明くふう展で「優秀賞」を受賞
✅本ブログにてArduinoスクラッチプログラミングLESSON記事投稿中
✅YouTubeチャンネル「せでぃあブログちゃんねる」運営中
子供の成長を育む!小学生のお子様にぴったりなプログラミング教室が見つかるように厳選しました!
パッシブブザーについて
パッシブブザーとは
パッシブブザーとは、普通のスピーカーと同じで一定周波数の電圧によって音を出すことができる電子機器です。
周波数を変化させることで、音色を変えることができます。
ピン割り当て
パッシブブザーには極性の区別があります。
トップ面に+マークが刻印されており、刻印側から生えているピンに+5Vを接続します。
反対側のピンにはGNDを接続します。
パッシブブザーの鳴動原理
パッシブブザーで音を出すには、+5V山と、0V谷の長さが同じデューティ比50%の矩形波を作ります。
この山と谷のペアで1周期となり、1秒間での周期数を周波数(Hz)といいます。
上の表示記載してある周波数でパッシブブザーに電圧を印加することで、周波数に対応した音階を鳴動させることができます。
鳴動音階の作り方
希望する周波数での矩形波の作成方法ですが、プログラム側にて矩形波出力を指示します。
本記事で取り扱う2種類のプログラミング方法における、鳴動音階の作り方を説明します。
Arduino IDEプログラミングの場合
Arduino IDEでは、tone関数を使って音階鳴動させます。
tone関数では、パッシブブザーと接続するArduinoソケット番号、矩形波周波数、鳴動時間を指定することができます。
mBlockプログラミングの場合
mBlockでは、音階鳴動ブロックを使ってパッシブブザーを鳴動させます。
このブロックをつなげるだけで、簡単にパッシブブザーを指定した音階で鳴動させることができます。
パッシブブザーを使った動作の説明
今回の説明する「パッシブブザーを使った、メロディー演奏」は、以下になります。
- 押しボタンを押すと「かっこう」のメロディー演奏開始+LED点灯
- メロディー演奏が終わると、LEDも消灯
- パッシブブザーの機器説明
- パッシブブザーを使った童謡「かっこう」のメロディー演奏動作
- mBlockを使ったプログラミングの解説
まずは動画を見て、今回のLESSON14で実行させたい動作内容を確認してください。
パッシブブザーを使ったメロディー演奏動作回路の作り方
プログラミングするために、パソコンが必要です。
電子部品等の必要な機器については、このあと説明します。
パソコンに統合開発ソフトウェア「ArduinoIDE」のインストールを行います。
Arduinoのセットアップ方法については、以下の記事にて詳しく説明しています。
Arduino IDEでの言語プログラミングも勉強したい方は、プログラミングの流れを理解しておいてください。
以下の記事にて、プログラミングから動作確認までの流れを詳しく説明しています。
mBlockでプログラミングする場合は、ArduinoIDEのインストールは不要です
パソコンにスクラッチベースのビジュアルプログラミングツール「mBlock」のインストールを行います。
以下の記事にて詳しく説明しています。
ArduinoIDEでプログラミングする場合は、mBlockのインストールは不要です
電子部品とジャンパーワイヤの差し込みだけで配線が可能です。
専用開発ソフトウェア「Arduino IDE」を使います。
私が作成したプログラムをコピペして使ってください。
Arduino IDEプログラミングの基本操作については、こちらの記事にて詳しく説明しています。
mBlockでプログラミングする場合は、ArduinoIDEプログラミングは不要です
スクラッチベースのビジュアルプログラミングツールmBlockを使ってプログラムを作成します
プログラム内容については、後述するプログラミング例を参考にしてください。
ArduinoIDEでプログラミングする場合は、mBlockプログラミングは不要です
プログラムが完成したら動作確認を行います。
- 押しボタンを押すと童謡「かっこう」のメロディー演奏を実行するか?
- メロディー演奏と同時にLEDが点灯するか?
- メロディー演奏が完了するとLEDが消灯するか?
パッシブブザーを使ったメロディー演奏動作回路で使うもの
- パソコン
- Arduino本体
- USBケーブル
- ブレッドボード
- LEDランプ(赤)
- 抵抗(220Ω)
- 押しボタンスイッチ
- 抵抗(1kΩ)
- パッシブブザー
- ジャンパー線(オスーオス)×7本
今回はELEGOO社のArduinoキットに含まれる部品で作ることができますが、Arduino裏面のショート対策としてクリアケースも併せて準備することをおすすめします。
パソコン
プログラムを作成するために必要です。
プログラム制御の演算はArduino側で行うため、パソコンのSPECは一般的なモデルで十分対応可能です。
パソコンのOSはWindows、Macどちらでも対応可能です。
Arduino本体【キット】
基本的なエディション「Arduino Uno」の互換機である、ELEGOO社のUNO R3を使用しています。
Arduino本体裏面のショート対策に、別売りのクリアケースの購入をおすすめしています。
各ソケットの役割など、Arduino本体の機能について以下の記事にて詳しく説明しています。
USBケーブル【キット】
パソコンとArduinoを接続してプログラムデータのやり取りをするために必要です。
ブレッドボード【キット】
たくさんの穴が開いていて、部品の端子を穴に差し込むだけで電気的に接続が可能な板です。
説明図は30列のショート版ですが、スーパースターターキットに含まれる63列タイプでも機能面は同じです
LEDランプ(赤)【キット】
赤色のLED(発行ダイオード)を使用します。
LED素子にはプラスマイナスの極性があるため配線時には注意が必要です。
極性を間違えて配線すると、LEDは点灯しません
抵抗(220Ω)【キット】
220Ωの抵抗を使用し、LEDに接続します。
LEDは流せる電流値に制約があるため、抵抗を直列つなぎすることでLEDに流れる電流を調節します。
抵抗は極性がないので、配線時に方向を気にする必要はありません。
LEDを点灯させるために接続する抵抗の選び方については、こちらの記事で詳しく説明しています。
押しボタンスイッチ【キット】
今回のLESSONでは、押しボタンスイッチを使用します。
押しボタンは押されている間のみ、上記写真での2点が内部でつながります。
このようなボタンをモーメンタリボタンといいます。
今回は扱いませんが、ボタンから手を離してもONしたままになるボタンをオルタネイトボタンといいます。
モーメンタリ・オルタネイトボタンについては以下記事にて詳しく説明しています。
抵抗(1kΩ)【キット】
1kΩの抵抗を1本使用し、押しボタンスイッチに接続します。
抵抗を接続するのは、押しボタンがOFFのときにArduino本体がノイズによる誤検出することを避けるためです。
この記事では詳しく説明しませんが、ボタンを押していないのに押されたと誤認識されることを避ける目的であるということだけ覚えておいてください。
パッシブブザー【キット】
パッシブブザーの詳細については、本記事冒頭にて解説しています。
ジャンパー線(オスーオス)【キット】
ジャンパー線を7本使用します。
Arduino本体とブレッドボードの接続や、ブレッドボードの共通電源ライン(GNDまたは5V)からブレッドボード内の配線系統穴に差し込んで接続するのに使います。
スターターキットに含まれる機器に関しては、以下の記事にて詳しく紹介しています。
配線のやり方
上図が配線説明図となりますので、これと同じ配線をすれば完成します。
パッシブブザーは、ピンを直接ブレッドボードに差し込んで配線します
- LEDランプをブレッドボードに差し込む
- パッシブブザーをブレッドボードに差し込む
- 押しボタンスイッチをブレッドボードに差し込む
- 220Ωおよび1kΩ抵抗をブレッドボードに差し込む
- ジャンパー線をブレッドボードとArduinoソケットに差し込む
- ジャンパー線をブレッドボード内で配線する
LEDや抵抗などの電子機器、ジャンパー線はArduinoのソケットやブレッドボード穴に差し込むだけでOKです。
抵抗は極性がありませんのでどちら側のピンを挿入してもOKです。
機器故障させないためにも、USBケーブルを抜いた「通電OFF」状態にて配線を行ってください
プログラミングのやり方
本記事では、以下に示す「Arduino IDEプログラミング」と「mBlockプログラミング」の2通りのプログラミング方法について解説しています。
いずれか1つのプログラミング方法を用いることで、LESSON14の動作を行うことが可能です。
ArduinoIDE:文字列による命令語形式
mBlock:ブロックによるビジュアル形式
文字列を使わないmBlockの方が、直感的で分かりやすく小学生におすすめのプログラミング方法になります。
mBlockを使ってプログラミングをする方は、mBlockの説明まで読み飛ばしてください。
Arduino IDEプログラミング
Arduino IDEとは統合開発ソフトウェアで、C言語のような文字列を用いたプログラミング方法です。
プログラミングするにあたり、ある程度の命令語を知っておく必要があります。
Arduino IDEのインストール方法については、以下の記事で詳しく説明しています。
日本語版のArduino公式リファレンスが巻末に記載されているので、関数を調べるときに重宝します!(私も所有しています)
プログラミング方法
Arduino IDEを使って、文字列プログラミングを行います。
Arduino IDEを使ったプログラミング~動作確認方法については、以下の記事で詳細説明しています。
Arduino IDEプログラム
/* 作品名:LESSON14 */
/* 作成者:せでぃあ https://cediablog.com */
/* パッシブブザーで「かっこう」を奏でる */
int BTN_SOCKET = 2; //押しボタン入力ソケット番号
int LED_SOCKET = 3; //LEDランプ出力ソケット番号
int BZ_SOCKET = 4; //ブザー出力ソケット番号
int C4 = 262; //音階「ド」の周波数
int D4 = 294; //音階「レ」の周波数
int E4 = 330; //音階「ミ」の周波数
int F4 = 349; //音階「ファ」の周波数
int G4 = 392; //音階「ソ」の周波数
void setup() {
// put your setup code here, to run once: プログラム起動時1回だけ処理される回路
//入出力の割り当て
pinMode(BTN_SOCKET, INPUT); //2番ピンは入力として使用
pinMode(LED_SOCKET, OUTPUT); //3番ピンは出力として使用
pinMode(BZ_SOCKET, OUTPUT); //4番ピンは出力として使用
//初期化処理
digitalWrite(LED_SOCKET , LOW); //LEDランプ出力をOFFする
}
void loop() {
// put your main code here, to run repeatedly: プログラム起動後ループ処理される回路
if(digitalRead(BTN_SOCKET)== 1){ //押しボタンが押されたとき
digitalWrite(LED_SOCKET , HIGH); //LEDランプ出力をONする
tone(BZ_SOCKET,G4,500); //音階「ソ」を0.5秒鳴らす
delay(500); //音が出ている間は待つ
tone(BZ_SOCKET,E4,500); //音階「ミ」を0.5秒鳴らす
delay(500); //音が出ている間は待つ
delay(500); //0.5秒ウェイト
tone(BZ_SOCKET,G4,500); //音階「ソ」を0.5秒鳴らす
delay(500); //音が出ている間は待つ
tone(BZ_SOCKET,E4,500); //音階「ミ」を0.5秒鳴らす
delay(500); //音が出ている間は待つ
delay(500); //0.5秒ウェイト
tone(BZ_SOCKET,D4,500); //音階「レ」を0.5秒鳴らす
delay(500); //音が出ている間は待つ
tone(BZ_SOCKET,C4,500); //音階「ド」を0.5秒鳴らす
delay(500); //音が出ている間は待つ
tone(BZ_SOCKET,D4,500); //音階「レ」を0.5秒鳴らす
delay(500); //音が出ている間は待つ
tone(BZ_SOCKET,C4,1000); //音階「ド」を1.0秒鳴らす
delay(1000); //音が出ている間は待つ
delay(500); //0.5秒ウェイト
tone(BZ_SOCKET,D4,500); //音階「レ」を0.5秒鳴らす
delay(500); //音が出ている間は待つ
tone(BZ_SOCKET,D4,500); //音階「レ」を0.5秒鳴らす
delay(500); //音が出ている間は待つ
tone(BZ_SOCKET,E4,500); //音階「ミ」を0.5秒鳴らす
delay(500); //音が出ている間は待つ
tone(BZ_SOCKET,F4,1000); //音階「ファ」を1.0秒鳴らす
delay(1000); //音が出ている間は待つ
tone(BZ_SOCKET,D4,500); //音階「レ」を0.5秒鳴らす
delay(500); //音が出ている間は待つ
tone(BZ_SOCKET,E4,500); //音階「ミ」を0.5秒鳴らす
delay(500); //音が出ている間は待つ
tone(BZ_SOCKET,E4,500); //音階「ミ」を0.5秒鳴らす
delay(500); //音が出ている間は待つ
tone(BZ_SOCKET,F4,500); //音階「ファ」を0.5秒鳴らす
delay(500); //音が出ている間は待つ
tone(BZ_SOCKET,G4,1000); //音階「ソ」を1.0秒鳴らす
delay(1000); //音が出ている間は待つ
tone(BZ_SOCKET,E4,500); //音階「ミ」を0.5秒鳴らす
delay(500); //音が出ている間は待つ
tone(BZ_SOCKET,G4,1000); //音階「ソ」を1.0秒鳴らす
delay(1000); //音が出ている間は待つ
tone(BZ_SOCKET,E4,500); //音階「ミ」を0.5秒鳴らす
delay(500); //音が出ている間は待つ
tone(BZ_SOCKET,G4,1000); //音階「ソ」を1.0秒鳴らす
delay(1000); //音が出ている間は待つ
tone(BZ_SOCKET,E4,500); //音階「ミ」を0.5秒鳴らす
delay(500); //音が出ている間は待つ
tone(BZ_SOCKET,F4,500); //音階「ファ」を0.5秒鳴らす
delay(500); //音が出ている間は待つ
tone(BZ_SOCKET,E4,500); //音階「ミ」を0.5秒鳴らす
delay(500); //音が出ている間は待つ
tone(BZ_SOCKET,D4,500); //音階「レ」を0.5秒鳴らす
delay(500); //音が出ている間は待つ
tone(BZ_SOCKET,C4,1000); //音階「ド」を1.0秒鳴らす
delay(1000); //音が出ている間は待つ
digitalWrite(LED_SOCKET , LOW); //LEDランプ出力をOFFする
}
delay(100); //0.1秒ウェイト
}
上記がパッシブブザーを使った、メロディー演奏のプログラムになります。
Arduino IDEのプログラム画面にコピーアンドペーストすることで、動作確認まで進めることができます。
各プログラム列の右側にプログラム内容をコメント記入してありますので参考にしてください。
tone関数が連続するので、入力間違いにご注意ください
命令語の解説
今回のプログラムで使用した命令文について、解説します。
変数のデータ型指定
変数のデータ型を指定するものです。
今回はピンソケット番号を代入するので整数を扱う「int型」を指定します。
またアナログ出力値は「0~255」の整数を扱いますので、同じく「int型」を指定します。
データ型 | 説明 | 扱える範囲 |
---|---|---|
int | 2バイトの整数を代入可能。 | -32768~32767 |
long | 4バイトの整数を代入可能 | -2,147,483,648~2,147,483,647 |
float | 4バイトの小数を代入可能。 | 3.4028235×1038~-3.4028235×1038 |
char | 1バイトの値を代入可能。文字列の代入に利用されます。 | -128~127 |
boolean | 0または1のみ代入可能。フラグのON-OFFなどに利用されます。 | 0,1 |
pinMode(入出力番号,INPUTまたはOUTPUT)
指定したデジタル入出力ソケット番号の機能を指示します。
入力として使用する場合は「INPUT」、出力の場合は「OUTPUT」を指定します。
digitalWrite(入出力ソケット番号,HIGHまたはLOW)
指定したデジタル入出力ソケット番号の電圧をON、またはOFFします。
ONさせたいときは「HIGH」、OFFさせたいときは「LOW」を指定します。
if 文
条件が成立しているときのみ、{ }内の文が実行されます。
条件が成立しなければ、{ }内の文は処理されず、次の処理に移ります。
if( 条件 ){
条件成立時に実行する文 ;
}
digitalRead(入出力番号)
指定したデジタル入出力ソケット番号の状態がON、またはOFFであるか確認します。
ONのときは「HIGH」、OFFのときは「LOW」の値が返ってきます。
delay(時間)
()内で指定した時間(単位はmsec)だけ、プログラム実行を待たせます。
マイクロ秒単位で指定したい場合は、delayMcroseconds(時間)を使います。
比較演算子
比較演算子 | 説明 |
---|---|
A == B | AとBが等しい場合に成立 |
A != B | AとBが等しくない場合に成立 |
A < B | AがBより小さい場合に成立 |
A <= B | AがB以下の場合に成立 |
A > B | AがBより大きい場合に成立 |
A >= B | AがB以上の場合に成立 |
tone関数
tone関数を使うことで、パッシブブザーから指定した音階を鳴動させることができます。
ここで注意が必要なのが、鳴動時間分以上のプログラムdelay関数を直後に記載する必要があることです。
ブザー出力している間も、次のプログラムが実行されてしまうのでdelayでプログラムも一時停止させてください。
音を出しながら別の動作をさせたい場合は、tone直後のdelayは不要です
プログラミング初心者の方に、おすすめなArduinoの参考書を紹介しています!
mBlockプログラミング
ここからは、mBlockを使ったプログラムの作り方を解説します。
アップロードモードオンでのプログラミング方法を紹介します
- デバイスにArduino Uno R3を追加する
- 接続モードを「アップロードモードON」にする
- mBlockプログラムを作成する
- プログラムをArduino本体に転送する
これらの基本操作方法については、こちらの記事を参照してください。
動画を参考にプログラミングしてみよう
mBlockを使ったプログラム内容
今回はパッシブブザーの鳴動音階制御する際に緻密な出力波形制御が必要となるため、必ず「アップロードモード オン」にてプログラムを作成してください。
プログラム開始条件が「Arduino Unoが起動したとき」になっている点に注意してください。
以下のプログラムが動作プログラムになります。
mBlockのArduino専用ブロックについては、こちらの記事にて詳しく説明しています。
動作確認方法
- 押しボタンを押すと童謡「かっこう」のメロディー演奏を実行するか?
- メロディー演奏と同時にLEDが点灯するか?
- メロディー演奏が完了するとLEDが消灯するか?
上記項目について確認していきましょう。
押しボタンを押すと童謡「かっこう」のメロディー演奏を実行するか?
押しボタンを押した直後にメロディー演奏が開始されることを確認してください。
まったく音がでないとき
パッシブブザーの極性が反対になっていないか?確認してください。
音程が外れている、音の長さが不自然なとき
音階鳴動ブロックの「音階記号」「鳴動長さ数値」指定が間違っていないか確認してください。
メロディー演奏と同時にLEDが点灯するか?
押しボタンを押した直後にメロディー演奏と同時に、LEDランプが点灯することを確認してください。
点灯しないときは、出力ブロックの状態指示が「高」になっていることを確認してください。
メロディー演奏が完了するとLEDが消灯するか?
メロディー演奏が終わった後で、LEDランプが消灯することを確認してください。
消灯しないときは、出力ブロックの状態指示が「低」になっていることを確認してください。
パッシブブザーを使ったメロディー演奏制御のまとめ
- パッシブブザーは一定周波数の矩形波出力によって鳴動可能な電子機器
- ArduinoIDEでは「tone」関数、mBlockではブザー鳴動ブロックで鳴動制御を行う
- mBlockでパッシブブザーを制御する場合は「アップロードモード オン」必須
小学生のお子様には断然、ビジュアルプログラミングがおすすめです!
ちがう曲の演奏プログラムにもチャレンジしてみてください!
最後まで読んでいただき、ありがとうございました。
トランジスタを使ってブザー音量を大きくできます!
子供の成長を育む!小学生のお子様にぴったりなプログラミング教室が見つかるように厳選しました!
Arduinoスクラッチプログラミングのおすすめ参考書について詳しく説明しています。
Arduinoプログラミング(スクラッチも)を使った電子工作を紹介しています。
小学生におすすめなスクラッチ学習本を紹介しています。
コメント