R/C 자동차 제어 시스템 개발기

2010년 Daum 개발자 컨퍼런스 출품작

2010년 사내 개발자 컨퍼런스를 위해 개발했던 프로젝트 이야기입니다. “아이폰으로 장난감 무선조종 자동차를 제어하는 임베디드 시스템”을 개발해서 전시했었는데요, 기억을 잘 되살려, 그 관련한 이야기를 정리해보려합니다.

아래는 그 때 전시회장에서 시연을 준비중인 모습입니다.

전시회장에서

전날 밤까지도 펌웨어(firmware)를 다 개발하지 못해서 초조했었는데, 운 좋게도 당일 새벽에 잘 마무리가 되어서 전시할 수 있었습니다. 사진의 표정으로보니, 역시 꽤 즐거운 작업이었던것 같습니다.

전시 때의 동영상도 찍어두었었는데, 어디로 갔는지 찾지를 못했습니다. 아래는, 추후에 집에서 촬영한 시연 동영상입니다.

(제 목소리를 녹음해서 들으니 꽤나 어색하군요)

이제부터 프로젝트의 구성요소들을 하나하나 뜯어서 차근차근 설명해보겠습니다.

장난감에 들어간 임베디드 시스템 (Embedded System)

임베디드 시스템은 더 큰 시스템 내부에서 특화된 제어기능을 위해 만든 컴퓨터 시스템을 부르는 말입니다 1. 제 프로젝트에서는, 장난감 무선조정 자동차를 커다란 시스템이라고 보면 되고, 그 장난감 자동차 안에, 자동차를 제어하기 위해 넣어둔 간단하고 작은 컴퓨터 시스템을 임베디드 시스템이라고 부를 수 있습니다.

GTI, the larger system

시중 장난감샵에서 골프 GTI 한대 뽑았어요. 이 장난감 자동차에 무선 송수신기를 연결해서 조종할 수 있습니다. 저 자동차의 무선 신호 수신용 부품을 직접만든 임베디드 시스템으로 교체하고, 그 임베디드 시스템과 아이폰이 무선 통신을 하게 만들었습니다. 자동차의 구동은 결국, 2개의 서보모터)라고 불리는 부품을 조작하면 되더군요. 각각의 서보모터는 앞바퀴 스티어링과, 뒷바퀴의 구동모터를 제어하는 역할을 합니다. 생소한 서보모터의 디테일은 생략하고, 간단하게 정리합니다.

서보모터 두개에 적절한 전기적 신호를 공급해서, 자동차의 전후좌우 이동을 명령할 수 있다

서보모터가 이해하는 전기신호를 PWM이라고 부르는데요, 어려운 디테일은 역시 또 생략하고, 그냥 그런 신호를 만들어내면 된다고 생각하면 되겠습니다. 저는 이 목표 출력(Output)에서 부터, 임베디드 시스템 개발을 시작했습니다.

한편, 임베디드 시스템의 입력(Input)은 조금 자유롭게 설정할 수 있습니다. 무선통신을 위해서, WiFi, Bluetooth를 고려해봤습니다. 일단, 배터리팩에서 전원을 공급받아서 사용해야하고, 그 전력의 대부분은 자동차 모터제어에 사용되어야하므로, 블루투스가 더 나을 것 같았습니다. 마침, 아이폰에도 블루투스 장치가 있으므로, 간단하게 서로 통신할 수 있을거라 기대했죠.

diagram1

(나름 열심히 그렸으나 대충 그린 걸로 보이는) 그림으로 살펴보죠. 이 프로젝트의 주인공인 임베디드 시스템은 아이폰으로부터 블루투스(Bluetooth) 무선신호를 받아서 나름의 계산(컴퓨팅!)을 한 뒤, 적절한 PWM신호를 만들어 서보모터 #1과 #2에 각각 공급합니다. 임베디드 시스템은 자동차 본체에 부착하였으며, 서보모터들과는 전선으로 연결됩니다.

블루투스 (Bluetooth)

블루투스는 매우 짧은 거리에 있는 장치들과 저전력 통신을 하기 위한 규약으로 알고 있는데요, 살펴보니 등급(class)에 따라 조금 더 먼 거리에서도 통신이 가능합니다2.

class    최대전력(mW)   통신거리
클래스1  100                ~100m
클래스2  2.5                 ~10m
클래스3  1                    ~5m

일반 컴퓨터로부터 가까이에서 쓰는 무선 키보드같은 장비는 클래스 3에 해당되겠죠. 이 프로젝트에서는 자동차의 이동 범위를 최대거리 30미터 정도로 예상하고, 클래스 1의 블루투스 통신 모듈을 구비했습니다.

이런 구상으로 조금씩 프로젝트를 진행했는데, 미처 확인하지 못했던 한가지 문제를 알게됩니다.

아이폰에서의 블루투스 제어문제

아이폰에 분명 블루투스 모듈이 있습니다만, 일반 등록개발자가 사용할 수 있는 API는 GameKit에서 주변 아이폰들과 통신할 때 사용하는 제한된 기능으로만 사용할 수 있더군요. (지금은 바뀌었을지도 모르겠습니다만) 아이폰의 블루투스 모듈을 입맛에 맞게 사용하려면, MFi 프로그램에 따로 등록해서 블루투스 API를 받아야하는 시스템이었습니다. MFi프로그램에 등록하려고, 더 자세히 알아봤는데, 등록신청서에 신청사의 법무담당자 연락처를 넣으라더군요. 라이센스비용이 얼마인지도 모르겠고, “법무담당자”라는 말에 포기하고 그냥 신청하지 않기로 합니다.

또, 이어지는 예상 문제로, 아이폰의 블루투스 모듈은 필시 저전력으로 근거리 통신 위주일테니, 30미터의 통신거리를 확보하지 못할거라는 추측이 이어졌습니다. 부차적입니다만, 아마도 시뮬레이터로는 블루투스 통신을 테스트할 수 없을테니, 개발/테스트 과정이 번거로워질 거라는 예측도 어렵지 않았습니다. 이렇게 그럴싸한 합리화 이유 두가지를 내세워, MFi등록은 시도하기도 전에 포기하고, 다른 방법을 찾기로 합니다.

오늘은 여기까지. To be continued…

이 글은 이 후 글도 작성되지 않았고, 더 업데이트 되지도 않을 예정입니다. 당시에 구현했던 상황에는 나름대로의 의미가 있었지만, 요새는 아두이노나 라스베리파이 같은 훨씬 훌륭한 솔루션도 많이 있고, 아이폰의 블루투스를 활용하기도 더욱 편리해졌으며, 심지어 임베디드 장비에서 직접 WiFi를 연결해서 쓰기도 훨씬 편해졌습니다. 관련한 문의는 받지 않습니다. – 2015.4

References