본문 바로가기
아두이노_프로세싱/아두이노

안드로이드 스마트폰 + 블루투스 통신 + 아두이노 자동차

by 돌돌쌤 2012. 6. 26.
관련글
블루투스 설정에 관한 글  http://eskelt.tistory.com/14
블루투스 활용에 관한 글  http://eskelt.tistory.com/16

프로그램 버전 : Arduino - 1.0 

안드로이드 스마트폰과 아두이노를
블루투스 통신으로 연결하여
스마트폰에서 폰의 기울기나 버튼 누름 정보를
아두이노로 받아 처리후 모터를 제어해 보도록 한다.
즉 안드로이드 스마트폰으로 아두이노 자동차를 제어해 보자.

먼저 스마트폰과 아두이노의 블루투스장치를 페어링 시킨다.

다음으로 안드로이드 스마트폰에서
페어링된 블루투스(아두이노)로 정보를 보낼 앱이 필요하다.
(사실 아이폰으로 해보려 했지만 블루투스 통신 방법이 다르고
관련 앱이 흔치 않아 포기했다)

사용한 앱은 BluCar이다.

설치후 실행해 보면





Connect to a device 버튼을 눌러 아두이노 블루투스와 연결한다.
(연결이 되었다는 표시는 각각의 블루투스 모듈에 따라 다르다
사용된 RN-42모듈은 빨간 불에서 파란불로 바뀌며,
한번에 되지 않고 여러번 connect해야 연결되었다.
또, 페어링시킨 후 블루투스의 설정을 변경해야하는 모듈도 있지만
이 모듈은 그런 번거로움 없이 사용된 앱과 연결이 되었다.)

연결되면 블루투스를 통해 아두이노로 값을 날린다.
이 앱은
폰을 왼쪽으로 기울이면 -> 4
오른쪽으로 기울이면 -> 8
Forward 버튼을 누르면 -> 16
Reverse 버튼을 누르면 -> 32
버튼을 누르고 기울이면 각각의 값을 더한 값을 날린다.

이 값을 가지고 스케치 하여 모터를 제어 하면 된다.

앱을 이용해 제어한 자동차는 모터2개, 모터드라이버,
블루투스모듈, 아두이노프로미니를 연결하여 제작하였다.
(자동차라고 까지 부르기에는 조금 미흡한... 그냥 모터달린....)




스케치소스
-------------------------------------------------------------------------------
/*스마트폰으로 제어하는 자동차*/
#include <SoftwareSerial.h>
SoftwareSerial BTserial(2,3);    //블루투스 모듈 통신 설정
int a = 0;
void setup(){
  BTserial.begin(115200);      //블루투스 모듈 통신 시작
}

void loop(){
    a = BTserial.read();      // 스마트폰에서 블루투스 모듈로 들어오는 신호를 a에 저장
    switch (a){
      case 0:               // 0이면 정지
        analogWrite(6,0);        // 왼쪽 모터 전진 정보 핀
        analogWrite(9,0);        // 왼쪽 모터 후진 정보 핀
        analogWrite(10,0);       // 오른쪽 모터 전진 정보 핀
        analogWrite(11,0);       // 오른쪽 모터 후진 정보 핀
        delay(30); break;
      case 4:               // 4면 제자리 좌회전
        analogWrite(6,0);
        analogWrite(9,250);
        analogWrite(10,250);
        analogWrite(11,0);
        delay(20);
        break;
      case 8:               // 8이면 제자리 우회전
        analogWrite(6,250);
        analogWrite(9,0);
        analogWrite(10,0);
        analogWrite(11,250);
        delay(20);
        break;     
      case 16:               // 16이면 전진
        analogWrite(6,250);
        analogWrite(9,0);
        analogWrite(10,250);
        analogWrite(11,0);
        delay(20);
        break;
      case 20:               // 20이면 좌회전
        analogWrite(6,0);
        analogWrite(9,0);
        analogWrite(10,250);
        analogWrite(11,0);
        delay(20);
        break;
      case 24:                // 24이면 우회전
        analogWrite(6,250);
        analogWrite(9,0);
        analogWrite(10,0);
        analogWrite(11,0);
        delay(20);
        break;
      case 32:                // 32이면 후진
        analogWrite(6,0);
        analogWrite(9,250);
        analogWrite(10,0);
        analogWrite(11,250);
        delay(20);
        break;   
    }
}
------------------------------------------------------------------
(앱에서 블루투스를 통해 보내는 값이 기울기에 따른 변화된 값이 아니라 정해진 값이여서
아날로그출력(PWM)으로 할 필요 없이(0과 250 값만 사용하니) 디지털 출력으로 모터를 제어하면 될것을.....
조금 더 머리가 좋으면 간략하게 짤수도 있을텐데....)

작동 영상