SlideShare a Scribd company logo
1 of 29
Download to read offline
Arduinoで作るMIDIコン
2014.5.17 @tadfmac
14年5月17日土曜日
自己紹介
   @tadfmac
   http://soundcloud.com/tadfmac
実験音楽の人。自然音、インプロ、コンピュータを組み合わせた作品をつくる。
たまたま見に行ったMaker Faire Tokyo 2013で衝撃を受け、人生初の「ハンダゴ
テ」を購入。Arduinoも2013/12月に購入。最初はArduinoでも何かを繋ぐ場合、
ハンダゴテを使うものだと思っていたが、どう使うか判らず呆然とする。
その後本を買い漁り、ブレッドボードとジャンパーのことを知る。
つまり、今楽しい盛り。
14年5月17日土曜日
MIDIコンとは?
PCと繋いで音をぐりぐりやったりするアレ。
14年5月17日土曜日
MIDIのメリット
1. 音楽系ソフト(DAWなど)と直接繋いで遊べる
2. 実はブラウザとも繋がる (Web MIDI API)
3. プロトコルが決まってる(制御が簡単)
MIDIのデメリット
1. ATmega16U2の書き換えが必要
2. Arduino側でジャンパーピン刺すの忘れる
3. プロトコルが決まってる(制約が多い)
FirmataとMIDI
14年5月17日土曜日
こんな感じになる
USBケーブル
今回は最低限な感じで
14年5月17日土曜日
用意するモノ
ジャンパーピン
USBケーブル
Arduino UNO R3
ブレッドボード、部品
Mac
(Winでも出来ますが、今回
はMacで説明します)
14年5月17日土曜日
手順
1. ATmega16U2にUSB MIDIファームを書き込む
2. 回路を組む(ブレッドボードとArduinoを配線)
3. Arduinoのスケッチを書いてロード
完成!
14年5月17日土曜日
1. ATmega16U2にUSB MIDIファームを書き込む
14年5月17日土曜日
1. ATmega16U2に書き込むツールを用意
 Mac: dfu-programmer
 Win: ATMEL FLIP (今回説明しません)
