
もう一度、ギターを弾き、Peavey ReValverやその他のAmplitubeを介してサウンドを制御し、MIDIコントローラーを購入することを考えました。 Guitar Rig Kontrol 3などのブランド化されたデバイスの価格は約13,000ルーブルで、床に取り付けられたパフォーマンスしかありません。 つまり、いくつかの規制当局の位置を迅速に変更することは非常に問題です。
さまざまなフェーダーとエンコーダーがあるため、さまざまなDJ指向性コントローラーがより面白く見えました。 ビジネスと喜びを組み合わせて、MIDIコントローラーを自分で作成することにしました。
初期要件:2〜7フェーダー、同数の回転式ポテンショメーター/エンコーダー、約10個のボタン、USB接続。
その後、彼はコンポーネントを選択し始めました。 Arduinoが選択した理由は、可用性のためです。原則として、同じATmega32u4、STM、または別のコントローラーを使用できます。 地元のラジオ店で見られるフェーダーとボタン。 エンコーダーとポテンショメーターはかつて購入されました。 ガレージで見つかったタンブラー。 ケースは、DVDプレーヤーのトップカバーから作成することにしました。
付属品:
- Arduino UNO R3 1個
- フェーダーsp3-25a 5個
- 口。 ポテンショメータ3個。
- エンコーダー1個
- ボタンpbs-26b 16個
- DVDカバー1枚
- トグルスイッチ2個。
まず、ケースを曲げ、ドリルでフェーダー用の穴を開けました。

それから彼はタンブラーと口のために穴を開けました。 ポテンショメーター、ボタンの位置をマーク。 19にドリル(および対応するドリル用カートリッジ)がなかったため、13にボタン用の穴を開けてから、スキャンでそれらを増やしました。

ベースの準備ができたので、このすべてをArduinoに接続する方法について考えることができます。 この問題を研究中に、私は素晴らしいHIDUINOプロジェクトに出会いました。 これはArduinoに搭載されているATmega16u2のファームウェアです。これにより、デバイスはUSB-HID MIDIデバイスとして識別されます。 MIDIデータはUARTを介して31250ボーの速度でのみ送信できます。 MIDIイベントコードで定義されたソースコードを散らかさないように、 このライブラリを使用しました 。
Arduinoを使用したので、すべての周辺機器が既に接続されるシールドを作成することにしました。
シールドスキーム:
図からわかるように、ボタンはマトリックスパターンで接続されています。 内蔵のプルアップ抵抗ATmega328が関係するため、ロジックは逆になります。
ボタンの初期化
for(byte i = 0; i < COLS; i++){ //-- pinMode(colPins[i], OUTPUT); //-- . 1 digitalWrite(colPins[i], HIGH); } for(byte i = 0; i < ROWS; i++){ //-- --------- pinMode(rowPins[i], INPUT); //-- -- digitalWrite(rowPins[i], HIGH); }
値の読み取り
for(byte i = 0; i < COLS; i++) //- ----- { digitalWrite(colPins[i], LOW); //-- 0--- for(byte j = 0; j < ROWS; j++) //-- -- { //-- -- dval=digitalRead(rowPins[j]); if ( dval == LOW && buttonState[i][j] == HIGH ) MIDI.sendNoteOn(kpdNote[j][i],127,1); if ( dval == HIGH && buttonState[i][j] == LOW ) MIDI.sendNoteOff(kpdNote[j][i],127,1); buttonState[i][j] = dval; } digitalWrite(colPins[i], HIGH); }

私は印にダイオードを置くのを忘れました、私はボタンにはんだ付けしなければなりませんでした。
ポテンショメータは、4052bマルチプレクサを介してADC入力に接続されます。
ポテンショメーターの位置の読み取り
for(byte chn = 0; chn < 4; chn++) //- { set_mp_chn(chn); //-- val=analogRead(0) / 8; //-- X if (abs(val-PrVal[chn]) > 5) //-- . { //-- 5, MIDI.sendControlChange(chn,val,1); PrVal[chn]=val; } val=analogRead(1) / 8; //-- Y X if (abs(val-PrVal[chn+4]) > 5) { MIDI.sendControlChange(chn+4,val,1); PrVal[chn+4]=val; } }
エンコーダはハードウェア割り込みでハングしました。
エンコーダー読み取り
void enc() // { currenttime=millis(); if (abs(ltime-currenttime)>50) // { b=digitalRead(4); if (b == HIGH && eval<=122) eval=eval+5; else if (b == LOW && eval>=5) eval=eval-5; MIDI.sendControlChange(9,eval,1); ltime = millis(); } }
回路基板をスプリントレイアウトで印刷し、粘着フィルムと塩化第二鉄を使用して古き良きLUT'omで作成しました。 はんだの品質はひどいはんだの影響を受けます。
レディシールド:
ファームウェアをATmega32u4にアップロードするために、ICSPの2つのピンを短時間短絡させた後、 Flipを使用しました。 その後、これらのピンにボタンを接続しました。

ファームウェアは動作しますが、壁とフロントパネルを固定するために残ります。 すべてを所定の位置にマークしたので、タイムバーを描画するのに何よりも時間がかかりました。 このように見えた:
- 1.グラフ用紙を画像の背景として設定しました
- 2.マークされた穴
- 3.結果の印刷
- 4.すべての穴を切り取ります
- 5.すべての要素を緩めて取り外します
- 6.パネルが取り付けられ、すべてのボタン/ポテンショメーターが所定の位置に取り付けられました
- 7.テンプレートとケースの間に矛盾がありました
- 8.すべての穴が一致するまで手順2に進みます。
パネルは、印刷およびラミネート加工されたフィルムでコーティングされたミリメートルPETで作られ、穴はcdrファイルを使用してレーザーで切断されました。 イルクーツクの広告主にとっては、これだけで240ルーブルしかかかりません。

合板からののこぎりで切った側壁。
現在のデバイスのタイプ:

コンポーネントのコスト:
- Arduino UNO R3 320 p。
- フェーダーsp3-25a 5x9 = 45 p。
- 口。 ポテンショメーター+ 85 pを処理します。
- エンコーダー15ページ
- ボタンpbs-26b 16x19 = 304 p。
- パネル240ページ
- マルチプレクサー16ページ
- 合板、テキソライト、トグルスイッチ、DVDケース-私の場合は無料です。
合計:1025こする。
コントローラは、それに割り当てられたタスクを処理し、ほとんどすべてのオーディオ処理プログラムでサウンドを制御します。
合板を汚れで覆い、プレキシガラスから底部カバーを切り取ることが計画されています。 また、フロアコントローラを接続するための拡張ポートを追加します。
githubのArduinoとsignetのコード: https : //github.com/vlr-baik/MyMidi