2026년 4월 16일 목요일

[Fluid Ardule의 곁가지 프로젝트] MIDI Bridge 또는 MIDI Router

지난 1월에 만들었던 USB MIDI host to DIN MIDI converter(일명 'UNO-2')의 기능을 확장해 나가기 시작하였다. 화려한(?) 2004 LCD 모듈이 달려 있지만 반응이 즉각적이지 않기 때문이다. 아두이노 우노의 A0 핀에 LED를 달고, 민웰 SMPS(5V 10A급)로부터 5V를 공급받을 수 있는 USB-C 커넥터를 달아 주었다. 처음에는 A3 핀에 LED를 달았으나 무슨 이유인지 HIGH를 출력하지 못하였다. 바로 아래에  스태킹한 USB MIDI host shield에서 이 핀을 사용하는 것도 아닌데 왜 그럴까? 아두이노 우노에서 직접 선을 딴 것이 아니라 stacking pin header를 거치는 바람에 접촉에 문제가 생겼는지도 모른다. 하지만 같은 계층의 보드에서 따낸 A4/A5에 연결된 I2C 2004 LCD 모듈도 정상 작동하고, A0에서도 HIGH 전압이 잘 나오며, 전원 공급도 원활하다. 결국 A3 사용은 포기하고 A0에 LED를 연결하기로 하였다.




이 장치를 만든 처음의 목적은 USB MIDI keyboard controller의 출력 신호를 DIN MIDI 단자만 있는 구형 사운드 모듈에 전달하기 위함이었다. 이미 기본 기능 펌웨어는 개발을 하였기 때문에 어제의 작업에서는 약간의 납땜을 한 뒤 LED가 MIDI 신호 입력에 따라서 깜빡거리게 만든 것이 전부이다.

다음으로는 구형 키보드의 DIN MIDI 출력을 받아서 아두이노 우노의 USB-serial interface로 출력하게 만들고자 한다. 사실 케이블 형태의 MIDI USB interface로 충분한 일이지만, 기왕 만든 DIY 기기에 새로운 기능을 부여하고 싶었다. 

아두이노 우노는 RX(D0)와 TX(D1) 핀을 USB-serial 통신에 사용한다. 그런데 이 두 개의 핀은 MIDI shied에서도 MIDI 신호 입출력에 사용한다. 만약 RX 핀이 MIDI IN에 영구적으로 연결되어 있다면, 펌웨어 업로드를 할 수가 없다. 따라서 MIDI shield에는 이를 끊어주는 슬라이드 스위치가  존재한다. 이를 정확히 알고 사용해야 한다.

구상하고 있는 Fluid Ardule 곁가지 프로젝트의 모습은 다음과 같다. 이름은 확장된 기능을 포용할 수 있는 새로운 MIDI Bridge 또는 MIDI Router 정도가 될 것이다. 그저 간단하게 UNO-2라고 불러도 좋다.


DIN MIDI IN으로 들어오는 신호를 처리하는 기능은 아직 구현하기 전이다. TX 핀이 하나 뿐이므로 출력은 항상 MIDI OUT과 USB-serial interface로 동시에 나간다. 굳이 이벤트를 필터링하거 재매핑하는 등 아두이노를 힘들게 할 작업을 덧붙일 생각은 없다.

그러나 라즈베리파이가 시리얼 스트림 형태로 들어오는 MIDI 데이터를 처리하려면 약간의 추가 작업을 해야 한다. 이는 ALSA 입장에서는 MIDI 장치가 전혀 아니다. 따라서 다음과 같은 방법 중 하나를 택해야 한다.

  1. Python을 이용한 브리지(pyserial로 읽고, mido + python-rtmidi로 ALSA에 전달)
  2. C 기반 브리지(구현 난이도 높음)

아두이노 우노가 아니라 Leonardo/Micro/Pro Micro, 또는 Teensy를 사용한다면 아두이노 자체가 USB MIDi device가 되므로 이런 일을 할 필요가 없다. 

USB host shield는 아두이노 우노를 USB device로 만들어 주지는 못한다. 우노는 USB device로 동작할 수는 있지만, 기본적으로는 USB-serial(CDC) 인터페이스만 제공할 뿐 USB MIDI class를 지원하지 않는다.

전통 기술(MIDI)을 이 시대에도 즐기기 위해 새로운 시도를 아끼지 않고 있다. 이 과정에서 ChatGPT가 정말 크게 기여하고 있음을 오늘도 실감한다.

2026년 4월 17일 업데이트

DIN MIDI IN으로 연결한 건반의 연주 신호를 그대로 출력하도록 펌웨어를 수정하였다. 해당 신호는 Arduino UNO의 USB-serial을 통해 라즈베리파이로 전달되며, 이를 ALSA sequencer 기반의 MIDI 스트림으로 변환하여 가상 MIDI 포트로 출력하는 브리지 프로그램을 구현하였다. 이후 aconnect 명령을 통해 FluidSynth와 연결하여 사용할 수 있다. 

파이썬과 C 두 가지를 만들었는데, C로 짜여진 것이 매우 안정적으로 잘 실행되었다. UNO-2의 리셋이나 케이블 재연결 시에도 연결 상태가 유지됨을 확인하였다. 결과물은 GitHub에 새로운 리포지토리(uno-midi-bridge)로 등록하였다. Fluid Ardule도 아주 간단한 소개의 글과 함께 리포지토리를 새로 만들었다.



국회 입법 공청회에 진술인으로 출석하다

'진술'이라는 낱말은 너무나 엄숙하기 때문에 법정에서나 쓰여야 할 말처럼 여겨진다. 국회 과학기술정보방송통신위원회에서 출석해 달라는 전화를 받는 모습을 보고 곁에 있던 동료가 보이스피싱 전화 아니냐고 물었을 정도니 말이다.

진술(陳述)은 자신의 생각, 사실, 경험 등을 말이나 글로 표현하여 알리는 것을 뜻합니다. 주로 법률적 맥락에서 피의자, 피고인, 증인 등이 사건에 대해 구술 또는 서면으로 설명하는 행위를 지칭합니다. (구글 AI 개요)

어쨌든 이틀 전인 4월 14일 오후, 제434회 국회(임시회) 과학기술정보방송통신위원회('과방위') 과학기술원자력법안심사소위원회에서 열린 국가연구데이터법 관련 입법 공청회에 의견 진술인으로 출석을 하게 되었다. '혹시 국회방송으로 생중계되는 것 아닌가' 하는 적지 않은 부담감과 함께 국회로 향했다.


4월 중순임에도 불구하고 한낮의 기온은 27도나 되어 무척 더웠다. 정문으로 들어와서 본관 뒷편의 출입구까지 돌아가는 길이 왜 이렇게 먼 것인지. 이번 법안은 인공지능과 디지털 전환의 확산으로 연구데이터를 국가적 차원에서 체계적으로 관리하기 위한 것으로, 복기왕·박충권·황정아 의원이 각각 별도의 법안으로 대표발의하였다가 (내가 이해한 바가 맞다면) 하나로 합쳐져서 공청회를 거친 후 법안소위와 전체회의까지 통과하였다. 이날의 결과는 소관 상임위 최종 안건으로 의결한 것이다.

행정부가 제출하는 정부입법은 국회 제출 전의 사전 조율 및 심사 기간이 매우 길다. 반면에 의원입법은 국회의원 10인 이상의 찬성만 있으면 되므로 시급한 현안에 대응하기 쉽다. 그래서 정부부처가 국회의원을 섭외하여 정부가 입법한 법안을 의원 발의 형식으로 제출하는 일이 많다. 이를 청부입법이나 우회입법이라고도 하는데, 상당한 비아냥거림이 느껴지는 낱말 선택이 아닐 수 없다.

모든 공청회는 공식 기록으로 남겨지지만, 다행스럽게도 전부 국회방송을 통해 나가는 것은 아니었다. 진술인은 각자 순서대로 돌아가면서 7분 정도 발표를 하고, 의원들의 질의응답에 응한 뒤 628호 소회의장을 빠져나왔다. 각 의원들은 저마다의 색채를 가지고 이날 있었던 일을 뉴스화하고 있었다. 기왕이면 같은 지역구(유성구 을)의 현역 의원인 황정아 의원의 발언이 포함된 뉴스를 인용해 보기로 하자.

황정아 의원 "데이터 등록과 공유에 힘쓴 주체에 대한 보상책 필요"
nate 뉴스 2026년 4월 15일

사진 출처: 황정아 의원 페이스북. 왼쪽 줄 어딘가에 내가 앉아 있다.

각 의원들이 처음으로 법안을 발의한 것이 벌써 2024년의 일이었다. 생각보다 많은 시간이 걸렸다. 작년 3월에 국회에서 열렸던 국가연구데이터 관리·활용 촉진 법제화 추진을 위한 토론회(KISTI 웹사이트 링크)에 패널로 초청되어 참석했던 것이 인연이 되었던 것 같다.

어차피 공개가 될 것이기 때문에 여기에 나의 진술서 내용을 그대로 올려도 되지만, 약간의 고민이 필요하다. 진술인 모두가 충분한 시간이 주어지지 않은 상태에서 진술서를 작성하였으나 나의 것과 비교하면 분량이나 구성, 포함된 표 등 완성도가 월등히 높아 보이기에 내 것을 공개하기는 좀 부끄럽다는 생각이 들었다. 생각이 바뀌어서 몇 시간 뒤에 위키 페이지에 공개할지도 모른다.

그리고 또 다른 이유도 있지만, 여기에 쓰고 싶지는 않다. 지금보다는 언젠가 자유로운 날이 올 터이고, 그때가 되면 하고 싶은 말을 속 시원하게 털어놓을 수 있을 것이다.

기회가 되면 본회의장에서 실제 국회가 열리는 모습을 보게 되었으면 한다. 흥미로운 경험이었다.

2026년 4월 14일 화요일

[Fluid Ardule] 이제는 안정화의 길로 접어드는가?

고질적인 note off 누락 문제, 즉 피아노를 연주하고 있는데 일부 키가 마치 서스테인 페달을 밟기라도 한 듯 음이 끊이지 않고 지속되는 문제는 FluidSynth를 실행할 때 '-m alsa_raw'를 사용함으로써 대폭 줄어들었다. '-m' 또는 '--midi-driver=[lable]'은 oss, alsa, alas_seq 등 MIDI driver를 고르는 옵션이다(모든 옵션 설명 링크). '-m alsa_raw'는 raw MIDI 장치를 직접 열어서 입력을 받음을 의미한다. 기본은 alsa_seq이다.

이를 통해 안정성을 확보하는 대신 키보드 연결을 해제하였다가 다시 꽂았을 때 자동으로 인식되는 편리함은 포기해야 했다. 그러나 이러한 작은 불편함은 다른 방법을 통해서 해결 가능하다. 키패드의 버튼 하나를 길게 누르면 MIDI panic에 해당한다. 이를 작동시키면 FluidSynth를 다시 띄우면서 결과적으로 복구가 되는 것처럼 보인다.

