취소

커뮤니티

가이드

서포트

전체

아두이노 응용 Adafruit사 모터 쉴드 이용해 모터 제어하기

확실히 오픈하드웨어의 장점은 거의 모든 것이 공개되어 있다보니 서드파티 제품이 많이 나오는 것도 장점 중의 장점인 것 같다고 생각한다. 이번에는 그 중에서도 모터 쉴드 서드파티 제품중에서도 Adafruit사 제품을 통해 모터 제어해보도록하자

Adafruit사 모터쉴드

Adafruit 사 모터쉴드

순정 모터 쉴드에 비해서 많은 모터를 제어 할 수 있으며, 2개의 5V 서보모터, 4개의 DC모터, 2개의 스태핑모터를 제어 할 수 있다. 필요에 따라서는 외부 전원을 연결하여 사용 할 수 있으며, 이 쉴드를 2층으로 적층하게 될 경우 최대 4개의 스태핑 모터까지 제어가 가능하다.

라이브러리 설치

순정 모터 쉴드 같은 경우 IDE 안에 라이브러리가 내장되어있지만, Adafruit 사의 모터 쉴드 같은 경우 IDE안에 라이브러리가 없기 때문에 별도적으로 추가하여 사용해야 된다. 아래의 링크에서 우측 Download ZIP을 눌러 다운로드 받은 후 압축을 풀어서 "C:\Program Files\Arduino\Libraries"폴더에 폴더 채 추가해주면 된다.

adafruit/Adafruit_Motor_Shield_V2_Library Adafruit_Motor_Shield_V2_Library - v2! github.com 자세히보기

* 라이브러리 설치 하지 않고 할 수 있지만, 상대적으로 불편하기 때문에 사용하는 것을 권장한다.

PIN 배치도

쉴드를 적층하지 않고, 점프를 하여 사용 할 경우 PIN 배치도를 참조하여 배선하면 된다. 개인적으로는 점프하는 것보다는 적층하는 것을 추천하는 쉴드 중 하나이다.

DC모터 가감속 제어(라이브러리 포함 기본 예제)

#include <Wire.h> #include <Adafruit_MotorShield.h> #include "utility/Adafruit_MS_PWMServoDriver.h"   Adafruit_MotorShield AFMS = Adafruit_MotorShield();  Adafruit_DCMotor *myMotor = AFMS.getMotor(1);   void setup() {   Serial.begin(9600);    AFMS.begin();    myMotor->setSpeed(150);   myMotor->run(FORWARD);   myMotor->run(RELEASE); }   void loop() {   uint8_t i;   Serial.print("tick");   myMotor->run(FORWARD);   for (i=0; i<255; i++) {     myMotor->setSpeed(i);       delay(10);   }   for (i=255; i!=0; i--) {     myMotor->setSpeed(i);       delay(10);   }   Serial.print("tock");   myMotor->run(BACKWARD);   for (i=0; i<255; i++) {     myMotor->setSpeed(i);       delay(10);   }   for (i=255; i!=0; i--) {     myMotor->setSpeed(i);       delay(10);   }   Serial.print("tech");   myMotor->run(RELEASE);   delay(1000); }

스태핑모터 위치 제어(라이브러리 포함 기본 예제)

#include <Wire.h> #include <Adafruit_MotorShield.h> #include "utility/Adafruit_MS_PWMServoDriver.h"   Adafruit_MotorShield AFMS = Adafruit_MotorShield();  Adafruit_StepperMotor *myMotor = AFMS.getStepper(200, 2);     void setup() {   Serial.begin(9600);   Serial.println("Stepper test!");     AFMS.begin();   myMotor->setSpeed(10);  // 10 rpm    }   void loop() {   Serial.println("Single coil steps");   myMotor->step(100, FORWARD, SINGLE);    myMotor->step(100, BACKWARD, SINGLE);      Serial.println("Double coil steps");   myMotor->step(100, FORWARD, DOUBLE);    myMotor->step(100, BACKWARD, DOUBLE);      Serial.println("Interleave coil steps");   myMotor->step(100, FORWARD, INTERLEAVE);    myMotor->step(100, BACKWARD, INTERLEAVE);       Serial.println("Microstep steps");   myMotor->step(50, FORWARD, MICROSTEP);    myMotor->step(50, BACKWARD, MICROSTEP); }

내가 작성한 코드를 통해서 예제를 보여주어도 되지만, 내 코드보다는 기본 제공 예제 라이브러리가 훨씬 더 깔끔하기 때문에 기본 제공 라이브러리 예제를 사용했다. 확실히 아두이노가 오픈되어있다는 장점을 느낄 수 있다. 서드파티 제품임에도 불구하고 어느정도 수준으로 손 쉽게 할 수 있게끔 기본 제공 예제 라이브러리가 충실하게 구성되어있다. 한 번 자료를 찾아서 다른 방법으로도 해보길 바란다.