2. USB-MIDIファームイメージを用意
3. DFUモードでファーム書き換え
4. スケッチ書き込みモードへ
1. ATmega16U2にUSB MIDIファームを書き込む
14年5月17日土曜日
1. ATmega16U2に書き込むツールを用意
Mac: dfu-programmer
MacPorts →バージョン古くてATmega16U2未対応
ソースからビルド →「面倒」
ビルド済バイナリ
1. ATmega16U2にUSB MIDIファームを書き込む
http://temp.dfm.lrv.jp/dfuprogrammer/dfu-programmer-061bin.zip
http://qiita.com/tadfmac/items/b941f7d4858386e2d1b0
14年5月17日土曜日
2. USB-MIDIファームイメージを用意
MORECAT_LAB様
『Midi Firmware for Arduino Uno (Moco)』
http://morecatlab.akiba.coocan.jp/lab/index.php/
aruino/midi-firmware-for-arduino-uno-moco/
ダウンロード
http://morecatlab.akiba.coocan.jp/lab/wp-content/uploads/2013/09/dualMocoLUFA.tgz
1. ATmega16U2にUSB MIDIファームを書き込む
14年5月17日土曜日
DFUモード ATmega16U2
ATmega328P
スケッチ書き込み
dfu-programmer
1. ATmega16U2にUSB MIDIファームを書き込む
14年5月17日土曜日
3. DFUモードでファーム書き換え
1. ATmega16U2にUSB MIDIファームを書き込む
DFUモードへの入り方
1. ジャンパーする 2. USBつなぐ
3. (ArduinoのLEDが光った
ら)ジャンパはずす
14年5月17日土曜日
3. DFUモードでファーム書き換え
1. ATmega16U2にUSB MIDIファームを書き込む
$ dfu-programmer atmega16u2 get
まずはDFUモードに入れてるか確認
Bootloader Version: 0x20 (32)
こんな感じに表示されたら入れてます。
14年5月17日土曜日
3. DFUモードでファーム書き換え
1. ATmega16U2にUSB MIDIファームを書き込む
$ dfu-programmer atmega16u2 erase
消去
dualMoco.hex書き込み
$ dfu-programmer atmega16u2 flash dualMoco.hex
最後にreset
$ dfu-programmer atmega16u2 reset
14年5月17日土曜日
4. スケッチ書き込みモードへ
1. ATmega16U2にUSB MIDIファームを書き込む
2. ジャンパーを今度は
下記のようにする。
1. USBはずす
3. USBつなぐ
14年5月17日土曜日
dualMocoを書き込んだArduinoはジャンパとセットで
持ち歩こう!
1. ATmega16U2にUSB MIDIファームを書き込む
ジャンパなし:MIDIデバイスになる 下記のようにジャンパ:スケッチ書き込み
14年5月17日土曜日
2. 回路を組む(ブレッドボードとArduinoを配線)
14年5月17日土曜日
回路
※タクトスイッチが
プルダウンなのは、
反省していますw
14年5月17日土曜日
3. Arduinoのスケッチを書いてロード
14年5月17日土曜日
#include <MIDI.h>
// つなげる場所により変えよう
const int LED = 13;
const int BUTTON = 8;
const int VOLUME = 0;
const int CDS = 1;
// 回路の抵抗度合いなどに応じて数値は調整しよう
#define note_MIN 0
#define note_MAX 127
#define vol_MIN 200 // volume保護用抵抗
#define vol_MAX 1023
// CdSを手で覆った時だけ使いたいのでこんな値
// 明るさによって変わるので調整しよう
#define cds_MIN 820
#define cds_MAX 1023
// pitchbendは本当は -8192 - 8191 だけど
// 元々の値が荒いので、ベンド幅を1/4にしとく。
// #define pb_MIN -2048
#define pb_MAX 2048
スケッチ
1 2
14年5月17日土曜日
// 初期化処理です
void setup(){
pinMode(LED,OUTPUT);
pinMode(BUTTON,INPUT);
MIDI.begin(1);
}
// これはセンサー入力のフラつき対策
boolean checkChange(int val1,int val2,
int range){
int l,h;
l = val2-range;
h = val2+range;
if((l > val1)||(h < val1)){
return true;
}
return false;
}
int button = 0;
int note = 0;
int cds = 0;
boolean isplay = false;
void loop(){
int nowbutton;
int nownote;
int nowcds;
// Note Number change
nownote = analogRead(VOLUME);
nownote = map(nownote, vol_MAX,
vol_MIN, note_MIN, note_MAX);
if(checkChange(nownote,note,1)){
if(isplay){
MIDI.sendNoteOff(note,0,1);
MIDI.sendNoteOn(nownote,100,1);
}
note = nownote;
}
スケッチ
3 4
14年5月17日土曜日
// Cds (Pitchbend)
nowcds = analogRead(CDS);
if(nowcds > cds_MIN){
nowcds = map(nowcds, cds_MIN,
cds_MAX, pb_MAX, pb_MIN);
MIDI.sendPitchBend(nowcds,1);
}else{
nowcds = 0;
if(cds != nowcds){
MIDI.sendPitchBend(0,1);
}
}
cds = nowcds;
// Button (Note ON/OFF)
nowbutton = digitalRead(BUTTON);
if(nowbutton != button){
if(nowbutton == HIGH) {
MIDI.sendNoteOn(note,100,1);
isplay = true;
digitalWrite(LED,HIGH);
}else{
MIDI.sendNoteOff(note,0,1);
isplay = false;
digitalWrite(LED,LOW);
}
delay(50);
}
button = nowbutton;
}
スケッチ
5 6
14年5月17日土曜日
スケッチ
ソースは下記にあります。
http://qiita.com/tadfmac/items/9136f47ae1eea99a4ef7
14年5月17日土曜日
ATmega16U2を書き換えると、ArduinoのUSB機能を変更
できる!
MIDI以外にも、同じやり方でキーボードやマウスなどに
もできるので、シリアル以外の可能性も広がる!
http://mitchtech.net/arduino-usb-hid-keyboard/
まとめ
14年5月17日土曜日
Q&A
   @tadfmac
   http://soundcloud.com/tadfmac
http://www.slideshare.net/tadfmac/arduinomidi
14年5月17日土曜日
ArduinoでMidiコントローラーを作ろう
ArduinoでMidiコントローラーを作ろう
ArduinoでMidiコントローラーを作ろう