구글 AI모드의 'fluidsynth -m alsa_raw 설명'.


라즈베리파이 3B라는 이전 세대의 SBC(Single Board Computer)에서 안정성과 속도, 이 두 마리의 토끼를 잡는 것이 가능할까? 최소한 4세대 것을 쓰면 나을 것도 같은데, 추가적인 지출이 필요하다. 제한적인 하드웨어를 이용하여 어떻게 해서든 최적의 해법을 찾는 연구는 앞으로도 계속될 것이다. 

오늘은 주로 파일 재생 기능의 완성도를 높이는데 주안점을 두었다. 예전에 Volumio를 쓰던 시절에 CD를 리핑한 음원 파일(.wma) 담아서 감상용으로 쓰던 USB 드라이브를 여기에 꽂아서 사용하려는 속셈도 갖고 있다.

TFT-LCD에 보이는 버튼을 누르고 싶지만 아직 터치 기능은 구현하지 않았으며, 급하게 이를 가능하게 만들 생각도 없다. 화면에 보인 버튼 그림은 5버튼 키패드의 기능을 설명하기 위한 것이다.

TFT-LCD의 표시도 개선해 나가면서 이제는 제법 악기의 면모를 갖추게 되었다. 볼륨 조절은 아두이노 우노의 A0 핀에 연결된 가변저항이 맡는다. 아직 로터리 인코더는 하는 일이 없다. 조만간 사운드폰트 파일에 내장된 프리셋을 바꾸는 기능을 더하게 되면 인코더도 본격적인 업무를 떠안게 될 것이다.

라즈베리파이에서 돌아가는 파이썬 스크립트는 이제 1700줄에 이를 정도로 규모가 커졌다. 놀라운 바이브 코딩의 힘이여! 

2026년 4월 13일 월요일

[Fluid Ardule] MIDI 파일 재생에서는 5개의 버튼으로 "Transport" 기능을 구현하기가 까다롭다

Audacity나 Tracktion과 같은 DAW(Digital Audio Workstation) 소프트웨어를 열면, 과거의 테이프레코더나 MP3 재생기에서 흔히 보던 버튼 모임이 눈에 띈다. 이것을 transport(또는 transport control)라고 부른다.

요즘처럼 디지털 매체의 재생이 일상이 된 시대에는 무엇을 전송(transport)한다는 것인지 다소 낯설게 느껴질 수도 있다. 그러나 과거에 널리 쓰이던 테이프 매체를 떠올리면 이런 용어가 남아 있는 이유를 쉽게 이해할 수 있다. 파워포인트에서 여전히 ‘슬라이드’라는 표현을 쓰는 것과 비슷한 일이다.

글루건은 DIY에서 정말 좋은 도구이다. 라즈베리파이와 키패드를 제외한 모든 부품의 배치가 다 바뀌었다.

Fluid Ardule의 다섯 개 버튼 키패드.

요즘 개인 차원에서 개발을 이어가고 있는 라즈베리파이 + 아두이노 우노 기반의 SoundFont synthesizer인 Fluid Ardule에는 총 다섯 개의 버튼이 있다. 네 방향의 화살표와 맨 오른쪽의 선택(Select) 키이다. 키를 누르는 신호는 아두이노 우노의 A0 아날로그 핀으로 입력되어 라즈베리파이로 전달된다. TFT-LCD 화면에 펼쳐진 여러 항목을 이동한 뒤 원하는 곳으로 진입하는 데에는 이러한 키패드가 매우 적합하다. 그러나 재생을 조절하는 이른바 transport 기능에는 이를 어떻게 대응시켜야 할까? 사실 사족일지도 모르겠으나, 나는 Fluid Ardule에 MIDI 및 오디오 파일(ogg, wav, mp3 등)의 재생 기능을 넣어 놓았기 때문이다.

그렇다면 iPod의 버튼 배치와 기능을 흉내내어 볼 수 있지 않을까?

애플 iPod 셔플 4세대(그림 출처: 애플).


화살표 키는 원 둘레의 네 개 버튼에 그대로 대응시키고, 선택 키는 가운데의 재생/일시정지 버튼에 대응하도록 만들면 된다. 그러나 MIDI 파일 재생에서는 몇 가지 주의할 점이 있다.

MIDI 재생은 오디오 파형 재생이 아니라 이벤트 스트림 처리에 가깝기 때문에, 일시정지를 완전하게 구현하기가 쉽지 않다. 전혀 불가능한 것은 아니지만, 이를 제대로 처리하려 들면 사실상 MIDI 파서를 직접 구현하는 수준으로 일이 커질 수 있다. 따라서 MIDI 파일에 대해서는 재생/일시정지보다는 Stop(+Panic) 중심으로 단순화하는 것이 현실적이다.

같은 이유로 빨리 보내기나 되감기도 어렵다. 일반 오디오 파일처럼 임의의 위치로 자연스럽게 이동시키기보다는, 다른 곡으로 넘기거나 현재 곡의 처음으로 돌아가 다시 시작하는 정도로 제한하는 편이 적절하다. 진행 상태를 초 단위로 화면에 표시하는 일도 일반 오디오에 비해 훨씬 까다롭다.

결국 버튼의 의미는 MIDI 파일과 일반 오디오 파일에 대해 동일하게 둘 수 없다. 오디오 파일에서는 재생/일시정지, 빨리 보내기, 되감기, 시간 표시 같은 일반적인 트랜스포트 기능을 비교적 자연스럽게 제공할 수 있지만, MIDI 파일에서는 Stop(+Panic), 이전/다음 곡, 처음부터 다시 시작하기처럼 더 단순하고 안정적인 동작 위주로 설계하는 것이 바람직하다.

생각보다 까다롭다!

곡 목록으로 되돌아가는 기능은 특정 키를 길게 누르는 방식으로 구현하면 될 것이다.

민웰(Mean Well) 5V 10A SMPS는 저전압 문제를 완전히 해결하지 못하였다

SMPS의 출력 터미널, 내가 만들어 넣은 중간 단계의 스크류 터미널, 그리고 I2S DAC 핀 헤더(즉 GPIO를 통해 흘러 나오는 전원 전압)에서 측정한 전압이 생각보다 큰 차이를 보였다. 전원 케이블과 커넥터를 거치면서 이렇게 많은 전압 강하가 일어날 줄은 미처 예상하지 못했다. 

유전원 USB 허브를 사용했음에더 불구하고 Mackie Onyx 2-2 Producer 오디오 인터페이스를 연결하는 순간 라즈베리파이는 저전압 경고를 내다가 정상 상태가 된다. 그냥 라즈베리파이 전용 3.5A 전원 어댑터를 쓰고 구태여 고용량의 SMPS를 구입할 필요가 없었던 것은 아닐까? 무엇 하나 생각하는대도 되는 것이 없다.

아직 불완전한 트랜스포트 기능을 완결한 뒤에는 아두이노 우노에서 불필요한 기능을 걷어낼 계획이다. 라즈베리파이의 TFT-LCD가 주 디스플레이 기능을 충실히 수행하고 있기 때문에 아두이노 우노의 1602 LCD는 사실상 필요하지 않다. 당초 계획에서는 시리얼 통신을 통해 두 기기 사이에서 강한 handshaking을 하고 라즈베리파이 -> 아두이노 우노 방향의 신호 전송이 필요했었다. 그러나 이제는 반대 방향으로 버튼/인코더/pot 신호를 일방향 전송만 하면 되므로 펌웨어 개발에 대한 부담이 훨씬 줄어들었다. MIDI activity를 LED로 표시하는 문제는 아직 고민 중이다. 이는 아두이노 우노가 라즈베리파이의 신호를 받아야 할 이유를 남겨놓기 때문이다.

'전원을 켜고 키보드를 연결하면 피아노 소리가 난다'라는 기본 목표는 이미 충분히 달성하였다. 버튼을 조작하여 사운드폰트를 바꾸면 키보드 컨트롤러의 패드를 터치하여 드럼 소리도 낼 수 있다. 프로그램 변경, CC 조절 등 추가적인 기능을 담아 가는 것이 앞으로의 숙제이다.    

2026년 4월 11일 토요일

[독서 기록을 빙자한 잡설] AI 버블이 온다, 모든 것들의 민영화, 생각의 진화

생각해야 할 많은 것들을 그저 AI에 맡기는 일이 잦아진 요즘, 뇌를 와이파이에 연결한 뒤 '최근 읽은 책 독후감을 써 줘'라고 말하고 싶다. 그러면 의식하지 않아도 알아서 독서 기록이 써질 것만 같다. 만약 시험도 이런 방식으로 이루어지는 날이 올까? 그건 말이 되지 않는다. 설령 뇌와 전자장치를 연결하는 뇌-컴퓨터 인터페이스(BCI)가 실용 수준으로 발전한다 할지라도, 의식의 지평선 너머 사라지려는 기억을 찾아내는 정도로만 쓰이는 것이 좋을 것이다. BCI를 통해서 인간의 사고력, 응용력, 판단력을 시험하려는 시도는 하지 않는 것이 좋다. 그러면 누구도 힘써서 기억을 되살리고 그를 바탕으로 현실에서 주어진 문제를 해결하려는 노력을 하지 않으려 할 테니까 말이다.

논문에는 DOI나 PMID가 있듯이, 서적(단행본)에는 ISBN(International Standard Book Number)라는 것이 있다. ISBN는 책에 붙은 주민등록번호와 같은 것이다. 같은 책이라도 판형(양장/페이퍼백), 개정판이 다르면 ISBN도 다르고, 전자책에도 다른 ISBN이 붙는다. 잡지와 같은 연속간행물에는 ISSN(International Standard Serial Number)가 있다. ISBN은 13자리이고, 뒤에는 (03100)과 같은 부가 정보가 붙는다. 이 부가 정보는 ISBN과는 무관하다.

조사를 한 김에 조금만 더 알아보자. ISBN은 한국출판문화산업진흥원에서 출판사 단위로 관리한다. 책이 발행되면 발행 후 일정기간 내에 국립중앙도서관 등에 2권을 납본할 의무가 생긴다. 전자책은 '몇 권'의 의미가 없으니 파일을 전용 시스템에 업로드하는 것으로 끝난다.

어떤 책의 ISBN을 알면, 국립중앙도서관에서 운영하는 한국서지표준센터에서 그 책의 정보를 찾을 수 있다. ISBN·ISSN을 실제로 발급하는 곳도 이곳이다. 예를 들어 구글에서 ISBN 979-11-5581-886-2을 검색하면 한국서지표준센터의 해당 서적 링크가 연결된다. 센터 내에서도 검색이 된다. 링크를 클릭하면 오늘 독서 기록을 쓰려 하는 《AI 버블이 온다》의 최소 정보가 보일 것이다.



