ロゴ

MiniMidiKeyサポートページについて

ここでは、MakerFairTokyo2018で販売したMiniMidikeyについての情報を載せています。



この度は、たMiniMidikeyをお買い求めいただきありがとうございます。以下はサポート情報となります。


!注意!


1.本キットは「電子工作キット」です。長時間の演奏を保証するものではありません。(検証してないだけですので、出来るかもしれません。)


2.制作者の環境でのチェックはしておりますが、すべてのMIDI製品での動作を保証するものではありません。ご了承ください。


部品リスト

キットの内容物のリストです。ご確認ください。

番号 部材 型式 員数
1 基板 OSO FABオリジナル 1
2 タクトスイッチ KSMC613A 13
3 aruduinoナノ互換機 1
4 抵抗(200Ω) 1
5 3.5mmイヤホンジャック AJ-1780 1
6 木工(キーボード) OSO FABオリジナル 1
7 木工(飾り) OSO FABオリジナル 1
8 木工(背面) OSO FABオリジナル 1
9 ねじ M3x6 バインド 4
10 スペーサ― ASN-309 2
11 midi端子 MJ-173 他 1
12 3.5㎜ミニプラグ MP-319 1
13 導線 3


組立動画

実際に半田付けしている動画を載せます。組立時の参考にしてください。

組立動画(木工)

通信ケーブル

ステレオミニジャックとMIDI端子を3本の導線を半田付けしてください。つなぎ方は写真を参照のこと。



ケーブルの接続方法

回路図




スイッチ(音階)とAruduinoピンの対応表

各音階のトグルスイッチとAruduinoピンの対応表となります。プログラムを変更する際の参考にしてください。

音階 aruduino ピン番号 備考
15 アナログ1ピン
レ(フラット) 12
16 アナログ2ピン
ミ(フラット) 11
17 アナログ3ピン
ファ 18 アナログ4ピン
ソ(フラット) 2
19 アナログ5ピン
ラ(フラット) 7
3
10
9

またMIDI通信(TX)は6ピンから抵抗を挟んで出力しています。


Arduino互換機について

安価なArduino互換機なのでAtmega16U2の代わりにCH340が使われています。環境によってはドライバーのインストールが必要になるので注意して下さい。以下、参考動画となります。


参考サイト

Arduino UNO 互換機のドライバー
激安Arduino Nano互換機を試す

MIDI信号について

MIDI信号については下記リンク先等に詳しく載っているので、一読すると良いでしょう。


参考サイト

ArduinoでMIDI送信
Web MIDI APIを扱うためのMIDI基礎知識
MIDIイベント

ソースコード


#include <SoftwareSerial.h>
SoftwareSerial MIDI(5, 6); // RX, TX
 
//--- pins ---
#define LED 13
#define PIN_NUM 13
byte pins[PIN_NUM] = {15, 12, 16, 11, 17, 18, 2, 19, 7, 3, 8, 10, 9};
 
//--- Switch ---
#define PUSH_SHORT 700  // judgement value of pushing counter
#define SW_LIMIT   710  // counter limit
short gauge [PIN_NUM];
 
//--- MIDI ---
#define MIDI_CH  2
#define VELOCITY 127
byte notes [PIN_NUM] = {60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72};
 
#define MIDI_ON  0x90|(MIDI_CH - 1)
#define MIDI_OFF 0x80|(MIDI_CH - 1)
 
 
void setup() {
  pinMode(LED, OUTPUT);
  for (byte i = 0 ; i < PIN_NUM ; i++) pinMode(pins[i], INPUT_PULLUP);
  MIDI.begin(31250);
}
 
 
void loop() {
  boolean led_stat = false;
 
  for (byte i = 0 ; i < PIN_NUM ; i++)
  {
    byte sw_ret = BUTTON(i);
 
    if (sw_ret == 1)
    {
      SEND_MIDI(MIDI_ON, notes[i], VELOCITY);
    } else if (sw_ret == 255) {
      SEND_MIDI(MIDI_OFF, notes[i], VELOCITY);
    } else if (sw_ret != 0) led_stat = true;
  }
  digitalWrite(LED, led_stat);
}
 
 
byte BUTTON(byte num) {
  byte sw_status = 0;
 
  // pushing counter task
  if (!digitalRead(pins[num]))
  {
    gauge[num]++;
    if (gauge[num] > SW_LIMIT) gauge[num] = SW_LIMIT; // not to over limit of counter
  } else {
    if (gauge[num] > PUSH_SHORT) sw_status = 255;
    gauge[num] = 0;
  }
 
  // action when pushing counter goes in range
  if (gauge[num] > PUSH_SHORT) sw_status = 2;
  else if (gauge[num] == PUSH_SHORT) sw_status = 1;
 
 
  return sw_status;
}
 
 
void SEND_MIDI(byte cate, byte note, byte velo) {
  byte data[3] = {cate, note, velo};
  for (byte i = 0 ; i < 3 ; i++) MIDI.write(data[i]);
}

			

