간단한 것은 실은 간단하지 않습니다.
디자인이라는 분야는 발전하면서 깔끔함과 조화를 더 중요하게 생각하는 방향으로 나아갑니다. 개별 요소의 화려함보다는 전체적인 분위기의 통일성을 추구하는 움직임이 있습니다. 깔끔하다는 것은 언뜻 보면 그냥 뭔가 대충 선 긋고 네모 그려서 뚝딱 만들어내는 것만 같은 느낌이 있습니다. 이는 미술에서도 마찬가지입니다. 디자인은 어떨지 몰라도, 현대미술은 왼쪽 그림처럼 어린 아이도 만들어낼 수 있을 것만 같은 그림이 매우 높은 가격에 거래되는 현상을 보고 기시감을 느끼는 사람들이 적지 않습니다.
저도 대부분의 사람들과 같이 현대미술의 의미에 대해 잘 모릅니다. 기시감을 느끼는 것 역시 마찬가지입니다. 그러나 이게 그렇게 비싼 가격을 받을 가치가 있는가에 대한 부분에서는 조금 공감이 되기도 합니다. 현대 자본주의에서 재화가 생성, 유통, 소멸되는 과정의 가장 최소 단위는 생산자와 소비자, 그리고 그 관계에 있습니다. 대개 생산자보다 소비자가 더 많습니다. 소비자가 하나의 생산자에 의존하는 상황이 아닌 한, 대부분 소비자의 목소리가 더 크게 작용합니다.
그렇다보니 시장에서 생산자의 목소리를 듣기가 쉽지 않습니다. 그런데 파헤쳐 보면 아마도 분야마다 정말 다채로운 각자의 이야기들이 있을 것입니다. 공장에서 만들어내는 제품들이 주위에 넘쳐납니다. 공산품은 돈을 주고 구입하면 그만입니다. 그 공산품은 결코 눈에 흔히 보이는 양 만큼 간단하게 만들어지지 않습니다.
알루미늄 캔을 만드는 제조 과정에 대한 영상을 접한 적이 있습니다. 이 영상을 켠 순간부터 마지막 장면까지 정말 깊이 몰입해서 봤습니다. 본지 4년이 넘어가는데도 이 영상이 잊히지 않습니다. 단순해 보이는 캔에 이렇게 복잡하고 섬세한 공정이 숨어있다는 사실을 아마 대부분의 사람들은 잘 모를 것입니다. 그도 그럴 것이, 일단 우리가 궁금해하지 않고, 보안 상 공개되지 않은 이야기도 수없이 많기 때문입니다. 그런데 이런 이야기들을 파헤쳐 보면 정말 재미있는 것들 투성이입니다. 지금 저는 AirMouse를 제작하고 Nightly 방식으로 매일 글을 쓰고 있습니다. 이 과정 역시 제품의 이야기를 만들어내기 위해서 하고 있는 겁니다. 이야기를 만들고, 전파하는 것이 최종 목표입니다. 제품 제작은 이야기의 부산물입니다. 물론 그렇다고 제품 제작에 소홀하지는 않습니다. 일단 물건이 잘 팔려야 이야기도 계속 할 수 있지 않을까요?:)
생각보다 까다로운 버튼 다루기
아두이노와 같은 제품들을 가지고 놀 때 LED, 버튼, 저항을 가장 처음으로 다룹니다. 이들은 교육용으로는 다루기 정말 간단한 제품들입니다. 그런데 Production 레벨을 고려하고 버튼을 다루려 하면 과정이 복잡해지기 시작합니다. 크게 플로팅(Floating)과 디바운싱(Debouncing)이 문제가 됩니다.
Floating
Floating은 이전의 글에서도 각주로 간간히 설명드렸듯, 값이0, 혹은 1로 나와야 하는데 핀에 버튼을 대충 연결하면 이도 저도 아닌 값이 입력이 되어 입력 이전 상태가 불안정해지는 것을 의미합니다. 버튼을 누르지 않을 때는 0이 나와야 하는데, 값이 이렇게 튀어버리면 실제로 버튼을 누르지 않았음에도 MCU에서는 버튼을 입력한 것으로 간주해 그에 해당하는 액션을 취해버립니다. 이 문제를 해결하기 위해 우리는 입력 핀의 한 쪽에 VCC혹은 GND를 연결 후 저항을 연결해 풀-업, 풀 다운 상태를 만들어줍니다.
Debounce
또 다른 문제는 버튼의 물리적 한계와 MCU의 성능으로 인해 발생합니다. 차라리 MCU가 너무나 느려서 버튼 인식을 0.1초에 한 번 하면 좋을텐데, 아두이노도 8MHz로 작동하는데다, 지금 개발중인 ESP32는 무려 240MHz의 속도로 작동합니다. 그렇다고 버튼 입력만을 위해 성능 좋은 프로세서를 강제로 속도를 낮추는 것도 말이 안 맞습니다. 정확한 표현은 아니지만 240MHz라면, 버튼을 1/240초만큼 눌렀다 떼도 그것을 인식할 만큼 속도가 빠릅니다. 그렇다보니 왼쪽 그림처럼 깔끔하게 값이 나오는 경우는 거의 없고, 오른쪽 그림처럼 HIGH 상태에 가긴 하는데....LOW와 HIGH를 우리가 인식할 수 없을만큼 빠르게 왔다갔다 한 후에 HIGH에 도달합니다. 버튼에 LC 회로를 달거나 소프트웨어적으로 raw 데이터를 처리해서 깔끔한 0과 1을 받는 방법으로 이 디바운싱 문제를 해결합니다.
소프트웨어적으로 해결하는 자세한 방법까지 언급하다간 오늘 Nightly를 내일도 쓰는 불상사가 생길 것 같으니 이 부분은 일단 생략하겠습니다. 어쨌든 오늘 하루는 이 문제를 해결하고, GAT 프로토콜을 통해 ESP32와 장치를 연결하는데 보냈습니다. 이렇게 버튼의 기능 향상과 마우스가 움직일 가능성을 확인할 수 있었습니다. 저번에 MPU6050 IMU 센서를 망가뜨려서 새로 주문했는데, 언제쯤 올지 모르겠습니다.
마치며
키보드, 마우스, 스마트폰, 홀드 버튼... 우리는 하루에도 수 십 번씩 버튼을 만집니다. 이 버튼들은 어떻게 만들어졌을까요? 모두 소프트웨어적인 처리를 거쳤을지 아니면 LC회로를 박아 넣어서 디바운싱을 해결했을지 궁금해집니다.
긴 글 읽어주셔서 감사합니다. ❤️와 광고클릭은 큰 힘이 됩니다.