그러나... 허전하다. 이는 책을 읽으려는 사람을 위한 도서 정보 시스템이 아니기 때문이다. 한국서지표준센터의 메뉴 체계를 보면 누구나 느끼겠지만, ISBN을 신청하여 발급을 받고, 이에 따라서 실물 책을 납본하고 확인을 받는 출판업자를 위한 시스템인 것이다. 실물 책의 표지나 내용 소개를 조금이라도 보고 싶으면, 교보문고알라딘 또는 예스24를 이용하는 것이 낫다. 

서지정보란 책의 내용이 아니라 책을 식별하고 기술하기 위한 정보이다. 즉 서적 관리를 위한 최소한의 메타데이터이다. 여기에 목차나 초록이 포함되는 것이 옳은가? 나는 오늘 ISBN을 이용하면 책의 정보를 찾을 수 있으리라는 기대를 갖고 검색을 시작하였다. 기왕이면 이를 관리하는 센터에서 몇 줄의 정보 말고도 책의 내용에 관심을 갖는 사람의 필요성을 충족시켜줄 수 있는 부가 정보가 더 있으면 얼마나 좋을까하는 생각도 가져 보았다. 그러나 이는 한국서지정보센터의 고유 임무를 넘어가는 일이 될 수도 있다.

이러한 '불편함'이 바이오 데이터를 수집하고 관리하는 KOBIC의 현실과 매우 흡사하다는 생각이 들었다. '어떤 책을 읽을까?'라는 질문에 대한 답을 얻기 위해 한국서지정보센터를 검색해서는 안된다. 하지만 '어떤 데이터가 나의 연구에 도움이 될까?'라는 질문에 K-BDS를 찾는 사람에게 '우리는 데이터 목록만 제공하는 곳이라구요'라고 할 수는 없기 때문이다. 그러한 면에서 NCBI의 PubMed라는 서비스는 이용자의 모든 욕구를 충족할 수 있는 정말 멋진 모델이라고 하지 않을 수 없다. 초록을 포함한 간결한 정보를 제공함과 동시에 필요한 사람은 원문 링크를 타고 이동하면 되기 때문이다. 정리하여 말하자면 '식별을 위한 정보'와 '이해를 위한 정보 사이'의 균형을 잘 보여주는 사례임을 누구나 인정하지 않을 수 없다.

왼쪽부터 ISBN 979-11-5581-886-2, 979-11-985632-8-6, 그리고 979-11-5540-261-0

서론이 너무 길어지고 말았다. PubMed 이야기를 하니《모든 것들의 민영화》제8부 "돈이 흘러넘쳐요"(공공 과학과 연구의 민영화)가 기억에 다시 떠오른다. 학술지는 원고료를 내지 않고 대신 투고료를 받는다. 심사자는 커뮤니티에 도움이 된다는 자세로 대가 없이 논문을 검토한다. 이를 읽으려는 독자나 도서관 회원은 아티클 단위로 돈을 내거나, 여러 저널을 묶어서 매우 비싼 연간 구독료를 내야만 한다.한 가지 지식을 적어도 세 번 구매하게 만드는 것이다. 이는 아주 작은 사례이며, 책을 읽다 보면 이렇게 많은 분야에서 민영화의 폐해가 나타나고 있는지 놀라게 될 것이다. 과도한 민영화는 공공 서비스를 사라지게 하고, 시민 주권의 붕괴를 초래하게 된다. 공동 도서관도 민영화의 좋은 사냥감이다. '나는 도서관을 가지 않으니, 내가 내는 세금이 불필요하게 도서관 운영으로 흘러가지 못하게 해 줘'라는 정서에 호소하고 수익자가 돈을 내고 서비스를 사게 해야 한다는 시장 논리를 부추기면 시민이 마땅히 누려야 할 공공성은 사라지고 만다.

시대를 앞서간 10명의 인플루언서를 소개한《생각의 진화》(그들은 어떻게 시대를 앞서갔는가)에서 저자는 크리스타이누 호날두나 도널드 트럼프보다 더 큰 영향력을 발위할 수 있었더라면 좋았으리라 생각하는 10인의 인물을 소개하고자 하였다... '인류세'에 인간의 문제를 더욱 합리적으로 해결할 수 있는 현대적 세계관을 발전시키는데 특별한 방식으로 도움이 되는 생각을 정립했다고 믿기 때문이다. 이탤릭체는 머리말('머리는 혼자 생각하지 않는다' 16쪽)을 그대로 인용했음을 의미한다.

이 책은 초중고생 필독 위인전과 같은 취지로 만들어진 것이 아니다. 세상의 운명을 서투른 손에 쥐고 있는 진화의 특별한 산물인 인간(줄리언 헉슬리)은 요즘 널리 쓰이기 시작한 새로운 지질학적 시대인 인류세의 주역이 되고 말았다. 우리의 사회와 환경을 지속 가능하게 관리해야 하는 막대한 과제를 안고 있는 요즈음, 이 10인의 유산으로부터 우리는 통찰력을 얻어야 한다.

저자의 뜻을 기리기 위해 각 장의 제목과 소개된 인물을 여기에 나열하고자 한다. 앞으로 읽을 책을 고를 때 좋은 참고 대상이 될 것이다.

  • 찰스 다윈과 진화의 발견 - 변화하는 것보다 영원한 것은 없다
  • 알베르트 아인슈타인과 자연의 법칙 - 발상의 전환으로 시공간을 뒤흔들다 
  • 마리 퀴리와 물질의 신비 - 우주는 평화와 폭탄을 품고 있다
  • 알프레트 베게너와 판구조론의 발견 - 대륙과 함께 세상이 흔들리기 시작하다
  • 칼 세이건과 지구 너머로의 모험 - 우리는 우주의 티끌 한 점이다 
  • 에피쿠로스와 의미 찾기 - 오직 지금 삶만이 존재한다 
  • 프리드리히 니체와 도덕의 작별 - 이 세계는 모래 위에 세워진 성이다
  • 카를 마르크스와 사회의 발견 - 우리에게는 사슬을 끊는 힘이 있다
  • 칼 포퍼와 열린사회의 가능성 - 우리는 오류를 통해 위로 올라간다
  • 줄리언 헉슬리와 미래의 인간 - 모든 것은 진화로 이해할 수 있다

이번에 쓴 몹시 불충분한 독서 기록은 나의 독서 취향 단면을 200% 보여주고 있다고 하겠다. 다음에 읽고 싶은 책은 미리 소개해 둔다.


2026년 4월 9일 목요일

[Fluid Ardule] I²S DAC 보드에서 소리가 나게 하려면

I²S(Inter-IC Sound)는 디지털 오디오 데이터를 칩 사이에서 전달하기 위한 전용 통신 방식이다. CD 플레이어 내부에서 디지털 오디오 신호를 DAC로 전달하기 위해 널리 사용되는 기술이니 꽤 오래된 전통적인 기술이라고 할 수 있다. 위키백과에 의하면 1986년 필립스 세미컨덕터에 도입되어 1996년 마지막으로 개정되었다고 한다. 활용이 시작된지 무려 40년이나 된 기술이다! I²S라고 쓰는 것이 맞지만 여기에서는 편의상 I2C를 혼용하고자 한다.

본래 I2C는 기기 내부 통신을 위한 인터페이스이지만, 최근에는 라즈베리파이와 같은 보드에서 GPIO를 통해 외부 DAC와 연결하는 방식으로도 활용되고 있다. 전원을 제외하면 단 세 가닥의 선(BCK, LCK, DIN)만으로 고품질 오디오를 구현할 수 있어, 자작 기기 내부에서는 USB 방식보다 구조가 단순하고 지연이 적다는 장점이 있다. 

PCM5102A를 사용한 I2S DAC 보드. SCK: continuous serial clock, BCK: bit clock, LCK: left/right clock(LRCK 또는 WS-word select로도 표기), DIN: data in. SCK 바로 곁의 패드를 납땜하면 보드 내부의 클럭을 쓰게 되므로 실제로는 BCK, DIN, LCK 세 개의 핀과 전원(VIN & GND)만 연결하면 된다.


다만 I2S는 신호 무결성에 민감하여 긴 케이블을 사용하기 어렵고, 외부 연결을 위한 표준화된 인터페이스가 없어 범용성은 떨어진다. 반면 USB Audio는 연결성과 안정성 면에서 훨씬 유리하다.

실제 USB DAC 내부에서는 USB로 받은 데이터를 I2S로 변환하여 DAC에 전달하는 구조가 일반적이며, 두 방식은 상호 보완적인 관계로 볼 수 있다.

최근 알리익스프레스에서 단돈 2,900원을 주고 PCM5102A를 사용한 I2S DAC 보드를 두 개 구입하였다. 라즈베리파이의 등장과 더불어 이 칩을 사용한 보드가 이베이나 알리익스프레스에 쏟아져 나오기 시작한 것이 대략 2014년 무렵이라고 하니 뒷북도 이만저만한 뒷북이 아니다. 내가 라즈베리파이 3B를 구입하여 Volumio을 처음 경험한 것이 2021년이었다. 당시에는 오로지 USB DAC만 쓸 생각을 했었다. 

보드에 핀 헤더를 납땜하고 연결한 뒤, 라즈베리파이에서 필요한 설정(/boot/firmware/config.txt 수정)을 마치고 OGG 파일을 재생해 보았다.

그런데 소리가 전혀 나지 않았다. 오류 메시지도 나타나지 않는다. 오디오 재생 프로그램을 실행하는 동안에만 아주 작게 ‘웅-’ 하는 잡음이 들릴 뿐이었다. aplay -l 명령을 내리면 장치 인식은 제대로 된 상태였다. ChatGPT와 아무리 상담을 해 보아도 배선 실수 가능성만 제시할 뿐이었다. 구입한 보드 두 개가 모두 같은 상태였다.

해결책을 달란 말이다!

정답은 구글 검색에서 나왔다. 보드의 몇 군데에 납을 녹여서 이어 붙여야 하는 이른바 ‘solder blob’ 패드가 존재했던 것이다. 다음 사진을 보라. H#L(# = 1, 2, 3, 4)라고 인쇄된 것이 보일 것이다.

이를 다음과 같이 만들어야 한다. 가운데 패드를 왼쪽(H)이나 오른쪽(L)에 납땜으로 이어 붙여야 한다. 아래 사진은 표준적인 사용에 맞는 납땜 사례이다.

추가적으로 SCK는 보드 윗면에서 패드를 서로 이어 그라운드로 연결해야 한다. 그렇게 해야 시스템 클럭을 사용할 수 있다. 이러한 정보는 How to make PCM5102 DAC work on Raspberry Pi ZeroW?라는 글에 상세하게 나온다. 심지어 국내 유튜브 채널인 TinkerBox에서도 이미 6년 전에 PCM5102 I2S DAC 모듈을 래스베리 파이와 사용하기라는 영상을 올려 두었다.

