[미션2. 구현기] 스마트폰 미니 자동차 제어

 

※ 본 글은 아이씨뱅큐가 진행하는 칩센의 블루투스 4.1 모듈 테스트 키트 무상 체험단의 일환으로 ICbanQ의 지원을 받아 작성되었습니다.

※ 구입처 : http://www.icbanq.com/shop/

 

 

미션 2 : 무선스마트폰 미니 자동차 제어

 

 

 이번 미션을 수행하면서 그 동안 RC카를 한번 개조해 보고 싶었던 개인적인 바램이 이렇게 BLE 모듈을 체험해 볼 수 있는 기회와 어우러져 의미있는 시간이지 않았나 생각됩니다.  

 

본론으로 들어가기에 앞서 진행해야 할 작업을 크게 나누어 보면 아래와 같습니다.

1. HW준비 : RC회로를 BoT 테스트 키트로 교체, DC모터 Driver 모듈과  연결  
2. SW준비 : BoT 테스트 키트 용 테스트 apk의 PWM control UI 수정(-> Joystick)  

3. Test 및 보완

 

우선 HW작업으로 불용품 RC카를 분해하여 Radio Controler 회로를 떼어 냅니다.

 

 

그리고 새로운 두뇌(BoT 테스트 키드)로  바꿔주고, 연결 작업을 합니다.

이미 제목에서 알 수 있듯이 DC모터를 PWM 신호로 제어하기 위해 BoT 테스트 보드의 PWM0~3(4개의 출력 신호)를 사용합니다.

 

 

 

 

그리고 BoT테스트 보드의 IO전압(3.3V)과 전류 레벨(?:CSR1010문서에도 없네요..ㅠ.ㅠ)로는 초라한 can모터라 할지라도 직접적인 DC모터제어에 무리가 있어 효율적이고 쉽게 제어하기 위해 ICBANQ에서 구매한 DC모터 Driver(위 사진 중앙 하단)를 적용하였습니다. 

 

 

 

 

 

 DC모터 Driver는 2채널용으로 BA6208 2개만을 사용하여 입출력을 사용하기 편하게 배치한 간단한 쪽보드(piggyback board)입니다.

 

 

 

 

실제 공간이 작은 시스템에 적용하기엔 size가 좀 크네요.^^ 

 

BA6208 보드 기준으로 

     1. control용 입력신호 : BoT테스트보드의 PWM0~3 pin으로 부터 LM0,LM1 / RM0,RM1에 각각 연결

     2. 전원(4.5~15V)  : 배터리팩(전원 스위치 포함)으로 부터 Vcc, Gnd에 연결

     3. DC모터구동용 출력신호 :  2채널 출력(J3/J4)을 각각 DC모터에 연결 (Maximum 500mA)

이렇게 간단합니다.

 

 

 

아래표는 BoT보드의 PWM 출력 -  BA6028 -  DC모터의 구동 방향과의 상관 관계를 나타냅니다.

   DC Motor#

PWM#

BA6208 Output to

DC motor

   Motor1(driving)

PWM0

PWM1

 

                 H

L

정회전

L

H

역회전

H

H

정지

L

L

Open

   Motor2(steering)

PWM2

PWM3

 

H

L

정회전

L

H

역회전

H

H

정지

L

L

Open




 

그리고 BoT 테스트보드의 PWM 출력을 보드 내부(RGB LED, Vibrator)가 아닌 외부(헤드핀 부착부)로 돌리기위해

해당 스위치를 아래 사진과 같이 보드 외부로 설정합니다.

 

 

이제 장착과 연결이 끝났네요.

 

 

기념으로 측면 샷도 한번 눌러 봅니다.

 

 

이로써 HW적인 준비는 마쳤고 ...

 

 

 

 

 

 

 

다음은 SW 관련사항을 한번 볼까요 ...  

 

 

BoT 테스트 키트용 android app에서 PWM control을 위한 UI는 RC카 조정 관점에서는 좀 맞지 않습니다.

그래서 칩센 사이트의 Download 코너에 공유되어 있는 테스트앱을 받아서 수정,구현하기로 가닥을 잡았습니다.

 

 

테스트앱의 구성을  간단히 살펴보면 아래와 같습니다.

(* 그리고 library인 chipsen-cle1x0_1.jar(com.chipsen.bleservice)도 있습니다.)

 

 

 

Activity 진행 순서는 아래와 같습니다.

       chipsen_logo(splash) --> NavigationActivity(각종 data, control이 있는) --> (BLE scanning 시) DeviceScanActivity

 

 

PWM control을 담고 있는 부분이 LedContorlFragment인데, 이 부분에 기존 것(PWM관련 만)을 제거하고 아래와 같이 DualJoystickView 관련 코드를 추가합니다.(시간 관계상 https://code.google.com/p/mobile-anarchy-widgets/wiki/JoystickView를 활용합니다.)

 

 

 

 

그리고 JoystickView로부터 전처리된 터치이벤트가 전파되면  JoystickMovedListener가 감지하여 조정을 위한 판단을 한 후 BLE 서비스로 전달하여 GATT - write characteristic operation을 수행하면  CSR1010에 전달되고 최종적으로 PWM을 control을 합니다.

 

최종 수정된 activity 형태는 아래와 같습니다.

 

 

 

 

작업의 많은 부분을  Driving motor(좌), Streering moter(우) 레벨 조정을 위한 JoystickMovedListener 내부 구현에 투자하였습니다.

우선 원하는 대로 동작 시키는 것에 초점을 두었지만 아직 최적화의 여지는 많이 남아 있어 보입니다.

 

 

 

 

자~ 이제 테스트 단계로 넘어갑니다. 

1차 동작 검증을 위해  아래와 같이 포즈을 취합니다.

 

 

 

 

 

여러차례의 수정을 마치고 나름 잘 굴러갑니다. 

 

 

 

이제 "Hit The road Jack !" 해 볼까요 ~~ 

 

 

 

음주 운전은 절대 안됩니다. ^^

 

* 작업한 소스도 첨부합니다. 

 

 

이상으로 미션2를 마치겠습니다.

 

 

 

 

 

※ 본 글은 아이씨뱅큐가 진행하는 칩센의 블루투스 4.1 모듈 테스트 키트 무상 체험단의 일환으로 ICbanQ의 지원을 받아 작성되었습니다.