로그인회원등록 내글장바구니주문조회현재접속자
 상품 검색








 게시판 검색





 
 
회원등록 비번분실


온라인 입금계좌
ㆍ기업은행
ㆍ219-043192-01-028
ㆍ이건영

      거래은행 바로가기
 
 Sensor Applications
아듀이노 공개소스
작성자 avrtools™        
작성일 2011/08/19
첨부#1 midioxse.exe (896KB) (Down:90)
첨부#2 s2midi-v101.zip (33KB) (Down:1981)
ㆍ추천: 0  ㆍ조회: 3173   
  Arduino MIDI의 소개
제목 MIDI-OX
용도 통신포트로 들어오는 MIDI 신호를 연주한다.
참조 http://www.midiox.com/
작동환경 : PC (Windows7) + USB2serial (가상직렬포트 CDC 드라이버) + Mega168-mini (Decimila Bootloader)
 
설명 MIDI-OX 7.0.2 (917K 17-JUN-10) 내려받기
MIDI-OX는 설치파일을 받아서, 그대로 실행하면 설치에 들어간다.
 
 
이전 버전을 설치했다면, 이전 버전을 지우고, 다시 설치해야 한다.
설치가 끝나면 아래와 같이 실행 아이콘이 바탕화면에 만들어 진다.
 
 
MIDI-OX를 실행하면, 다음과 같은 화면이 열린다.

 
Option -> Midi Device를 누르면 Midi 장치를 설정하는 화면이 열린다.
아직 입력장치를 설치하지 않았으므로 그냥 넘어가도 된다.
좌측 아래의 PC에 내장된 음원의 Midi 장치들 중에서 하나를 선택한다.
 
 
피아노 건반 단추를 누르면, 우측하단에 KYB 란 파란 글씨가 켜지고,
이제부터는 키보드를 누르면 피아노 처럼 연주가 가능하다. 

 
키보드를 누르면 MIDI-OX 화면에 시간 값과 입력장치, Port, Staus, Data1, Data2
그리고 Channel과 Note 등의 값이 표시되면서 PC에서 소리가 난다.
 아래 화면과 같이 매뉴바 두번째줄 중간의 MIdi Control 단추를 누르면
  
 
아래와 같은 Control Panel 화면이 나온다.1~16 번은 내장된 음원에서 악기를 선택한다.
Send는 들어온 Midi 신호를 PC에 내장된 음원이나 외부장치로 MIDI 신호를 전달하는 채널번호이다. 
 

그외에 MIDI-OX는 수신된 MIDI 신호를 외부장치로 보낼수도 있다.
MIDI-OX는 Windows MIDI Monitor and Sysx Tool 이라고 소개하고 있다.
상세한 기능은 잘 모르지만, 상당히 다양한 기능을 많이 가지고 있다.

Bank 번호를 바꾸어 보니 1~16 에 따라서 키보드를 누를 때 나는소리 즉 음원이 달라진다.
이때 설정되는 MIDI 코드는 81 C0 00 ~ 81 C0 78 까지 마지막 자리가 8씩 증가한다. 
 
 
이제는 아듀이노 기판에서 Midi 신호를 보낼 수 있으면, PC에서 Midi 신호를 받을 수 있고,
USB로 연결된 PC의 음원으로 Midi 신호를 전달하면, PC로 소리를 낼 수 있다.
 
아듀이노의 MIDI 처리
아듀이노로 간단히 만드는 방법으로는 드럼킷을 이용하는 방법이 있다.
참조 : // http://todbot.com/blog/2006/10/29/spooky-arduino-projects-4-and-musical-arduino/

설명 : 압전스피커는 원래 소리를 내는 부품인데, 두드린 진동을 전압으로 출력하는 압전변환소자도 된다.
진동이나 충격으로 작동하며, 강한 충격시 고전압이 발생하여 MPU의 입력포트를 파괴할 수 있다.
그러므로 입력포트에 1M 방전저항과 5.1V 과전압 방지 다이오드를 반드시 병렬로 연결해 주어야 한다.  



