드디어 첫 프로젝트입니다! ㅎㅎ 아두이노를 처음 접하는 많은 분들이 가장 먼저 쉽게 도전하는 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카의 구동영상입니다!
첨부 아두이노 파일입니다~
'Arduino > Project' 카테고리의 다른 글
[아두이노] 4족 보행로봇 만들기 - 1탄 하드웨어(1) - (9) | 2016.10.01 |
---|---|
[아두이노] 레이저 건 RC카를 만들어 보자!!(LASER GUN RC CAR) (0) | 2016.08.27 |