이번에 만든 것은 저번 RC카에서 레이저 건을 부착시킨 이름하여~ #레이저 건 RC카#입니다!!
사실 처음 만들려했던 것이 딱 이녀석이었습니다!! ~ 조이스틱 모듈 2개로 블루투스로 한번에 레이저 건과 RC카를 조종하는 것이 제 목표였습니다!! 이제야 완성이 됬고, 먼가 더 다른기능이 가능하다면 더 추가해보고도 싶습니다!!
모습은 이렇습니다~~ㅎㅎ 앞에 머리가생기니 조금더 멋진 모습이 되었습니다!
사실 머리부분은 별거없이 실리콘으로 붙여버렸습니다!!~
(레이저 건은 레이저 건 따로 프로젝트에 올리겠습니다)
뒷부분은 베터리가 하나 늘다보니 놓을 곳이 없어서 그냥 공간을 조금 마련해서 놨습니다ㅎㅎ..
실리콘으로 연결하니 매우 지저분하게 보입니다...그렇다고 납땜을 할 순 없고......베터리 부착핀은 하나가 망가져버려서 어쩔수없이 저렇게 했습니다! 다음에는 더 깔끔하게 할 수 있을 것 같습니다
그럼 이제 본론으로 들어갑니다!
배선입니다!
몸체부분입니다!
이렇게 연결하면 되는데, 달라진 것은 서브모터밖에 없습니다ㅎㅎ.....
서브모터에 개별로 전원을 넣어주시고 포트연결을 해주시면 됩니다!
아! 그리고 중요한점은 서브모터 그라운드를 아두이이노와 같이 그라운드를 잡아주셔야 합니다. 안그러면 작동이 이상하게 될 수도 있습니다ㅜㅜ
조이스틱 부분입니다!!ㅎㅎ 저번 조이스틱 하나로 할 때랑 달라진게 없습니다!! 조이스틱 하나를 더 연결했습니다~
이제 스케치 부분의 소스입니다!!
전에 올려놨던 RC카랑 같은 부분은 언급하지 않겟습니다!
------------------------------------------------------------------------- 몸체부분 ---------------------------------------------------------------------
}
#include <Servo.h>
Servo myservo, myservo1,myservo2;
void setup() {
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
myservo.attach(8);
myservo1.attach(11); //머리 위 아래 부분 포트 설정입니다!
myservo2.attach(12); //머리 양 옆 부분 포트 설정입니다
Serial.begin(9600);
pinMode(3,OUTPUT); // LASER 포트설정입니다!
}
void loop() {
int x = Serial.parseInt();
int y = Serial.parseInt();
int s = Serial.parseInt();
int a = Serial.parseInt(); //이렇게 조이스틱 값 받는 부분을 두개로 설정했습니다!
int b = Serial.parseInt();
int c = Serial.parseInt();
//------------------------왼다리----------------------------------------------
if(x>850){
if(y<250){
digitalWrite(6,LOW);
digitalWrite(7,LOW);
}
else{
digitalWrite(6,HIGH);
digitalWrite(7,LOW);
delay(1);
}
}
else if(150>x){
if(y<250){
digitalWrite(6,LOW);
digitalWrite(7,LOW);
delay(1);
}
else{
digitalWrite(6,LOW);
digitalWrite(7,HIGH);
delay(1);
}
}
else if(150<=x<=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));
//-------------------------------머리----------------------------
myservo1.write(map(a,0,1023,20,120)); //머리부분 서브모터 2개인데 값 설정은 자유롭게 해주시면 됩니다...
myservo2.write(map(b,0,1023,140,40)); // 이렇게 반대로 한이유는 제가 서브모터를 반대로 연결해서 거꾸로 돌아서 그렇습니다
//-------------------------------레이저-------------------------
if(c==0){
digitalWrite(3,HIGH); // 처음기본값은 c 를 HIGH 로 설정했기 때문에 버튼을 누르면 0값이 나옵니다! 그렇기 때문에 0일때 HIGH
}
else{
digitalWrite(3,LOW);
}
//--------------------------값 받아보기-----------------------
Serial.print(" X = ");
Serial.print(x,DEC);
Serial.print(" Y = ");
Serial.print(y,DEC);
Serial.print(" S = ");
Serial.println(s,DEC);
Serial.println(" ");
Serial.print(" A = ");
Serial.print(a,DEC);
Serial.print(" B = ");
Serial.print(b,DEC);
Serial.print(" C = ");
Serial.println(c,DEC);
}
---------------------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------조종기 부분----------------------------------------------------------------------
#include<SoftwareSerial.h>
int X = A0;
int Y = A1;
int S = 7; //첫번째 조이스틱 함수 지정
int A = A2;
int B = A3;
int C = 8; //두번째 조이스틱 함수 지정
void setup() {
Serial.begin(9600);
pinMode(X, INPUT);
pinMode(Y, INPUT);
pinMode(S, INPUT);
digitalWrite(S, HIGH);
pinMode(A, INPUT);
pinMode(B, INPUT);
pinMode(C, INPUT);
digitalWrite(C, HIGH);
}
void loop() {
int x,y,s;
int a,b,c;
x = analogRead(X);
delay(1);
y = analogRead(Y);
delay(1);
s = digitalRead(S);
delay(1);
a = analogRead(A);
delay(1);
b = analogRead(B);
delay(1);
c = digitalRead(C);
delay(1);
Serial.print(" X = ");
Serial.print(x,DEC);
Serial.print(" Y = ");
Serial.print(y,DEC);
Serial.print(" S = ");
Serial.println(s,DEC);
Serial.println(" ");
Serial.print(" A = ");
Serial.print(a,DEC);
Serial.print(" B = ");
Serial.print(b,DEC);
Serial.print(" C = ");
Serial.println(c,DEC);
delay(100);
}
---------------------------------------------------------------------------------------------------------------------------------------------------------
조이스틱 부분은 조이스틱 한개 쓸 때랑 같으니 설명은 필요없을 것 같습니다!!ㅎㅎ
실행영상입니다!!!
생각보다 허접하게 나온것 같기도 하고 ㅜㅜㅜㅜ
레이저건 부분이 조금더 부드럽게 작동되면 좋을텐데, 조이스틱 자체에서 조금만올려도 최대수치값을 내보내기때문에 그건 어려울 듯 싶습니다 ㅜㅜ 그래도 최대한 부드럽게 수치를 지정해 준 것이기에...이정도에 만족합니다 ㅎㅎ
생각보다 동작하는데 조이스틱 두개로 하면 헷갈리고 그럽니다....ㅜㅜ(사람에 따라 잘조종하는 사람도 있을수도....ㅎㅎ)
이상으로 레이저건 RC카 제작완료!
아두이노 파일입니다!~
본체 조종기
'Arduino > Project' 카테고리의 다른 글
[아두이노] 4족 보행로봇 만들기 - 1탄 하드웨어(1) - (9) | 2016.10.01 |
---|---|
[아두이노] RC카를 만들어보자!! - 블루투스를 이용하여 조이스틱으로 조종 - (31) | 2016.08.21 |