[아두이노 강좌] 24. 전자부품 모터 알아보기 - DC모터, 서보모터, 스텝모터, 모터드라이버 사용하기

4657d577cad8c8644ff0a165489a9b94_1462809
 

 

4657d577cad8c8644ff0a165489a9b94_1462809 개요

 

이번 글에서는 전자부품 모터에 대해 알아보고, 다양한 모터들을 아두이노와 연결하여

사용해보도록 하겠습니다. 나중에 모바일 로봇을 만들기 위해 알아야할 기초 지식이니

꼭 알아두시길..!

 

4657d577cad8c8644ff0a165489a9b94_1462809

 

4657d577cad8c8644ff0a165489a9b94_1462809  모터란?

모터(Motor)는 사람으로 치자면 심장과 같은 역할을 담당하는 전자부품입니다. 전기 에너지를 

회전 혹은 직선 운동으로 변환시켜주며, 자동차, 선풍기, 로봇 등 다양한 곳에 사용되고 있습니다.

모터를 사용하기 위해서는 모터의 종류, 작동 전압, 사용 전류, 회전 방향, 제어 방식, 회전 속도,

회전 각도, 토크(회전력) 등을 고려하여 프로젝트에 적합한 모터를 골라야 합니다. 본문에서는

대중적인 모터(DC모터, 서보모터, 스텝모터)의 특징에 대해 알아보고 간단한 예제를 통해 모터를

직접 사용해보도록 하겠습니다.  

 

4657d577cad8c8644ff0a165489a9b94_1462810 

모터는 다른 전자부품에 비해 전류를 많이 사용하는편입니다. 그렇기 때문에 컴퓨터 USB 

혹은 9v 배터리를 통해 전원을 입력할 시 전류가 모잘라 모터가 작동하지 않을 수 있습니다.

모터를 작동시키기 위해서는 어댑터 혹은 6xAA배터리 홀더와 같은 수단을 통해 외부 

전원을 입력해줘야합니다. 이에 대해서는 각 예제를 진행할 때 언급하도록 하겠습니다.

 

4657d577cad8c8644ff0a165489a9b94_1462810
 

4657d577cad8c8644ff0a165489a9b94_1462810 DC모터 사용하기
 

DC모터는 DC(직류)전원으로 작동하는 모터를 말합니다. 선풍기나 RC카와 같이 빠르고

연속적인 회전이 필요할 때 사용합니다. DC모터는 (+)극과 (-)극에 전원을 입력하여 작동

시킬 수 있으며, 극을 반대로 연결하면 회전 방향을 바꿀 수 있습니다.

 

 

4657d577cad8c8644ff0a165489a9b94_1462810 회로도 연결


4657d577cad8c8644ff0a165489a9b94_1462810 

아두이노의 디지털 핀을 사용하여 신호를 출력할 경우 최대 허용전류가 약 40mA 밖에 

되지 않습니다. 그에 비해 모터는 약 200mA의 전류를 사용하기 때문에 디지털 핀으로 

모터를 제어하기에는 전류가 턱없이 모자릅니다. 하지만  (USB를 통해 전원을 입력할 

경우) 5V 전원 출력핀을 사용하면 최대 허용전류가 약 500mA정도 되기 때문에 모터의 

전원을 공급할 수 있습니다. 

 

5V 전원 출력핀을 통해 모터를 제어하고, 10K 가변저항을 연결하여 저항 값에 따라 모터의 

속도가 어떻게 변하는지 관찰해봅시다. (모터에 인가되는 전압이 낮을수록 모터의 회전수

(rpm) 또한 낮아지는걸 확인할 수 있습니다.)

  

 8495a8810bae33cf24fc5f62064deb13_1462844 

 

 

8495a8810bae33cf24fc5f62064deb13_1462844 서보모터 사용하기

 

서보모터(Servo Motor)는 PWM신호를 통해 회전을 제어할 수 있는 모터입니다. 내부는 

DC모터와 모터 드라이버 칩으로 구성되어있으며, 저항이나 엔코더를 포함하는 경우도

있습니다. 서보모터는 보통 0~180도의 회전각을 가지며, 펄스폭을 통해 정밀한 위치제어가

가능합니다. (펄스폭(비율)에 따라 회전 위치가 변합니다.) 동작 범위가 제한적이지만 힘이