압전센서의 제작
동그란 판에 압전스피커의 한면을 접착제나 양면 테이프로 고정하고
귀퉁이 4곳에 센서보다 높게 다리를 만들어 준다. 뒤집에서 사용한다.

 
회로
6 개의 과전압 보호용 5.1 V 제너 다이오드와 1M ohm 방전저항을 아듀이노 기판의 아날로그 입력에 병렬로 연결해야 한다.
6 개의 압전 스피커를 아듀이노 기판의 아날로그 입력 A0 ~ A5에 연결하고 USB 포트를 PC에 연결한다.
D5~D7 스위치 및 미디잭은 아듀이노 기판에서 MIDI 장치로 직접 출력하는 회로이다. (아날로그 입력회로만 참조할 것)

   
 
참조회로 #2
위의 회로 보다 보호 성능이 좋은 회로이다. 스위칭 다이오드와 4.7nF의 캐패시터가 추가된다.

 
아듀이노 6 채널 드럼킷 소스
참조 : http://www.spikenzieLabs.com/
//************************************************************************
// SpikenzieLabs.com                                                    
// Drum Kit - Kit                                                     
//*************************************************************************
//  BY: MARK DEMERS Copywrite 20009
//  April. 2009
//  VERSION: 1.b
//
//  Required - Software:
//  1. Serial MIDI converter
//  2. Garage Band, Ableton Live etc ...
//
//*************************************************************************
//  User settable variables   
//*************************************************************************
unsigned char PadNote[6] = {52,16,66,63,40,65};         // MIDI notes from 0 to 127 (Mid C = 60)
int PadCutOff[6] = {600,600,600,600,600,600};           // Minimum Analog value to cause a drum hit
int MaxPlayTime[6] = {90,90,90,90,90,90};               // Cycles before a 2nd hit is allowed
#define  midichannel 0;                              // MIDI channel from 0 to 15 (+1 in "real world")
boolean VelocityFlag  = true;                           // Velocity ON (true) or OFF (false)

//*************************************************************************
// Internal Use Variables   
//*************************************************************************
boolean activePad[6] = {0,0,0,0,0,0};                   // Array of flags of pad currently playing
int PinPlayTime[6] = {0,0,0,0,0,0};                     // Counter since pad started to play
unsigned char status;
int pin = 0;    
int hitavg = 0;