More Related Content

What's hot

クラスローダーについて
クラスローダーについてクラスローダーについて
クラスローダーについて
Suguru ARAKAWA
 

What's hot (20)

無線LANデバイスについて(kernelレベル)
無線LANデバイスについて(kernelレベル) 無線LANデバイスについて(kernelレベル)
無線LANデバイスについて(kernelレベル)
 
イベント主催者のための60分でできるパネルディスカッションテンプレ
イベント主催者のための60分でできるパネルディスカッションテンプレイベント主催者のための60分でできるパネルディスカッションテンプレ
イベント主催者のための60分でできるパネルディスカッションテンプレ
 
まじめに!できる!LT
まじめに!できる!LT まじめに!できる!LT
まじめに!できる!LT
 
ソフトウェア品質実態調査報告「測定評価と分析を通じたソフトウェア製品品質の実態定量化および総合的品質評価枠組みの確立」
ソフトウェア品質実態調査報告「測定評価と分析を通じたソフトウェア製品品質の実態定量化および総合的品質評価枠組みの確立」ソフトウェア品質実態調査報告「測定評価と分析を通じたソフトウェア製品品質の実態定量化および総合的品質評価枠組みの確立」
ソフトウェア品質実態調査報告「測定評価と分析を通じたソフトウェア製品品質の実態定量化および総合的品質評価枠組みの確立」
 
階層的決定性ウォレットを理解しよう
階層的決定性ウォレットを理解しよう階層的決定性ウォレットを理解しよう
階層的決定性ウォレットを理解しよう
 
学習時に使ってはいないデータの混入「リーケージを避ける」
学習時に使ってはいないデータの混入「リーケージを避ける」学習時に使ってはいないデータの混入「リーケージを避ける」
学習時に使ってはいないデータの混入「リーケージを避ける」
 
クラスローダーについて
クラスローダーについてクラスローダーについて
クラスローダーについて
 
DCSF19 Hardening Docker daemon with Rootless mode
DCSF19 Hardening Docker daemon with Rootless modeDCSF19 Hardening Docker daemon with Rootless mode
DCSF19 Hardening Docker daemon with Rootless mode
 
CMake multiplatform build-tool
CMake multiplatform build-toolCMake multiplatform build-tool
CMake multiplatform build-tool
 
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
 
Apache Solr 検索エンジン入門
Apache Solr 検索エンジン入門Apache Solr 検索エンジン入門
Apache Solr 検索エンジン入門
 
ズルいLT 〜はじめてのライトニングトーク〜 / WP-D Week
ズルいLT 〜はじめてのライトニングトーク〜 / WP-D WeekズルいLT 〜はじめてのライトニングトーク〜 / WP-D Week
ズルいLT 〜はじめてのライトニングトーク〜 / WP-D Week
 
IPA「DX白書2023」を読み解き、 今後のキャリアを考える
 IPA「DX白書2023」を読み解き、  今後のキャリアを考える IPA「DX白書2023」を読み解き、  今後のキャリアを考える
IPA「DX白書2023」を読み解き、 今後のキャリアを考える
 
優れた問いを見つける(中京大学講演)
優れた問いを見つける(中京大学講演)優れた問いを見つける(中京大学講演)
優れた問いを見つける(中京大学講演)
 
DockerとPodmanの比較
DockerとPodmanの比較DockerとPodmanの比較
DockerとPodmanの比較
 
Kubernetes ネットワーキングのすべて
Kubernetes ネットワーキングのすべてKubernetes ネットワーキングのすべて
Kubernetes ネットワーキングのすべて
 
Jenkins with Docker
Jenkins with DockerJenkins with Docker
Jenkins with Docker
 
「エンジニアがデザイン思考を身につけたら最強説」ポテンシャルユナイテッド
「エンジニアがデザイン思考を身につけたら最強説」ポテンシャルユナイテッド「エンジニアがデザイン思考を身につけたら最強説」ポテンシャルユナイテッド
「エンジニアがデザイン思考を身につけたら最強説」ポテンシャルユナイテッド
 
[DL輪読会]Neuroscience-Inspired Artificial Intelligence
[DL輪読会]Neuroscience-Inspired Artificial Intelligence[DL輪読会]Neuroscience-Inspired Artificial Intelligence
[DL輪読会]Neuroscience-Inspired Artificial Intelligence
 
