반응형

 【 아두이노 기초 】 #36 스텝(Step Motor)모터 제어5 (버튼제어)


  지난시간 일반적으로 많이 쓰이는 저렴한 가격의 28BYJ-48 스텝모터와 ULN2003 드라이버 모듈에 대해 다루어 보았다. 

 이번 시간에는 조금 더 다루어 보기 위해 버튼을 사용해볼 것이다. 

 앞으로의 실험에서도 버튼제어가 중요한데, 그 이유는 버튼으로 무언가 제어가 가능하다는 뜻은 버튼을 대신해서 그 위치에 그 어떤 센서나 모듈로도 제어를 할 수 있다는 뜻이 된다.  단지, 각 센서 마다 고유의 특징과 사용법만 파악하면 되는 것이다.  버튼은 비록 수동으로 동작을 하지만 매우 직관적이어서 회로의 동작 원리를 이해하기 쉽다는 장점이 있다. 



▶ 실험에 사용되는 스텝 모터 자료 ( 28BYJ-48 ) 

 



[ ULN2003 모듈의 내부 회로도 참고 ]





▶ 스텝모터 구동 원리 





▶ 실습 목표 :  

 버튼 두 개를 이용하여 스텝모터의 정회전과 역회전 제어를 해 볼 것이다. 

버튼 1을 한 번 클릭하면 정회전(시계방향)하고, 

버튼 2를 한 번 클릭하면 역회전(반시계방향)하도록 한다.


▶ 실습 회로도면 :

  (이미지 클릭하면 확대 가능)






▶ 부대품 목록 : 아두이노 보드, 브레드 보드 


▶ 부품 목록    : 스텝 모터(28BYJ48, 5.625˚) , ULN2003모듈, 푸시버튼 2개 (2Pin 이용)


▶ 실습 절차  : 

 1. 회로도를 참고하여 모터 와 보드 등을 연결한다.
 
 2. 모터와 ULN2003 보드 모듈을 연결한다. (연결 소켓은 앞뒤 구분이 되어 있어 잘못 연결할 걱정은 하지 않아도 된다)

 3. ULN 보드 공급 전원은 5V~12V 공급이 가능하고, 
    '+'로 표시된 곳의 점퍼를 아두이노 보드의 VCC(5V) 단자에 연결하고, 
    '-'로 표시된 곳의 점퍼를 아두이노 보드의 GND 단자에 연결한다.  


▶ 프로그램 (코드& 설명) : 


#include <Stepper.h>      // 스테핑 모터 라이브러리 정의 

int stepsPerRev = 2048; // 한바퀴(360): 2048 , 반 바퀴(180) : 1024

Stepper stepper (stepsPerRev, 11,9,10,8); // ( IN4,IN2,IN3,IN1) 

int btn1 = 7;

int btn2 = 6; 

void setup() {

 stepper.setSpeed(10);   // 스텝모터의 스피드 설정

 pinMode(btn1, INPUT_PULLUP);

 pinMode(btn2, INPUT_PULLUP);

}

void loop()  { 

 boolean btn1HL = digitalRead(btn1);

 boolean btn2HL = digitalRead(btn2); 

 if (btn1HL == LOW) {           // 버튼 1의 입력을 확인

    stepper.step(stepsPerRev);  // 한 바퀴 회전 명령

  }

  if (btn2HL == LOW) {           // 버튼 2의 입력을 확인

    stepper.step(-stepsPerRev);  // 반대 방향으로 한 바퀴 회전

  }

}



▶ 실행 영상 : 




▶ 아두이노 소스 코드 다운로드 : 



반응형
반응형

 【 아두이노 기초 】 #35 스텝(Step Motor)모터 제어4 (28BYJ-48 & ULN2003)


  지난시간 스텝각 1.8도, 바이폴라 제어가 가능한 스텝모터(6선식)와 293D 모터드라이버 IC를 가지고 제어해 보았다. 만약 스텝모터 동작 원리를 참고하려면 여기 글을 참고하라. ( ☞ 스텝모터의 이해 ) 

 이번 시간에는 좀더 다루기 간편한 유니폴라 방식전용의(5선식) 스텝모터와 모터드라이버 IC 가 모듈화되어 사용하기 간편해진 ULN2003 모듈에 대해 학습해보도록 하자. 