강하고 정확한 위치 제어가 가능하여 로봇 관절이나 차량의 방향타 등 여러곳에 사용되고

있습니다. (360도 회전하는 서보모터도 있지만 아주 정밀한 위치제어는 어렵습니다.) 

 

본문에서 사용하는 서보모터는 SG90이라는 소형 서보모터입니다. 4.8~6v에서 작동하며, 

200mA정도의 전류를 사용합니다. 회전 각도는 0~180도 입니다. 

 

 

8495a8810bae33cf24fc5f62064deb13_1462844 회로도 연결

8495a8810bae33cf24fc5f62064deb13_1462844


서보모터는 보통 전원선(VCC,GND)과 신호선으로 이루어져있습니다. 아두이노의 5V와

GND를 통해 전원을 입력해주고, 신호선은 아두이노의 PWM핀(본문은 디지털9번)에 연결

해주도록 합니다.

  

8495a8810bae33cf24fc5f62064deb13_1462845

8495a8810bae33cf24fc5f62064deb13_1462844 프로그램 코드 (12)

#include <Servo.h>                      // Servo.h 라이브러리를 포함한다

Servo myservo;                            // 서보를 myservo로 정의한다

int pos = 0;                                  // 변수 pos를 생성하고 0을 대입한다


void setup() {

myservo.attach(9);                  // myservo의 핀을 9번으로 정의한다

}

 

void loop() {                                

for (pos = 0; pos <= 180; pos +=1) {      

// 반복문for (pos는 이다; pos는 180보다 작거나 같다; pos는 1씩 커진다

myservo.write(pos);      // myservo를 pos만큼 회전시킨다

delay(15);                     // 0.015초 동안 딜레이.

}

for(pos = 180; pos>=0; pos-=1) {     // 위와 비슷 ( -1씩 작아진다)

myservo.write(pos);              // pos가 반대로되므로 반대로 회전

delay(15);                              // 0.015초 동안 딜레이.

}

}


8495a8810bae33cf24fc5f62064deb13_1462845

8495a8810bae33cf24fc5f62064deb13_1462845 프로그램 해석

기본적으로 내장되어있는 Servo.h 라이브러리를 불러왔습니다. Servo.h 라이브러리는

myservo.write()라는 함수를 만들어 입력 값 만큼 서보모터를 회전시켜줍니다. 반복문

for()를 사용하여 pos의 값을 1씩 커지게, 또는 1씩 작아지게 하여 myservo.write()에 넣어

줌으로써 모터의 회전각이 1~180 ... 180~1로 변하게 됩니다. 위에서 사용된 서보모터 

관련 함수는 Servo.h 라이브러리가 없을 경우 사용하지 못합니다. (Servo.h라이브러리는

아두이노 통합개발환경 설치시 기본 내장되어있는 라이브러리입니다. 통합개발환경 - 파일

- 예제 확인)

 

8495a8810bae33cf24fc5f62064deb13_1462845


8495a8810bae33cf24fc5f62064deb13_1462845 스테퍼모터란?

 

스테퍼(스텝 혹은 스테핑)모터는 한 바퀴의 회전을 많은 수의 스텝들로 나누고 스텝을

제어함으로써 정확한 회전, 방향, 속도를 제어할 수 있는 모터입니다. 스텝모터는 보통

4개의 신호선으로 구성되어 있으며, 4개의 신호선에 각각 어떤 신호를 보내느야에 따라 

회전 방향 및 회전 스텝(각도) 등을 제어할 수 있습니다.


8495a8810bae33cf24fc5f62064deb13_1462846

앞에서 설명한 바와 같이 스텝모터를 포함해서 대부분의 모터들은 전류를 많이 잡아먹는

것은 기본이요, 구동 전압이 높은 경우도 있습니다. 스텝모터의 경우 전원 입력 뿐만아니라 

4개의 신호선을 통해 신호까지 보내줘야 제어가 가능합니다. 이런경우 우리는 모터드라

이버라는 전자부품을 이용하면 보다 편리하게 모터를 제어할 수 있습니다.

 

8495a8810bae33cf24fc5f62064deb13_1462846 

 

 

8495a8810bae33cf24fc5f62064deb13_1462846 모터드라이버

 

