✨반짝반짝 미디 컨트롤러, 아두이노로 만들다.

credible·2020년 5월 24일
16
post-thumbnail

저는 작곡이 취미입니다.

 아직 초보적인 실력이긴 하지만 작곡의 과정이 재밌기에 꾸준히 진행해왔고, 좀 더 다양한 기술을 이용하고자 Novation사의 Launchpad MK2모델을 구매하여 사용하고 있었습니다.
 저는 주로 피아노를 사용한 작곡을 해왔는데, MK2는 아날로그 입력을 지원하지 않아 작곡을 하는데에 있어서 많은 어려움을 겪었습니다. 사실상 피아노 연주의 제일 중요한 부분은 음의 셈여림인데 이 부분을 일일이 마우스로 조정해야했으니까요.
 이 불편한 상황을 그대로 지켜만 보고 있을 수는 없었습니다. 아날로그 입력 기기를 따로 구비해볼까, 라고도 생각해봤지만 영 아니였습니다. 제가 원하는 미디 컨트롤러의 조건은 다음과 같았습니다.

  1. 이 기기를 구매한 소비자의 입장으로서 불편함을 느껴서는 안된다.
  2. 반드시 DAW로부터 신호를 받아들여 LED를 출력하는 기능은 있어야한다.
  3. 실제로 음악을 만들 수 있는 하나의 ‘제품’을 만들어내야 한다
  4. 별다른 프로그램을 설치하지 않고 사용하는, Plug & Play방식을 구현해야 한다.

 결국, 직접 만들기로 시작한게 이 글을 쓰게 된 계기가 되었습니다.

 수많은 아두이노 중에서 더욱 무한한 확장을 위해 아두이노 메가2560보드를 사용, 케이스는 3D프린팅, 사볼콘 때 이용했던 사이트에서 버튼을 구매하기로 결정했습니다.

 우선 아두이노 메가 보드가 미디를 지원하지 않았기에 미디를 사용할 방법 먼저 알아내야 했습니다. 인터넷을 뒤지던 중, 아두이노에 커스텀 hex 파일을 집어넣으면 메가 보드에서도 미디를 사용할 수 있다는 것을 알게 되었습니다. 커스텀 hex 파일을 업로드하면 IDE에서 코드를 업로드 하는 것은 불가능하지만 별다른 프로그램 설치 없이 미디 신호를 전송할 수 있게 되는 것입니다. 또, 이 커스텀을 지원하는 tttapa님의 Control-Surface 라이브러리를 발견하게 되었고, 당시에 이 라이브러리는 개발중이었지만 모험삼아 시도해보기로 했습니다.

 당시 만들었던 컨셉입니다. 하나의 커다란 본체에는 디지털 장치(버튼) 16개아날로그 장치(노브) 6개가 달려있고, 버튼은 투명한 색으로 각각 독립된 LED가 붙어있는 모양입니다. 본체 상단에는 모듈을 탈착할 수 있고 모듈은 버튼 4개로 이루어져있으며, 모드 전환 / 장단조 전환 등의 기능을 맡도록 했습니다.
 제가 만든거지만 이뻤습니다. 정말 이대로 만든다면 얼마나 이쁠까 라는 행복회로를 무한 번 돌린게 의지로 발현된 것이 아닐까 싶습니다.

 3D모델링을 블렌더시네마4D같은 툴을 이용하긴 귀찮았습니다. 찾아보니, 교육용으로 제작되었다는 tinkercad라는 서비스를 발견하게 되었는데 생각보다 정교한 부분까지 모델링이 가능했습니다. 바로 모델링을 시작했으며, 위와 아래를 따로 만들고 서로 나사구멍을 맞췄습니다.

 3D프린팅 업체에 대해선 잘 몰랐기 때문에, 구글이 알려준 업체인 3B3D에 맡겼으며 인쇄비용은 총 8만 원 정도 들었던 것으로 기억합니다. 후처리를 하게되면 품질이 떡상하는 대신 가격이 엄청 비싸지는데, 그냥 제가 해보기로 했습니다.

 인쇄된 결과물의 품질은 그렇게 좋진 않았지만 그렇게 나쁘지도 않았습니다. 하단이 더럽긴 했는데 어차피 색을 덮을 예정이라 신경쓰지 않았습니다.

 사포질을 하고 색칠놀이를 할 때까진 문제가 없었습니다. 당연히 문제가 없을거라 생각했습니다.... 하지만 저는 한 가지 사실을 간과하고 있었습니다.
 사포질을 한 날은 8월 7일이었고, 이는 곧 여름이었음을 의미합니다. 뜨거운 햇빛이 내리쬐는 여름에 색을 입힌 플라스틱을 건조시키는건 멍청한 짓이었습니다. 케이스가 휜겁니다. 그것도 아주 못 쓸 정도로 휘고, 쪼글아들었습니다. 당황해서 사진을 찍지는 못했지만 건조기에 넣은 속옷이 쭈글쭈글하게 작아진 상황을 떠올리시면 이해가 쉬울 것 같습니다. 그 상황과 정확하게 일치했습니다.

 결국 다시 인쇄했습니다. 재인쇄과정에서 이전버전의 결함 몇 가지수정했고, 검은색 필라멘트로 인쇄할 수 있다는 사실을 알게되었습니다. 바보같은 짓을 했던 것이지만 어쨌든 결과적으로 잘 됐으니 좋은게 좋은거라는 마인드로 자신을 위로해줬습니다.
 위 사진에서 왼쪽이 휘어버린 1세대이고 오른쪽이 새로 인쇄한 2세대입니다. 각지고 번듯한 새 케이스의 모습을 보고 안심했습니다. 참 다행입니다.

 새 케이스도 이전 케이스와 마찬가지로 겉을 정리하기 위해 사포질을 했습니다. 시장에 나온 제품들처럼 매끈매끈하게 만들어보는게 소원이었지만 제 체력이 허락해주지 않았습니다. 언젠간 매끈매끈한 후가공도 도전해보고 싶습니다.

