Arduinoからパルス信号出力で圧電ブザーを奏でる
Arduino+圧電ブザーで電子ピアノ!
今回はArduinoから音階に合った周波数信号を出力し、出力した信号を圧電ブザーに入力することで音が出る回路を作成していきたいと思います。
その後、実際に音楽を奏でてみましょう。
Arduinoの導入については以前の記事を見ていただければと思います。
【Arduinoで電子工作-1】Arduinoの開発環境を整える【Hello World】
Arduinoで音楽を奏でるために必要なもの
今回行う圧電ブザーを用いた電子ピアノを作成する上で必要なものを紹介します。
- Arduino UNO
- 圧電ブザー ×1
- タクトスイッチ ×8
- カーボン抵抗330Ω ×8
- LED ×8
- ジャンパー線 ×複数
音を鳴らすだけならLEDとカーボン抵抗は必要ありません。
どの音階を押しているかをわかりやすくするためにLEDを入れています。
しかし、LEDが入っているほうが電子工作のやってる感が出るのでオススメです!!
圧電ブザーで音楽を奏でるためのArduino回路を作成
Arduinoと圧電ブザーで音楽を奏でるためには、どのような仕組みで圧電ブザーから音を鳴るのかを理解しなくてはなりません。
音が鳴る仕組みを理解しすると、Arduinoからどのような信号を出せばいいのかがわかります。
圧電ブザーの仕組み
圧電ブザーの中身は金属板に圧電セラミックスを貼り合わせたものが入っています。
圧電セラミックスは電気を流すことで伸縮します。
圧電セラミックスが伸びることで、金属板も同調して伸び、その時に「パキッ」っていう音が発生します。
電気のON・OFFを高速で繰り返すことで、繰り返し周波数に応じた音階の音が発生します。
そのため、Arduinoから出力する信号は、音階の周波数に合わせたパルス信号を出すことで圧電ブザーからは綺麗な音が発生します。
Arduinoで音楽を奏でるための回路設計
今回作成する回路図はこのようになります。
D3ピンからD10ピンはタクトスイッチの入力の読み込みに使用します。
どのスイッチを押されたかを判別するためですね。
この時、通電確認とどのスイッチが押されたかを押されたのかを確認するためにLEDと抵抗を設置しています。
LEDは無くても音は鳴りますので、いらなければ省いてください。
電圧はArduinoから出力される5Vを使用しています。
LEDの抵抗値計算は過去の記事を参照してください。
【電子工作入門1】 LEDを光らせるための知識
D2ピンは入力されたピンに対応したパルス信号を出力して、圧電ブザーに信号を入力します。
ブレッドボードで配線すると以下のようになります。
圧電ブザーで音楽を奏でるためのArduinoプログラムを作成
今回作成する電子ピアノのArduinoプログラムは以下のようになります。
void setup() { for(int i=3; i<=10; i=i+1) { pinMode(i, INPUT); //3~10ピンを入力ポートに設定 digitalWrite(i, HIGH); //3~10ピンを内部プルアップ } } void loop() { int t=0; if(digitalRead(3)==LOW) { t=523; //ド } if(digitalRead(4) == LOW) { t=587; //レ } if(digitalRead(5) == LOW) { t=659; //ミ } if(digitalRead(6) == LOW) { t=698; //ファ } if(digitalRead(7) == LOW) { t=784; //ソ } if(digitalRead(8) == LOW) { t=880; //ラ } if(digitalRead(9) == LOW) { t=988; //シ } if(digitalRead(10) == LOW) { t=1046; //ド } if (t!=0) { tone(2, t); } else { noTone(2); } }
1~7行目で3ピン~10ピンのセットアップを行っています。
3~10ピンはボタン入力信号を読み込む為に使用するため、入力ポートに設定します。
その時、入力ポートは内部プルアップしておきます。
プルアップについては後日、詳しく書きたいと思います。
今のところは0Vに接続されることで入力を検出するぐらいに思っていてください。
9~43行目で入力があったピンを検出し、それに応じた周波数を設定して2ピンから圧電ブザーにtone関数を使用して生成したパルス信号を送っています。
プログラム内にある変数tは発生させるパルス信号の周波数となっています。
実際の音階の周波数は以下の表となっており、今回この周波数を使用しています。
ド | レ | ミ | ファ | ソ | ラ | シ |
261.6 | 293.7 | 329.6 | 349.2 | 392.0 | 440.0 | 493.9 |
523.3 | 587.3 | 659.3 | 698.5 | 784.0 | 880.0 | 987.8 |
1046.5 | 1174.7 | 1318.5 | 1396.9 | 1568.0 | 1760.6 | 1975.5 |
※単位はHz
tone関数を使用することでduty比が50%のパルス信号を簡単に出力させることができます。
詳しいリファレンスはこちらを参照してください。
Arduino 日本語リファレンス【tone(pin, frequency)】
ボタンを押されていないときはnoTone関数を使用してパルス信号を停止させ、音が出ない様にしています。
その操作をLoopで繰り返して連続的に音が鳴るプログラムとなっています。
Arduinoによる電子ピアノ回路を実際に組んで弾いてみた
回路を実際にブレッドボード上に組んでみました。
配線がちょっと多くて見づらいですが、きちんと基板にはんだ付けしたらすっきりすると思います。
後日、基板にはんだ付けしてきちんとした回路を作成しようと思います。
実際に動作させてみましょう。実際に電子ピアノで「ドレミの歌」を弾いた動画です。
きちんとした音階で出力されて、メロディーで奏でられている事がわかると思います。
ということで、これにて電子ピアノの作成は完了です。
ボタンを増やすことで「#音」や出力できる音を増やすことができます。
また周波数を変えることでオクターブを変化させたりすることができます。
自分で作成することで自由にいじることができるのが、電子工作のいところですね。
このブログをよんで 実際に作られたかたは、いろいろとプログラムを変えてみていろいろと試してみて楽しんでいただければと思います。
【おまけ】Arduinoパプリカ奏でさせてみた
Tone関数を使用して、音階と音の長さを設定して米津玄師さん、foorinさんの「パプリカ」のサビだけですがArduinoに奏でさせてみました。
これは自分で弾くのではなく、Arduinoに出力させる音の順番と長さをプログラミングして自動で音楽が流れるようにしています。
この、8bitサウンド感が好きな方は好きなのではないのでしょうか?
このようなこともできるよっていう紹介でした。
いろんなセンサやスイッチを加えることで無限の拡張性を秘めているのがマイコンでありArduinoです。
この記事を読まれた方もどんどん開発していって電子工作ライフを楽しみましょう。
See you...