디지털 라이프 電子的生活 My Digital Life/아두이노 (Arduino)

아두이노 + 모터 쉴드 + 서보 + DC 모터 구동 시험 영상

미친도사 2015. 11. 29. 21:33
얼마 전에 아두이노를 시작했다는 글을 쓴 바 있습니다.

2015/10/29 - [디지털 라이프 電子的生活 My Digital Life] - 아두이노 시작했습니다...


그걸 모형에 적용하기 전에 과학상자로 간단한 자동차를 만들어 시험 중에 있습니다.





위의 사진은 배터리는 연결 안 한 상태입니다. ^^


과정 중에 동영상 하나 찍어봤습니다.



구성품:

- 아두이노 우노 R3

- 모터 쉴드 (Adafruit)

- SG90 서보 모터

- 130 사이즈 모터 (1.5 ~ 6V) (알리익스프레스 링크)


USB 전원으로는 DC 모터 구동이 약한 것 같아, 외부 9V 배터리를 연결한 상태입니다.

모터는 일반 장난감에 들어간 모터가 3V 규격이어서 모터 쉴드에서 나오는 드라이빙 출력 전압인 4.5V를 충분히 견디기 힘들거라 상위 규격의 모터를 알리익스프레스에서 구입했습니다.


소스는 아래와 같습니다. Adafruit에서 공개한 모터 쉴드는 간단하게 DC 모터 구동을 위해 라이브러리를 제공합니다.

https://learn.adafruit.com/adafruit-motor-shield-v2-for-arduino/install-software


테스트한 소스는 아래와 같습니다. 여기저기 있는 소스를 짜깁기 한 것입니다.

// One DC motor & one Servo


#include <Servo.h>

#include <AFMotor.h>


Servo servo;

AF_DCMotor m1(2);


// for Servo

int servoPin = 9;

int center = 95;

int right = 65;

int left = 125;


// for DC motor

int maxspeed = 200;


void setup() {

  // put your setup code here, to run once:

  

  // define serial output

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

  Serial.println("Motor test!");


  // initializing servo

  servo.attach(servoPin);

  servo.write(center);

  

  // initializing DC motor

  m1.setSpeed(200);

  m1.run(RELEASE);

}


void loop() {

  // put your main code here, to run repeatedly:

 

  // move steering (servo)

  Serial.print("right ");

  servo.write(right);

  delay(1000);

  

  Serial.print("Center ");

  servo.write(center);

  delay(2000);


  Serial.print("Left ");

  servo.write(left);

  delay(1000);


  

  Serial.print("Center ");

  servo.write(center);

  delay(2000);


  uint8_t i;


// M1 control

  Serial.print(" M1 Forward ");

  

  m1.run(FORWARD);

  for (i=0; i<maxspeed; i++) {

    m1.setSpeed(i);  

    delay(10);

 }


  delay (2000);

  for (i=maxspeed; i!=0; i--) {

    m1.setSpeed(i);  

    delay(10);

 }

 delay (2000);


 Serial.print(" M1 Backward ");


  m1.run(BACKWARD);

  for (i=0; i<maxspeed; i++) {

    m1.setSpeed(i);  

    delay(10);

 }

 delay (2000);

  for (i=maxspeed; i!=0; i--) {

    m1.setSpeed(i);  

    delay(10);

 }

 delay (2000);

}


일단 잘 되는 것 같아보이지만, 모터 드라이빙하는 전압이 전에 시험했을 때보다 낮게 나옵니다.

그리고, 차를 바닥에 놓으면 모터가 토크가 약한지 바퀴를 굴리지 못합니다.

이 부분에 대해서는 좀 더 확인이 필요하겠네요.

DC 모터 제어가 간단해야 할 것 같은데 생각만큼 잘 안 되네요. 쩝.


다음에 또 올려보겠습니다.


반응형