내가 비록 ChatGPT에 의존함으로써 과거에는 불가능했던 수준의 취미 DIY 프로젝트를 진행하고 있지만, 때로는 고전적인 방법인 검색이 여전히 필요함을 깨달은 순간이었다. 다행히도 보드를 받은 뒤 아주 짧은 좌절의 기간(24시간이 채 되지 않았으니)을 거쳐 해결 방법을 알게 되었다.

이 DAC 보드의 설정 방법은 별도의 글인 Raspberry Pi I2S PCM5102A DAC Setup Guide에 정리해 두었다. 본문에 포함된 /etc/asound.conf는 하드웨어 볼륨 조절기가 없는 이 보드를 사용할 때 특히 유용하다. 사실 없어도 되지만, 이를 설정해 두면 alsamixer에서 볼륨을 조절할 수 있게 된다.

어제까지의 노력을 통해 Fluid Ardule의 주변장치 구성을 마무리하게 되었다. 온갖 가능성을 테스트해 본 뒤 가장 무난하고 가벼운 구성을 택하기로 했다.

최종 구성은 다음과 같다.

라즈베리파이(사운드 엔진) - I2S DAC를 통한 오디오 출력과 FluidSynth 실행 담당.  USB DAC를 연결하여 사용할 수도 있다. SPI TFT-LCD를 연결하여 상태 정보를 표시한다.

Uno-1(UI 컨트롤) - 1602 LCD 표시 및 버튼/인코더 입력 처리 담당. 라즈베리파이쪽으로 정보를 일방향 전송하는 것이 원칙이다.

Uno-2(MIDI 엔진) - MIDI 입력 처리 및 변환 담당. 필수 구성품은 아니다. 라즈베리파이가 USB로 연결된 MIDI 키보드 컨트롤러의 신호를 처리하기 어려운 경우를 대비한 것이다. 

이번에는 시행착오를 줄이기 위해 처음부터 단계적인 개발 절차를 밟고 있다. 우선 아두이노 우노(Uno-1)에서 버튼과 인코더 입력을 처리하는 펌웨어를 안정적으로 완성한 뒤, 라즈베리파이에서 이를 제대로 전달받는지 확인하였다. 이어서 파이썬을 이용해 터미널 창에서 건반 → FluidSynth → DAC으로 이어지는 오디오 경로를 구성하고, 실제로 소리가 나는 상태를 화면에 표시하도록 만들었다. 최종 목표는 TFT-LCD에 각종 정보를 표시하고, 아두이노 우노의 조작을 통해 메뉴를 선택·실행할 수 있는 사용자 인터페이스를 구현하는 것이다.

2026년 4월 9일 업데이트 - 구글 AI 모드의 I2S 기술 설명

최근 DIY 오디오 시장과 하이엔드 오디오에서 I2S가 다시 주목받으며 '재발견'된 데에는 몇 가지 핵심적인 이유가 있습니다.

  • 지터(Jitter) 감소: 기존의 외부 연결 표준인 S/PDIF나 광(Optical) 방식은 데이터와 클록 신호를 하나로 합쳐서 보내기 때문에, 나중에 이를 다시 분리하는 과정에서 시간 오차(지터)가 발생하기 쉽습니다. 반면 I2S는 처음부터 데이터와 클록 신호를 분리하여 전송하므로 이론적으로 더 순도 높은 디지털 신호를 유지할 수 있습니다.
  • 복잡한 변환 과정 생략: 원래 소스(예: 네트워크 플레이어의 MCU)에서 생성된 오디오 데이터는 이미 I2S 형태입니다. 이를 굳이 S/PDIF로 변환했다가 DAC에서 다시 I2S로 푸는 비효율적인 과정을 생략하고 I2S를 직접 연결하려는 DIYer들의 시도가 늘어났습니다.
  • 고음질 음원 지원: S/PDIF는 대역폭의 한계로 아주 높은 샘플링 레이트의 음원 전송에 제약이 있는 경우가 많지만, I2S는 고사양 DAC 칩의 성능을 최대한 끌어낼 수 있는 통로가 됩니다.
  • HDMI 단자의 전용: 기판 내부용인 I2S는 전송 거리가 짧아야 한다는 단점이 있었으나, 최근에는 HDMI 단자와 케이블을 이용해 외부 기기 간에도 I2S 신호를 전송할 수 있는 규격이 DIY 및 일부 하이엔드 브랜드(PS Audio 등)를 중심으로 표준처럼 자리 잡았습니다. [1, 2, 3, 4, 5, 6]

결론적으로, 제품 내부에서만 조용히 쓰이던 기술이 "변환 없이 가장 순수한 데이터를 직접 전달하겠다"는 오디오 애호가들과 DIY 제작자들의 요구에 맞춰 외부 인터페이스로 끌어올려진 사례라고 할 수 있습니다.

I2S가 DIY 오디오와 하이엔드 시장에서 본격적으로 '재발견'되며 대중화된 시점은 대략 2010년대 초반으로 볼 수 있습니다. 구체적으로는 다음과 같은 흐름을 거쳤습니다.

1. 2000년대 후반: 하이엔드 브랜드의 도입 [1]

2000년대 후반부터 PS Audio와 같은 하이엔드 제조사들이 기기 간 전송 시 발생하는 지터를 줄이기 위해 I2S 규격을 외부 연결에 도입하기 시작했습니다. 2009년경 PS Audio가 HDMI 케이블을 I2S 전송용 물리 단자로 활용하기 시작하면서, "HDMI 단자를 쓰지만 영상 신호가 아닌 오디오 전용 I2S를 보낸다"는 개념이 오디오 마니아들 사이에 퍼지기 시작했습니다. [1, 2]

2. 2012년~2014년: DIY 및 PC-Fi의 기폭제, 라즈베리 파이

I2S의 대중적 재발견에 가장 큰 공을 세운 것은 라즈베리 파이(Raspberry Pi)와 같은 싱글 보드 컴퓨터(SBC)의 보급입니다. [1]

  • 라즈베리 파이(2012년 출시)의 GPIO 핀에는 I2S 출력이 포함되어 있었습니다.
  • 2013~2014년경부터 Volumio 같은 오디오 전용 OS가 등장하고, 기판에 바로 꽂는 I2S DAC(HAT 방식)들이 저렴하게 쏟아져 나오면서 일반 사용자들도 "USB나 광출력보다 I2S가 소리가 더 좋다"는 것을 직접 체감하며 DIY 열풍이 불었습니다. [1, 2, 3]

3. 2010년대 중반 이후: 차이파이(China-Fi)와 규격의 고착화

2010년대 중반부터 Denafrips, Gustard, Singxer 등 가성비 좋은 중국 브랜드들이 하이엔드 방식인 'I2S over HDMI' 입력을 기본 사양으로 채택하면서, 이제는 DIY를 넘어 기성품 오디오 시장에서도 하나의 고급 인터페이스 표준으로 자리 잡게 되었습니다. [1]

요약하자면:

  • 태동기(2000년대 후반): 하이엔드 브랜드가 HDMI 단자를 빌려 쓰기 시작.
  • 확산기(2013년~2014년): 라즈베리 파이 DIY DAC 열풍으로 대중화.
  • 안착기(2016년~현재): 수많은 외장 DAC가 I2S 입력을 기본 지원하며 주류가 됨. [1]

2026년 4월 7일 화요일

[Fluid Ardule] 라즈베리파이 ↔ PC UART 직렬 통신(serial communication)에 성공하다

유·무선 LAN을 전혀 사용하지 않고도 Fluid Ardule의 라즈베리파이와 PC를 서로 연결하는 가장 간단한 방법은 UART 직렬 통신을 사용하는 것이다. 이를 위해서는 아주 간단한 하드웨어와 선 3개면 충분하다. 아래 이미지에 보인 USB to TTL 컨버터 모듈을 구입하여 TX와 RX를 교차 연결하고, 추가적으로 GND를 서로 이으면 된다. 다시 말해서 라즈베리파이의 40핀 GPIO 헤더에서 연달아 있는 6번(GND), 8번(TX), 10번(RX)을 사용하면 된다는 뜻이다.

Silicon Labs라는 회사의 "Classic USB to UART Bridge" 칩인 CP2102를 사용한 이 어댑터 보드는 총 6가지의 통신 모드를 지원한다. 따라서 구입처의 제품 설명 페이지에서 설정 방법을 확인한 뒤, 이에 맞추어 보드 내 스위치를 올바르게 맞추어야 한다.

USB to TTL 컨버터 모듈
출처: 파츠-파츠

두 개의 스위치를 이용하여 USB to TTL 모드로 설정하고, 여기에서 Windows용 CP210x 드라이버를 다운로드하여 설치한다. 다음 사진은 아직 스위치를 제대로 설정하지 않은 상태이다.

컨버터 모듈 사진 1
어댑터 보드는 세척이 좀 필요한 상태이다. 총 12개의 핀이 달려 있다. 

컨버터 모듈 사진 2
COM5로 지정되었다.

라즈베리파이에서는 /boot/firmware/config.txt 파일에 enable_uart=1을 추가한다. 이어서 raspi-config를 실행하여 5번 "Interfacing Options"로 들어간 다음, Serial 관련 질문에서 login shell로 사용할 것이냐는 항목과 serial port hardware 사용 여부를 차례로 설정한 뒤 안내에 따라 재부팅한다.

다음으로 PuTTY에서 COM 포트 번호를 지정하고 속도는 115200으로 설정한다. 이 어댑터를 사용하여 두 기기를 연결한 뒤, PuTTY 창을 연 상태에서 라즈베리파이를 부팅하면 마치 모니터가 연결된 것처럼 각종 메시지가 주르르 올라가다가 로그인 프롬프트가 뜰 것이다. 만약 부팅이 끝난 뒤에 연결하면 PuTTY 화면에 아무것도 나타나지 않아 당황할 수 있다. 이때 엔터를 한 번 치면 친숙한 "Fluidule login:" 프롬프트가 나타난다.

다음 글에서는 PCM5102(데이터시트)를 이용한 I2S DAC를 작동시키느라 고생했던 이야기를 적을 예정이다. 아무 설명 없이 AliExpress에서 파는 '반제품'에는 주의할 필요가 있다. 핀 헤더 납땜은 물론이고, 다섯 곳의 패드를 서로 이어 주는 납땜까지 해야 제대로 작동하기 때문이다.

이런 사실은 ChatGPT가 전혀 알려주지 않았다. 오직 검색을 통해서 찾을 수 있었고, 그것 또한 무척 오래 전에 이미 공개된 지식이었다. 심지어 활용 요령을 설명한 유튜브 영상(6년 전)까지 있었으니 말이다.

라즈베리파이용 PCM5102A I2S DAC
라즈베리파이용 PCM5102A I2S DAC.

2026년 4월 6일 월요일

[Fluid Ardule] TFT-LCD를 주 디스플레이로 전환하기로 하다

