Midi Firmware for Arduino Uno (Moco)

2015年04月12日

Midi Firmware for Arduino Uno (Moco)

Arduino-Uno-SMD Close-up
Arduino-Uno-SMD Close-up

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を送受信します。

Moco on Uno

Moco on Uno

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経由でプログラムできます。

Jumper on ICSP

Jumper on ICSP

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音源を鳴らすことが出来ます。

http://shield.io/psg

PSGシールド

PSGシールド

(2) FM音源シールド

OPLL(FM音源)用のシールドを開発中です。これもMocoで動作させる予定。

FM音源(OPLL)

FM音源(OPLL)

以下は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 さん

Homepage

Link to Slideshare Page

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

  1. コメントはまだありません。
コメントは受け付けていません。