반응형

 【 아두이노 센서#1】  아두이노 센서 활용편

  이제 아두이노 기초부분은 지난번 아두이노 기초 격인, 37개의 강좌를 통해서 학습이 되었을 것이다. (혹시 아두이노 기초부문 학습이 필요하다면 여기 아두이노 기초강좌 부분을 먼저 살펴보면 좋을 것이다.  [ ☞ 아두이노 기초 강좌편 ] )


 이번 시간 부터는 본격적으로 센서를 가지고 아두이노를 활용해보려고 한다. 센세를 다룰 수 있게 되면 실생활에 바로 응용 가능한 작품들을 만들 수 있기 때문에  한 층 더 재미있게 학습할 수 있을 것이다. 


 앞으로 다룰 주요 센서 목록중에서 첫 시간으로 1. 적외선 센서를 다루어 보고자 한다.



 #1 적외선 센서( TCRT5000 ) 


▶ 실험에 사용되는 적외선 센서 자료 ( TCRT5000) 



 TCRT 5000은 적외선 방식이어서 적외선 센서로 불리지만, 가깝고 짧은 거리에 사용되기 때문에 근접센서라고 불리우기도 한다.


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


▶ 근접센서 동작 원리 



 주로 라인트레이서 등에 활용하기 좋은 TCRT 센서 이기 때문에 센서의 방향이 위의 이미지에서 처럼 아래로 향하게 된다. 

 적외선 신호는 색이 밝을 수록(흰색) 반사되는 성질이 있으며, 

 색이 어두울 수록(흑색) 반사되지 않는(흡수) 성질이 있다.

 사람은 가시광선의 신호만 눈으로 확인 가능하기 때문에, 가시광선 영역밖인, 

 적외선 신호 등은 사람의 눈으로 확인이 불가하다.  하지만, 카메라 렌즈는 이를 식별하기 때문에 휴대폰 카메라도 동작이 될 때 카메라 렌즈를 통해서 보면 붉으스름한 빛이 나는 것을 확인 할 수 있다.   다만, 최근의 휴대폰들은 사진 찍을 때 나타나는 적목현상(사진속 눈에 붉은점이 나타나는 현상) 제거를 위해 적외선 신호 제거 기능이 있어서 확인이 되지 않는다.


▶ 실습 목표 :  

 적외선 신호가 감지(반사)되면(DO 핀이 VCC(5V) → GND로 변화됨) 

LED를 켜는 실험을 해보자. 


▶ 실습 회로도면 :

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







▶ 실습 절차  : 

1. LED ‘+단자VCC 전원으로 연결하고 ‘–단자를 센서의 Do   (Digital Out) 단자에 연결한다.

2. 센서에 물체가 감지 되면 Do핀이 0V(GND)가 되고, 감지 LEDOn 
 된다. 물체가 감지 되지 않으면 VCC가 출력된다.

3. , 별다른 프로그램 없이 아두이노 전원 만을 이용하여 LED를 작동
 시킬 수 있는 회로이다.



▶ 실행 영상 : 









반응형
반응형

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

  }

}




▶ 실행 영상 : 





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



반응형
반응형

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

 

}

 

▶ 실행 영상 : 






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



반응형
반응형