이제 케이스는 끝났습니다.


 주문했던 부품들이 도착했습니다. 각각 아두이노 메가 2560, USB-A to B 케이블, 푸쉬버튼 16개, 저항, RGB LED, 점퍼 케이블, 가변저항 4+2개, 노브 손잡이 종류별로 4개입니다.
 우선 기획상 각각의 푸쉬버튼에 할당된 RGB LED가 번쩍번쩍 해야했기에 LED를 버튼에 삽입하는 작업을 시도했습니다.

 문제가 생겼습니다. 문제는 항상 제일 보기 싫을 때만 튀어나오는 것 같습니다. LED의 크기가 너무 커서 버튼에 삽입하기도 쉽지 않고, 조금만 어긋나도 버튼이 눌리는 것을 방해했습니다. 더 작은 크기의 LED를 사봤지만, 가장 작은 크기인 5mm LED마저 사용이 어려웠습니다.

 깊은 고민 끝에, LED를 버튼에 삽입하지 말고 LED스트립을 이용하여 버튼마다 하나씩 할당해주기로 결정했습니다.


 우선 부품들을 끼워넣었습니다. 아두이노와 노브는 글루건으로 고정했고, 버튼은 자체적으로 고정규격이 있었습니다. 프린트 된 결과물과 딱딱 맞아 떨어져서 다행이었습니다.

 선을 연결하는 방식은 사볼콘 때와 마찬가지로, 버튼은 선을 꼬아서 고정시켜주고 아날로그 장치는 글루건과 함께 묻어버렸습니다.

 이렇게해서 1차 조립을 끝냈습니다. 대충 모든 부품이 잘 인식되는지 확인했고, 납땜을 시작했습니다.

 납땜 준비물입니다. 인두기, 흡입기, 고정기구, 땜납, 플럭스, 솔더위크를 준비했습니다. 사진에 보이는 인두기는 온도 조절이 안되는 모델인데, 꼭 온도 조절이 되는 모델로 사시길 바랍니다.. 저도 재구매했습니다.

 스트립을 하나하나씩 자르고 10cm 점퍼케이블을 이용해 납땜했습니다. 하나를 이을 때마다 작동여부를 일일이 확인해줬고, 이 과정에서 불량이나 땜실수를 걸러낼 수 있었습니다.

 땜질을 끝낸 스트립을 버튼 하나하나 위치를 맞추며 글루건으로 고정시켜주고, 아두이노를 임시로 연결하여 동작을 확인해봤는데 와... 너무 예뻤습니다. 10분동안 이 불빛만 멍하게 쳐다본 것 같습니다.

 런치패드와의 호환과 더 쉬운 작업을 위해 LED의 색상코드를 일일이 런치패드와 대조해가며 하드코딩 해줬습니다. LED에 미치는 저는 이 컨트롤러가 너무 예뻐보였습니다.

 즐거운 코딩 시간이 찾아왔습니다.
 위에서 잠깐 언급했던 tttapa님의 Control-Surface 라이브러리와 인터넷에 돌아다니는 arduino-midi hex파일, 아두이노 메가 2560의 순정 hex파일을 구해 번갈아가며 작업했습니다. 미리 맞춰놨던 LED의 코드컬러들은 colors.h에 따로 분리해놨으며, 당시 개발중이었던 라이브러리의 잠겨있는 기능을 이용하기 위해서 별도의 파일 ManyAddressBankNoteButton.hpp을 만들었습니다.
 2020년 5월 25일 현재 라이브러리들이 많은 업데이트를 거쳤고, 이에 따라 코드의 문법도 달라졌기 때문에 코드를 따로 올리지는 않겠습니다.

 미디 신호를 정상적으로 전송하는 것을 DAW에서 확인하고, DAW에서 보낸 미디 신호를 정상적으로 수신하는지도 확인했습니다. 전체적인 기능은 다음과 같습니다.

  • DAW에서 보낸 velocity값에 따라 하드코딩한 런치패드 색상표를 기준으로 색이 바뀌며, 아름다운 연출이 가능합니다.
  • 16개의 버튼으로 MIDI Note신호를 출력하여 악기를 연주할 수 있습니다.
  • 6개의 아날로그 장치로 MIDI CC 신호를 출력하여 Vol(볼륨)이나 PAN(좌우 균형), Vel(강도)를 조정할 수 있습니다. 이는 DAW에서 커스텀이 가능합니다.
  • 탈부착이 가능한 모듈을 통해 16개 버튼에 할당된 음정을 바꿀 수 있습니다(옥타브 업/다운, 장단조 전환, 모드 변환 등).

 드디어 5개월간의 길었던 취미프로젝트가 막을 내렸습니다. 정상적으로 잘 작동해서 실제로 곡 하나를 만들기도 했고, 힘든 점이 많았던 만큼 뿌듯한 점도 많았던 프로젝트였습니다. 갤러리에 저장된 사진을 따라 글을 썼는데 부드럽게 작성됐다고 느끼셨을지, 혹시 이해가 안되는 부분이 있으신건 아닐지 걱정입니다.
 1년만에 돌아와 두서없이 작성한 글이지만 재미있게 읽으셨다면 다행입니다. 질문이 있으시다면 언제나 물어봐주시길 바랍니다.
 아래에 작동 영상 링크를 남겨뒀으니 구경해주세요. 감사합니다!

https://drive.google.com/file/d/1ATNf2XxNLI66FXthUxvKeyokgrAbMOci/view?usp=sharing

(가능하면 영상을 외부로 공유하지 말아주세요 / 영상의 노래는 크리에이티브 커먼즈 저작자표시-비영리 4.0 국제 라이선스에 따라 이용할 수 있습니다 / 필자는 2020년부터 고등학생입니다)

profile
귀찮아도 언젠간 해야 할 일

7개의 댓글

comment-user-thumbnail
2020년 6월 3일

이런 글 아주 좋습니다 더 올려주세요ㅜ 🙏🙏

1개의 답글
comment-user-thumbnail
2020년 6월 4일

와우! 잘보고갑니다!

1개의 답글
comment-user-thumbnail
2020년 6월 5일

와우! 좋은글 감사합니다!!!

1개의 답글
comment-user-thumbnail
2020년 6월 16일

코드좀 보내주실수 있나요??

답글 달기