User Tools

Site Tools


nano_ardule_midi_controller

Nano Ardule MIDI Controller: 설계 요약 문서

  • 작성자: 정해영
  • 최초 작성일: 2025년 8월 5일
  • 최종 수정일:Haeyoung Jeong 2025/08/05 23:05

목표

별도의 조절 장치를 갖고 있지 않은 GM sound module의 활용도를 높이기 위한 Arduino Nano 기반의 MIDI Controller(Nano Ardule)를 제작한다. Ardule은 Arduino + Module의 합성어이며, 프랑스어로 ‘어려운’(arduous)이라는 뜻도 갖고 있다. 2개 프로그램의 layer/split이 가능하며, 음색 설정을 user program/combi 형태로 microSD 카드에 저장하고 로드할 수 있다. 또한 카드에 저장된 type 0 MIDI 파일을 재생하는 기능도 갖고 있다. 이 프로젝트는 GM 명령어를 공부하고 아두이노 활용의 익히기 위한 목적도 있다.

시스템 구성

  • 주 제어부: Arduino Nano 호환 보드 (CH341 드라이버 필요)
  • 출력 대상: SAM9703 도터보드 장착 사운드 모듈 (제한 없음)
  • 저장장치: microSD 카드 (user program, combi, global settings, Type 0 MIDI 파일 저장)
  • 디스플레이: 1602 I2C LCD (백라이트 포함, 파일럿 LED 불필요)
  • 입력 장치:
    • MIDI IN (외부 키보드 컨트롤러에서 입력)
    • Rotary Encoder 1개 (푸시 버튼 내장)
    • 푸시버튼 6개:
      • PART SELECT
      • SPLIT
      • LOAD (+)
      • SAVE (-)
      • PLAY/PAUSE
      • STOP/EXIT
  • 출력 장치:
    • MIDI Activity LED 1개
    • 활성화 파트 표시 LED 3개 (A, B, Drums)
    • MIDI OUT (TX → DIN connector)

기본 작동법

  • 키보드(CH1 출력) → Ardule의 MIDI IN 연결
  • Ardule의 MIDI OUT → GM 사운드 모듈 연결
  • 전원 On 시 PART A LED 점등. 기본 악기는 GM #0 (어쿠스틱 그랜드 피아노)
  • 로터리 인코더 회전 → 볼륨 조절
  • 인코더 버튼 → 'Program Change' 진입. 회전으로 선택 후 STOP/EXIT으로 복귀.
  • 변경값은 회전 멈춘 후 0.2초 뒤 전송됨 (LCD에 전송 완료 표시)
  • LOAD 버튼 → 저장된 프로그램 로드. 인코더로 선택, STOP/EXIT으로 복귀
  • PART A 또는 B만 선택된 상태에서 LOAD → UsrPrg## 목록에서만 선택 가능
  • PART SELECT 순환: A → B → A+B → A (A+B 시 LED 동시 점등)
  • PART SELECT 더블클릭 → DRUMS 모드(CH10 출력). 한 번 더 누르면 이전 상태로 복귀
  • PLAY/PAUSE + STOP/EXIT 동시 누름 → Transpose 설정 진입