【 아두이노 기초 】 #30 서보(Servo) 모터 제어 하기 응용

 지난 시간(http://rasino.tistory.com/147)에는 서보 모터를 정방향과 역방향 180도 회전제어를 해보았다. 

  이번 시간에는 빛에 따라 저항값이 변하는 CDS(광도전셀)를 이용해서 빛에 따라 서보모터를 제어 해보도록 하자.  이를 이용하면 매우 간단하게 빛에 따라 도어를 개폐하는 등의 작업이 가능하다. 



▶ SG90 및 각종 서보 모터 


《 SG90 》

《 HS311FS5106R 》

《 FS5106R - 무한 회전 서보 모터 》






▶ 실습 목표 :  

 CDS를 이용하여 빛의 밝기에 따라 서보모터를 0˚ 에서 180˚ 회전 시켜 본다.


▶ 실습 회로도면 :

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








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


▶ 부품 목록    : 서보모터(SG90), CDS, 저항(220Ω)


▶ 실습 절차  : 

 1. 회로도를 참고하여 모터 와 부품들을 연결한다.
 
 2. CDS는 실습 상황에서는 크기(용량)는 상관 없으니 구할 수 있는 것을 사용한다.

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

 4. 회로에 서보모터 두 개 이상을 연결할 때는 아두이노 전원 만으로는 충분치 않으므로 외부 전원을 모터 전원선(+적색선, -흑색선) 에 직접 인가해야 정상적으로 동작 될 것이다. 






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


#include <Servo.h>

#define  ServoPin 9                      //  서보모터 연결할 핀 설정

Servo myservo;

int Angle = 0;

void setup() {

  myservo.attach(ServoPin);      

  Serial.begin(9600); 

}

void loop() {

  val=analogRead(TEMP); 

  int Val_light = analogRead(A0); // CDS로부터  전압 값  받아서 저장

  Serial.println(Val_light);

   Angle = map(Val_light, 1,42, 0, 180);  // 실 측정값으로 맵핑

   myservo.write(Angle);

   delay(50);                              // 서보모터가 동작하는 시간을 기다려 줌

}   


※ 보충 설명

1. CDS는 빛이 최대로 들어 올 때 저항 값이 ‘0’에 가깝고, 가장 어두울 때 저항 값을 무한대로 

가지는 소자다.

2. CDS와 저항에 인가되는 5V 전압 값으로부터, 빛의 밝기에 따른 CDS
저항 값의 변화로 인해 ‘A0’포트로 입력되는 전압이 조절 된다.

 

▶ 실행 영상 : 





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



반응형
반응형

【 아두이노 기초 】 #29 서보(Servo) 모터 제어 하기 2


 지난 시간(http://rasino.tistory.com/146)에는 서보 모터를 한 방향으로만 180도를 움직여 보았다.  명령에 의해 180도가 움직인 후에는 반복 루프문에 의해 자동으로 0도 위치로 되돌아 온 후, 다시 180도로 제어되는 모습을 보았다.  


 이번 시간에는 서보모터의 자동 감김이 아니라 반대방향으로도 제어를 해볼 것이다.  즉 처음 시계방향으로 180도 회전 후,  다시 반시계방향으로 180도 회전하도록 프로그래밍을 해보자. 



▶ SG90 및 각종 서보 모터 


《 SG90 》

《 HS311FS5106R 》

《 FS5106R - 무한 회전 서보 모터 》






▶ 실습 목표 :  

 서보 모터를 0˚ 에서 180˚ 회전 시킨 후 다시 반대방향으로 180˚ 회전 하도록 프로그래밍 해보자.


▶ 실습 회로도면 :

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


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


▶ 부품 목록    : 서보모터(SG90), 전해 콘덴서 (10uf~100uf )-생략 가능


▶ 실습 절차  : 

 1. 회로도를 참고하여 모터 와 부품들을 연결한다.
 
 2. 회로의 콘덴서는 생략 가능하며 일반적으로 모터류에 콘덴서를 달면 노이즈 제거(세라믹 콘덴서) 효과와, 전원보충(전해 콘덴서)의 효과가 있어 달게 되나, 간단한 실험을 위해서는 달지 않아도 실험에는 크게 지장이 없다. 

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

 4. 회로에 서보모터 두 개 이상을 연결할 때는 아두이노 전원 만으로는 충분치 않으므로 외부 전원을 모터 전원선(+적색선, -흑색선) 에 직접 인가해야 정상적으로 동작 될 것이다. 




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


#include <Servo.h>    // 전용 서보 라이브러리 사용

#define servoPin 9     // 서보 모터핀을 지정

Servo servo;      // 서보라이브러리 변수를 초기화한다

int angle=0;        // 서보모터 각도 변수 설정과 위치를 0˚ 초기화


void setup() {

  servo.attach(servoPin);   // 서보모터 핀을 설정한다 (현재 9번 핀)

}


void loop() {


  for ( angle=0;  angle < 180; angle++)  {  // 0도~180도 까지 1도씩 증가 

      servo.write(angle);   

      delay(30);       // 서보 모터의 각도가 변하는 것을 기다려준다

  }


  for ( angle=180;  angle > 0; angle--)  {  // 180도~0도 까지 1도씩 감소

      servo.write(angle);   // 서보모터의 각도 증가

      delay(30);       // 서보 모터의 각도가 변하는 것을 기다려준다

  }

}


※ 서보 모터는 입력 되는 신호의 펄스 폭에 따라 회전의 각도가 정해지는 방식의 모터이다. 위 그림 처럼 1.0ms에 가까울 수록 좌측 끝의 각도로 움직이고, 2.0ms에 가까울 수록 우측 끝으로 회전하게 된다. 1.5ms 이면 가운데 위치하고, 그 사이 사이 펄스 값에 따라 해당 위치로 회전을 하게 되는데, 1.0ms~2.0ms 타이밍이 정확히 일치 하는 것은 아니니 회로를 구성해놓고 실험을 통해서 확인 하면 되겠다. 

 

▶ 실행 영상 : 






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



반응형