아두이노프로세싱 프로그래밍

아두이노 우노 코딩에 의한 L239D 모터 쉴드 DC모터 구동 RC카 주행

coding art 2017. 10. 8. 15:13
728x90



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





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

AF_DCMotor motor1(3)
AF_DCMotor motor2(4)


 ⚫⚫⚫

현재 2개의 DC모터만 사용하기 때문에 motor1, motor2 클라스 명령 2개면 충분하며 괄호안의 3과 4는 사진과 같이 M3, M4에 대응한다.
사실 motor1, motor2 는 motorR, motorL 또는 motorA, motorB 등의 이름으로 바꾸어도 된다.
전역 변수 모터스피드는 최대 255 의 값을 가질 수 있으나 느린 속도로 제어하기 위해서 120 으로 조절하였다.  DC모터 종류에 따라서 값이 너무 낮으면 윙하는 노이즈 성 소음만나고 모터 회전이 안되는 수가 있으니 유의하기 바란다.

아직은 블루투스에 의한 무선 제어 이전에 간단하게 전진 후진 조회전 우회

전 정지가 가능한 코드를 시험해 보도록 한다. 주행 성능이 만족스러우면 블루투스를 사용하는 앱 인벤터 코디에 착수하도록 한다. 앱인벤터 제어용 앱과 세부적인 제작 내용은 곧 출간될 종이 책에 상세히 기록할 예정임.

9V 전지를 사용하여 시험해 보도록 한다. 동영상을 참고하기 바란다.









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
}