User Tools

Site Tools


nano_ardule_midi_controller

This is an old revision of the document!


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 SPLIT 버튼 스플릿 기능 진입
D6 STOP/EXIT 버튼 편집 모드/재생 종료
D7 SAVE 버튼 현재 설정 저장
D8 LOAD 버튼 저장된 프로그램 로드
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 PART SELECT 버튼 파트 선택
  • 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.1754541588.txt.gz · Last modified: by hyjeong