아두이노 코딩-149: 아두이노 우노 직류모터 제어 미니 RC카

in #kr6 years ago (edited)

RC카에 사용되는 모터는 에디슨에 의해 발명되었던 DC(직류) 모터로서 교과서에서 흔히 배우는 플레밍의 왼손법칙을 따른다. 이런 류의 직류 모터들은 내부에 감속기를 포함하고 있어 있는 그대로 제어 신호를 공급하면 된다.

취미용 RC카 공작을 함에 있어서 볼팅 체결을 전혀 사용하지 않고 스카치 데이프 부착만으로도 상당히 견고한 RC카를 만들 수 있다. 이 스카치 테이프 부착은 실제로 3겹 정도 중복해서 부착하면 웬만한 악력으로 끓기 어렵다는 점에 유의하기 바란다. 단 스카치 테이프가 비닐 계열 화학 물질이라 열과 불에는 약하다.

noname01.png

차체 바디로는 명함통을 사용하였다. 볼 바퀴는 명함통과 높이를 잘 맞춰 부착하면 된다. 이번 공작에 사용된 부품들은 DMBH RC카 회사 조립 키트 제품에서 떨어져 나온 10년 된 재 활용품임을 밝힌다. 직류모터 확인은 9V 건전지를 연결해 보아 회전하면 직류모터(?)로 무식하게 단정한다.

사진과 같은 배열에서 아직은 무게 중심이 잡히지 않아 뒷 바뀌 쪽으로 기울지만 주행시켜 보면 더 재미있는 듯하다.

아두이노 우노 위에 모터쉴드를 조립하기 전에 블루투스 제어 할 계획이 있으면 우노의 0, 1번 디지털 핀 랜드에 핀을 납땜해 두던지 아니면 랜드에 직접 점퍼 선 납땜해 둘 필요가 있다.

noname02.png

사진은 5분 만에 급조한 RC카 구성도이다. 무게 중심이 앞으로 쏠리도록 배치하였다. 사진에는 블루투스 보드 HC-06이 설치되어 있으나 현재 보유하고 있는 블루투스 보드가 지난번 소개했던 RC카와 밸런싱 로빗에 각각 하나씩 설치하는 바람에 현재 몸통만 남은 상태이다.

이 RC 카를 스카치 데이프에 의해서 견고하게 시공하자. 명함 곽에 스카치 테이프로 부착한 DC 모터와 함께 우드락 재료로 밑판을 만들어 아두이노와 모터 쉴드를 조립해서 올린다. 무게 중심이 앞으로 조금 쏠리도록 배치하고 스카치 테이프로 고정한다. 아울러 뒤쪽에 9V 전지를 수납할 수 있는 약간의 여유 공간을 두자.

Adafruit 사의 모터 쉴드를 사용하기 위해서는 AFMotor.h 라이브러리를 설치하고 아래와 같이 클라스 명령을 선언한다.

noname03.png

현재 2개의 DC모터만 사용하기 때문에 motor1, motor2 클라스 명령 2개면 충분하며 괄호안의 3과 4는 사진의 빨간 박스 친 부분과 같이 M3, M4에 해당한다.

noname04.png

사실 motor1, motor2 는 motorR, motorL 또는 motorA, motorB 등의 이름으로 바꾸어도 된다.
전역 변수 모터스피드는 최대 255 의 값을 가질 수 있으나 느린 속도로 제어하기 위해서 120 으로 조절하였다. DC모터 종류에 따라서 값이 다르며 이 값이 너무 낮으면 윙하는 노이즈 성 소음만나고 모터 회전이 안되는 수가 있으니 유의하기 바란다.

이 RC카 구동은 데모를 위해서 간단하게 전진 후진 조회전 우회전 정지가 가능한 코드를 시험해 보도록 한다. 주행 성능이 만족스러우면 블루투스를 사용하는 앱 인벤터 코딩에 착수하도록 한다. 앱인벤터 제어용 앱과 세부적인 제작 내용은 이미 수일 전에 포스트한 내용을 참조하자.

컴파일 업로딩이 완료되었으면 USB 케이블이 연결된 상태로 바퀴 회전을 확인해 보자. OK면 USB 케이블을 제거하고 9V 전지를 검은색 DC 어댑터에 잭( Jack) 형태로 끼운다.

동영상을 참고하자. 이미 여러 대 만들었지만 크기가 작고 올린 코드가 단순할수록 더 재미가 있는 듯하군요. 아무래도 바디를 멋있게 디자인해서 뭔가를 부착해야겠다는 생각이 드는군요.

//FOF4YFTIA0WX947_F
//This program is used to control a robot car
#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 = 120;

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
}//끝

Sort:  

멋지십니다!
주말 잘 보내셨죠? @codingart

벌초주간이죠! 어떻게 된게 RC카 글 올리는 순서가 정확히 거꾸로 흘러 오는군요!

Coin Marketplace

STEEM 0.30
TRX 0.11
JST 0.033
BTC 64106.00
ETH 3129.71
USDT 1.00
SBD 4.16