▶ 실험에 사용되는 스텝 모터 자료 ( 28BYJ-48 ) 

 




▶ 스텝모터 구동 원리 





▶ 실습 목표 :  

 5선식 스텝모터와 ULN2003 드라이버 IC 모듈로 좀더 쉽게 스텝모터를 제어 회보자. 이번 실습에서는 정회전(시계방향) 한 바퀴 회전 후, 역회전(반시계방향) 한 바퀴 회전을 반복하도록 한다. 


▶ 실습 회로도면 :

  (이미지 클릭하면 확대 가능)






[ ULN2003 모듈의 내부 회로도 참고 ]



▶ 부대품 목록 : 아두이노 보드, 브레드 보드 


▶ 부품 목록    : 스텝 모터(28BYJ48, 5.625˚) , ULN2003모듈, 


▶ 실습 절차  : 

 1. 회로도를 참고하여 모터 와 보드 등을 연결한다.
 
 2. 모터와 ULN2003 보드 모듈을 연결한다. (연결 소켓은 앞뒤 구분이 되어 있어 잘못 연결할 걱정은 하지 않아도 된다)

 3. ULN 보드 공급 전원은 5V~12V 공급이 가능하고, 
    '+'로 표시된 곳의 점퍼를 아두이노 보드의 VCC(5V) 단자에 연결하고, 
    '-'로 표시된 곳의 점퍼를 아두이노 보드의 GND 단자에 연결한다.  

 


▶ 프로그램 (코드& 설명) : 


#include <Stepper.h>      // 스테핑 모터 라이브러리 정의 

  int stepsPerRev = 2048; // 한바퀴(360): 2048 , 반 바퀴(180) : 1024

  Stepper stepper (stepsPerRev, 11,9,10,8); // ( IN4,IN2,IN3,IN1) 


void setup()

{

 Serial.begin(9600);

  stepper.setSpeed(10);   // 스텝모터의 스피드 설정

}

void loop()

{ 

  stepper.step(stepsPerRev);  // 한 바퀴 회전 명령

  delay(1000);

  stepper.step(-stepsPerRev);  // 반대 방향으로 한 바퀴 회전

  delay(1000);

}




▶ 실행 영상 : 





▶ 아두이노 소스 코드 다운로드 : 



반응형
반응형

 【 아두이노 기초 】 #34 스텝(Step Motor)모터 제어3 (VR 속도제어)


  지난시간 스텝모터를 시리얼 통신을 이용해 제어해 보았다. 만약 스텝모터 동작 원리를 참고하려면 여기 글을 참고하라. ( ☞ 스텝모터의 이해 ) 

 이번 시간에는 스텝모터의 속도를 VR(가변 저항)을 이용하여 제어해 볼 것이다.


▶ 실험에 사용되는 스텝 모터 자료 ( 모터 뱅크, NK243-01AT )



▶ 스텝모터 구동 원리 





▶ 실습 목표 :  

 스텝모터를 VR(가변 저항: 레버를 회전 시키면 저항 값이 변하는 소자)을 이용해서 스텝모터의 회전 속도를 느리게 혹은 빠르게 변화 시켜 보고자 한다. 

High/Low와 같은 On/Off 제어가 아니기 때문에 Digital 포트가 아닌 아두이노의 Analog 포트를 이용해서 제어 해야 한다.  실습에서는 A0 포트를 이용한다.


▶ 실습 회로도면 :

  (이미지 클릭하면 확대 가능)



 

L293D 모터드라이버 IC의 연결을 위해 아래 이미지를 참고 하라.


▶ 부대품 목록 : 아두이노 보드, 브레드 보드 


▶ 부품 목록    : 스텝 모터(NK243-01AT, 모터뱅크, 1.8˚) , L293D, VR(100㏀~100㏀ 사이값)


