아두이노로 휴대용 정전식 터치 피아노 만들기: 단계별 가이드
필요한 부품 및 소모품
| ProtoStax 아두이노용 인클로저 (투명 아크릴, 스택 가능) |
1개 |
| Adafruit 12채널 정전식 터치 쉴드 (MPR121) |
1개 |
| Adafruit 피에조 부저 (PS1240) |
1개 |
| 아두이노 우노 (Arduino UNO) |
1개 |
| 전도성 접착 구리 포일 테이프 (피아노 건반 모양 컷팅) |
1개 |
| 후크업 와이어 키트 (22 AWG) |
1개 |
프로젝트 소개
아두이노, MPR121 정전식 터치 쉴드, 피에조 부저, 전도성 구리 테이프(건반 모양), ProtoStax 투명 아크릴 인클로저로 휴대용 12키 정전식 터치 피아노를 만듭니다. 인클로저 상판에 구리 테이프 건반을 붙여 완성도 높은 미니 피아노가 됩니다.
핵심 포인트
- 12 반음 = 1옥타브: C, C#, D, D#, E, F, F#, G, G#, A, A#, B (MPR121이 12채널이라 완벽 매칭)
- 고차 옥타브 확장을 위한 '시크릿 키' 조합 기능 내장
- 아두이노
tone() 라이브러리로 피에조 부저 구동
- 전도성 접착 테이프라 와이어 위에 붙이기만 하면 연결 완료
- ProtoStax 인클로저: 베이스 플레이트 → 쉴드 장착 → 사이드 월 → 상판(건반) 순으로 조립
1단계: 아두이노를 인클로저 베이스 플레이트에 장착
나사와 스페이서로 고정, 고무 발 부착. 단계별 조립 사진 및 GIF 제공.
2단계: MPR121 쉴드 준비
12개 입력 핀에 22AWG 스트랜드 와이어 납땜 (색상 코딩으로 순서 관리). 피에조 부저도 핀 12와 GND에 납땜.
3단계: 인클로저 준비 및 건반 제작
- 쉴드를 아두이노에 장착, 어퍼 브레이싱/사이드 월 삽입
- 상판 아크릴에 12개 구멍 뚫기 (레이저 커터 또는 드릴 + 마스킹 테이프)
- 와이어를 구멍으로 통과시키고 상판 고정
- 구리 포일 테이프를 피아노 건반 모양으로 잘라 구멍 위의 와이어에 접착
- 템플릿 이미지 제공 (A4 출력 시 실물 크기)
4단계: 데모 코드
Adafruit_MPR121 라이브러리 설치 필요. 예제 스케치 업로드 후 바로 연주 가능.
시크릿 키 조합 (멀티 터치로 연주)
- C + E + G + B → "반짝반짝 작은별"
- C + D + E + F + G → 음계 업/다운
- C + D + A + B → "오! 수산나"
- C + C# + A# + B → "프레르 자크/브라더 존"
코드 구조
- 터치 감지:
cap.touched()로 현재 터치된 패드 비트마스크 획득
- 음 재생/정지: 터치 시작 시
tone(), 모든 키 해제 시 noTone(). 슬라이드 연주 및 서스테인 효과 구현
- 멀티 터치 감지: 특정 비트마스크 값(2193, 181, 2565, 3075)으로 시크릿 곡 연주
멜로디 데이터 구조
typedef struct Note { int frequency; float duration; } Note;
Note melody[] = { {NOTE_C, NOTE_QUARTER}, {NOTE_C, NOTE_QUARTER}, ... };
// pitches.h, noteDurations.h 상수 활용 권장
악보를 보고 주파수/음표 길이로 변환하여 직접 멜로디 추가 가능.
5단계: 더 나아가기
- 자신만의 징글/곡 작곡 및 시크릿 키 할당
- 두 번째 피에조 추가로 2성부 폴리포니 구현 (NewTone 라이브러리로 Timer1 사용)
- 옥타브 시프트 버튼 추가로 음역 확장
코드
ProtoStax_CapacitiveTouch_Piano_Demo
GitHub 저장소
커스텀 파트 및 인클로저
피아노 건반 컷팅 템플릿 및 상판 홀 드릴링 가이드 이미지 제공
회로도
회로도 이미지 제공 (아두이노 + MPR121 쉴드 + 부저 + 구리 테이프 건반)