ArduinoMIDIステッパーシンセ
コンポーネントと消耗品
> |
| × | 1 | |||
| × | 4 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 4 |
必要なツールとマシン
> |
|
このプロジェクトについて
ここで実際の動作をご覧ください。
フロッピードライブの音楽を見たとき、私はいつものようにYouTubeを閲覧していました。フロッピードライブがステッピングモーターによって制御されることを知っていたので、私は自分のステッピングモーターサウンドジェネレーターを作ることにしました。
私は以前に人々がこれを行ったことがあるのを見たことがありますが、すべてのインスタンスがコードを共有していないか、コードに大きな欠陥があるか、制限されていました。
学校でC ++を学んでいたので、自分のスキルを活用することにしました。
私が本当にやりたかったのは、シンプルで使いやすく、変更しやすいコードを作成することでした。そしてそれはまさに私がしたことです!
全体 プロセス
まず、何をする必要があるかを考えました。最も基本的な用語では、MIDIデータを抽出し、それをステッピングモーターが対応するピッチを作成する速度に変換する必要がありました。
MIDIデータの抽出
この部分はかなり簡単でした。 MIDIライブラリを利用することで、MIDIデータを解釈し、それを別の関数に送信して速度を制御することができました。
ステッパーの制御
A4988ステッピングモータードライバーには、ステッピングモーションを直接制御する2つのピンがあります。 STEPとDIR。 DIRは、モーターが状態に応じて時計回りまたは反時計回りに回転するかどうかを制御し、STEPは、ステッパーが高くなるたびに1ステップ移動します(マイクロステッピングの解像度によって異なります)。音は方向の影響を受けないので、単に低く設定します(または単にアースに接続します)。これで、digitalWriteコマンドを使用してモーターを動かすことができます。
課題
このプロジェクトを扱う上での主な課題は、一度に複数のステッピングモーターを駆動したかったので、delay()コマンドを使用することは問題外でした(そうしないと、モーターが同時に実行されませんでした)。代わりに、micros()コマンドを使用して、ステッパーにパルスを送る時間を計算しました。ステッピングモーターごとに異なる速度値が存在するため、速度変数を配列に変換し、そのインデックスをモーター番号とMIDIチャネルに対応させました。私はもともとmillis()コマンドを使用していましたが、異なるピッチを生成するための解像度が不足していることがわかりました。
アレイを使用してステッピングモーターの速度を制御するということは、すべてのモーターに1つの変数を使用できることを意味します。これにより、アレイのサイズを変更するだけで、arduinoに任意の数のステッパーを制御させることができます。
速度の計算
テストでは、(トーンコマンドを使用して)440 Hzの方形波をステップピンに送信し、ステッピングモーターがA440ピッチを作成したことを確認しました。ステッパー関数に送信される速度値はマイクロ秒単位の周期であるため、音符の周波数を周期に変換するだけです。これらの値をpitchValuesという別の配列に入れ、そのインデックスをMIDIノート値に対応させます。アレイを使用することで、ステッパーの再生可能範囲を制御することもできました。速度値がゼロの場合は停止と見なされるようにしました。
計算の代わりにアレイを使用することは、各音の速度を完全に制御し、楽器の範囲を効果的に設定することを意味しました。また、ステッピングモーターが共振周波数に近づくと、非常にひどいノイズが発生します(ストールしているように見えます)。それが何であるかを識別し、これを解決するためにピッチの値を1オクターブずつ変更することができます。私の場合、共振周波数はF3前後だったので、これを修正するには、E3、F3、F#3を1オクターブ変更する必要がありました。 (これは「TuneStepper.ino」コードを使用して確認できます)
USBMIDIデバイスの作成
デバイスをMIDIデバイスとして見られるようにしたかったので、少し掘り下げてみたところ、ボード上のAVRチップのファームウェアを変更できることがわかりました。ファームウェアはHIDUINOまたはmocuLUFAである可能性があります。デュアルブートオプションがあり、AVRチップを再フラッシュすることなくArduinoを簡単に再プログラムできるため、mocuLUFAを選択しました。 ICSPヘッダーにジャンパーを接続するだけで、USBMIDIとUSBシリアルを切り替えることができます。
コード
GitHubリポジトリ
単に私のGitHubにアクセスしてください。 Arduinoにコードを構成してインストールする方法についての説明があります。https://github.com/jzkmath/Arduino-MIDI-Stepper-Motor-Instrument カスタムパーツとエンクロージャー
ステッピングモーターを所定の位置に保持します。モーターに「指」を追加します。純粋に美的目的のため。 回路図
このシールドを使用したい場合のジャンパーの場所。 ブレッドボードに配線する場合は、ここにあります フリッツのブレッドボード配線の場合は概略。ブレッドボード図に示されていない部品値の一部が含まれています。 MIDI DINジャックを使用する場合は、このレイアウトを使用してください。 製造プロセス