관련글

블루투스 설정에 관한 글 http://eskelt.tistory.com/14

블루투스 활용에 관한 글 http://eskelt.tistory.com/16

블루투스 자동차 http://eskelt.tistory.com/22

에서 작성된 스마트폰 + 블루투스 + 아두이노자동차 배선도 이다

(모터, 모터드라이버,블루투스,아두이노를 연결)

모터의 출력을 높이기위해 모터 쪽으로 배터리를 따로 연결 하였다.

주의점은 아두이노의 GND와 추가 배터리의 GND를 연결해야 한다.



관련글
블루투스 설정에 관한 글  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 값만 사용하니) 디지털 출력으로 모터를 제어하면 될것을.....
조금 더 머리가 좋으면 간략하게 짤수도 있을텐데....)

작동 영상

RC(radio control) + 아두이노 3 

프로그램 버전 : Arduino - 1.0

저번글에서 RC의 신호를 아두이노에서 받아 보고
신호를 처리해서 모터를 작동시켰다.
이번에는 간단한 자동차를 만들어
실제로  RC 송수신기로 조정하도록 하겠다.


사실 RC카를 어렵게 아두이로로 연결하고 스케치하여 제어할 필요는 없다.
수신기에 모터와 변속기, 각각의 서보 모터를 연결하면
아주 간단하게 RC자동차를 제작 할수 있다.
따라서 RC자동차를 만드는 것이라면 이글을 패스하고
RC사이트를 검색하는 것이....


조립한 자동차는 모터2개와 모터 드라이버를 이용하였고
무게와 크기를 줄이기 위해 아두이노 프로미니와
RC수신기를 이용하여 조립하였다.
차체는 매우 간단하다.






서보모터를 이용하지 않고 좌우 모터의 속도 차이로 방향 조정토록 하고
RC송신기(조정기)의 2개의 채널(스로틀과 에일러론) 신호로 전후좌우를 조정할 수 있도록 스케치 하였다.

스케치 소스
------------------------------------------------------------------
/*rc송신기(조정기)의 신호를 받아 자동차 제어*/
int th,al;       //송신기로 부터 오는 신호를 저장할 변수
int ch1 = 6;    //수신기와 연결된 핀
int ch2 = 7;    //수신기와 연결된 핀
void setup(){
  pinMode(ch1,INPUT);   //송신기에서 신호를 보내면 수신기에서 신호를 받고 수신기에서 아두이노로 신호 입력
  pinMode(ch2,INPUT);   //ch1을 수신기의 스로틀 신호, ch2를 에일러론 신호로 연결함.
}

void loop(){
  th = pulseIn(ch1,HIGH);  //ch1의 펄스폭 저장
  th = constrain(map(th,1100,1900,-255,255),-255,255);   //ch1의 펄스폭1100~1900을 -255~255로 매핑,
                                        //ch1이 스로틀스틱이 중앙일때는 0 위로는 255, 아래로 -255값을 갖도록 함.
  al = pulseIn(ch2,HIGH);
  al = constrain(map(al,1100,1900,-255,255),-255,255);  //ch2의 펄스폭1100~1900을 -255~255로 매핑,
                                        //ch2이 에일러론스틱이 중앙일때는 0 좌로는 255, 우로는 -255값을 갖도록 함.


//모터 드라이브에 연결된 아두이노 핀은 전진시 좌모터 8번, 우모터10번핀
//후진시 좌모터 9번, 우모터 11번

  if(th>0){                      //스로틀 스틱이 위로 움직임 -> 전진
    if(al>0){analogWrite(8,th-al);analogWrite(10,th);} 
                                   //스로틀 스틱이 위로 동시에 에일러론이 좌로 ->좌회전
    if(al<0){al=abs(al);analogWrite(8,th);analogWrite(10,th-al);}     //abs()는 절대값을 취함.
                                   //스로틀 스틱이 위로 동시에 에일러론이 우로 ->우회전
  }
  if(th<0){th=abs(th);               //스로틀 스틱이 아래로 움직임 -> 후진
    if(al>0){analogWrite(9,th-al);analogWrite(11,th);}
                                          //스로틀 스틱이 아래로 동시에 에일러론이 좌로 ->좌후진
    if(al<0){al=abs(al);analogWrite(9,th);analogWrite(11,th-al);}
                                          //스로틀 스틱이 아래로 동시에 에일러론이 우로 ->우후진
  }
}
-------------------------------------------------------------------------------

참고로 RC조정기의 우측 스틱을
위아래 조정을 스로틀
좌우 조정을 에일러론이라 한다.

작동 영상

+ Recent posts