参考サイト

ArduinoでMIDI送信

ソースコードについて(参考)

参考までに開発初期に作成したソースコードを開示します。(開発中に書いた無駄な記述が残っているかもしれませんが、ご容赦ください。)




#include <SoftwareSerial.h>

SoftwareSerial MIDI(5, 6); // RX, TX

//--- MIDI ---
#define MIDI_CH  2
#define VELOCITY 127
#define MIDI_ON  0x90|(MIDI_CH - 1)
#define MIDI_OFF 0x80|(MIDI_CH - 1)

//---入力ピン---
const int C_PIN = 15;
const int Df_PIN = 12;
const int D_PIN = 16;
const int Ef_PIN = 11;
const int E_PIN = 17;
const int F_PIN = 18;
const int Gf_PIN = 2;
const int G_PIN = 19;
const int Af_PIN = 7;
const int A_PIN = 3;
const int Bf_PIN = 8;
const int B_PIN = 10;
const int C5_PIN = 9;

const int C = 60 ;
const int Df = 61 ;
const int D = 62 ;
const int Ef = 63 ;
const int E = 64 ;
const int F = 65 ;
const int Gf = 66 ;
const int G = 67 ;
const int Af = 68 ;
const int A = 69 ;
const int Bf = 70 ;
const int B = 71 ;
const int C5 = 72 ;

void setup() {
  // put your setup code here, to run once:
  pinMode(5, OUTPUT);
  pinMode(C_PIN,INPUT_PULLUP) ;
  pinMode(Df_PIN,INPUT_PULLUP) ;
  pinMode(D_PIN,INPUT_PULLUP) ;
  pinMode(Ef_PIN,INPUT_PULLUP) ;
  pinMode(E_PIN,INPUT_PULLUP) ;
  pinMode(F_PIN,INPUT_PULLUP) ;
  pinMode(Gf_PIN,INPUT_PULLUP) ;
  pinMode(G_PIN,INPUT_PULLUP) ;
  pinMode(Af_PIN,INPUT_PULLUP) ;
  pinMode(A_PIN,INPUT_PULLUP) ;
  pinMode(Bf_PIN,INPUT_PULLUP) ;
  pinMode(B_PIN,INPUT_PULLUP) ;
  pinMode(C5_PIN,INPUT_PULLUP) ;

  //--- MIDI ---
     MIDI.begin(31250);
     
  Serial.begin(9600) ;


}

