반응형

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

  지난시간 28BYJ-48 스텝모터와 ULN2003 드라이버 모듈을 가지고 버튼을 이용해 정방향, 역방향 제어를 해 보았다. (버튼1을 누르면 시계방향 1회전, 버튼2를 누르면 반시계방향 1회전)

 이번 시간에는 버튼을 누르고 있는 동안은 계속 회전을 하도록 프로그램을 변경해보자.  버튼을 짧게 누르든 길게 누르든 누르는 순간만큼만 정역 회전을 시켜보려는 것이다.  앞 실습의 내용과 프로그램은 거의 동일하고 두 부분만 변경하면 문제를 해결할 수 있다.  이번 프로그래밍의 동작원리를 이해하고 있다면 쉽게 해결할 수 있을 것이다. 


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

 



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





▶ 스텝모터 구동 원리 




▶ 기본 동작 원리 추가 설명 (ULN2003 제외하고)

(28BYJ28 스텝모터 부연 설명)

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

※ 색깔을 주의 깊게 보면서,  A → B → C → D의 순서대로 켜지도록 전류를 흘려주면 CW(시계방향),    D → C → B → A의 순서대로 흘려주면 CCW(반시계 방향) 으로 모터가 회전하게 된다. 



▶ 실습 목표 :  

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

버튼 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(1);  //1스텝 회전 명령(버튼을 계속누르고 있으면 계속회전) 

  }

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

   stepper.step(-1);//1스텝 역회전명령(버튼을 계속누르고 있으면 계속회전)

  }

}



▶ 실행 영상 : 





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



반응형
반응형

 【 아두이노 기초 】 #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)

  }

}




▶ 실행 영상 : 





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



반응형