▶ 실습 절차  : 

 1. 회로도를 참고하여 모터 와 부품들을 연결한다.
 
 2. 대부분의 스텝모터를 사용할 때는 아두이노 출력전원과 같은 단일전원 만으로는 스텝모터가 구동 되지 않는다. 따라서 추가 전원을 스텝모터에 따로 공급 해주어야 하는데, L293과 같은 모터 드라이버 IC를 사용하게 될 경우 추가 전원을 IC 8번 핀으로 공급해주면 된다.  (스텝 모터 마다 허용 공급 전원이 상이 함으로 허용 가능 전압을 확인 할 것, 본 실험에서는 5V를 입력함)

 3. 회로의 모든 GND(그라운드, '-' 단자)는 하나로 연결 한다. 

 4. VR(가변 저항의 크기와 유형은 여러가지 이기 때문에 갖고 있는 것으로 실험 하면 되며, 통상 가운데 단자(리드선)를 A0포트에 연결 시켜보면 변화된 값을 받을 수 있다. 



▶ 프로그램 (코드& 설명) : 


#include <Stepper.h>     // 스테핑 모터 라이브러리를 정의 한다

 int in1Pin = 12;            // [A] 상을 정의 한다

 int in2Pin = 11;            // [B] 상을 정의 한다

 int in3Pin = 10;            // [/A] 상을 정의 한다

 int in4Pin = 9;             // [/B] 상을 정의 한다 

 Stepper motor(200, in1Pin, in2Pin, in3Pin, in4Pin);


void setup() {

  pinMode(in1Pin, OUTPUT);  // [A] 상을 출력으로 지정한다

  pinMode(in2Pin, OUTPUT);  // [B] 상을 출력으로 지정한다

  pinMode(in3Pin, OUTPUT);  // [/A] 상을 출력으로 지정한다

  pinMode(in4Pin, OUTPUT);  // [/B] 상을 출력으로 지정한다

  motor.setSpeed(30);   // 스텝모터의 스피드 설정 함수 (RPM)

  Serial.begin(9600);        // 시리얼 통신 가능하도록 설정함

}

void loop() {


  int ReadVR=analogRead(A0); //아날로그 포트 A0에서 VR값 읽기 

  int motorSpeed = map(ReadVR,0,1023,0,100); //10bit값을 맵핑

  if (motorSpeed >0) {     // VR값이 0 이상 일 때 모터동작

    motor.setSpeed(motorSpeed); //맵핑된 VR값으로 속도값 입력

    motor.step(200);        //모터 스텝 수 지정(200X1.8=360)

    delay(1000);             //바퀴 구분을 위한 시간지연 (1)

  }

}




▶ 실행 영상 : 





▶ 아두이노 소스 코드 다운로드 : 



반응형
반응형

 【 아두이노 기초 】 #33 스텝(Step Motor)모터 제어2 (시리얼통신제어)

  지난시간 스텝모터를 정역 회전 시켜 보았다. 스텝모터 동작 원리를 참고하려면 여기 글을 참고하라. ( ☞ 스텝모터의 이해 )  이제는 스텝모터를 시리얼 통신을 통해 숫자 입력 만으로 정역회전 제어를 해볼 것이다. 


▶ 실험에 사용되는 스텝 모터 자료 ( 모터 뱅크, NK243-01AT )



▶ 스텝모터 구동 원리 





▶ 실습 목표 :  

 스텝모터를 시리얼 모니터 창을 통해 숫자 '1'을 입력 하면, 360도 한 바퀴 '정회전' 시키고, 숫자 '2'를 입력하면, 360도 한 바퀴 '역회전' 시켜보자. 그 이외의 숫자나 문자 입력시에는 다시 입력하라는 안내 메세지도 보내보도록 해보자. 


▶ 실습 회로도면 :

  (이미지 클릭하면 확대 가능)



 

L293D 모터드라이버 IC의 연결을 위해 아래 이미지를 참고 하라.


▶ 부대품 목록 : 아두이노 보드, 브레드 보드 


▶ 부품 목록    : 스텝 모터(NK243-01AT, 모터뱅크, 1.8˚) , L293D


▶ 실습 절차  : 

 1. 회로도를 참고하여 모터 와 부품들을 연결한다.
 
 2. 대부분의 스텝모터를 사용할 때는 아두이노 출력전원과 같은 단일전원 만으로는 스텝모터가 구동 되지 않는다. 따라서 추가 전원을 스텝모터에 따로 공급 해주어야 하는데, L293과 같은 모터 드라이버 IC를 사용하게 될 경우 추가 전원을 IC 8번 핀으로 공급해주면 된다.  (스텝 모터 마다 허용 공급 전원이 상이 함으로 허용 가능 전압을 확인 할 것, 본 실험에서는 5V를 입력함)

 3. 회로의 모든 GND(그라운드, '-' 단자)는 하나로 연결 한다. 

 4. 시리얼 통신창에서 전송속도가 '9600'으로 프로그램과 일치하는지 확인.


▶ 프로그램 (코드& 설명) : 


#include <Stepper.h>     // 스테핑 모터 라이브러리를 정의 한다

 int in1Pin = 12;            // [A] 상을 정의 한다

 int in2Pin = 11;            // [B] 상을 정의 한다

 int in3Pin = 10;            // [/A] 상을 정의 한다

 int in4Pin = 9;             // [/B] 상을 정의 한다 

 Stepper motor(200, in1Pin, in2Pin, in3Pin, in4Pin);


void setup() {

  pinMode(in1Pin, OUTPUT);  // [A] 상을 출력으로 지정한다

  pinMode(in2Pin, OUTPUT);  // [B] 상을 출력으로 지정한다

  pinMode(in3Pin, OUTPUT);  // [/A] 상을 출력으로 지정한다

  pinMode(in4Pin, OUTPUT);  // [/B] 상을 출력으로 지정한다

  motor.setSpeed(30);   // 스텝모터의 스피드 설정 함수 (RPM)

  Serial.begin(9600);        // 시리얼 통신 가능하도록 설정함

}

void loop() {


  int steps = 200;            // 스텝 수 지정(200X1.8=360)

  if (Serial.available()) {     // 시리얼 입력이 있는지 체크 함

  int direct = Serial.parseInt();시리얼로 받은 정수문자를 정수로 반환

   if (direct ==1) {           // 입력값이 ‘1’ 이면 정회전

     Serial.print("It's Normal Direction!\n\n");

     motor.step(steps);   }   // 지정된 스텝만큼 모터 정회전

   else if (direct ==2)  {     // 입력값이 ‘2’ 이면 역회전

     Serial.print("It's Reverse Direction!\n\n");

     motor.step(-steps);   }  // 지정된 스텝만큼 모터 역회전

   else                          // 그외 입력값은 아래 안내문자 출력

     Serial.print("You only choose '1' or '2'\n\n");  

   }

}



▶ 실행 영상 : 




▶ 아두이노 소스 코드 다운로드 : 



반응형
반응형

 【 아두이노 기초 】 #32 스텝(Step Motor)모터 정회전 역회전

  지난시간 스텝모터에 대한 이해를 위한 설명을 간단한 예제와 함께 자세히 설명을 하였으니, 먼저 참고하면 좋을 것이다.( ☞ 스텝모터의 이해 )  이어서 스텝모터를 가지고 본격적으로 동작실험을 진행해 보도록 하겠다. 


▶ 실험에 사용되는 스텝 모터 자료 ( 모터 뱅크, NK243-01AT )



▶ 스텝모터 구동 원리 





▶ 실습 목표 :  

 스텝모터를 정확히 360도 정회전 후 90도로 역회전 시켜보자. 이 동작을 계속 반복(loop 문으로 자동 반복 되도록) 한다. ( L293 모터 제어용 IC를 이용)


▶ 실습 회로도면 :

  (이미지 클릭하면 확대 가능)



 

L293D 모터드라이버 IC의 연결을 위해 아래 이미지를 참고 하라.


▶ 부대품 목록 : 아두이노 보드, 브레드 보드 


▶ 부품 목록    : 스텝 모터(NK243-01AT, 모터뱅크, 1.8˚) , L293D


▶ 실습 절차  : 

 1. 회로도를 참고하여 모터 와 부품들을 연결한다.
 
 2. 대부분의 스텝모터를 사용할 때는 아두이노 출력전원과 같은 단일전원 만으로는 스텝모터가 구동 되지 않는다. 따라서 추가 전원을 스텝모터에 따로 공급 해주어야 하는데, L293과 같은 모터 드라이버 IC를 사용하게 될 경우 추가 전원을 IC 8번 핀으로 공급해주면 된다.  (스텝 모터 마다 허용 공급 전원이 상이 함으로 허용 가능 전압을 확인 할 것, 본 실험에서는 5V를 입력함)

 3. 회로의 모든 GND(그라운드, '-' 단자)는 하나로 연결 한다. 



▶ 프로그램 (코드& 설명) : 


#include <Stepper.h>     // 스테핑 모터 라이브러리를 정의 한다

 int in1Pin = 12;            // [A] 상을 정의 한다

 int in2Pin = 11;            // [B] 상을 정의 한다

 int in3Pin = 10;            // [/A] 상을 정의 한다

 int in4Pin = 9;             // [/B] 상을 정의 한다

Stepper motor(200, in1Pin, in2Pin, in3Pin, in4Pin);

void setup() {

  pinMode(in1Pin, OUTPUT);  // [A] 상을 출력으로 지정한다

  pinMode(in2Pin, OUTPUT);  // [B] 상을 출력으로 지정한다

  pinMode(in3Pin, OUTPUT);  // [/A] 상을 출력으로 지정한다

  pinMode(in4Pin, OUTPUT);  // [/B] 상을 출력으로 지정한다

  motor.setSpeed(30);  // 스텝모터의 스피드 설정 함수 (RPM)

}

void loop() {

  // 정회전 구간

  int steps = 200;                // 스텝 수 지정(200X1.8=360)

  motor.step(steps);             // 지정된 스텝만큼 모터를 구동한다

  delay(1000);


  // 역회전 구간

  int steps = 50;                // 스텝 수 지정(50X1.8=90)

  motor.step(-steps);          // 스텝수 앞에 '-' 기호를 붙이면 역회전 동작

  delay(1000);

}



▶ 실행 영상 : 





▶ 아두이노 소스 코드 다운로드 : 



반응형
반응형

 【 아두이노 기초 】 #31 스텝(Step Motor)모터의 이해


  이번 시간부터는 스텝 모터를 제어해 보도록 하자.  먼저 스텝 모터를 잘 이해하는 것이 필요 한데,  처음에는 구조나 개념 이해가 어려울 수 있겠지만, 앞으로 여러 번의 실습을 차근차근해본다면 이해하는데 많은 도움이 될 것이다.


▶ 스텝모터 외형과 구조


《 스텝모터의 실제 내부 구조 모습 





- 스테핑 모터는 펄스 모양의 전압에 의해 일정 각도 회전하는 전동기이다.

- 회전 각도는 입력 펄스의 신호의 수에 비례하고, 회전 속도는 입력 펄스 신호의 주파수에 비례한다.
- 스테핑 모터를 구동하려면 사용하려는 모터는 몇 상 모터인지? 어떤 여자 방식을 이용하여 동작시킬 것인지를 고려해야 한다
- 모터를 구성하고 있는 권선 수에 따라 한 펄스당 회전하는 회전각이 달라진다.
- 스테핑 모터의 회전은 A /A   ,   B /B  상을 연속적으로 인가하면 모터가 회전한다.
- 스텝 각이 1.8도인 모터에  펄스를 100개 인가하면 모터는 180도를 회전하게 된다.  (200펄스 → 360도 회전)
- 스텝 모터의 구동방식에는 유니폴라(uni-polar)바이폴로(bi-polar) 구동방식이있다.

- 구동방식을 분류하면, 하나의 상(코일: A /A)을 구동하는 1상 여자 방식과, 2상 여자 방식, 1-2상 여자 방식이 있다.



▶ 스텝모터 구동 원리 설명




《 DC 모터의 구조 》

스텝모터의 원리를 이해하기 위해서는 DC모터의 구조를 파악하여 무엇이 다른지 파악하면 도움이 된다. 

 아래 이미지는 DC 모터의 구조로서, 전원공급기(Power Supply)에서 브러시를 통해 전류가 N극과 S극이 있는 로터 코일로 흐르게 되면, 플레밍의 왼손법칙에 의한 방향으로 로터코일이 힘을 받아 회전하게 된다.  




《 스텝 모터의 구조와 원리 》

 DC 모터와 달리 스텝모터는 전자석의 기능을 이용하여 로터(모터 회전축)를 돌리는 구조다.  아래 이미지에서 4번 코일에 전류를 흘리면 S극의 성질을 띄게 되어(전자석의 원리) , 중심 회전축인 로터(그림상의 가운데 자석)의 N극이 당겨지게 된다.  (자석에서 N극과 S극은 서로 당기고, 같은 극끼리는 밀어내는 성질은 잘 알고 있을 것이다.)  

 이제 4코일에 흘리던 전류를 멈추고 3번 코일에 전류를 흘리면 다시 중심 로터축의 N극이 3번 쪽으로 회전을 하게 된다. 다시 연속해서 3번 쪽 전류를 멈추고 2번 코일에 전류를 흘리면 로터는 다시 2번 코일의 위치로 회전 할 것이다. 

이런 식으로해서  4 → 3 → → 1 회전을 하면 시계방향으로 회전하게 되고,   → 2 → 3 → 4 로 전류가 흐러면 반시계방향으로 회전하게 된다. 



 아래 차트는 각 코일의 신호(전류) 상태를 시간을(타이밍) 기준으로 나타낸 것이다.   4번에 신호(전류 흘림)가 있을 때는 3번, 2번, 1번 코일에는 신호(전류)를 보내지 않는다.  그리고 그 다음 타이밍에 4번에 신호(전류)를 빼고 3번에만 신호를 넣는다. 이런식으로 1번까지 신호를 넣고 나면 그 다음 타이밍에 다시 4번 코일에 신호를 넣는 식이다. 아래는 이것을 나타낸 표이며, 타이밍 차트라하고 표현한다.   또한 한번에 코일 하나에만 전류를 공급하기 때문에 싱글 코일 여자방식 이라고 말한다 (Single-coil Excitation)  



1. 풀스텝 구동 ( full step drive) 

  스텝모터 구동은 아래처럼 풀스텝 구동이 기본이다. 4-3번 코일에 전류를 인가하고(통상적으로 여자 또는 여기된다는 말로 사용됨) 다음 스텝에서는 3-2번이 여자되고, 다음스텝에서는 2-1번이 여자,  그리고 1-4번이 여자 되면서 한 바퀴 회전이 되는 구동방식이다.    



2. 하프 스텝 구동 ( half step drive)

 아래 이미지는 하프 스텝 구동 방식으로, 첫 스텝에 4번 코일이 여자 되고, 그 다음 스텝에는 4-3번 코일이 동시에 여자되면서 로터 회전축이 두 개의 코일 사이에 위치시킬 수 있게 되며, 다음 스텝에서 3번 코일에만 여자 상태를 유지시키면서 회전축을 완전히 3번 코일 쪽으로 회전을 시키게 된다.  

이런 방식으로 풀스텝을 반으로 나뉘어 회전각을 더 작게 (정밀하게) 회전시킬 수 있다.  이를 하프스텝 구동이라 한다.  


3. 마이크로 스텝 구동 ( Micro step drive)

 마이크로 스텝 구동은 기존 하프 스텝에서 더 나아가 두 개 코일의 힘(전류)의 균형을 조절하여 중심 회전축의 위치를 더 세밀하게 스텝을 줄 수 있는 방식이다. 

예, 4번 코일과 3번 코일의 힘(전류)을 50%씩 동일하게 줄 때는 중심회전축이 4번과 3번 코일 정중앙에 위치하게 되고, 4번 코일에 40% , 3번 코일에 60%를 유지하면 3번 코일쪽으로 약간 회전한 상태로 중심축(로터)을 위치시킬 수 있게 된다. 이런식으로 모터마다 정해진 각(예, 1.8도)을 극복하고 더 세밀하게 스텝각을 나뉘어 컨트롤 할 수 있게 되고 이를 마이크로 스텝 제어라 한다. 마이크로 스텝제어가 되면 진동 및 소음을 크게 줄일 수 있다.  

 아래 이미지에서 처럼 물리적인 1스텝 각이 1.8도 인 스텝모터가 있다고 할 때 통상적으로 2등분, 4등분, 8등분, 16등분 하여 더 잘게 스텝각을 등분 할 수 있다. 

 아래 표는 마이크로 스텝 제어 등분에 따라, 360도 1회전을 하기위해 필요한 스텝수를 표시 하였다. 


 아래 이미지나 스텝 모터의 실사 내부 이미지를 보면 코일이 여러개의 다발 형태로 구성되어 있다. 이런 형태이기 때문에 스텝 각이 1.8도로 매우 작은 스텝모터를 볼 수 있는 것이다.  





▶ 실습 목표 :  

 스텝모터를 정확히 1회전 반복 제어를 시켜보자. 360도 회전 구분을 위해 중간에 1초 정도 딜레이 타임을 주도록 한다. ( L293 모터 제어용 IC를 이용한다)


▶ 실습 회로도면 :

  (이미지 클릭하면 확대 가능)



 대부분의 6핀(케이블) 스텝 모터는 아래와 같은 코일의 구조와 케이블 순서를 가진다. 간혹 과거 오래전 제품의 케이블 색은 아래와 다를 수 있으나, 순서는 아래와 같다고 보면 된다.  스텝모터의 모델 넘버를 구글링하여 제품스팩자료를 찾아 확인 할 수도 있다.

L293D 모터드라이버 IC의 연결을 위해 아래 이미지를 참고 하라.


▶ 부대품 목록 : 아두이노 보드, 브레드 보드 


▶ 부품 목록    : 스텝 모터(NK243-01AT, 모터뱅크, 1.8˚) , L293D


▶ 실습 절차  : 

 1. 회로도를 참고하여 모터 와 부품들을 연결한다.
 
 2. 대부분의 스텝모터를 사용할 때는 아두이노 출력전원과 같은 단일전원 만으로는 스텝모터가 구동 되지 않는다. 따라서 추가 전원을 스텝모터에 따로 공급 해주어야 하는데, L293과 같은 모터 드라이버 IC를 사용하게 될 경우 추가 전원을 IC 8번 핀으로 공급해주면 된다.  (스텝 모터 마다 허용 공급 전원이 상이 함으로 허용 가능 전압을 확인 할 것, 본 실험에서는 5V를 입력함)

 3. 회로의 모든 GND(그라운드, '-' 단자)는 하나로 연결 한다. 



▶ 프로그램 (코드& 설명) : 


#include <Stepper.h>     // 스테핑 모터 라이브러리를 정의 한다

 int in1Pin = 12;            // [A] 상을 정의 한다

 int in2Pin = 11;            // [B] 상을 정의 한다

 int in3Pin = 10;            // [/A] 상을 정의 한다

 int in4Pin = 9;             // [/B] 상을 정의 한다

Stepper motor(200, in1Pin, in2Pin, in3Pin, in4Pin);

void setup() {

  pinMode(in1Pin, OUTPUT);  // [A] 상을 출력으로 지정한다

  pinMode(in2Pin, OUTPUT);  // [B] 상을 출력으로 지정한다

  pinMode(in3Pin, OUTPUT);  // [/A] 상을 출력으로 지정한다

  pinMode(in4Pin, OUTPUT);  // [/B] 상을 출력으로 지정한다

  motor.setSpeed(30);  // 스텝모터의 스피드 설정 함수 (RPM)

}

void loop() {

  int steps = 200;                // 스텝 수 지정(200X1.8=360)

  motor.step(steps);             // 지정된 스텝만큼 모터를 구동한다

  delay(1000);

}


※ 보충 설명

- 스텝핑 모터는 DC전압이나 전류를 모터의 각 상의

 단자에 펄스 형태로 입력 시켜 줌으로서 일정한 각도를 회전하게 하는 모터이다.

-  setSpeed 값을 변화 시켜보라
- 정방향 / 역방향을 번갈아 회전시켜보라  (역방향은 스텝수 앞에 '-' 기호를 붙여 넣으면 역방향으로 회전하게 된다)
- 아래 코드를 참고하여 시리얼 통신창으로 스텝 값을 직접 입력해서 제어해보라

void loop() {

  if (Serial.available())   {

    int steps = Serial.parseInt();

    motor.step(steps);

 

}

 

▶ 실행 영상 : 






▶ 아두이노 소스 코드 다운로드 : 



반응형