Micromouse를 다시 들여다보니: 최근 마우스의 모양새
on
좀 더 호기심을 발동시켜서 최근 마우스들의 하드웨어를 살펴보기로 했다. 기꺼이 자신의 마우스 정보를 공개해놓은 이름 모를 많은 이들에게 감사하는 바이다.
신기한 것은 2014년을 넘어가면서 대부분의 하드웨어가 유사해져서 사실상 표준 플랫폼(?)이 등장한 것으로 보인다. 입상하는 수준의 마우스들은 대개 하드웨어의 구성이 대동소이하다.
- 전체 외양
DC 모터를 두 개 달고 있고 LiPo cell로 구동되는 것처럼 보이며 전/측방을 보는 IR 센서, 그리고 바퀴는 좌우 각각 2개씩 달고 있다. 전체적인 제작 비용은 모터와 인코더가 대부분을 차지하는 것으로 보인다. 나머지 부품들은 아무리 비싸봐야 개당 $3불 정도하는 수준이니까 PCB 제작 비용등등을 더해도 사실 얼마 들어갈 것도 없어보인다.
- Microcontroller: STM32F4
STM32라고 해서 32bit ARM core가 들어있는 STM의 마이크로 컨트롤러가 있다. 여기에 F가 붙으면 별도의 DSP가 추가 되는 것인데, STM32F4라고 해서 열심히 프로모팅한 컨트롤러가 있다. 난 지인 하나가 컨퍼런스 갔다가 받아온 evaluation board를 하나 가지고 있었는데 생각해보니 4-5년 전이니까 그때가 이 물건을 한참 띄우던 때였구나 싶다.
내부에 1MB짜리 플래쉬가 있고 192KB 짜리 램이 들어있는데, 사실 이 정도면 마우스를 만들기에 전혀 아쉬울 게 없는 환경이라고 볼 수 있다. 그 옛날 32KB 정도로도 잘 만들 수 있었으니까 1MB라고 보면 정말 어마어마한 용량이라고 볼 수 있다. 거기에 168MHz 클럭으로 돌고 있다고 하니까 제 아무리 RISC라고 해도 마우스를 위한 마이크로 컨트롤러 치고는 충분히 빠르다고 볼 수 있다. 1MHz 짜리 마이크로 컨트롤러로도 게임도 하고 마우스도 만들던 시절이 있으니까. 물론 애들 장난감이 되어버린 스마트 폰이 2GHz가 넘는 클럭으로 도는 시대니까 한심하다고 볼 수도 있겠다만.
개발 보드가 싸게 나와서 돌고 있어서 좋긴 한데, 대개 micropython이라고 해서 python을 돌리는 보드로 되어있다. embedded와 python의 결합이란 게 조금 말이 안되는 것 같은데 그러하다면 그러한 것이니까 그렇게 이해하려고 한다.
나와 같은 마우스를 하기엔 많이 늙어버린 사람의 눈으로는 이 정도 기능이면 제법 비싼 게 아닐까 싶은데 $4이 채 되지 않고 개발보드라는 것도 $15이 되질 않을 정도니까 예전과는 정말 많이 다른 것을 알 수 있다. 생각해보면 예전에 쓰던 컨트롤러의 성능이 대충 당대의 PC 성능의 1/4쯤(?) 가는 것을 썼으니까 나름 이해가 간다고 볼 수 있는데, STM32F4 정도면 대략 1/10도 되지 않으니까 $3 정도 가는 게 맞다고 볼 수도 있겠다.
- Motor+Encoder: Faulhaber 1717R/IE2-512
당연히 무게와 전력의 부담때문에 DC 모터를 쓰는 것이 일반적이 되었고 대신 힘좋고 정밀한 DC 모터를 써야하다보니 고가의 소량 생산을 하는 메이커의 모터를 쓰는 듯 싶다. 모터에 인코더를 달아서 속도와 거리측정을 하는 것 같은데 어쨌든 그러하다. DC 모터도 Stepping motor처럼 대전류 스위칭을 하는 드라이버 (UCC27524)를 쓰고 여기에 H bridge (DMHC3025LSDQ-13)를 쓴다. 스테핑 모터 같으면 신호쌍을 만들어내는 로직하나와 그것으로 드라이브를 거는 부품으로 되었다면 DC 모터는 드라이버와 H-bridge를 쓴다. H-bridge란 게 생소하게 들리긴 하지만 쉽게 생각해서 VDD/GND와 각각 연결된 2개의 스위치가 출력 2단자에 연결된 것이다. 즉, 4개의 스위치를 가지고 전류를 순방향/역방향으로 흘리기도 하고 두 단자를 short시킬 수도 있다. 모터와 연결하면 전진 후진 브레이크 걸기가 되는 것이다. 그러니까 작고 대전류를 흘릴 수 있는 부품이면 뭐든 되는 것이다. 그게 아니면 낱개의 FET로 스위칭해야 되니까 부피가 커진다.
결국 제작 단가를 낮추겠다면 모터에서 적당히 trade off 하는 것이 맞다고 본다. 전문가가 사용하는 이런 정밀 모터는 개당 가격이 전체 부품 가격의 총합보다도 높고 2개를 장착해야 하므로 사실상 이게 대부분의 제작비를 차지한다고 봐야지 싶다. 기어와 기어 마운트 같은 경우에는 커스텀으로 제작해야 되니까 거기에서 또 많은 비용이 들어갈 것 같고. 역시 어느 정도 경지에 이르게 되기 전까진 대량 생산이 가능할 것 같은 키트에 의지하는 공부하면서 공력을 쌓는 것이 올바른 선택이지 싶다.
- MEMS sensor
MEMS라고 하면 전자칩인데 기계적인 특성을 가지고 있는 것으로 자이로+가속센서가 여기 해당된다. 솔직히 옛날엔 이런 센서가 있다는 말만 들어봤지 있다고 하더라도 비싸서 달 엄두도 못 냈을 것이고 더구나 그 센서로부터 받아온 신호를 해석할 CPU의 여유가 없었으니까 솔직히 개인적으로는 가속 정보와 자이로 정보를 받아서 정확히 어떤 도움을 준다는 것인지 확실하게 와닿지가 않는다. 허무하게도 이 신통방통한 센서도 그냥 부품의 단가로 봤을 때는 개당 $1도 하지 않는 시절이 됐다.
어쨌든 일단 자이로로 자세제어를 할 수 있다는 것은 알 수 있다. 마우스가 사실 2차원 평면상을 돌아다니는 거라 무슨 드론처럼 자세제어를 해야할 필요가 있는 건가 하는 의문은 생긴다. 90도/180도로 회전하는 모션만 있는 게 아니니까 정확한 자세 제어를 위해서 자이로가 필요할 것으로 생각된다. IR과 자이로를 같이 이용해서 자세를 제어하게 되는 셈이지 싶다.
여기에 가속 센서 기능은 또 뭐해 쓰는 것일까 싶지만 이 역시도 거리 측정에 활용할 수 있어 보이긴 한다. 모터와 인코더가 그다지 정밀하지 못하다면 두 가지 측정값을 바탕으로 거리를 측정해서 위치를 파악해야 하니까 말이다. 또, 어차피 모터 속도는 PWM으로 제어하지만 가속 센서에서 오는 값을 feedback으로 사용하면 속도를 closed loop 로 control을 할 수는 있을 듯 하다.
- IR sensors
IR photo emitter/receiver의 쌍이 된다. 대개 LPF를 걸어서 그 전압을 ADC로 센싱하는 것은 예나 지금이나 별 다르지 않은 것 같다. 빛의 양으로 거리를 파악할 수는 있지만 빛의 양이라는 게 거리에 제곱에 반비례하니까 (대략) 정확하게 측정하긴 곤란한 면이 있다. 대회에 나와서 돌아다니는 마우스를 보더라도 다음칸에 있는 벽을 센싱하진 못하는 것 같다. 그러니까 한칸 너머의 영역에 있는 것은 보지 못하고 당장 바로 앞의 벽만을 볼 수 있으니까 거리 측정이란 것도 애매하지 싶다.
- Power
LiPo 배터리가 좋은 시절이니까 7.4V (3.7x2 cell) 팩으로 돌아가는 게 대부분인 듯 하다. 내부에 buck convertor/voltage booster를 놓아서 올리고 내리고 하는 듯 보인다. 3.3V 전원도 쓰고 5V도 쓰고 모터를 위해서 전압을 어느 정도 부스트하는 것 같아보이기도 한다.
- Buzzer
옛 기억을 떠올리면 Piezo buzzer를 사다 붙여썼던 기억인데, 이게 주파수 table을 잘 써서 내부 MCU timer와 같이 구동하면 음악연주도 가능했던 터라 재미있는 놀이도 많이 했던 기억이 난다. 1호 프로세서 보드는 시계 및 알람 소리 만들어넣는 재미로 만들었는데, 과제 담당자가 그냥 먹어버렸던 기억이 난다. 아마도 자기 여자 친구 주려고 했던 것 일지도 (그게 아니면 변태). 지금은 세상이 변해서 audio magnet이란 SMT 부품으로 존재한다. 음량은 매우 작지만 귀로 알아들을 수 있을 정도는 되고 부피도 작고 소비전력도 작으니 이게 딱인거다.
- 요약
- MCU: STM32F405 (192KB RAM, 1MB Flash)
- DC motors + Encoders
- Motor Driver: UCC27524, H-Bridge: DMHC3025LSDQ
- Battery: LiPo Cell 3.7v x 2
- IR transmitter/sensors, (up/down) DC-DC converters, LED display, Buttons, Audio magnet