본문 바로가기

Adafruit Motor Shield 모터쉴드를 사용해서 서보모터와 DC모터 1개씩 구동하기

반응형

RC카를 만들기 위해서는 앞으로 나갈 수 있게 해주는 DC모터와 방향을 결정해줄 수 있는 서보모터가 필요하다. DC모터 구동 관련해서는 아래글과 같이 실습을 해보았다. 예제가 있어서 편하게 사용을 했었는데 서보에 대한 예제는 따로 없고 메뉴얼에는 아두이노 기본 Servo 예제를 사용하라고 해서 어떻게 해야되는지 막막했다. 


[아두이노]모터쉴드 사용하여 DC모터 구동하기


그래서 우선 Sweep 이라는 예제를 열어서 보니 9번핀을 PWM을 사용해서 서보모터를 제어하고 있었다. Adafruit Motor Shield 메뉴얼에도 서보모터를 2개 사용할 수 있는데 1번 포트에 연결할 경우 9번핀, 2번 포트에 연결할 경우 10번 핀을 사용하라고 한다. 이렇게 저렇게 해보다 동작을 안해서 서보 2번 포트에 연결하고 PWM포트를 9번으로 설정하니 서보모터가 돌아가기 시작한다;;; PCB에 표기가 잘못됬는지 만약에 안된다면 한번 바꿔서 해봐야 할 것 같다. 


아래 코드는 DC모터 좌우로 회전 후 서보모터 좌우로 회전하는 예제다.


#include <AFMotor.h>

#include <Servo.h>

 

AF_DCMotor motor(2, MOTOR12_64KHZ); // create motor #2, 64KHz pwm


Servo myservo;  // create servo object to control a servo

// twelve servo objects can be created on most boards


int pos = 0;    // variable to store the servo position


void setup() {

  myservo.attach(10);  // attaches the servo on pin 9 to the servo object

  Serial.begin(9600);           // set up Serial library at 9600 bps

  Serial.println("Motor test!");

  

  motor.setSpeed(200);     // set the speed to 200/255

}

 

void loop() {

  Serial.print("tick");

  

  motor.run(FORWARD);      // turn it on going forward

  delay(1000);

 

  Serial.print("tock");

  motor.run(BACKWARD);     // the other way

  delay(1000);

  

  Serial.print("tack");

  motor.run(RELEASE);      // stopped

  delay(1000);


  for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees

    // in steps of 1 degree

    myservo.write(pos);              // tell servo to go to position in variable 'pos'

    delay(15);                       // waits 15ms for the servo to reach the position

  }

  for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees

    myservo.write(pos);              // tell servo to go to position in variable 'pos'

    delay(15);                       // waits 15ms for the servo to reach the position

  }

  

}


구성은 아래 그림과 같다.



반응형
-->