[BACK]

Arduinoで電子ピアノの製作 その2

Update : 2021/9/8

以前に製作したArduino電子ピアノ。 余ったピンは拡張用として使えるようにピンヘッダに接続してあったのですが、
そこに接続するスピーカーボードや拡張ボックスを作ってみました。


拡張用ピン
拡張用ピン

拡張用ピンは10ピンのピンヘッダで、Arduino NanoのA0〜A4番ピンと、+5V、グランドが接続されています。 誤挿入防止用に1本、ピンを抜いてあり、対向コネクタはその部分をボンドで埋めています。

また、圧電ブザーはダイレクトにArduinoと接続していたのですが、別の3ピンのピンヘッダで、圧電ブザーと拡張用コネクタのどちらに出力するのか選択できるようにしました。

スピーカーボード
スピーカーボード回路図 スピーカーボード

手元に「2SD1484K」と小型スピーカーが余っていたので(笑)、ちょっとスピーカーを鳴らすボードを作ってみました。 回路は左図のようにしました。 手持ち部品の関係でちょっとバイアスの設定が甘いです...

で、こちらも余っていた板切れの上に基板とスピーカーを固定して完成! 圧電ブザーとはまた違った音になりました。 しかし、トランジスタ1石だけだと効率が悪いです。

拡張ボックス
拡張ボックス 拡張ボックス

デジタルアンプとスピーカー、そして5個のボリュームを収めた拡張ボックスを作ってみました。 やっぱりデジタルアンプは効率が良いです(笑)。

音もだいぶ違うので、ちょっと録音してみました。

1石アンプは入力前にハイカットしているので、音がまろやかです。

さて、この5個のボリュームを使ってイロイロと音色を変化させられるか、プログラムを作ってみたいと思います。

Mozzi対応の改造
回路図rev0.02

Mozziという強力なプログラムに挑戦してみました。 このソフトウェアによって合成された音はPWMとしてD9ピンから出力されるので、この端子にアサインしていたKeyスキャン用の信号をD13ピンに移動しました。 そしてD9ピンは圧電ブザー拡張コネクタの4番ピンに接続しました。 また、圧電ブザーは拡張コネクタの6番ピンに接続しました。 こうしておくと、圧電ブザーは4番ピンと6番ピンをショートピンで接続すれば使えるようになります。

これでMozziを使う準備が整いました。

スピーカーボックス
スピーカーボックス スピーカーボックス

拡張ボックス、デジタルアンプで音量が大きくなったのは良いのですが、ケースに直接スピーカーを取り付けたため、ビビりが気になってきました。 と言う事で、拡張ボックスに収まる小さなスピーカーボックスを作りました。

MDF材を切って張り合わせ、塗装して、小型のスピーカーを組み込みました。 サイズはギリギリ、何とか収まりました。 ボックスをよく見ると少し歪んでるのですが、音はビビりも無くなり、格段に良くなりました。

単音で鳴らしてみる

まずは単音で鳴らしてみるプログラムを作成しました。 サンプルプログラムを見ながら、キースキャンを追加してみると、あっさりと音が出ました。 圧電ブザーと違い、聞きなれた正弦波の音です(笑)。

さらにMozziにはADSR(Attack、Decay、Sustain、Release)も用意されているので組み込みました。 そしてADSRのパラメータの中で、「Decay Level, Atack Time, Decay Time, Sustain Time, Release Time」の5つをボリュームで可変できるようにしました。 これによって、音色が随分変わります。 と言うか、こんな小さなチップでよくこんな音がでるな、とビックリです。

と言う事で、単音のソースをこちらに置いておきます。

複数音、同時発音に挑戦

お次は複数音を鳴らしてみるプログラムを作成しました。 同時発音数は、4和音まで、と言う事で4音にしました。 キースキャンにちょっと工夫が必要でしたが、まぁ簡単に出来ました。 今までずっと単音だったので、和音がなった時はちょっと感動でした(笑)。

と言う事で、複数音のソースをこちらに置いておきます。 ADSRやピッチベンドも組み込んであります

倍音合成に挑戦

倍音合成すると面白いかな、と思いプログラムを作成しました。 ボリュームが5個あるので基音から5次の倍音までを、任意の音量で合成するようにしました。 で、プログラム自体は簡単に出来たのですが... updateAudio()での計算量が多くなるせいか、音がプチプチと切れてしまいます。

と言う事で、とりあえず倍音合成のソースをこちらに置いておきます。 もっとパワーのあるCPUですと、綺麗に音が出るかもしれません

録音出力、アナログアンプ
8次LPF 8次LPF

Mozziの音ですが「なんだかノイズが多い」と気になりだしました。 PWM出力を強引にデジタルアンプに入力して、またPWMでスピーカに出力しているのが悪いのかな、と思い、アナログフィルタでPWM信号を復調してみようとフィルタを作ってみました。

調べてみると、Arduinoから出力されるPWM信号のキャリアは約32KHzと低いので、なかなか厄介ですが、オペアンプ2個で8次ローパスフィルタを組んでみました。 カットオフは約7.5KHzでバターワースです。 32KHzで100dB以上の減衰なので十分でしょう。

録音出力、アナログアンプ 録音出力、アナログアンプ

フィルター後の出力はミニジャックで出力すると同時に、アナログアンプにも接続しました。 アナログアンプは定番の「LM386」です。

回路を組んで、ケースに組み込んで、接続ケーブルを作って、となかなかコンパクトに出来ました。 で、肝心の音なのですが、アナログフィルター後でも聞こえるので、Mozziの実力なのかな、と言う感じです。 とは言え、これで録音する事も出来るようになりました。

サンプル

と言う事で、サンプルを2曲ほど。

  • [♪] - 単音で、ADSRをオンにしたサンプル
  • [♪] - 複数音で、ADSRをオフにしたサンプル

mozziのおかげでArduino Nanoでもかなり多彩な音が出せるようになりました。 そしてかなりイロイロな物を作って実験した製作となりました。 楽しい〜(笑)。

mozziはもっとイロイロな事が出来るようですが、今回の製作はひとまずこれでオシマイにします。

シン・拡張ボックス
拡張ボックス 拡張ボックス

スピーカー付きの拡張ボックスと録音用のボックスが分かれていて使いにくい、と思い、一つにまとめました。 MDF板をベースに基板を並べ、スピーカーボックスをネジ止め、トップカバーはアクリル板で、スペーサーで固定しています。 パワーアンプは「LM386」のアナログアンプにしました。

ちょっと大きくなりましたが、やっぱり一つにまとまっている方が使いやすいです(笑)。


©みぞ