반응형

【 아두이노모듈#23 Adafruit 사의 4채널 아두이노 모터쉴드 - 스텝모터 사용하기! #1  

 Adafruit 사의 모터쉴드는 L293D 모터드라이버를 2개를 H-bridge 구성한 4채널 모터드라이브 쉴드 보드이다. 

여기서 쉴드보드란, 아두이노 우노, 메가, 레오나르도 등에 적층하여 사용할 수 있는 확장형 보드라는 의미이다.  따라서 다른 형태의 모터드라이버 보드와는 달리 거추장스러운 선연결이 많이 줄어 들게 되는 장점이 있다.  또한, 서보모터(2개), DC 모터(4개) 혹은 스텝모터(2개)를 함께 연결하여 동시 구동이 가능한 확장성을 지닌 보드이다.  지난 시간 서보모터 연결에 이어, 이번엔 스텝모터 두 개를 연결해보도록 하자.  우선, 보편적으로 많이 사용하는 28BYJ-48 모터를 사용해볼 것이다.  그리고, 28BYJ-48 모터는 ULN2003 이라는 전용 드라이버가 있어서 이를 이용해서 모터쉴드에 연결해도 되고 사용도 간편하지만, Adafruit모터쉴드 자체가 드라이버 역할을 함으로 ULN2003 드라이버 없이 사용해볼 것이다. 

 Let's get it~!

 

▶ 선수학습 :

    1. [아두이노 기초#35] 스텝모터제어하기(28BYJ-48모터 기초) ☜ (클릭)

    2. [아두이노 모듈#22] Adafruit4채널아두이노 모터쉴드   ☜ (클릭)

 

▶ 아두이노 L293D 모터 드라이버 쉴드 스펙

▶ 스텝모터(2개) 제어하기

 

 (사전준비 )

 아래처럼 라이브러리 관리에서 Adafruit 사의 모터 드라이버를 다운받아 라이브러리에 추가 한다.(구글, 깃허브 등에서 다운로드도 가능)

 라이브러리 직접 다운로드 :

Adafruit-Motor-Shield.zip
0.01MB

 

▶ 회로연결 :

 아래와 같이 스텝모터 두 개를 연결한다.

위 이미지는 하단에 아두이노 보드가 2단으로 결합 된 모습임을 참고하라.

 ※ 주의 사항 :

 1. 모터 쉴드를 사용할 때의 전원 공급 방법은 a. 보드에 직접 전원을 연결 (이때, 쉴드의 'PWRJMP' 점퍼가 연결되어 있어야함).   b.  외부전원으로 공급 (이때, 쉴드의 'PWRJMP' 점퍼가 연결되어 있어야함).   c. 보드 전원과 외부전원 동시 공급 (이때, 쉴드의 'PWRJMP' 점퍼는 제거 해야함).

 2. 보드 전원(USB 케이블전원) 만으로는 위 두개의 스텝모터 구동이 안 되거나 부분적으로 동작이 안 될 수 있다.

 이럴 때는, 외부전원(별도의) 을 입력해주면 동작에 문제가 없으나, 사용하는 스텝모터의 정격용량(현재 5v)을 많이 초과 하는 경우 장시간 사용시 스텝모터가 과열되어 손상이 갈 수 있으니, 테스트를 통해 적정 전원을 공급해주어야 한다.

 3. 케이블 연결 순서에 주의 할 것.( 순서가 잘 못되면, 동작이 안 되거나, 반대방향으로 회전한다)

 

【 28BYJ28 스텝모터 부연 설명 

유니폴라 방식의 모터로서(1,3,4,2번으로 전류가 들어가며 5번(Red) 공통단자로 전류가 흘러나오는 연결 구조이다,  15  , 35, 45, 25  )

 색깔을 주의 깊게 보면서,  A → B → C → D의 순서대로 켜지도록 전류를 흘려주면 CW(시계방향),   

 D → C → B → A의 순서대로 흘려주면 CCW(반시계 방향) 으로 모터가 회전하게 된다. 

 

▶ 코딩 :

/* 스텝모터(28BYJ-48) 2대 구동하기                                   */   
/* 라이브러리 메니저 창에서 Ardafruit 검색후 AFMotor.h 설치 */
#include <AFMotor.h> 
// 1스텝당 회전각 5.625˚ * 64스텝 = 360˚
AF_Stepper motor1(64 , 1);  //1회전당 필요 스텝수(64), 연결 모터채널(모터1) 
AF_Stepper motor2(64 , 2);  //1회전당 필요 스텝수(64), 연결 모터채널(모터2) 

void setup() {
  Serial.begin(9600);           
  Serial.println("Stepper test!");
  motor1.setSpeed(200);  // 200 rpm  : 범위(0~255)
  motor2.setSpeed(200);   
}

void loop() {
  Serial.println("Single coil steps"); //SINGLE : 1개의 코일만 동작
  // ( stepsdirectionstyle)
  motor1.step(2048FORWARDSINGLE); // 2048 : 1회전에 필요한 스텝수
  motor2.step(2048, FORWARD, SINGLE);    
  // motorX.release():회전멈추고 전류를 차단함 
  delay(2000);  
  motor1.step(2048, BACKWARD, SINGLE); 
  motor2.step(2048, BACKWARD, SINGLE); 
  delay(2000);
  Serial.println("Double coil steps");
  motor1.step(2048, FORWARD, DOUBLE);  //DOUBLE : 2개의 코일 동작(토크상승)
  motor2.step(2048, FORWARD, DOUBLE);
  delay(2000);
  Serial.println("Interleave coil steps");
  motor1.step(2048, BACKWARD, INTERLEAVE); // INTERLEAVE: 1,2개 코일 번갈아 동작
  motor2.step(2048, BACKWARD, INTERLEAVE); // 약간의 부드러운 구동과,약간의 속도감소
  delay(2000);
  Serial.println("Micrsostep steps");
  motor1.step(2048, FORWARD, MICROSTEP); //MICROSTEP:부드러운회전(단,토크와 속도감소)
  motor2.step(2048, FORWARD, MICROSTEP); 
}

 

【코드 다운로드】

28BYJ-48_2motor.zip
0.00MB

▶ 동작 영상 :

(유튜브 고화질로 보기-옵션:1080P영상)

 https://youtu.be/93dd7Gjszwo

 

(카카오로 보기)

 

반응형