//*************************************************************************
// Setup   
/**************************************************************************
void setup(){
//  Serial.begin(115200);               // connect to the serial port 115200
  Serial.begin(57600);                   // connect to the serial port 57600
}

/**************************************************************************
// Main Program   
//*************************************************************************
void loop(){
  for(int pin=0; pin < 6; pin++){
    hitavg = analogRead(pin);                              // read the input pin

    if((hitavg > PadCutOff[pin])){
      if((activePad[pin] == false)){
        if(VelocityFlag == true){
//          hitavg = 127 / ((1023 - PadCutOff[pin]) / (hitavg - PadCutOff[pin]));    // With full range (Too sensitive ?)
          hitavg = (hitavg / 8) -1 ;                                                 // Upper range
        }
        else{
          hitavg = 127;
        }

        MIDI_TX(144,PadNote[pin],hitavg);
        PinPlayTime[pin] = 0;
        activePad[pin] = true;
      }
      else{
        PinPlayTime[pin] = PinPlayTime[pin] + 1;
      }
    }
    else if((activePad[pin] == true)){
      PinPlayTime[pin] = PinPlayTime[pin] + 1;
     
      if(PinPlayTime[pin] > MaxPlayTime[pin]){
        activePad[pin] = false;
        MIDI_TX(128,PadNote[pin],127);
      }
    }
  }
}

//*************************************************************************
// Transmit MIDI Message   
/**************************************************************************
void MIDI_TX(unsigned char MESSAGE, unsigned char PITCH, unsigned char VELOCITY) {
  status = MESSAGE + midichannel;
  Serial.print(status);
  Serial.print(PITCH);
  Serial.print(VELOCITY);
}

드럼킷 소스의 업로드
위의 6 채널 드럼킷 소스를 아듀이노 스켓치에서 컴파일한 다음 아듀이노 기판으로 업로드한다.
MIDI-OX 및 MIDI-YOKE와 연결하기 위해 통신속도는 57600을 사용하고 있다. 업로드가 완료된 다음,
아날로그 입력 A0~A5에 연결된 압전스피커로 만든 압전센서를 두드리면 D13-LED와 TXD LED가 깜빡인다. 
 
MIDI-Yoke의 설치
첨부파일 : MidiYokeSetup.msi(163KB)
 
첨부파일을 실행하면 MIDI-Yoke가 설치되며, 설치 완료시 yes를 누르면 PC를 리부트하여야 한다,
필요한 저장을 마무리한 다음 yes를 누르면, 자동으로 PC가 리부트된다.
 
MIDI-Yoke의 설치확인
장치관리자가 아닌 제어판을 열면 다음과 같은 MIDI-Yoke 아이콘이 보여야 한다.
 
MIDI-Yoke의 설정확인
제어판에서 MIDI-Yoke를 열면 다음과 같이 되어 있어야 한다.
 
 
드럼킷의 연결
PC가 리부트된 다음, 아듀이노 기판으로 만든 드럼킷과 PC를 USB 케이블로 연결해야 한다,
 
아직, MIDI-OX에서 MIDI-Yoke를 설치해도 USB2serial 의 미디신호는 받지 못한다.
뒤에 설명하는 S2MIDI 소프트웨어를 추가로 실행해야만 MIDI-OX로 입력된다.
 
 
MIDI Device 설정화면에서 좌측상단의 MIDI Input는 1) In From MIDI Yoke: 1을 선택하고,
좌측하단의 MIDI Output은 Microsoft GS Waveable Synth를 선택한다.
Presets 에 설정을 저장할 이름을 넣고, 우측의 저장 단추(디스켓 모양)를 누르고,  OK를 누른다.

Arduino-MIDI
Arduino-Uno에서 배포하는 Arduino-Midi는 드라이버의 설치도 필요없고 연결이 쉽지만,
MIDI-Yoke 설치없이 MIDI-OX로 신호가 잘 들어 오지만, 115200 BPS 고정에다 통신오류로 작동이 안된다.
 
결국, 아듀이노 Decimaila나 Duemilanove 용으로 별도의 Arduiino-MIDI를 만들어야 한다.
Arduino-MIDI의 데시밀라 기판 연결용 USB2serial 펌웨어 :  작업 중 (배포예정) 

미디음원의 설정
그런데 웬 피아노 음? 드럼소리가 나야 하는데, ^^;  아 음원으로 설정된 PC의 음원이 틀리네요~~
자료를 다시 읽어보니, 아 드럼킷 소스안에 사용자 설정변경이 있었군요,,,
아~ 멋진 드럼소리를 내려면, 드럼킷의 아듀이노 소스를 변경을 해야 합니다. 흐~~~

드럼킷의 아듀이노 소스를 보면 아래와 같은 사용자 설정 변경 상수정의가 있습니다.
//*************************************************************************
//  User settable variables   
//*************************************************************************
unsigned char PadNote[6] = {52,16,66,63,40,65};         // MIDI notes from 0 to 127 (Mid C = 60)
int PadCutOff[6] = {600,600,600,600,600,600};           // Minimum Analog value to cause a drum hit
int MaxPlayTime[6] = {90,90,90,90,90,90};               // Cycles before a 2nd hit is allowed
#define  midichannel 0;                              // MIDI channel from 0 to 15 (+1 in "real world")
boolean VelocityFlag  = true;                           // Velocity ON (true) or OFF (false)

 
핵심인 상수는 모두 4 개인데, PadNote는 음높이로 127 이하로 설정
PadCutOff는 음을 정지하는 레벨로 1024 이하로 설정 
MaxPlayTime은 2 번째 입력이 들어올 때의  최대 발음시간
midichannel은 0으로 1 이상이면 실제 채널임.
 
음원의 소리가 드럼이 아닌 피아노인 상태라면 음원에서 설정된 0 채널이 피아노?
게다가 다른 제작 예를 보면 드럼 패드마다 다른 타악기의 소리가 나는데,,,이건 뭐임?

S2MIDI의 소개
참조 : http://code.google.com/p/s2midi/
설명 : 아듀이노 기판으로 미디를 구현하는 프로세싱 지원 소프트웨어.
첨부 : S2MIDI-V101.ZIP 파일 혹은 직접 내려받기 : s2midi-v101.zip(32.7KB)
 
설명: 내려받은 압축파일을 풀면 다음과 같은 폴더가 나온다.
 
이전에 시험하던 DrumKit 스케치 소스에서 통신속도만 9600으로 변경하고 컴파일해서 업로드한다.
단 가능한 통신속도가 유선모뎀의 통신속도인 9600,  14400, 28800, 36000, 115000으로 되어 있다.
혹은 Arduino Examples 에 들은 스케치 소스를 컴파일한 다음 아듀이노 기판에 업로드 한다.
아듀이노 기판에 연결된 센서를 두드리면 D13 LED가 반짝이고 TXD로 MIDI 데이터를 출력한다.
 
S2MIDI.exe를 실행하면 다음과 같은 화면이 나온다. 통신포트와 속도를 설정하고 Start 단추를 누른다.
 
 
아듀이노 드럼킷의 센서를 두드리면 이제는 PC에서 타악기 소리가 잘 난다.

 
물론  USB 통신포트로 들어온 MIDI 신호는 PC에 설치한 다른 미디장치로 출력할 수 있다
예를 들면 이전에 설치한 MIDI-Yoke로 출력하면 MIDI-OX에서 음원변경 처리도 가능하다.
 
 
더구나 음원출력을 MIDI-Yoke로 설정하고 MIDI-OX를 실행하면, 앗 소리가 난다. 바로 이겁니다.
이렇게 간단한 소프트웨어가 있다니, S2MIDI 덕분에 아듀이노 드럼킷이 사용하기 편리해 졌습니다.

MIDI-OX에서의 음원 변경
아듀이노 드럼킷 소스의 MIDI 채널을 0 번, 통신속도 9600으로 변경하고 컴파일한 다음 업로드 한다. 
S2MIDI를 실행하고, 입력은 드럼킷이 연결된 통신포트로, 출력은 MIDI-Yoke로 하고, MIDI-OX를 실행한다.
MIDI-OX의 Otion-> Device 입력을 MIDI Yoke 1으로, 출력을 Microsoft GS Wavetable Synth로 설정한다.

MIDI-OX의 매뉴에서 Send Midi Control Messege를 누르면 Control Panel 이 나온다.
Bank Change의 Section 번호를 16, Send Number를 8로 하면 총소리가 난다. 탕탕탕 !!!
  
 
스케치 소스에서의 음원변경
관련자료를 찾아보면 PC에 저장된 GS 음원폰트 외에, 드럼폰트를 추가로 설치할 수도 있다.
일단, PC에 내장된 음원 GS Wavetable Synth의 채널을 잘 선택하면 실제 드럼소리도 난다.
이 부분은 아듀이노 드럼킷의 채널 0번을 혹은 첨부된 S2MIDI의 샘플에 들어있는 스케치 소스에서,
송신용 MIDI 채널과 Note를 다른 값으로 바꾸어 주면 가능하리라 생각된다. 

주의
S2MIDI를 Start하면 아듀이노 기판의 통신포트를 S2MIDI가 사용하게 되므로,
아듀이노 스케치 소스를 업로드할 때 오류가 발생한다. S2MIDI를 Stop 시키고 업로드 해야 한다. 

미디 입력/출력 회로
아듀이노 기판에 미디 커넥터를 장착하여 미디장치와 직접 통신이 가능하다. 통신속도는 31250 bps 이다,
 

이 프로그램은 무료 소프트웨어로, 신체와 재산 상의 어떤 위험과 손해를 보상하지 않습니다.
이 프로그램은 GNU 무료 소프트웨어 배포규정을 따릅니다.
Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
AVRTOOLS™

   
윗글 Arduino Uno USBserial 펌웨어의 변경
아래글 Arduino 고속 Oscillo Scope #2
    N         제목    글쓴이 작성일 조회 추천
61 비접점식 QTouch 방식 근접검출 스위치 leeky 2016/01/21 (목) 487 0
60 Arduino 고속 오실로스코프 #3 avrtools™ 2012/03/29 (목) 17510 0
59 아날로그 8ch 데이터 로거 avrtools™ 2012/03/29 (목) 2653 0
58 Arduino DMX512 송신기 제작 avrtools™ 2012/03/15 (목) 2749 0
57 nRF24L01 무선모듈의 사용방법 avrtools™ 2012/03/07 (수) 5489 0
56 초음파 거리 측정기의 제작 avrtools™ 2011/09/18 (일) 4591 0
55 3축 가속도 센서 ADXL335 avrtools™ 2011/09/09 (금) 3143 0
54 Arduino Uno USBserial 펌웨어의 변경 avrtools™ 2011/08/27 (토) 2815 0
53 Arduino MIDI의 소개 avrtools™ 2011/08/19 (금) 3173 0
52 Arduino 고속 Oscillo Scope #2 avrtools™ 2011/08/12 (금) 2798 0
51 Arduino Uno 및 USB2serial Uno의 소개 [2] avrtools™ 2011/07/30 (토) 3043 0
50 Arduino IDE에서 AVRISP-mkII 사용방법 avrtools™ 2010/10/22 (금) 7631 0
49 아듀이노 초음파 거리측정 및 응용 avrtools™ 2010/03/14 (일) 3962 0
48 M328-USB의 비밀 온도센서 avrtools™ 2010/01/02 (토) 3397 0
47 M168-mini로 만드는 USBasp avrtools™ 2009/10/10 (토) 4996 0
46 OBDuino ISO9141 소스의 설명 avrtools™ 2009/10/08 (목) 3926 0
45 아듀이노 0017 업그레이드 avrtools™ 2009/08/18 (화) 3458 0
44 Arduino 0015 업그레이드 avrtools™ 2009/06/01 (월) 3158 0
43 CC2500 Zigbee RF Modem #1 [4] avrtools™ 2008/11/20 (목) 6315 0
42 아듀이노 소프트웨어 Ver 0012 avrtools™ 2008/09/23 (화) 3822 0
41 Arduino 소프트웨어 설치방법 avrtools™ 2008/08/31 (일) 5341 0
40 아듀이노 PC 카메라 제작 avrtools™ 2008/10/28 (화) 6940 0
39 아듀이노 AVR-ISP V2의 제작 [6] avrtools™ 2008/10/22 (수) 7902 0
38 아듀이노 J1850-PWM 스캐너 avrtools™ 2008/10/15 (수) 4355 0
37 아듀이노 MPGduino의 제작 avrtools™ 2008/10/11 (토) 4616 0
36 아듀이노 OBD-II PID 처리함수 avrtools™ 2008/10/12 (일) 5242 0
35 아듀이노 OBD-II PID 송수신 함수 avrtools™ 2008/10/09 (목) 9312 0
34 아듀이노 ODB-II 스캐너 제작 [9] avrtools™ 2008/10/04 (토) 16505 0
33 아듀이노 AC전원 THD 측정 [2] avrtools™ 2008/09/30 (화) 6442 0
32 아듀이노 소프트방식 16Bit ADC avrtools™ 2008/09/23 (화) 5326 0
31 아듀이노 초음파 모듈의 제작. avrtools™ 2008/09/22 (월) 4587 0
30 아듀이노 Wii 프로세싱 avrtools™ 2008/09/20 (토) 3939 0
29 아듀이노 초음파 거리측정 avrtools™ 2008/09/20 (토) 5813 0
28 아듀이노 8x5 초소형 전광판 avrtools™ 2008/09/11 (목) 4420 0
27 아듀이노 4선식 터치패널 avrtools™ 2008/09/10 (수) 4469 0
26 아듀이노 2색 8x8 LED avrtools™ 2008/09/10 (수) 4652 0
25 아듀이노 24x6 LED 전광판 avrtools™ 2008/09/10 (수) 5178 0
24 아듀이노 8x8 LED 프로세싱 avrtools™ 2008/09/10 (수) 3935 0
23 아듀이노 32x16 RGB 전광판 avrtools™ 2008/09/06 (토) 13439 0
22 아듀이노 맥박검출기 avrtools™ 2008/09/03 (수) 9153 0
21 아듀이노 적외선 거리센서 avrtools™ 2008/09/01 (월) 5631 0
20 아듀이노 DMX 수신장치 [7] avrtools™ 2008/08/31 (일) 6481 0
19 아듀이노 AVR-ISP 만들기 avrtools™ 2008/08/30 (토) 3972 0
18 아듀이노 POV #3 avrtools™ 2008/08/30 (토) 3282 0
17 아듀이노 POV #2 avrtools™ 2008/08/30 (토) 3091 0
16 AVR 병렬포트 굽기장치 avrtools™ 2008/08/30 (토) 4948 0
15 아듀이노 DMX 송신기 avrtools™ 2008/08/28 (목) 4909 0
14 아듀이노 부트로더의 개조 [1] avrtools™ 2008/08/28 (목) 5593 0
13 아듀이노 병렬포트 굽기장치 avrtools™ 2008/08/26 (화) 4025 0
12 아듀이노 POV #1 avrtools™ 2008/08/26 (화) 3319 0
11 아듀이노 MIDI 드럼 leeky 2008/08/24 (일) 4533 0
10 아듀이노 SD/MMC 카드 avrtools™ 2008/08/24 (일) 9564 0
9 아듀이노 MIDI 플륫 avrtools™ 2008/08/24 (일) 3394 0
8 아듀이노 RGB LED avrtools™ 2008/08/23 (토) 4824 0
7 아듀이노 USB 오실로스코프 [2] leeky 2008/08/21 (목) 6200 0
6 가속도계 ADXL202 응용소스 avrtools™ 2008/08/20 (수) 4687 0
5 아듀이노 가속도센서 avrtools™ 2008/08/18 (월) 4632 0
4 아듀이노 RC서보 제어 avrtools™ 2008/08/17 (일) 4984 0
3 아듀이노 910-ISP 만들기 avrtools™ 2008/08/16 (토) 4508 0
2 아듀이노 온도센서, XBee 송수신 avrtools™ 2008/08/15 (금) 7204 0
1 아듀이노 기본명령 avrtools™ 2008/08/07 (목) 6312 0
1

바구니 : 0
 보관함 : 0
오늘뷰 : 0
HOME   |   회사소개   |   제휴안내   |   회사위치   |   서비스이용 약관   |   개인정보 보호정책   |   사이트맵
17015 경기도 용인시 기흥구 동백중앙로16번길 16-25, 508호. 전화 : 031-282-3310
사업자 등록번호 : 697-47-00075 / 대표 : 이건영 / 업태 : 제조업 / 종목 : LED조명, LED전원, 제어장치.
개인정보 관리책임자 : 홈페이지 관리자 . Copyright ⓒ2016 아크레즈 (ACLEDS INC.)
HOME TOP PREVNEXT 0 0 0