void loop() {
  // put your main code here, to run repeatedly:
    if (digitalRead(C_PIN) == LOW) {     //スイッチの状態を調べる
          SEND_MIDI(MIDI_ON, C, VELOCITY); //スイッチが押されていれば、MIDI信号のノートオンを送る
          Serial.print("C") ;     //スイッチが確認用のシリアル信号を送る。
     } else {
          SEND_MIDI(MIDI_OFF, C, VELOCITY);      //スイッチが押されていないならMIDI信号のノートオフを送る
     }
    if (digitalRead(Df_PIN) == LOW) {     //スイッチの状態を調べる
          SEND_MIDI(MIDI_ON, Df, VELOCITY); /スイッチが押されていれば、/MIDI信号のノートオンを送る
          Serial.print("Df") ;     //スイッチが押されているならLEDを点灯
     } else {
          SEND_MIDI(MIDI_OFF, Df, VELOCITY);      //スイッチが押されていないならMIDI信号のノートオフを送る
     }
     if (digitalRead(D_PIN) == LOW) {     //スイッチの状態を調べる
          SEND_MIDI(MIDI_ON, D, VELOCITY); //スイッチが押されていれば、MIDI信号のノートオンを送る
          Serial.print("D") ;     //スイッチが押されているならLEDを点灯
     } else {
          SEND_MIDI(MIDI_OFF, D, VELOCITY);     //スイッチが押されていないならMIDI信号のノートオフを送る
     }
     if (digitalRead(Ef_PIN) == LOW) {     //スイッチの状態を調べる
          SEND_MIDI(MIDI_ON, Ef, VELOCITY); //スイッチが押されていれば、MIDI信号のノートオンを送る
          Serial.print("Ef") ;     //スイッチが押されているならLEDを点灯
     } else {
          SEND_MIDI(MIDI_OFF, Ef, VELOCITY);       //スイッチが押されていないならMIDI信号のノートオフを送る
     }
     if (digitalRead(E_PIN) == LOW) {     //スイッチの状態を調べる
          SEND_MIDI(MIDI_ON, E, VELOCITY); //スイッチが押されていれば、MIDI信号のノートオンを送る
          Serial.print("E") ;     //スイッチが押されているならLEDを点灯
     } else {
          SEND_MIDI(MIDI_OFF, E, VELOCITY);        //スイッチが押されていないならMIDI信号のノートオフを送る
     }
     if (digitalRead(F_PIN) == LOW) {     //スイッチの状態を調べる
          SEND_MIDI(MIDI_ON, F, VELOCITY); //スイッチが押されていれば、MIDI信号のノートオンを送る
          Serial.print("F") ;     //スイッチが押されているならLEDを点灯
     } else {
          SEND_MIDI(MIDI_OFF, F, VELOCITY);       //スイッチが押されていないならMIDI信号のノートオフを送る
     }
     if (digitalRead(Gf_PIN) == LOW) {     //スイッチの状態を調べる
          SEND_MIDI(MIDI_ON, Gf, VELOCITY); //スイッチが押されていれば、MIDI信号のノートオンを送る
          Serial.print("Gf") ;     //スイッチが押されているならLEDを点灯
     } else {
          SEND_MIDI(MIDI_OFF, Gf, VELOCITY);       //スイッチが押されていないならMIDI信号のノートオフを送る
     }
     if (digitalRead(G_PIN) == LOW) {     //スイッチの状態を調べる
          SEND_MIDI(MIDI_ON, G, VELOCITY); //スイッチが押されていれば、MIDI信号のノートオンを送る
          Serial.print("G") ;     //スイッチが押されているならLEDを点灯
     } else {
          SEND_MIDI(MIDI_OFF, G, VELOCITY);      //スイッチが押されていないならMIDI信号のノートオフを送る
     }
     if (digitalRead(Af_PIN) == LOW) {     //スイッチの状態を調べる
          SEND_MIDI(MIDI_ON, Af, VELOCITY); //スイッチが押されていれば、MIDI信号のノートオンを送る
          Serial.print("Af") ;     //スイッチが押されているならLEDを点灯
     } else {
          SEND_MIDI(MIDI_OFF, Af, VELOCITY);       //スイッチが押されていないならMIDI信号のノートオフを送る
     }
     if (digitalRead(A_PIN) == LOW) {     //スイッチの状態を調べる
          SEND_MIDI(MIDI_ON, A, VELOCITY); //スイッチが押されていれば、MIDI信号のノートオンを送る
          Serial.print("A") ;     //スイッチが押されているならLEDを点灯
     } else {
          SEND_MIDI(MIDI_OFF, A, VELOCITY);     //スイッチが押されていないならMIDI信号のノートオフを送る
     }
     if (digitalRead(Bf_PIN) == LOW) {     //スイッチの状態を調べる
          SEND_MIDI(MIDI_ON, Bf, VELOCITY); //スイッチが押されていれば、MIDI信号のノートオンを送る
          Serial.print("Bf") ;     //スイッチが押されているならLEDを点灯
     } else {
          SEND_MIDI(MIDI_OFF, Bf, VELOCITY);       //スイッチが押されていないならMIDI信号のノートオフを送る
     }
     if (digitalRead(B_PIN) == LOW) {     //スイッチの状態を調べる
          SEND_MIDI(MIDI_ON, B, VELOCITY); //スイッチが押されていれば、MIDI信号のノートオンを送る
          Serial.print("B") ;     //スイッチが押されているならLEDを点灯
     } else {
          SEND_MIDI(MIDI_OFF, B, VELOCITY);        //スイッチが押されていないならMIDI信号のノートオフを送る
     }
     if (digitalRead(C5_PIN) == LOW) {     //スイッチの状態を調べる
          SEND_MIDI(MIDI_ON, C5, VELOCITY); //スイッチが押されていれば、MIDI信号のノートオンを送る
          Serial.print("C5") ;     //スイッチが押されているならLEDを点灯
     } else {
          SEND_MIDI(MIDI_OFF, C5, VELOCITY);      //スイッチが押されていないならMIDI信号のノートオフを送る
     }
     
    
     
}

void SEND_MIDI(byte cate, byte note, byte velo) {
  byte data[3] = {cate, note, velo};
  for (byte i = 0 ; i < 3 ; i++) MIDI.write(data[i]);
}

			

ケーブル類について

PCやiphonにつなぐためのケーブルを紹介します。実際に私が使ったものを紹介しますが、接続を保証するものではありません。



inserted by FC2 system