당초에 확고한 설계도 없이 재미로 착수한 DIY 프로젝트의 좋은 점은 언제든 계획을 변경할 수 있다는 점이다. 아두이노 우노를 UI의 중심으로 여기고 개발을 착수하였으나 라즈베리파이에서 보내는 정보(현재 로드된 사운드폰트, DAC, 키보드 컨트롤러의 이름과 상태 등)을 매번 놓치지 않고 받아서 디스플레이로 보내야 한다는 것이 큰 부담으로 느껴졌다. 

처음에 이렇게 방향을 잡았던 것은 라즈베리파이 본체에 물린 SPI TFT-LCD가 반응이 느리고 취급하기 어렵다는 편견에 사로잡혀 있었기 때문이다. 그런데 개발을 지속해 나가는 과정에서 이 디스플레이가 그렇게 나쁜 물건은 아니라는 생각이 들었다. 라즈베리파이의 상태를 표시하고, 아두이노 우노에서 키패드 또는 인코더를 조작하여 변화한 정보를 표시하는 정도라면 큰 문제가 없을 것 같았다.

모든 구성품이 슬슬 나무판 위로 올라가기 시작하였다. 아직까지는 임시 고정이라서 글루건과 양면테이프로 붙여 놓았다. 



그래서 어제를 기점으로 방향을 완전히 바꾸기로 하였다. 아두이노 우노에서는 버튼 눌림과 인코더 회전 정보 정도만 단방향으로 보내고, 모든 표시와 제어는 라즈베리파이에서 도맡아 하는 방식을 택하기로 했다. 이렇게 하면 라즈베리파이용 파이썬 코드와 아두이노 우노용 펌웨어를 개별 개발하는 부담도 크게 줄어든다. 아두이노 우노에서는 기본적인 정보만 보내도록 최소한의 코딩을 해 두면 되기 때문이다.

민웰 LRS-50-5(5V 10A) SMPS를 이용한 별도의 전원공급장치도 제작해 두었다.



앞으로의 개발 방향은 다시 정리하면 다음과 같다.

  • 라즈베리파이에 장착한 SPI TFT-LCD를 주 디스플레이로 하고, 아두이노 우노는 조작 기능에만 충실하게 만든다.
  • USB/LAN 컨트롤러에 부담을 주는 USB 오디오 인터페이스는 유전원 허브를 쓰거나, 보다 근본적인 해결책으로 I2S DAC를 사용한다. 
  • 민웰 SMPS를 적극적으로 활용하여 전원부를 보강한다. 
  • USB 키보드 컨트롤러의 출력을 DIN-5 MIDI로 전환하는 어댑터는 라즈베리파이와 연결할 경우 USB 디바이스가 아니라 시리얼 장치인 것처럼 프로그래밍하여 라즈베리파이의 부담을 줄인다.
  • 라즈베리파이의 GPIO를 이용하여 PC와 시리얼 통신을 하도록 만든다. 이는 개발이 완료된 뒤 네트워크 없이도 관리용으로 접속하여 점검하기 위함이다.
  • 언젠가는 나무판 위에서 제대로 만든 케이스 속에 넣는다.

최종 완성에는 앞으로 시간이 더 걸릴 것 같다. 


대형 국가연구개발사업의 효율화를 위한 제도 개선 - 구축형 연구개발사업

지난 금요일(4월 3일), 서울 양재동 엘타워에서 열렸던 2026년 구축형 연구개발사업 심사제도 설명회에 참석하였다. 1999년 시작된 예비타당성조사(흔히 '예타'라고 줄여서 말함)란 대규모 국가 인프라 투자의 타당성 및 경제성에 대한 객관적 조사를 위해 도입된 제도이다. 총사업비 500억원(국비 300억원) 이상의 사업이 대상이었다가 최근 기준이 상향조정되었다. 

예타 제도는 2008년 모든 R&D사업으로 확대 적용되었다. 내가 지금 참여하고 있는 국가통합바이오빅데이터구축사업도 예타를 통해 타당성이 인정되어 추진 중에 있다. 예타 결과 비용-효과 분석(cost-effective analysis)에서 비용 대비 효과(B/C ration)가 ≥1이면 경제적 타당성이 있고, 정책성 타당성과 지형균형발전 등을 고려한 종합평가를 의미하는 AHP(Analytic Hierarchy Process) ≥0.5이면 사업 시행이 바람직함을 의미한다. 

예타를 통과하는 데에는 평균 4년의 시간이 걸린다. 4년이면 급변하는 요즘 세상에서는 기술 판도가 완전히 바뀔 수도 있는 긴 시간이다. 따라서 대형 R&D 사업의 신속성과 유연성을 제고하고 성공 가능성을 높이기 위하여 1천억원(국비 500억원) 이상이 투입되는 국가 연구개발사업의 예타를 18년만에 폐지하게 된 것이다. 대신 대형 R&D 사업 유형을 구축형 R&D와 연구형 R&D로 나누게 되었다. 정의를 내리기는 전자가 더 쉽다. 성격에 따라 둘로 나누었다기보다는, 어떤 필요성에 의해 구축형 R&D를 먼저 정의하여 분리해 내고 그 나머지를 연구형 R&D 범주에 몰아서 넣었다고 보는 것이 옳을 것이다.

  • 구축형 R&D: 연구시설·장비, 연구단지 등 연구공간, 인공우주물체 등을 개발·구축하는 사업
  • 연구형 R&D: 기초연구 및 연구기관지원 등 구축형 R&D를 제외한 모든 사업

구축형 R&D란 목표(예: 활용 R&D)를 가진 장치들(예: 구성품인 R&D)의 유기적 결합체(의도적 작동이 되는 규칙)라고 한다! 좀 난해하다.

익숙한 예전 용어인 예타 과정을 예로 든다면, 수요자 입장에서 기획서를 제출하고 검토 및 수정요구의 순환을 거치는 과정인 '사전점검', 이를 성공적으로 통과하면 예산 반영이 이어지고 이후 사후 관리 체계에 들어간다. 흔히 눈물겹게 예타를 통과(면제까지 포함)했다는 것은 사전점검을 성공적으로 마쳤음을 의미한다. 그만큼 어렵기 때문이다.

올해는 제도 개선 첫 해이고 법률 개정이 예상보다 늦어지고 있어서 원래 사전점검 3개월 전에 해야 하는 수요를 제출은 사실상 생략하고 해야 하지만, 5월에 곧바로 심사힌청을 받는다고 한다. 이렇게 해야 내년 예산에 반영이 된다. 이는 '하반기'트랙이고, 전년도 11월에 심사를 신청하는 '상반기' 트랙도 있다.  

심사 항목은 크게 ①추진 타당성(value: why) ②기술·공학적 적정성(item: what) ③사업관리 적정성(project: how)의 3대 항목과 17개 세부 질문으로 나뉜다. 경제성은 제외되었다고 하지만, 설명회 2부에서 이어진 안상진 한국과학기술기획평가원(KISTEP) 안상진 센터장의 설명에 의하면 그 개념은 아직 남아있는 것 같았다. 

구축형 R&D사업의 심사 항목 개요.

국가통합바이오빅데이터구축사업을 제외하고 KOBIC이 운영하는 사업비는 원래 사업계획 적정성 재검토를 통해 5년 단위로 추진되어 왔었다(② 기획예산처장관은 제49조제1항의 규정에 의한 타당성재조사 요건에 해당하지 아니하더라도 적정 사업규모, 총사업비, 효율적 대안 등을 검토할 필요가 있는 사업의 경우 타당성재조사 방식에 준하여 사업계획 적정성 재검토를 실시할 수 있다 - 총사업비 관리지침 제49조의2). 이러했던 것의 일부를 변경된 제도 하의 '구축형 R&D 심사'로 전환하기 위하여 필요한 정보를 얻고자 이번 설명회에 참석하게 된 것이다.

발사체 등 대형 사업 사례를 충분히 활용한 설명회 2부의 내용은 매우 신선하게 느껴졌다. 생명과학 분야에 종사하는 개별적인 연구자의 입장으로만 살아오다가 (연구개발)사업의 타당성이라는 측면에서 전체 주기를 조망해 본 일은 거의 없었기 때문이다. 단지 공부를 위해 참석했던 바이오 분야의 창업 단기교육에서 느꼈던 신선함 이상과 충격(?)이었다. 데이터-메타 데이터의 관계처럼,  연구개발사업에도 메타 사업이라는 것이 있다면 이런 것이겠구나하는 생각을 갖게 되었다. 

메타 사업이란 개별 연구개발사업을 직접 수행하는 것이 아니라, 그 사업이 타당한지, 적정한 규모와 방식으로 설계되었는지, 그리고 이후 어떻게 관리되어야 하는지를 다루는 상위의 체계라고 볼 수 있다. 즉, 본 사업을 둘러싼 계획·평가·관리의 전 과정을 설계하는 일종의 ‘사업의 사업’이다.

이러한 관점을 조금 더 일찍 이해했더라면, 나의 연구 인생은 또 다른 방향으로 전개되었을지도 모른다.

2026년의 봄날은 간다

대전의 벚꽃 시즌은 '엔딩'으로 치닫고 있는 것 같다. 엊그제 비가 내리면서 바닥에 떨어져 뒹구는 꽃잎도 많고, 파릇파릇하게 솟아난 잎도 많이 눈에 뜨인다. 나무가 온통 봄꽃으로 물들었을 때는 주말이 아니었기에 충분히 봄 풍경을 즐기지 못했다. 

이것은 조팝나무 꽃이다.

한가한 일요일 오전, 점심때가 되면 사람들이 몰릴 것으로 생각하고 일찌감치 KAIST를 찾았다. 근처 식당에서 이른 점심을 먹고 주말이면 자주 들르는 카페 파스쿠찌로 향했다. 아내와 함께 커피를 마시며 책을 읽고 있노라니 점점 손님들이 많아진다. 가져간 책을 다 읽은 뒤 밖으로 나가 보았다.

인산인해! 중앙도서관 앞 잔디밭은 마치 유원지를 방불케 하였다. 푸드트럭도 여럿 보이고, 자리를 깔고 앉아서 음식을 먹는 상춘객으로 붐빈다. 비누방울과 벚꽃잎이 바람에 흩날린다. 사람 반, 꽃 반. 눈부신 햇살을 받으며 벚꽃을 배경으로 KAIST-충남대 연합 밴드 동아리 PlanB의 버스킹도 벌어지고 있었다.


PlanB. 일본 노래를 부르고 있었다.

꽃피는 주말을 맞아서 일반인에게 아낌없이 캠퍼스를 공개한 KAIST에게 감사를... 월요일 아침을 맞아 누군가는 방문객이 남긴 흔적을 치우기 위해 몹시 수고를 해야 할 것이다.  

요즘은 휴대폰을 이렇게 놓고 사진을 찍는 것이 인기라고 한다.

이렇게 아름다운 봄날이 흘러간다. 금세 더위가 몰려 올 것이다.


2026년 4월 2일 목요일

[Fluid Ardule] USB 오디오 인터페이스가 초래한 전압 강하 현상

