아두모토 모터 드라이버 쉴드 퀵스타트 가이드

아두모토 모터 드라이버 쉴드(Ardumoto Motor Driver Shield)

아두모토 모터 드라이버 쉴드는 아두이노와 같이 사용되어 작은 규모의 로봇이나 RC를 제어하는 훌륭한 제어 플랫폼을 제공합니다.

무엇에 쓰는 물건인고?

아두모토는 L298 H-Bridge를 탑재한 보드로 주로 작은 DC모터를 동작시키는데 사용합니다. 모터를 동작시키는데 드라이버가 왜 필요할까요? 모터는 많은 양의 전류를 끌어다 쓰는 경향이 있습니다. 만약 아두이노의 출력핀에서 직접 모터를 제어하려 한다면 아두이노가 화를 낼지도 모릅니다. 아두모토는 아두이노에서 모터를 위한 전류를 제어할 수 있는 보드입니다.

필요한 것들

아두모토 쉴드 사용을 위해서는 아두이노 보드(여기서는 arduino duemilove사용)와 동작시킬 모터가 필요합니다. 모터들은 스톨시에 최대 1~2A이하의 전류를 쓰는 제품이여야 합니다.

납땜을 위한 인두와 모터에 연결할 와이어도 필요합니다.

어떻게 동작시키는가?

먼저 아두모토를 조립가이드를 참조하여 조립합니다.

그 다음 모터에 연결할 전선의 길이를 사용하고자 하는 용도에 맞게 필요한 만큼 자릅니다. 보통 필요한 길이의 1.3배 정도를 자르는 것이 차후 전선을 잘라내거나 꼬아야하는 작업을 고려할때 좋습니다. 여기서는 검정과 빨강색 전선을 선택하여 잘랐습니다.

자른 전선을 모터의 양쪽 리드에 납땜합니다.

아래와 같이 힛 쉬링크를 이용하여 좀더 깔끔하게 만들 수도 있습니다.

위와 같이 모터에 전선을 연결하였다면 아래의 그림과 같이 아두모토의 스크류 터미널 블럭에 연결할 수 있습니다. 아래의 그림을 보면 두개의 터미널 블럭이 있어 두개의 모터를 연결할 수 있음을 알 수있습니다.

아두모토 쉴드는 아두이노 보드의 Vin으로부터 모터를 동작시키고 L298 칩의 로직을 동작시키기 위한 5V를 공급 받습니다. 이말은 두가지를 의미합니다. 첫째로, 아두모토 쉴드를 아두이노에 연결된 USB를 통하여 동작시킬 수 없다는 말입니다. (연결된 USB는 오직 로직만을 동작시킬 수 있습니다.) 둘째로, 모터에 따라 높은 암페어를 지원하는 전원소스를 사용해야 할 수 있다는 말을 의미합니다. 여기서는 9V, 650mA의 파워어댑터를 아두이노의 배럴잭에 연결하여 사용하겠습니다. USB는 컴퓨터와 연결하여 컴퓨터와 통신할 수 있게 만들어 둡니다.

아두모토의 스케치 코드입니다. 스케치코드를 실행하면 두개의 모터가 순차적으로 한방향으로 두가지의 속도로 동작하는 것을 보실 수 있습니다. 그런 다음 반대방향으로 동일하게 동작합니다.

스케치코드 설명

예제 스케치코드는 간단하게 작성이 되었습니다. 코드를 맨위를 보면 어떤 핀이 어떤 신호를 가지게 되는지 정의되어 있으며 각각의 라인에 대해 설명한 주석을 달고 있으니 참고하시면 될 것같습니다.

//int pwm_a = 10; //PWM control for motor outputs 1 and 2 is on digital pin 10
int pwm_a = 3;  //PWM control for motor outputs 1 and 2 is on digital pin 3
int pwm_b = 11;  //PWM control for motor outputs 3 and 4 is on digital pin 11
int dir_a = 12;  //dir control for motor outputs 1 and 2 is on digital pin 12
int dir_b = 13;  //dir control for motor outputs 3 and 4 is on digital pin 13


void setup()
{
  pinMode(pwm_a, OUTPUT);  //Set control pins to be outputs
  pinMode(pwm_b, OUTPUT);
  pinMode(dir_a, OUTPUT);
  pinMode(dir_b, OUTPUT);
  
  analogWrite(pwm_a, 100);        
  //set both motors to run at (100/255 = 39)% duty cycle (slow)  
  analogWrite(pwm_b, 100);
  
}

void loop()
{
  digitalWrite(dir_a, LOW);  //Set motor direction, 1 low, 2 high
  digitalWrite(dir_b, LOW);  //Set motor direction, 3 high, 4 low
  
  delay(1000);
  
  analogWrite(pwm_a, 255);      
  //set both motors to run at 100% duty cycle (fast)
  analogWrite(pwm_b, 255);
  
  delay(1000);
  
  digitalWrite(dir_a, HIGH);  //Reverse motor direction, 1 high, 2 low
  digitalWrite(dir_b, HIGH);  //Reverse motor direction, 3 low, 4 high
  
  delay(1000);
  
  analogWrite(pwm_a, 100);
  //set both motors to run at (100/255 = 39)% duty cycle   
  analogWrite(pwm_b, 100);
  
  delay(1000);
}


Comments