경기 꿈의 대학 네째주 II: 아두이노 RC카 제작

codingart(66)
Published in
#kr
Words
409
Reading
2 min
Listen
Play
7y

RC카 차체를 양면 테이프만 사용하여 조립하도록 하자. 앞바퀴에 해당하는 스틸 볼(스틸 캐스터)의 플라스틱이 바닥면과 닫지 않도록 높이를 맞춰주어야 한다. 전압이 나오지 않는 9V 폐건전지를 사용하여 양면테이프 작업을 하였다.

noname15.png

다음 사진은 RC카의 상면도이다. 건전지 폭을 포함하여 적절하게 부품을 배치하도록 하자. 아두이노 우노 보드 위에 Adafruit 모터 쉴드를 끼운 상태라 아두이노 보드가 보이지 않는 상태다. 블루투스 통신을 위한 HC-06 보드도 그림과 같이 배치하여 양면 테리프 작업에 의해 고정한다.

noname12.png

Adafruit 사의 모터쉴드를 구매 후 사용자가 2곳에서 납땜을 해야 한다. RC카의 스마트폰 무선 조종이 가능하게끔 HC-06 블루투스 보드를 설치해야 한다. HC-06은 5V, GND, TX, RX 핀을 가지고 있다.

noname13.png

블루투스 RC카를 위한 블루투스 배선은 마지막 단계에 하도록 하자. 따라서 HC-06의 RX,TX 배선 연결을 반드시 제거해 둔다.

우선 좌우 DC모터를 모터쉴드에 아래 그림처럼 배선하도록 한다. 오른쪽 모터가 모터쉴드의 M3에 연결되고 왼쪽 모터가 모터쉴드의 M4에 연결된다.

noname14.png

프로그램 주행을 위한 코드를 업로드 한 후 9V 건전지 직류 전원 잭을 연결하여 바퀴의 회전 방향을 관찰하자. 프로그램 주행 코드는 전진 후진 좌회전 우회전 순으로 코딩이 되어 있다. 만약 좌우 바퀴의 회전 방향이 맞지 않으면 M3 및 M4에 연결된 배선을 바꿔주면 된다.

noname16.png

최대 속도 조절
mspd 값을 160∼255 사이에서 설정하자. USB 테스트 시에는 5V 의 전원을 공급하여 바퀴를 돌리지만 9V 건전지를 사용할 때에는 전원이 변동되고 더 많은 전류를 흘려주므로 160에서 USB전원으로 간신히 바퀴가 돌 정도면 9V 건전지 파워에 의해서는 그 보다 강한 파워로 주행하게 된다. 가급적이면 작은 값을 주도록 하자.

전진 서브루틴은 각 모터별 최대속도 지정과 함께 FORWARD 파라메터 값이 입력된다.
후진 서브루틴은 각 모터별 최대속도 지정과 함께 BACKWARD 파라메터 값이 입력된다.
그밖에도 STOP, LEFT, RIGHT 루틴이 필요하다. 특히 STOP에서는 파라메터 값 REKEASE가 사용되며 이때에는 최대속도 값 0과 함께 모터가 전기적으로 꺼진다.

noname17.png

메인 프로그램인 loop()에서 순차적으로 전진, 후진, 좌회전, 우회전을 호출한다. 시간 간격이 다른데 경험적으로 주행시켜 보면서 9V 건전지가 천천히 소모되도록 정하도록 하자.

noname18.png

//FOF4YFTIA0WX947_F

#include <AFMotor.h>

//creates two objects to control the terminal 3 and 4 of motor shield
AF_DCMotor motor1(3);
AF_DCMotor motor2(4);
int mspd = 255;

void setup() {
Serial.begin(9600);
}

void loop(){
forward();
delay(1000);
back();
delay(1000);
left();
delay(1000);
right();
delay(1000);
}

void forward() {
motor1.setSpeed(mspd); //Define maximum velocity
motor1.run(FORWARD); //rotate the motor clockwise
motor2.setSpeed(mspd); //Define maximum velocity
motor2.run(FORWARD); //rotate the motor clockwise
}

void back() {
motor1.setSpeed(mspd);
motor1.run(BACKWARD); //rotate the motor counterclockwise
motor2.setSpeed(mspd);
motor2.run(BACKWARD); //rotate the motor counterclockwise
}

void left() {
motor1.setSpeed(mspd); //Define maximum velocity
motor1.run(FORWARD); //rotate the motor clockwise
motor2.setSpeed(0);
motor2.run(RELEASE); //turn motor2 off
}

void right() {
motor1.setSpeed(0);
motor1.run(RELEASE); //turn motor1 off
motor2.setSpeed(mspd); //Define maximum velocity
motor2.run(FORWARD); //rotate the motor clockwise
}

void Stop() {
motor1.setSpeed(0);
motor1.run(RELEASE); //turn motor1 off
motor2.setSpeed(0);
motor2.run(RELEASE); //turn motor2 off
}//끝

마나마인로고.png

경기 꿈의 대학 네째주 II: 아두이노 RC카 제작 | Ecency