본문 바로가기
Arduino/Project

[아두이노] RC카를 만들어보자!! - 블루투스를 이용하여 조이스틱으로 조종 -

by Alan_S 2016. 8. 21.

 드디어 첫 프로젝트입니다! ㅎㅎ 아두이노를 처음 접하는 많은 분들이 가장 먼저 쉽게 도전하는 RC카!! 저도 한번 도전해 봤습니다!!

 

 보통은 블루투스를 이용하여 핸드폰으로 어플을 깔아서 핸드폰으로 제어하는 경우가 많은데, 그 경우는 해본 결과 MIT 에도 많은 어플들이 올라와 있고 생각보다 너무 간단하다고 생각하여, 저는 조이스틱으로 제어하는 것을 해보았습니다!!(어플리케이션으로 제어하는 것도 올려드릴 수 있습니다!)

 

 

 

완성된 모습입니다!! ~~

 

3D프린터로 했으면 굉장히 깔끔하고 이쁘게 나왔을텐데, 학교에 몇개있다곤 하는데 어캐이용해야될지 아직은 몰라서~~ 인터넷 주문하면 또 며칠 걸리기에 그냥 아크릴로 가공했습니다!

 

생각보다 복잡하지 않게 나왔습니다!! 선만 잘 정리해준다면 깔끔할 것 같네요!! 조종기 부분은 너무 간단해서 납땜하지 않았습니다...

 

또 조종기에 다른것도 더 달아서 다른 것도 제어할 수 있도록 하기 위해서 더 완벽한 조종기의 모습으로 다시 올리겠습니다!!

 

 

앞바퀴의 모습입니다!! 바퀴는 하나로 돌아가는 기능은 없고, 서보모터로 양옆으로 방향전환해주는 기능만 넣었습니다!! 오토바이같은 모습입니다 ㅎㅎ

 

 

 

뒷바퀴의 모습은 이렇습니다 !!! 구멍을 뚫어서 선만 앞쪽으로 잘 빼주었습니다!!

 

 

 

조이스틱의 회로도는 이렇습니다!! ㅎㅎ소스와 설명은 따로 조이스틱 다루는 글에 있습니다!! 그 글에서와 같이 시리얼 통신을 이용한 것이기 때문에 소스도 똑같습니다!!

 

 

 

 

본체부분입니다!!~ 여기서 유의할 점은 중간에 모터와전지와 연결된 부분들이 모터드라이버를 나타냅니다!! 프리징에 제가 쓴 모터드라이버가 없어서 저렇게 표현했습니다 ㅜㅜ위의 사진에서의 모터드라이버와 비교해가면서 보시면 이해가 되실겁니다!!

 

 

 

 

 

소스는 사진으로 올리기엔 무리가 있어서 이렇게 올립니다 ㅜㅜㅜㅜㅜㅜ 소스 파일은 첨부해놓겠습니다...

-------------------------------------------------------------------RC 카 본체 소스--------------------------------------------------------------------

 

#include<SoftwareSerial.h>
#include <Servo.h>

Servo myservo, myservo1;

void setup() {
  pinMode(6,OUTPUT);
  pinMode(7,OUTPUT);
  
  pinMode(4,OUTPUT);
  pinMode(5,OUTPUT);

  myservo.attach(8);
  Serial.begin(9600);
}

void loop() {

 
  int x = Serial.parseInt();
  int y = Serial.parseInt();
  int s = Serial.parseInt();
 
    //------------------------왼다리----------------------------------------------
if(x>850){
            if(y<250){
                  digitalWrite(6,LOW);                 //6, LOW 7,LOW 가 멈춰있는 것입니다!! x 값이 850보다 클때, y의 값이 250 보다 작을 경우
                  digitalWrite(7,LOW);                // 빼곤 무조건 앞으로 갑니다!! 250 보다 작으면 멈춰있습니다!! (왼쪽으로 돌아야하기에)
                      }
            else{
                  digitalWrite(6,HIGH);                // 6,HIGH 7,LOW 는 앞으로 가는 것이죠!
                  digitalWrite(7,LOW);
                  delay(1);
                 }
}

else if(150>x){
            if(y<250){
                  digitalWrite(6,LOW);                // x 가 150 보다 작을때, y가 250보다 작으면 멈춰있고 250보다 클땐 무조건 뒤로갑니다!
                  digitalWrite(7,LOW);                // y가 250보다 작으면 왼쪽으로 뒤로가야하기에 왼다리는 멈춰있습니다!!
                  delay(1);
                      }
            else{
                  digitalWrite(6,LOW);                // 6,LOW 7,HIGH 는 뒤로 간다는 것입니다!
                  digitalWrite(7,HIGH);
                  delay(1);
                 }
}
else if(150<=x<=850){                                //x가 150과 850 사이에 있으면 멈춰있습니다!!
  digitalWrite(6,LOW);
  digitalWrite(7,LOW);
  delay(1);
 }
    //-------------------------오른다리---------------------------------------
 
if(x>850){
              if(y>850){
                    digitalWrite(4,LOW);                // 오른다리도 마찬가지로 왼다리 원리와 같습니다!
                    digitalWrite(5,LOW);
                    delay(1);
                       }
             else{
                    digitalWrite(4,HIGH);
                    digitalWrite(5,LOW);
                    delay(1);
                       }
}  

else if(150>x){
                if(y>850){
                    digitalWrite(4,LOW);
                    digitalWrite(5,LOW);
                    delay(1);
                       }
                else{
                    digitalWrite(4,LOW);
                    digitalWrite(5,HIGH);
                    delay(1);
                   }
  }
else if(150<=x<=850){
  digitalWrite(4,LOW);
  digitalWrite(5,LOW);
  delay(1);
 }
 //-----------------------------앞다리---------------------------
  myservo.write(map(y,0,1023,20,100));                     //    앞다리 서보모터 부분은 조이스틱값(최소 0, 최대 2의 10승(1024)) 값을

}                                                                     //    서보모터의 각도값인 20도부터 100도까지로 map 함수로 맵핑해준것입니다!

 

 

---------------------------------------------------------------------------------------------------------------------------------------------------------

 

 

사실 모터드라이브의 ENABLE을 써서 속도제어도 가능합니다!! 앞다리 서보모터 부분과같이 조이스틱의 값을 맵핑해서 넣어주면 조이스틱 값에따라 속도 제어도 가능합니다!!

 

 그렇게 안한이유는 제꺼만 그런지 모르겠는데, 제 조이스틱 모듈은 너무 둔해서 조금만 올려도 최고수치까지 값이 올라가버립니다.... 고로 속도제어를 넣어준다 해도 그리 의미가 없을듯 합니다!!

 

또한 제가 x값은 범위는 150, 850 으로 잡고 y 값은 250, 850 으로 잡고 동작 제어를 했는데 이 숫자는 크게 의미없고, 갖고계신 조이스틱값을 받아보신뒤 정해주시면 될 것 같습니다!

 

 

 

 

 

조이스틱 부분은 전 글에 올려놨으니 똑같이 하시면 됩니다!!

 

 

 

제 RC카의 구동영상입니다!

 

 

 

첨부 아두이노 파일입니다~

RCCAR.ino
다운로드
JOYSTICK.ino
다운로드