Midi Firmware for Arduino Uno (Moco)
Midi Firmware for Arduino Uno (Moco)
1. はじめに
2010年に発表されたArduino UNOは、USBまわりの設計が変更されました。
これまではUSB専用のチップが採用されていましたが、Unoでは汎用的なマイクロプロセッサに変更になりました。この変更によって、USB処理の柔軟性を増すことが出来るようになりました。
これまではUSB-シリアル変換処理を行う専用チップであるFTDI 社FT232RLによって、パソコン側はシリアルポートとして処理を行っていました。UnoでUSB処理用に新しくAtmel社のMega8U2(or 16U2)が導入されました。Mega8U2はこれまでと同様にシリアルポートの処理を行うようにプログラムさせています。しかし、Mega8U2/16U2のプログラムを変更する(ファームウエアを入れ替える)ことによって、例えばマウスやキーボードなどのHuman Interface Device(HID)などの処理を行うことが出来るようになります。
MocoはMega8U2用のMIDIファームウエアです。MocoをMega8U2/16U2のファームウエアと入れ替えることによって、パソコン側からはUSB-MIDI(Standard Midi Class)として認識されます。楽器を作る場合には最適です。
Mocoを使って作成したStandard Midi ClassのデバイスはWindowsやMacOSXでドライバが不要です。また。iPadで標準的に認識されます。
2. Mocoの動作原理
MocoはUSB-MIDIとシリアルMIDIの双方向の変換をするプログラムです。ArduinoのメインCPU側からはシリアルMIDIプロトコルを送受信します。パソコン側(USB側)はUSB-MIDIを送受信します。
Arduinoのメインプログラム側からは普通にMIDIの処理を行うだけで、パソコン側にUSB-MIDIとして認識されます。ArduinoのMIDIライブラリを使ったプログラムであればMocoを使うだけで、USB-MIDIデバイスを作ることができます。
Arduino でMIDIデバイスを開発する場合Arduino MIDI Libraryが使われます。MocoはAMLと互換性があります。
MocoはUSBの処理にLUFAを利用しています。
3. 開発の流れ NEW
dualMocoLUFAになって、デバイスの開発は比較的シンプルになりました。
具体的な手順は次の通りです。
1. DFUプログラムまたはISPによってMega8U2/16U2のファームウエアを入れ替えます。
2. Arduino-Serial モードでmega328のプログラムを書き込む
8u2のICSPコネクタのPIN4とPIN6をジャンパピンでつないでUnoをUSBに差し込むと、Arduino-Serialモードで動作します。
この状態で、Arduino IDEからUSB経由でプログラムできます。
3. USB-MIDIで動作の確認を行う
ジャンパピンを外して、UnoをUSBに差し込むとUSB-MIDIデバイスとして動作します。この状態でUSB-MIDIで動作の確認が出来ます。
プログラムに不具合がある場合には2に戻って再度Arduino IDEからmega328のプログラムを変更します。
4. アプリケーション例
(1) PSGシールド
GeniesさんとHKHacksさんの設計によるPSG Shieldはそのまま動作します。
Mega328にはオリジナルのファームウエアを入れて下さい。8U2のファームをMocoにするだけでPCからUSB直結でそのままPSG音源を鳴らすことが出来ます。
(2) FM音源シールド
OPLL(FM音源)用のシールドを開発中です。これもMocoで動作させる予定。
以下はMocoを使っているプロジェクトです。
(3) USB midi controller (Theremin style) on Arduino Uno
http://baldwisdom.com/usb-midi-controller-theremin-style-on-arduino-uno/
(4) AirHarp
http://www.airharp.com/
(5) DJ Shield 2 for arduino
http://www.dm9records.com/index.php/release/dj-shield2/
(6) USB MIDI interface for Raspberry Pi Controller
http://rpc.gehennom.org/2013/03/usb-midi-interface/
(7) A DIY Arduino MIDI Controller with Purpleheart
http://jazarimusic.com/finally-a-diy-midi-controller-with-purpleheart/
(8) Arduinoで作るMIDIコン @tadfmac さん
5. ダウンロード
Githubに移行しました。こちらを参照下さい。 !! UPDATED 2015/04/11
6. 終わりに
Arduinoばかりではなく、Adafruitの32u4ブレークアウトボードなどを利用して普通のUSB-MIDI<->USB-Serialのブリッジとして利用可能です。
また、Moco を使った汎用のMIDI I/OモジュールとしてMonakaも計画しています。
Dm9 Recordsさんがファームウエアの書き換え方法を公開してしています。
http://www.dm9records.com/index.php/tips/arduino/moco/
UPDATED 2012/12/28