TLS, HTTP/2演習
TLS, HTTP/2演習TLS, HTTP/2演習
TLS, HTTP/2演習
 

Viewers also liked

Interactive Music II - SuperCollider入門
Interactive Music II - SuperCollider入門Interactive Music II - SuperCollider入門
Interactive Music II - SuperCollider入門
Atsushi Tadokoro
 
Interactive Music II SuperCollider入門 2 - 関数とUGen
Interactive Music II SuperCollider入門 2 - 関数とUGenInteractive Music II SuperCollider入門 2 - 関数とUGen
Interactive Music II SuperCollider入門 2 - 関数とUGen
Atsushi Tadokoro
 
Interactive Music II SuperCollider入門 3 - 音を混ぜる(Mix)、楽器を定義(SynthDef)
Interactive Music II SuperCollider入門 3 - 音を混ぜる(Mix)、楽器を定義(SynthDef)Interactive Music II SuperCollider入門 3 - 音を混ぜる(Mix)、楽器を定義(SynthDef)
Interactive Music II SuperCollider入門 3 - 音を混ぜる(Mix)、楽器を定義(SynthDef)
Atsushi Tadokoro
 
Interactive Music II SuperCollider入門 4 - 楽器を定義、変調合成(RM, AM, FM)
Interactive Music II SuperCollider入門 4 -  楽器を定義、変調合成(RM, AM, FM)Interactive Music II SuperCollider入門 4 -  楽器を定義、変調合成(RM, AM, FM)
Interactive Music II SuperCollider入門 4 - 楽器を定義、変調合成(RM, AM, FM)
Atsushi Tadokoro
 
Interactive Music II ProcessingとSuperColliderの連携1
Interactive Music II ProcessingとSuperColliderの連携1Interactive Music II ProcessingとSuperColliderの連携1
Interactive Music II ProcessingとSuperColliderの連携1
Atsushi Tadokoro
 

Viewers also liked (20)

WebRTC/ORTCの最新動向まるわかり!
WebRTC/ORTCの最新動向まるわかり!WebRTC/ORTCの最新動向まるわかり!
WebRTC/ORTCの最新動向まるわかり!
 
Raspberry PiとPdでオリジナルのシンセを作る
Raspberry PiとPdでオリジナルのシンセを作るRaspberry PiとPdでオリジナルのシンセを作る
Raspberry PiとPdでオリジナルのシンセを作る
 
Arduino MIDI Hack
Arduino MIDI HackArduino MIDI Hack
Arduino MIDI Hack
 
ソフトシンセを作りながら学ぶPythonプログラミング
ソフトシンセを作りながら学ぶPythonプログラミングソフトシンセを作りながら学ぶPythonプログラミング
ソフトシンセを作りながら学ぶPythonプログラミング
 
Interactive Music II - SuperCollider入門
Interactive Music II - SuperCollider入門Interactive Music II - SuperCollider入門
Interactive Music II - SuperCollider入門
 
Interactive Music II SuperCollider入門 2 - 関数とUGen
Interactive Music II SuperCollider入門 2 - 関数とUGenInteractive Music II SuperCollider入門 2 - 関数とUGen
Interactive Music II SuperCollider入門 2 - 関数とUGen
 
Interactive Music II SuperCollider入門 3 - 音を混ぜる(Mix)、楽器を定義(SynthDef)
Interactive Music II SuperCollider入門 3 - 音を混ぜる(Mix)、楽器を定義(SynthDef)Interactive Music II SuperCollider入門 3 - 音を混ぜる(Mix)、楽器を定義(SynthDef)
Interactive Music II SuperCollider入門 3 - 音を混ぜる(Mix)、楽器を定義(SynthDef)
 
WebRTC on Native App
WebRTC on Native AppWebRTC on Native App
WebRTC on Native App
 
Pythonで作る俺様サウンドエフェクター
Pythonで作る俺様サウンドエフェクターPythonで作る俺様サウンドエフェクター
Pythonで作る俺様サウンドエフェクター
 
Arduino / ArduBlock の簡単なプログラムと回路の例
Arduino / ArduBlock の簡単なプログラムと回路の例Arduino / ArduBlock の簡単なプログラムと回路の例
Arduino / ArduBlock の簡単なプログラムと回路の例
 