모터드라이버(Motor driver)는 모터의 제어를 도와주는 전자부품입니다. 예를들어 알아봅시다.


아두이노로 스텝모터를 제어하기 위해서는 어떻게해야할까요? 이 때, 스텝모터는 9V로 

작동하며 500mA의 전류가 필요하다고 가정합니다. 스텝모터의 신호선은 4개.

 

아두이노는 기본적으로 5v 시스템이기 때문에 9v를 다루지 않습니다. 이에 우리는 모터

드라이버와 외부전원 회로에 추가하여 스텝모터를 제어할 수 있습니다. 


8495a8810bae33cf24fc5f62064deb13_1462846

위 사진은 모터드라이버를 나타내는 사진입니다. VCC와 GND핀을 통해 외부전원 (9V)를 

연결하고, 양 옆의 신호선은 아두이노 디지털핀에 연결하여 HIGH 또는 LOW신호를 입력

받습니다. 입력된 신호는 화살표 표시된 위에 터미널블록쪽으로 출력되며, 터미널 블록

쪽에 모터의 신호선을 연결해줍니다.


블록쪽에 모터의 신호선을 연결해줍니다.

 

모터드라이버를 사용하기 위해서는 모터 드라이버의 구동전압과 신호선의 개수 등을

파악하여 나의 프로젝트에 적합한지 비교해봐야합니다.

 

8495a8810bae33cf24fc5f62064deb13_1462846


8495a8810bae33cf24fc5f62064deb13_1462846 스테퍼모터 사용하기

 

앞에서 배운내용들을 바탕으로 5V로 작동하는 스테퍼모터를 아두이노와 모터드라이버를

활용하여 제어해보도록 합시다.


8495a8810bae33cf24fc5f62064deb13_1462846 회로도 연결

8495a8810bae33cf24fc5f62064deb13_1462846

아두이노의 5V 출력핀을 통해 모터드라이버-모터의 전원을 공급해주고, 디지털 핀을 통해

스텝모터로 신호를 보내줍니다.


 8495a8810bae33cf24fc5f62064deb13_1462847


8495a8810bae33cf24fc5f62064deb13_1462847 프로그램 코드 (13)

int Pin0 = 8;

int Pin1 = 9;

int Pin2 = 10;

int Pin3 = 11;

int _step = 0;

boolean dir = true;// gre

void setup()

{

  pinMode(Pin0, OUTPUT);

  pinMode(Pin1, OUTPUT);

  pinMode(Pin2, OUTPUT);

  pinMode(Pin3, OUTPUT);

}

void loop()

{

  switch (_step) {

    case 0:

      digitalWrite(Pin0, LOW);

      digitalWrite(Pin1, LOW);

      digitalWrite(Pin2, LOW);

      digitalWrite(Pin3, HIGH);

      break;

    case 1:

      digitalWrite(Pin0, LOW);

      digitalWrite(Pin1, LOW);

      digitalWrite(Pin2, HIGH);

      digitalWrite(Pin3, HIGH);

      break;

    case 2:

      digitalWrite(Pin0, LOW);

      digitalWrite(Pin1, LOW);

      digitalWrite(Pin2, HIGH);

      digitalWrite(Pin3, LOW);

      break;

    case 3:

      digitalWrite(Pin0, LOW);

      digitalWrite(Pin1, HIGH);

      digitalWrite(Pin2, HIGH);

      digitalWrite(Pin3, LOW);

      break;

    case 4:

      digitalWrite(Pin0, LOW);

      digitalWrite(Pin1, HIGH);

      digitalWrite(Pin2, LOW);

      digitalWrite(Pin3, LOW);

      break;

    case 5:

      digitalWrite(Pin0, HIGH);

      digitalWrite(Pin1, HIGH);

      digitalWrite(Pin2, LOW);

      digitalWrite(Pin3, LOW);

메카리워즈 Image Map

기무띵 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 2016-11-18 (금) 22:51 3년전
구입한 교육용키트에는 서브모터가 하나로 붙어있는데요? 거기다 바늘같은거 안달려있습니다.
주소
     
     
라임 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 2016-11-28 (월) 22:04 3년전
하나로 붙어있다는게 무슨말씀이신가요??
주소

모바일 버전으로 보기