라즈베리파이 3B로 구성한 Fluid Ardule의 USB 포트에 오디오 인터페이스(Mackie Onyx Producer 2-2) 하나만을 꽂은 상태에서도 전압이 떨어지는 현상을 발견하였다. 다음은 dmesg -w를 실행해 놓은 뒤 Onyx를 꽂았을 때 나오는 화면 출력이다.

Undervoltage detected는 라즈베리파이의 입력 전압이 기준 이하로 떨어졌을 때(보통 4.63V 이하) 발생하는 것이라 한다. Voltage normalised는 전압이 다시 정상 범위로 돌아왔음을 의미한다. 단 하나의 USB 기기를 꽂았을 때에도 이러한 실정이니 키보드 컨트롤러와 아두이노 우노 등을 전부 꽂으면 어떻게 되겠는가. 가능한 해결 방법 중의 하나는 유전원 USB 허브를 사용하는 것, 또는 다음 사진과 같은 대용량 SMPS를 써서 각 장비에 전원을 분배하는 것이다.

Meanwell LRS-50-5 파워 서플라이. 출력은 5V 10A에 이른다.

이것도 그렇게 간단한 일은 아니다. 우선 이 전원을 라즈베리파이에 공급하려면 마이크로 USB 수 플러그를 구해서 납땜을 해야 한다. 이론상 GPIO로 넣어도 되지만 보호회로를 거치지 않기 때문에 매우 조심해야 한다.

이 전원은 아두이노의 +5V 단자에 연결한 뒤 이를 다시 USB 케이블로 라즈베리파이와 연결할 때에도 주의해야 한다. 두 기기에서 전압 차이가 발생하면 USB 케이블로 전류가 역류할 수 있다. 안전하게 사용하려면 USB 케이블에서 VBUS선을 끊는 것이 바람직하다.

구입해야 할 부품 목록이 꼬리에 꼬리를 문다! 아직 여기에 다 쓰지 못한 자질구레한 부품이 곧 비행기를 타고 중국을 떠날 것이다. Fluid Ardule의 modular architecture 철학이 약간 훼손될 위기에 처했다. 예를 들어 USB 오디오 인터페이스를 포기하고 I2C PCM5012A DAC를 택하는 것 같은 경우다. 하지만 어쩌겠는가? 안정성이 더 중요하다. 이외에도 몇 가지 아이디어가 더 있으나 실험을 해 본 뒤에 기록하려 한다.

2026년 4월 1일 수요일

[Fluid Ardule] 라즈베리파이 3B에서 USB DAC가 열심히 일할 때 LAN 작동이 멈춘다

DIY란 원래 고난의 연속이다. 비용을 더 들이지 않기 위해 현재의 조건에서 어떻게 해서든 문제를 풀어 보려고 애를 쓰지만, 결국 지금 쓰는 것보다 상위 기종의 물건(예: 라즈베리파이 3B -> 4B)을 구입하는 것보다 더 많은 것을 정신적으로, 그리고 시간적으로 지불하고 있는지도 모른다.  

문제의 시작은 이렇다. 

라즈베리파이의 부팅 시간을 줄이기 위해 자동으로 시작하는 서비스를 대폭 줄이고 개발을 위한 네트워크 연결도 오직 유선 LAN으로만 하도록 만들어 놓았다. 코딩 작업을 하는 노트북 컴퓨터도 평소에는 유선으로 연결하여 쓰기 때문이다. 그래서 Wi-Fi 연결이 아예 되지 않도록 /boot/firmware/config.txt 파일에 'dtoverlay=disable-wifi'까지 삽입한 상태였다.

그런데 오디오 출력을 위하여 Mackie Onyx Producer 2-2를 연결한 뒤 FluidSynth를 실행하여 조금만 작업을 하다 보면 여지없이 SSH 접속이 끊겼다. 이런 상태에서도 건반을 통한 FluidSynth 연주는 가능한 상태라서 시스템이 완전히 멈추는 것은 아니다. 그러나 IP 주소를 자동으로 다시 할당받아서 SSH 접속이 되기까지 상당한 시간을 기다려야 하니 이만저만 불편한 것이 아니다. rsyslog조차 설치되지 않아서 /var/log/syslog이 없는 상태였기에 문제의 원인을 파악하기가 힘들었다. 

이런 불안정한 상태로 며칠을 보내다가 드디어 syslog 파일에서 단서를 찾았다.

2026-03-31T21:46:40.082929+09:00 Fluidule systemd[1]: Stopped fluid_ardule.service - FluidArdule Main Service. 
2026-03-31T22:00:35.678924+09:00 Fluidule dhcpcd[562]: eth0: carrier lost 
2026-03-31T22:00:35.686337+09:00 Fluidule kernel: smsc95xx 1-1.1:1.0 eth0: Link is Down 
2026-03-31T22:00:35.736808+09:00 Fluidule dhcpcd[562]: eth0: deleting address fe80::6e6e:e891:4b4:14a9

'smsc95xx 1-1.1:1.0 eth0: Link is Down'이라는 메시지에 주목해 보자. smsc95xx는 USB 기반 Ethernet 컨트롤러이다. 하나의 컨트롤러가 LAN과 USB를 동시에 제어하는데, 만약 USB쪽에서 문제가 발생하면 LAN 연결도 끊어지게 된다는 것이다. 이는 라즈베이파이 3B의 설계 구조 한계라고 한다. ChatGPT에게 물어보았다.

🌐 인터넷 사례 많냐?

👉 네, 꽤 많습니다. 특히 다음 키워드로 흔합니다:

  • “raspberry pi 3 usb ethernet disconnect”
  • “pi 3 usb instability”
  • “smsc95xx link down”
  • “urb status -32 raspberry pi”

👉 포럼/깃허브/StackOverflow에 반복적으로 등장

SSH 접속이 끊어지기 직전의 로그에서는 '2026-03-31T21:00:45.230089+09:00 Fluidule kernel: usb 1-1.4: urb status -32'라는 기록이 남았다. 'urb status -32'는 USB 전송 실패를 뜻한다. 종합하자면 USB 버스에서 먼저 문제가 생긴 뒤 그 여파로 LAN까지 끊어지는 흐름과 일치한다.

이 문제를 극복하고자 방향을 바꾸기로 했다. 

유선 LAN은 쓰지 않고, 다시 Wi-Fi로 Fluid Ardule(라즈베리파이)을 연결하였다. Mackie Onyx는 유전원 USB 허브로 연결하니 SSH 접속이 끊어지는 일은 발생하지 않았다. 마지막으로  USB  건반은 라즈베리파이에 직접 연결하지 않고, 이전에 만들어 둔 USB MIDI host를 거쳐서 이를 MIDI 케이블로 Mackie Onyx에 연결하였다. 이렇게 하니 훨씬 안정적으로 작동하였다. 지난 1월에 쓴 USB MIDI host 제작기는 여기('옆길로 샌 Ardule Project - USB MIDI host to DIN MIDI converter 만들기는 좌절과 극복의 연속이었다')에 있다. 이 물건을 Fluid Ardule 생태계에 넣으려면 아두이노 우노를 하나 더 사야 한다! 이번 일을 통해 전통적인 MIDI의 단순함과 견고함을 확실히 알게 되었다. 

만약 일찌감치 라즈베리파이 4B를 사는 것으로 문제를 해결했다면 훨씬 편했을 수는 있다. 그러나 고생 속에서 얻을 수 있었던 값진 경험을 놓쳤을 수도 있다. 그리고 덤으로, 여전히 굳건히 생태계를 지키고 있는 전통 MIDI의 의미까지도. 게다가 라즈베리 파이 4B는 2GB 모델이 10만원이 넘는다(board-only, 아이씨뱅큐, 오늘 기준).

실은 건반을 쳤을 때 마치 서스테인 페달을 계속 누르고 있는 것처럼 note off 신호가 전달되지 않는 현상이 지속적으로 발생하여 골머리를 앓는 중이었다. USB를 안정화한 다음에는 훨씬 줄기는 했으나 아직 해결해야 할 숙제로 남았다.

2026년 3월 29일 일요일

[Fluid Ardule] 최소 기능 구현판의 소개용 숏폼 동영상을 올리다

부팅과 더불어 자동으로 Salamander C5 Lite 피아노 사운드폰드가 로드되게 만든 Fluid Ardule 최소 기능 구현판의 소개용 숏폼 동영상을 만들어 올렸다. 사운드폰트의 변경(Salamander C5 ↔ Lite GeneralUser GS ↔ FluidR3_GM)은 키패드에서 수행할 수 있다.  


유튜브에 올린 동영상은 아래에 소개한다. 오디오 인터페이스를 Fluid Ardule의 사운드 출력용으로 연결해 놓았기 때문에 컴퓨터는 쓰지 않고 대신 헤드폰을 휴대폰에 대고 아주 '무성의하게' 녹음하였다. 편집 후 유튜브에 올리고 나니 아쉬움이 많이 남는다.


오디오 출력에는 USB 오디오 인터페이스를 이용하기 때문에 확장성이 좋고 헤드폰 출력도 거저 얻을 수 있으며, 기타나 마이크 등의 외부의 아날로그 오디오 신호를 믹싱하여 앰프로 출력하는 것도 가능하다. 그러나 USB 기기의 특성상 연결 즉시 인식에 약간의 시간이 걸린다. 

만약 다음과 같은 라즈베리 파이 전용 DAC hat("Raspberry Pi DAC Pro")을 이용한다면 장치 인식, 전원 문제, 부팅 속도 등에서 현저한 개선이 이루어질 수는 있겠다. 그러나 내가 지금 쓰는 Mackie Onyx Producer 2.2 오디오 인터페이스가 라즈베리파이 전용 DAC Hat보다 못할 이유는 전혀 없다. 게다가 DIN 5핀 MIDI 입출력 커넥터까지 붙어 있지 않은가. 이 기능을 Fluid Ardule에서 쓰도록 기능을 추가하려면 아직 한참 더 개발을 이어 나가야 하겠지만. 

라즈베리파이 DAC Pro(출처: 디바이스마트). 예전에는 IQaudio DAC Pro로 알려져 있었다. 이런 물건을 꽂으면 SPI TFT-LCD를 그 위에 꽂기가 어려울지도 모른다. TFT-LCD는 보조적인 정보 디스플레이로서 매우 쓸모가 있기 때문에 포기하고 싶지는 않다.

Fluid Ardule의 가장 취약한 점은 바로 라즈베리 파이 3B의 전원 커넥터이다. 케이스를 만들어서 내부에서 확실하게 고정하기 전까지는 계속 나를 불편하게 만들 것이다. 왜 마이크로 USB 커넥터는 이렇게 잘 빠지게 만든 것일까! 이 물건을 개발한 사람은 지옥에 가야 한다는...(링크) 그러나 개인이 집에서 DIY 하기가 좋다는 것은 함정이다.

마이크로USB 방식의 전원 커넥터가 헐거워져서 케이블을 건드리기만 해도 접촉이 나빠지고 잘 빠진다. 접착제로 붙여 버리고 싶다!