프로그램 편집 및 저장

  • PART A, B, DRUMS 중 하나만 선택된 상태에서 편집 가능
  • 인코더 버튼 반복 누름 → 다음 파라미터 순환:
    • Program Change
    • Bank Select LSB (CC#32)
    • Chorus (CC#93)
    • Reverb (CC#91)
    • Pan (CC#10)
    • Cutoff Frequency (CC#74)
    • Resonance (CC#71)
  • 인코더 회전으로 값 변경, STOP/EXIT으로 복귀
  • 볼륨은 편집 모드에서는 조정 대상 아님, 그러나 저장 시 함께 기록됨
  • 편집 모드에서는 인코더, LOAD(+), SAVE(-), STOP/EXIT만 작동
  • SAVE → UsrPrg00~99 저장. 인코더로 번호 선택, 덮어쓰기 시 확인 메시지 표시
  • PART A와 B 설정 후 A+B 활성화 → UsrCmb00~99로 저장 가능

SPLIT 설정

  • SPLIT 버튼 → 중앙 C 기준으로 A/B 영역 나눔
  • 인코더 조작 순서:
    • Split point 선택
    • Lower octave 조절
    • Upper octave 조절
    • Lower volume
    • Upper volume
  • SAVE 버튼 → 현재 SPLIT 상태를 UsrCmb로 저장
  • STOP/EXIT → 복귀

MIDI 파일 재생

  • PLAY/PAUSE 버튼 → microSD 카드에서 Type 0 MIDI 파일 탐색
  • 파일명: file00.mid ~ file99.mid (최대 100곡)
  • 인코더로 곡 선택, PLAY/PAUSE로 재생 시작
  • 재생 중 PLAY/PAUSE → 일시 정지/재개, STOP → 처음으로 되돌림
  • 다음 곡 자동 재생 여부는 Global Settings에서 설정
  • 재생 중 키보드 입력은 CH14 (PART A), CH15 (PART B), CH10 (DRUMS)로 리매핑
  • STOP 후 다른 버튼 누르면 원래 상태로 복귀. 파트 설정은 복원됨

Global Settings

  • 저장 위치: EEPROM
  • 진입 방법: SPLIT 버튼 누른 상태로 전원 On
  • 설정 방법:
    • 인코더 버튼 → 카테고리 전환
    • 인코더 회전 → 값 조절
  • 설정 항목 (기본값):
    1. Part A default instrument: [0]
    2. Part B default instrument: [48]
    3. Part A channel: [1] (1~9, 11~16)
    4. Part B channel: [2] (1~9, 11~16)
    5. Alternative Part A channel: [14]
    6. Alternative Part B channel: [15]
    7. 인코더 대기 시간(초): [0.2] (0.1~1.0)
    8. MIDI file 정지 시 리와인드: [Y]
    9. MIDI file 연속 재생: [N]
    10. 곡 간 정지 시간(초): [5] (0~10)
    11. Dump settings to microSD card: [N]
  • EXIT 버튼 → 초기 상태로 복귀

회로

아두이노 나노의 핀 연결

74HC595 시프트레지스터 IC를 쓰지 않는 조건으로 설계했기 때문에 아두이노 나노의 모든 핀이 다 쓰이고 있다.

Arduino 핀 기능 설명 또는 역할
D0 MIDI IN (RX) 키보드에서 MIDI 수신
D1 MIDI OUT (TX) GM 음원으로 MIDI 전송
D2 Rotary Encoder CLK 회전 신호 A (인터럽트 가능)
D3 Rotary Encoder DT 회전 신호 B (인터럽트 가능)
D4 Encoder SW (버튼) 로터리 인코더 버튼 입력
D5 PART SELECT 버튼 파트 선택
D6 SPLIT 버튼 스플릿 기능 진입
D7 LOAD 버튼 저장된 프로그램 로드
D8 SAVE 버튼 현재 설정 저장
D9 MIDI Activity LED MIDI IN/OUT 동작 표시용
D10 microSD CS SD 카드 선택 신호
D11 microSD MOSI SPI 데이터 출력
D12 microSD MISO SPI 데이터 입력
D13 microSD SCK SPI 클럭
A0 Part A LED Part A 활성 표시
A1 Part B LED Part B 활성 표시
A2 Drums LED Drums 모드 표시
A3 PLAY/PAUSE 버튼 MIDI 재생 제어
A4 LCD SDA I2C LCD 데이터
A5 LCD SCL I2C LCD 클럭
A6 STOP/EXIT 버튼 편집 모드/재생 종료
  • D0/D1 (RX/TX): MIDI IN/OUT으로 사용할 수 있지만, USB 시리얼 통신과 공유되므로, 업로드 후에는 Arduino가 리셋되거나 통신 충돌이 일어날 수 있음. 사용 시 신중히 처리 필요 (예: 업로드 후 MIDI 회로 자동 연결 또는 점퍼).
  • SPI (D10–D13): microSD 카드에 적합하게 잘 배정됨.
  • A4/A5: I²C LCD에 올바르게 사용됨.
  • A6: 입력 전용 아날로그 핀이므로 버튼용으로 적절.

MIDI IN & OUT

전원

참고

nano_ardule_midi_controller.txt · Last modified: by hyjeong