こんにちは、SEのトモです。
Arduino電子回路のレッスン4「ブザーを鳴らす」を実施しました。
Arudinoボードからブザーを接続させて音を鳴らすレッスンです。
使っているキット
Amazonで購入した
ELEGOO ARDUINO UNO 最終版スターターキットを使っています。
メインのArudinoボードに加えてセンサーやモーターなどの部品が63個も入っています。
今回使ったもの
アクティブブザー
パッシブブザー
Aruduinoボード
配線用のケーブル
アクティブブザーとは?
DC電源(乾電池のような直流電源)で音が鳴るブザー
ブザー本体に振動する素子が入っており、電圧をかけると決まった音程で鳴るブザー。
アクティブブザーの回路図
素子の上にプラスマークがついているのが特徴です。
ポイント
DC電源で電圧をかけるだけで音が鳴るので
パソコン、タイマ、アラーム、電子機器など
幅広い機器の音源に使われている。
パッシブブザーとは?
空気を振動させて音を発生するブザー。
周波数によって音程を変えられるのでメロディーが作れます。
パッシブブザーの回路図
音程 | 周波数 |
ド | 523Hz |
レ | 587Hz |
ミ | 659Hz |
ファ | 698Hz |
ソ | 784Hz |
ラ | 880Hz |
シ | 988Hz |
ド | 1047Hz |
ポイント
上の表に書いた通り、特定周波数を掛けると対応した音程で音が出ます。
うまく音程を並べる事で曲を流す事ができます。
実際に回路を作ってみる
今回はブザーとArudinoボードを配線するだけなので簡単です。
実際にブザーをつけるとこんな配線になります。
アクティブブザーのプログラミング制御
今回のスイッチ回路はスイッチのオンオフをArduinoボードがチェックするためのプログラミングが必要です。
と言ってもサンプルプログラムがあるので、流し込むだけです。
1)ArduinoIDEを起動
2)ファイルー開くでActiveのサンプルコードを開く
3)マイコンボードに書き込む
4)電源を入れる事で無事に音が鳴りました。
プログラムを解説
サンプルで使ったプログラムに赤字でコメントを追加しました。
ブザーのピンをHIGH⇒LOW、LOW⇒HIGHと変化させて音を鳴らしています
digitalwrite : 指定したピンをHIGHかLOWに変更する
delay: 待ち時間を1/1000秒単位に設定 1000=1秒
待ち時間が異なるループを2つ用意しているので
ピー、ブー、ピー、ブー、ピー、ブー・・・・
のような繰り返しの音が出ます。
もう一つループを追加したり、待ち時間を変える事で鳴り方が変えられます♪
パッシブブザーのプログラミング制御
今回はパッシブブザーの方も同時に学習したので、同じようにArudinoボードにサンプルプログラムを流し込みして動作チェックしました。
1)ArduinoIDEを起動
2)ファイルー開くでpassive_buzzerのサンプルコードを開く
3)マイコンボードに書き込む
4)ドレミファソラシドの音階でブザーが鳴った
プログラムを解説
サンプルで使ったプログラムに赤字でコメントを追加しました。
melodyの格納部分
結構難しいプログラムになっていると思います。
最初にmelodyに、ドレミファソラシドの周波数の情報を格納しています。
この時「配列」と「ファイル呼び出し」の2つのテクニックでmolodyの中にデータを格納しています。
まずmelody[] のように変数の後ろに[ ] を付けると複数の情報を入れられる変数に変化します。
この入力方法を配列と呼び、複数個のデータを1つの変数(コンピュータに記憶させる場所)に保存したい時に使います。
それからNOTE_C5、NOTE_D5 のような見慣れない文字が並んでいますが、#includeで周波数の対応表ファイル「pitches.h」を呼び出して使えるようにしています。
周波数523はド、587はレ、659はミと数字で暗記するのは難しいので、このような対応表を別ファイルで作って読み込んで使えるようにしています。
理由
配列とファイル呼び出しの2つのテクニックを使って、後々melody[0]=ド、melody[1]=レ、melody[2]=ミ、melody[3]=ファ。。。 のように順番に数値を順番に変えるだけで、メロディーの周波数を呼び出せるようになります。
音を鳴らす動作部分
上記初期セットアップのmelodyデータを繰り返し呼び出して使っています。
tone: ピンから指定の周波数をアウトプットする
toneコマンドを使って8番ピンから指定された周波数の電気を流します。
コマンドに続いてポート、周波数、長さを指定しますが、これらを引数と呼びます
ポート:どのピンからアウトプットするか指定 今回は8番
周波数:ピンからアウトプットする周波数 今回はmelody[]のデータで指定
長さ: 音を流す時間の長さを1/1000秒で指定 今回は500で0.5秒の長さ指定
やはりポイントは事前にセットアップしたmelodyの配列データでしょう。
動作部分はmelodyに渡す引数を0から7まで変更しているだけですが0.5秒音を鳴らし、1秒待つ、次の音程を0.5秒流すをひたすら繰り返しているだけです。
これでドレミファソラシドが鳴ります。
なんとなく感覚ではわかりそうな感じですが、結構テクニックを駆使していると思います。
ここまでの作業内容を動画にまとめてみました。
作業内容を動画にまとめましたので、ご覧ください。
まとめ
今回はブザーを使って、Arudinoボードから音を鳴らす方法を学習しました。
今回は回路がシンプルだったので、アクティブブザーとパッシブブザーを同時に攻略しました。
今回は回路そのものは問題ないですが、プログラミング部分に配列やファイル呼び出しが使われており、プログラムの解説部分を考える事が難しかったです。
電子回路やプログラムを覚えていくためには、このような考える作業が不可欠です。
初めて回路に挑戦する方には、今回のプログラム部分は難解かもしれませんが、慣れていく事の方が大事だったりするのでどんどん次の回路に挑戦していきましょう。