Fluid Ardule에는 무려 3 종류의 USB 주변기기가 쓰인다. 조작부에 해당하는 아두이노 우노(1602 LCD 키패드 실드 장착), 가장 핵심이 되는 오디오 인터페이스, 그리고 MIDI 키보드 컨트롤러. 전력 부족이 늘 걱정이 된다. 이따금씩 SSH 연결이 끊어지는 것도 혹시 전력 부족 때문이 아닌가 의심이 된다. 현재는 부팅과 더불어 systemd 서비스를 통해 자동으로 작동이 되는 상태이고, 개발 및 디버깅 목적으로만 SSH 접속을 요구하기 때문에 큰 문제는 없어 보인다. 그러나 보다 안정적인 작동을 위해 뭔가 대책을 세워야 한다. 유전원 USB 허브를 고려 중이지만 성능과 가격 양 측면을 모두 만족시키는 것은 잘 보이지 않는다. 결국은 전력 소모가 적고 라즈베이파이와 잘 붙는 전용 DAC hat을 선택하게 될지도 모른다.



2026년 3월 26일 목요일

[Fluid Ardule] 주변 부품 붙여 나가기

LED와 로터리 인코더를 아두이노 우노에 연결하였다. LED 점등용 전류 제한 저항은 처음에는 270옴을 사용하였으나 너무 밝아서 1K로 바꾸었다. 주변 기기의 인식 상황에 맞추어 적절하게 작동하도록 코드를 고쳤다. 멋진 케이스를 갖추지는 못했으나 제법 상용 사운드 모듈의 기능에 근접하고 있다.

이 DIY 기기의 장점은 '모듈화(modularity)'와 '확장성(expandability)'이다. 예를 들어 오디오 출력 장치는 고정되어 있지 않으며, 보유하고 있는 USB 오디오 인터페이스 중 리눅스에서 안정적으로 동작하는 class-compliant USB 기기를 적당히 골라서 쓰면 된다. 아직 테스트를 하지는 못했으나 오디오 인터페이스에 DIN MIDI 커넥터가 있으면 작동 가능할 것이다. 이러한 유연성은 리눅스 계열의 OS로 구동되는 라즈베리파이, 즉 작은 소형 범용 컴퓨터를 바탕으로 시스템을 구성했기 때문에 가능해졌다고 믿는다.

Fluid Ardule의 현재 시스템 구성. 주황색 점선으로 둘러싸인 영역이 Fluid Ardule의 코어에 해당한다.

코딩을 하면서 두 기기 간에 시리얼 통신을 하는 요령도 익히는 중이다. 예를 들어 정상적으로 연결되어 동작하는지를 주기적으로 확인하는 생존 신호인 heartbeat를 3초 주기로 보내는 것이다. 그러나 로그 파일에 이것까지 기록되면 너무 길어지므로 예외로 취급해야 한다.

다음 단기 목표는 사운드폰트 파일을 자유롭게 교체하는 기능을 넣는 것이다. 지금은 피아노 소리를 내는 사운드폰트가 자동으로 로드되게 만들어 두었다. 사운드폰트 교체, CC 제어, 사용자 프리셋 저장 및 로드 등 사운드 모듈이라면 당연히 추구해야 할 기능을 하나씩 넣어 나갈 것이다. 아두이노 우노와 라즈베리 파이 두 기기에서 각각 돌아가는 코드를 짜야 하고, 이는 시리얼 통신으로 서로의 상태를 정확히 파악하면서 제어할 수 있어야 한다.

코드를 통해 구현할 기능도 아직 많이 남았고, 케이스 제작에 들어가면 더욱 많은 고민을 해야 한다. 안정적으로 작동하게끔 양질의 전원을 사용하여 공급 계통을 확정하고, 각 주요 부품의 배치 또한 6개월에서 1년 정도의 기간에 걸쳐 점진적으로 달성해 나가게 될 것이다.

새로운 장난감인 Fluid Ardule 때문에 Nano Ardule MIDI Controller의 PCB 설계 마무리가 늦어지고 있다. 어차피 단일한 생태계를 즐기기 위해 만든 것이므로, 여러 강이 바다로 흐르듯 결국 한 곳에서 만나게 될 것이다.

이번 프로젝트는 아직 GitHub에 올리지 않았다. 서로 다른 하드웨어에서 돌아가는 한 짝의 프로그램을 짜야 함에도 불구하고 이제는 요령이 생겨서 파일명과 간단한 기록, 그리고 기억에 의존하여 느슨하게 버전을 관리하고 있는 상태이다. 그러나 진행 과정은 별도의 위키 사이트에 계속 기록하는 중이다.

물론 이런 방식이 지속 가능하지는 않으니, 필수 기능이 어느 정도 구현되면 GitHub에 공개할 생각이다.

2026년 3월 24일 화요일

[Fluid Ardule] 처음으로 건반을 연결하여 소리를 내다

Fluid Ardule 프로젝트 개요

Fluid Ardule은 2026년에 새롭게 시작한 DIY 프로젝트이다. 이 기기는 라즈베리파이 3B(소프트웨어 신시사이저 FluidSynth 설치)와 아두이노 우노를 결합한 음원 모듈에 해당한다. 아두이노 우노는 LCD와 버튼을 통해 상태 디스플레이 및 조작을 겸한다.

USB 기반 통신과 초기 구동

두 기기 사이에서 USB 포트를 통한 직렬 통신을 하면서 서로 정보를 주고받도록 하는 것이 첫 번째 목표였다. 기가비트, 스타링크 인터넷 시대에 9600~115200 bps의 직렬 통신이라니! 봉화대나 모르스 부호를 이용한 통신을 연상시킨다. 굳이 따지자면 봉화대도 광통신이다?

오디오 출력을 책임지는 USB 오디오 인터페이스와 USB MIDI 건반을 라즈베리파이에 연결과 동시에 정확히 인식하고, 준비가 갖추어졌을 때 다음 단계로 넘어가게 하는 코드를 짜느라 하루를 소비하였다. 라즈베리파이에서는 파이썬, 아두이노 우노에서는 C++을 사용한다.

USB 건반과 오디오 인터페이스가 연결된 상태에서 전원을 넣은 뒤 건반을 누르면 소리가 난다. 현재는 피아노 사운드인 Salamander C5 Light 사운드폰트(.sf2)를 기본으로 로드하도록 설정하였다.

아직은 테스트 단계이기 때문에 라즈베리파이에 SSH로 접속한 뒤 파이썬 스크립트를 실행하여 기동한다. 라즈베리파이가 시리얼 포트를 열라는 신호를 보내면, 먼저 전원이 들어와 있던 아두이노 우노에서는 리셋이 이루어진다. 최초 전원 투입에 따른 부팅인지, 또는 라즈베리파이의 요청에 의한 리셋인지를 구별하여 LCD에 적절한 메시지가 표시되도록 만드는 것이 향후 과제이다.

또한 라즈베리파이의 GPIO 단자에 USB-to-UART 케이블을 연결하여 PC에서 접속하면 네트워크 관련 서비스를 비활성화하여 시스템을 더욱 경량화할 수 있다.

Python script execution
파이썬 스크립트 실행 화면

아두이노 입력 구조와 설계 인사이트

아두이노 우노에는 1602 LCD 모듈과 키패드가 일체화된 실드(DFR0009 유사품)가 장착되어 있다. 5개의 버튼 스위치를 아날로그 핀 하나(A0)로 제어할 수 있다는 점은 매우 인상적이었다. 기존에는 각각 디지털 핀이 필요하다고 생각했기 때문이다.

물론 이 방식은 동시에 두 버튼을 누르는 입력을 처리할 수 없다는 한계가 있지만, 모드 전환과 같은 단순한 인터페이스에는 매우 적합하다. 이를 미리 알았더라면 이전에 제작한 Nano Ardule MIDI controller 설계 과정에서 훨씬 간결한 회로 구성이 가능했을 것이다. 현재 해당 회로는 KiCad에서 PCB 설계를 절반 정도 진행한 상태이다.

