arduinoをMIDIデバイスとして認識させようとして躓いた話

 大学の課題でメディアアート作品を作るにあたってarduinoを使ってMIDI入力しなければならない状況になった。実現にはarduino自体のファームウェアを書き換えてPC側からの識別をMIDI機器に変える必要がある。今回は、同じようなことについて悩む人が少しでも減るようにTipsを記そうと思う。一応MIDIとして動作するところまでは出来たものの、苦戦したし今でもわからないこともあるが勘弁願いたい。

今回試した環境はarduino UNO(atMega16U2)である。

まず必要なもの。二つをダウンロードしてインストール、或いは解凍してほしい。

MOCO for LUFA

ATMEL FLIP(Windows/Linuxユーザーであれば)

Macユーザーはdfu-programmerを使ってターミナルから書き込めるはずなんだけど、ネットに乗っていた情報通りやってもMacbook Pro Letinaでうまくいかなかったので今回はwindows10で行った。

ここからは手順。

1.arduinoのUSB接続を外した状態にする。

2.reset2ピンとその隣のGNDをショートさせる。場所はリセットスイッチ近くの6個ピンが並んでいるところのUSBジャック側ふたつ。

3.ショートさせた状態でUSB接続する。うまくいくとLEDが数回明滅した後点灯する。

4.windowsのデバイスマネージャーに不明なデバイスが認識されるので、右クリックして手動でドライバをインストールする。インストールしたディレクトリのAtmel/Flip x.x.x/usbを選択すると、デバイス名がatmega16U2と認識される。この作業を怠るとFilpでAtLibUsb.dll not foundといった感じに表示されて先に進めなくなる。

5.FLIPを起動してfile>load HEX Fileから解凍したmocolufa-mastar/HEX/dualMoco.hexを選択する。

6.Erace、Program、Verifyにチェックが入っているか確認してRunをクリック。

7.USBを差しなおす。

これでMIDIデバイスとして認識されたはずである。5と6手順が違った場合は、0x000 not blankみたいなエラーが出る。


次にarduinoのスケッチを書き込むのだが、ファームウェアを書き換えたため書き込むには一手間加える必要がある。

MOS12ピン(さっきショートさせたGNDの隣)とGND(さっきのところ)をショートさせた状態でUSBを差しなおす。これを行うことでarduino IDEからスケッチが書き込める。ショートさせない状態で差しなおせばMIDIドライバとして認識される。(arduino IDEでuproadを行うとエラーになる。)

スケッチは

#include <MIDI.h>

MIDI_CREATE_DEFAULT_INSTANCE();

と最初に書き加える。

ちなみにMIDIを出力するには

    MIDI.sendNoteOn(note,velocity,ch);

と書けばよい。noteは音階、velocityは打鍵の強さ(確か0~127)、chはMIDIのチャンネルを示しているので適宜intで変数を宣言するなり、直接打つなり目的に合った使い方をして欲しい。今回はchを1にした。

この手順でAbleton Live9から認識しているのを確認した。(2015/11/19)下記の動画はフォトリフレクタを使ってタイミングを入力し、Ableton Live9でDRUM RACKに909のKickをアサインして鳴らしている。


この記事が気に入ったらサポートをしてみませんか?