본문 바로가기

아두이노(arduino)

아두이노 서보모터란? 서보모터 제어하기

서보모터(Servo motor)란?

모터는 우리가 흔히 많이 들어본 용어입니다. 모터가 사용되는 기계들이나 주위에서 흔히 볼 수있지요. 그럼 서보(Servo)란 말은 무얼 뜻할까요?

 

최초 노비(servur)의 뜻에서 유래되었습니다. 노비는 주인의 말을 충실히 따라야 했습니다.  그래서 

 

원하는 명령대로 움직이게 한다라는 뜻이 함축되어 있습니다.



 

 

 

정확히 말하면 서보메커니즘( 원하는 명령대로 움직이게 하는 원리)이라고 이야기하며, 우리가 여기서 아두이노로 혹은 제어기로 다루는 서보모터는

 

빙글 빙글 회전만 모터가 아닌 입력된 정보만큼 정확하게 움직이는 모터라고 이야기할 수 있습니다. 그래서 위치를 제어하기 위한 모터라고 많이 이야기 합니다. 

 

예 : 45도의 각도만큼 시계 방향으로 위치제어

 

제어기를 통해 위와같은 명령을 내리면 서보모터는 해당 각도까지 움직인뒤 멈추게 됩니다.

 

장난감 자동차의 조향장치(앞바퀴 방향제어)부터 공장에서 사용되어지는 로봇팔까지 서보모터는 사회전반 곳곳에서 사용되어지고 있습니다. 

 

 

 

 

서보모터 사용전 준비

 

1. 서보모터 라이브러리 - Servo.h

 

 

아두이노 ide 스케치 프로그램에서는 기본적으로 서보 라이브러리가 포함되어있으니 별도로 다운받지 않으셔도 되고 혹시나 라이브러리가 없으신분은 

 

 

스케치 >>> 라이브러리 포함하기 >>> 라이브러리 관리>>> 라이브러리 매니저에서 Servo 검색 >>> 설치 완료

 

 

 

 

 

 

 

 

 

라이브러리를 사용함으로서 우리는 좀더 손쉽게 모터를 제어할 수 있습니다. 

라이브러리(함수가 들어 있는 주머니, 혹은 박스같은 개념입니다.)

 

 

2. 서보모터 제어할때 사용하는 함수

 

Servo.attach(핀번호);

 

핀번호 -  아두이노에 연결된 핀

 

Servo.write(각도);

 

각도 - 모터에 따라 다르지만(180도 이상 서보도 있음) 보통 0~ 180도까지 제어 

 

Servo.detach();

 

해당 함수를 사용하게 면 핀의 연결을 해제하여 동작을 멈추게 합니다.

 

 

 

 

 

서보모터 제어해보기

우선 연결을 해볼까요??

 

 

서보모터의 갈색선은 아두이노의 gnd, 가운데 선인 적색선은 아두이노의 5v, 나머지 하나 주황색은 아두이노에 연결된 핀번호 (필자의 경우 10번)에 연결해줍니다. 

*참고 -  서보모터의 제조사에 따라 연결하는 회로도가 다를 수 있으니 반드시 소지하고 계신 서보모터의 결선방법을 확실히 알고 연결하셔야 합니다. 그렇지 않을 경우 모터가 망가지거나, 화재가 발생할 수도 있습니다. 

 

 

 

 

 

 

코드를 작성해볼까요?

 

#include <Servo.h>   // 서보모터를 제어하기 위한 함수를 사용하기 위해 라이브러리 선언

 

int Servo_pin = 10;    // 아두이노에 연결된 핀번호 설정

 

Servo myservo;         // servo 객체 생성 (집합형 변수)

 

void setup() {

 

}

 

 

void loop(){   

 

       myservo.attach(Servo_pin);   // 아두이노에 연결된 서보모터 핀을 연결한다.

 

       myservo.write(0);                // 서보모터를 0도로 움직인다.

 

       delay ( 1000);                  //서보모터가 0도까지 움직일 수 있는 시간을 줍니다.

 

       myservo.write(180);        // 서보모터를 180도로 움직인다. 

 

       delay(1000);                 // 서보모터가 180도로 움직일 수 있는 시간을 줍니다. 

 

}

 

 

 

 

잘 동작하는지 확인해볼까요?

 

 

 

 

1 초 단위로 0도에서 180~ 180도에서 0도로 반복하는 모습을 볼 수있습니다.

 

 

 

 

덧붙이는 글.  - 서보모터 속도제어하기

 

 

 

영상에서 볼수 있듯이 서보모터의 속도는 일정합니다. 하지만 서보모터의 속도를 변경해줄 수 없을까요?

 

c언어 문법중 for()문을 이용하면 간단하게 서보모터의 속도를 제어할 수 있습니다.

 

 

void loop(){

 

     for( int angle = 0; angle <=180; angle ++){   // 0도에서 180도까지 1도씩 움직인다. 

 

     myservo.write(angle);  

     delay(30);       // 1도씩 움직이는 시간 (0.03초)

 

     }

 

     for(int angle = 180; angle >=0; angle --){    // 180도에서 0도까지 1도씩 움직인다. 

 

     myservo.write(anlge);

     delay(30);  // 1도씩 움직이는 시간 (0.03초)

     }

}

 

어떻게 움직이는 지 볼까요??

 

 

 

 

 

그럼 이번엔 delay(30)이 아니라 delay(100)으로 바꿔서 다시 테스트 해보겠습니다.

 

 

 

 

 

어떤가요? 

 

속도가 더 느려진 모습을 볼 수 있습니다.

 

여기서 delay( 시간 )   시간이 늘어난다고 모터의 속도가 빨라지는 것이 아닙니다. 모터가 1도 움직일때 필요한 시간이니 오히려 모터가 움직이는 시간이 더 느려지게 됩니다.

 

오늘은 간단하게 아두이노로 서보모터를 제어해봤습니다.

 

다음엔 다른 방법으로 서보모터를 제어해보는 시간을 가져보겠습니다.