키패드 외에는 A2 핀에 가변저항을 연결하여 볼륨(MIDI CC #7)을 조절할 수 있도록 구성하였다. 향후에는 로터리 인코더와 여러 개의 LED를 추가할 계획이다.

향후 개발 계획

  • 디버깅 로그 기록 기능
  • 다양한 사운드폰트 로드 (예: FluidR3_GM.sf2)
  • 코러스 및 리버브 제어
  • USB MIDI 인터페이스 자동 인식
  • MIDI 라우팅 기능
  • TFT LCD 상태 표시

하드웨어 확장 및 운용 계획

보유 중인 Roland SoundCanvas SC-D70과 Mackie Onyx Producer 2-2는 리눅스에서 별도의 드라이버 없이 동작하는 class-compliant 장치이며 MIDI 인터페이스 기능도 제공한다. 이 장치를 활용하여 FluidSynth 출력과 함께 DIN MIDI 입출력까지 확장 가능한지 확인할 것이다.

현재는 라즈베리파이에서 파이썬 스크립트를 수동 실행하는 방식이지만, 시스템이 안정화되면 systemd 서비스로 등록하여 부팅 시 자동 실행되도록 구성할 예정이다.

2026년 3월 19일 목요일

자작 진공관 앰프의 전원 스위치 교체하기

자작 43 power pentode SE amplifier의 전원 스위치 고장과 관련한 글은 지난주에 쓴 일이 있다(링크). 납땜이 아닌 커넥터 체결 방식으로 바꾸기로 하고 알리익스프레스에서 부품을 주문하여 어제 받았다. 점심 시간을 이용하여 부품 교체를 완료하였다.


사무실 책상 앞에서 조용히 듣기에 이보다 좋은 소출력 앰프가 없다. 요즘 저렴한 블루투스 앰프가 많지만, 빨갛게 달아오른 진공관의 히터를 눈으로 보는 재미를 무엇이 대신할 수 있을까?


커넥터 작업 전용 크림핑 툴을 살 때에는 '자주 쓰지도 않을 공구를 사는게 옳은가'하고 항상 고민을 한다. 수공구 중에서는 가격이 꽤 나가기 때문이다. 그러나 깔끔하게 마무리된 작업 결과를 보면 만족도는 그 이상이다. 확실히 체결되고, 나중에 수리하기에도 좋고. 이는 아두이노 자작에서도 마찬가지.

부서진 식탁용 의자도 고쳐야 하는데... 여러 DIY 중 제일 하기 싫은 것이 목공과 도색이다. 왜? 잘 못하니까! 잘 하지 못하니까 자주 하지 않게 되고, 몸이 기억하지 못한다. 아주 드물게 냄비밥을 지으면서 꽤 잘 되었다고 만족하지만 결코 기억에 남지 않는 것과 비슷하다. 

2026년 3월 18일 수요일

라즈베리파이 3B에서 3.5인치 TFT 터치 LCD 작동시키기

라즈베리파이(이하 Pi로 표기) 3B에서 Volumio를 구동하던 시절, 3.5인치 TFT LCD(480x320)를 달아서 조작용으로 쓰려고 노력하던 때가 있었다. 휴대폰 앱으로 제어하면 되지만 반응이 늦거나 연결이 잘 되지 않는 문제가 종종 발생하기 때문이다. Pi의 공식 디스플레이는 아마 HDMI로 연결되는 7인치 LCD일 것이다. Pi의 GPIO 소켓에 그대로 꽂아서 쓸 수 있는 SPI(Serial Peripheral Interface) 방식의 3.5인치 중국산 TFT LCD는 구동시키기가 매우 까다로운 것으로 유명하다. 작년 여름에 온갖 시도를 다 해 보았으나 터치 좌표를 도저히 맞출 수가 없어서 포기하고 말았다. 관련 기록은 여기에 있다.

음원 파일 재생기로 쓰던 Pi는 2026년에 접어들면서 사운드폰트를 이용하는 소프트웨어 신시사이저인 FluidSynth 구동용 기기, 곧 ‘Fluid Ardule(= Fluidule)’로 변모하고 있다. 처음에는 사운드 캔버스를 본뜬 Fluid Canvas라는 이름도 고안했으나, 지금은 Fluid Ardule 쪽으로 기울고 있다. 

조작은 USB-serial로 연결한 아두이노(우노)에서 버튼과 인코더를 사용하여 실시할 예정이다. 조작을 위한 디스플레이는 아두이노에 연결된 1602 LCD가 될 것이다. 그러나 여기에서 보이는 정보량은 너무나 적다. 그래서 상태 표시용으로 Pi에 3.5인치 LCD를 다시 달아보기로 하였다. 터치 입력 기능은 일절 사용하지 않고, 단지 1초 정도의 간격으로 작동 상태를 보여주는 것으로 기능을 제한하였다.

이것 역시 쉽지 않았다. Raspberry Pi OS는 계속 발전하는 반면, 중국산 3.5인치 TFT LCD에 대한 드라이버 지원은 예전과 같지 않기 때문이다. LCD-show라는 드라이버 스크립트 모음이 꽤 쓸 만한 것으로 알려져 있고 작년에도 이를 사용했었다. 그러나 시스템에 뭔가 ‘침습적’인 흔적을 남기기 때문에 커널 업데이트 등에 대응하기 어렵다고 한다. 이미지나 동영상을 빠르게 재생할 것이 아니기 때문에 LCD-show를 쓰지 않는 단순한 방법을 알아본 끝에 겨우 성공하였다. 다음은 ChatGPT로 만든 부팅용 스플래시 이미지를 표시해 본 것이다. 전체 과정은 별도 위키 문서인 Raspberry Pi OS Installation and Optimization에 정리하였다.

Fluid Ardule boot splash image
액체 방울 속의 MIDI 커넥터. 원본 이미지 링크.

MIDI 주변기기를 Fluid Ardule에 연결하여 사용하거나 오디오 파일을 재생하는 기본 테스트는 전부 마친 상태이다. 아두이노를 이용한 조작반이 완성되면, Fluid Ardule에서 불필요한 기능을 없애야 한다. 그래야 부팅 시간도 빨라지고 FluidSynth 작동도 원활해질 것이기 때문이다. 목표 부팅 시간은 10초. 불가능하지 않다고 하니 시도할 가치는 충분하다.

아직은 Fluid Ardule에 키보드와 HDMI 모니터를 연결하여 직접 명령어를 입력해야 한다. HDMI 기능을 무력화시키면 Wi-Fi를 통한 SSH 접속을 해야 한다. 만약 네트워킹 기능까지 죽인다면 시리얼-USB 통신을 해야 한다(맞는 케이블 필요; 윈도우측의 드라이버 호환성 때문에 FTDI나 CP210x 칩 사용 제품 추천). 시스템 자원 소모를 극도로 줄인 통신 방법이라고 할 수 있다. 그런데 TFT LCD가 모든 GPIO 핀을 가리고 있어서 통신에 필요한 RX(10)/TX(8) 핀에 접근하기가 너무 나쁘다. 실제로 TFT LCD의 구동에 필요한 핀은 몇 개 되지 않지만, 2x13개의 핀 자리를 차지하고 있는 것이다.

GPIO 1-26 pins blocked by TFT LCD header socket
LCD 모듈의 핀헤더 소켓이 GPIO 1~26번 핀을 가리고 있다. 아래 사진에서 맨 오른쪽 핀이 2번이며, 1번은 안쪽에 있다.

다음 이미지와 같은 아이디어 상품도 있지만 가격이 꽤 비싸다. 케이블로 연결하는 GPIO expansion board라는 것도 존재한다.

GPIO extender product
그림 출처: Geekworm

가장 간단한 방법은 Pi 보드 뒷면에서 납땜을 하여 필요한 선 세 가닥을 따는 것이다. 아두이노 우노에서도 이런 짓을 하더니(관련 글 링크), 드디어 라즈베리 파이까지 손을 대게 되었다.


2026년 3월 19일 업데이트

라즈베리파이 3B에서 사운드를 설정하고 FluidSynth를 활용하는 방법을 별도의 위키 문서인 Raspberry Pi OS Installatio and Optimization에서 작성해 나가고 있다. 앞으로 아두이노 우노를 이용한 조작반 제작과 펌웨어 설계, 그리고 라즈베리파이의 부팅 속도 향상 등 할 일이 많다. 케이스는 또 어떻게 할 것인가?

이 작은 부품 하나가 많은 상상력과 영감을 불러 일으킨다.



2026년 3월 15일 일요일

주말 부안 나들이 - 내소사, 슬지네 제빵소, 채석강

능가산 내소사에는 사운드 디렉터가 일하고 있음에 틀림이 없다. 그렇지 않고서야 고요한 산사의 분위기에 이렇게 절묘하게 어우러지는 두 갈래의 소리를 BMG으로 '믹스'해 넣을 수는 없을 것이기 때문이다. 다음 동영상에서 파트 1(지장암)은 고요한 풍경 소리의 하모니, 대략 9초부터 나타나는 파트 2는 소망의 왁자지껄한 아우성에 해당한다.


일주문으로 들어서서 전나무길을 따라 걷다가 길 오른편으로 '지장암'이라 써 있는 안내판을 발견하였다. 초입에는 누군가 멋들어지게 지은 한옥이 있었고, 산으로 오르는 길목에는 작은 대나무 숲이 있었다. 지장암까지 올라가 보기로 하였다. 드물게 찾아주는 이를 반기듯 대나무숲이 끝나는 언덕에는 홍매화 한 그루가 예쁘게 꽃을 피우고 있었다. 

올라가 보니 최근에 지은 건물들이지만 주변에 마치 작은 정원을 꾸민 것 같이 아기자기하고 아름다운 모습이었다. 주 전각은 최근에 지어진 서래선림. 일반적인 사찰 전각이 아니라 수행 공간이다. 찾는 이도 거의 없었고, 아름다운 풍경 소리를 들으며 아내와 나는 산사의 고요함을 마음껏 누렸다.




이곳의 이름은 '소리정'. 바로 곁에서 바람에 흔들리는 청아한 풍경 소리를 들으라는 뜻이렸다.

다시 전나무길로 들어서 내소사 법당을 찾아간다. 천왕문을 지나 봉래루로 접어드려는데 '다다다닥~' 독특한 소리의 집합이 들려온다. 도자기로 만든 작은 풍경 모양의 것에 소원을 적은 나무패를 달아서 나무와 건물 주변에 잔뜩 걸어 놓은 것이었다. 오, 이는 누구의 아이디어란 말인가. 연주회 직전, 자리에 앉은 오케스트라 단원들이 지휘자가 나오기를 기다리는 짧은 시간 동안 저마다 막바지 연습을 하면서 내는 기대감 넘치는 불협화음을 연상시켰다.


봉래루.


내소사 대웅보전은 보물 제291호이다. 내부의 우물천장과 조각은 빛이 많이 바랬지만 무척 화려하다.

 

기록을 찾아보니 대략 2년에 한번 꼴로 부안을 찾았었다. 그럴 때마다 내소사의 새로운 아름다움을 발견하는 것 같다. 



주차장에서 여유롭게 담배를 피우다가 국립공원 관리원에게 적발되는 사람을 보았다. 아무리 전자담배라 해도 흡연구역을 이용해야지! 액상형 전자담배를 포함한 모든 종류의 니코틴 함유 제품을 담배로 규정하는 담배사업법 개정안은 4월 24일부터 시행한다고 하였다. 계도 수준인 건지 실제로 '딱지'를 발급한 것인지는 잘 모르겠으나. 참고로 국립공원은 전 구역이 흡연 금지 구역이다. 주차장도 마찬가지.

다음으로 찾은 곳은 곰소 염전 곁의 슬지네 제빵소. 이 지역의 명소이고 인터넷을 통해서 꽤 많이 알려졌다고 한다. 떡인지 찐빵인지 구별이 어려운 찰진 커다란 빵에 크림이나 콩 종류가 가득한 빵의 질감과 맛이 독특했다. 우리밀을 100% 사용하고 지역에서 나는 천일염을 사용한 가염버터를 사용한다고 하였다. 

인스타그램 게시용으로 잘 어울릴 인테리어와 주변 풍경, 그리고 이야기를 담고 있는 것은 좋으나 내외부 치장과 '서사'가 좀 과대하다는 느낌이 들었다. 전통과 상생을 강조한 것은 좋으나 이 빵집이 원래부터 이 염전 근처에 있었던 것은 아니었고, 이러한 사실은 나중에 인터넷을 검색해 보고서야 알게 되었으니 말이다. 물론 가업을 잇기 위한 현 대표의 전공을 접목한 노력이 들어간 것임은 부인할 수 없겠으나... 잘못하면 지역 빵집과 자본의 콜라보라고 오해하기 쉬울 것 같았다.



이곳이 곰소 염전이다.





부안, 즉 변산반도국립공원에 왔다면 채석강을 들르지 않을 수 없다. 변산반도의 서남쪽 해안을 따라 시계방향으로 달린다. 바다 건너 고창군이 손에 잡힐 듯 보인다. 채석강에 이르러서는 물때를 잘 만난 덕분에 짠 바다 내음을 맡으며 바닷가 층암절벽을 따라 걸으며 주변 풍광을 마음껏 감상할 수 있었다.



마치 수천 권의 책을 쌓아 놓은 것 같은 채석강은 약 7천만년 전 백악기에 쌓인 퇴적 지층이라고 한다. 안동 하회마을을 내려다볼 수 있는 부용대(2025년 3월 여행 기록 링크) 또한 독특한 최적 지층이다.

이번 주말 여행은 아내의 특별한 생일을 기념하기 위함이었다. 낙조를 감상하면서 새만금 방조제를 달려 군산을 거치거나, 혹은 전주에 들러서 저녁식사를 한다면 더욱 완벽한 일일 여행 코스가 되었으리라.