ブレッドボードの使い方と Arduino に簡単な回路をつける例
ブレッドボードの使い方と Arduino に簡単な回路をつける例ブレッドボードの使い方と Arduino に簡単な回路をつける例
ブレッドボードの使い方と Arduino に簡単な回路をつける例
 
Arduino 入門
Arduino 入門Arduino 入門
Arduino 入門
 
arduinoでeVY1 Shieldを歌わせてみた
arduinoでeVY1 Shieldを歌わせてみたarduinoでeVY1 Shieldを歌わせてみた
arduinoでeVY1 Shieldを歌わせてみた
 
Hipatia de Alejandría
Hipatia de AlejandríaHipatia de Alejandría
Hipatia de Alejandría
 
Interactive Music II SuperCollider入門 4 - 楽器を定義、変調合成(RM, AM, FM)
Interactive Music II SuperCollider入門 4 -  楽器を定義、変調合成(RM, AM, FM)Interactive Music II SuperCollider入門 4 -  楽器を定義、変調合成(RM, AM, FM)
Interactive Music II SuperCollider入門 4 - 楽器を定義、変調合成(RM, AM, FM)
 
ORTCの仕様書をざっくり斜め読みする
ORTCの仕様書をざっくり斜め読みするORTCの仕様書をざっくり斜め読みする
ORTCの仕様書をざっくり斜め読みする
 
WebRTC Meetup Tokyo #3 - WebRTC Conference参加報告
WebRTC Meetup Tokyo #3 - WebRTC Conference参加報告WebRTC Meetup Tokyo #3 - WebRTC Conference参加報告
WebRTC Meetup Tokyo #3 - WebRTC Conference参加報告
 
WebRTC meetup Tokyo 1
WebRTC meetup  Tokyo 1WebRTC meetup  Tokyo 1
WebRTC meetup Tokyo 1
 
フィジカルコンピューティング入門 USB-MIDIベースのPepper-Monakaを使う
フィジカルコンピューティング入門  USB-MIDIベースのPepper-Monakaを使うフィジカルコンピューティング入門  USB-MIDIベースのPepper-Monakaを使う
フィジカルコンピューティング入門 USB-MIDIベースのPepper-Monakaを使う
 
Interactive Music II ProcessingとSuperColliderの連携1
Interactive Music II ProcessingとSuperColliderの連携1Interactive Music II ProcessingとSuperColliderの連携1
Interactive Music II ProcessingとSuperColliderの連携1
 

More from tadfmac

More from tadfmac (13)

ブラウザで、なんちゃってIoT
ブラウザで、なんちゃってIoTブラウザで、なんちゃってIoT
ブラウザで、なんちゃってIoT
 
BLE無線通信で使えるCHIRIMEN
BLE無線通信で使えるCHIRIMENBLE無線通信で使えるCHIRIMEN
BLE無線通信で使えるCHIRIMEN
 
Sensor
SensorSensor
Sensor
 
ちりめn for らずぱい3 おさわり会
ちりめn for らずぱい3 おさわり会ちりめn for らずぱい3 おさわり会
ちりめn for らずぱい3 おさわり会
 
Web Music Demo Party #1 LT
Web Music Demo Party #1 LTWeb Music Demo Party #1 LT
Web Music Demo Party #1 LT
 
Githubについて
GithubについてGithubについて
Githubについて
 
mi:muz開発入門
mi:muz開発入門mi:muz開発入門
mi:muz開発入門
 
缶たたくやつのつくりかた
缶たたくやつのつくりかた缶たたくやつのつくりかた
缶たたくやつのつくりかた
 
なんでこうなった?
なんでこうなった?なんでこうなった?
なんでこうなった?
 
Romo欲しい
Romo欲しいRomo欲しい
Romo欲しい
 
モノとつないでWebを楽しくしよう
モノとつないでWebを楽しくしようモノとつないでWebを楽しくしよう
モノとつないでWebを楽しくしよう
 
ち〜ん
ち〜んち〜ん
ち〜ん
 
Web musicハッカソンへ行こう!
Web musicハッカソンへ行こう!Web musicハッカソンへ行こう!
Web musicハッカソンへ行こう!
 

ArduinoでMidiコントローラーを作ろう