반응형

【 아두이노 기초 】 #23

 서보 모터 제어 1

 이번 시간은 서보 모터를 구동해 보는, 실습 첫 시간을 가져본다. 

서보(Servo) 모터는 "따른다, 추종한다"라는 의미의 이름을 가진 모터로, 시스템이 요구하는 특정 위치로 정확하게 이동하기에 적합한 모터이다. 

 선풍기, 믹서기에서 처럼 특정위치 제어가 불필요하고 한방향으로 일정하게 회전시키면서 사용자가 켜고 끄는 제어를 위해서는 DC모터를 사용한다. 

 그러나, 프린터의 헤드, CCTV 카메라, 캠코더와 같은 내부 명령에 따라 특정 위치와 속도를 제어하기 위해서는 이런 서보모터를 사용하게 된다. 

▶ Servo 모터 제어 회로도 :

 

 1. 서보 모터 동작 원리 설명 

 서보 모터는 아래 처럼 펄스의 폭을 이용해 제어(PWM 신호)를 하게 되는데, 펄스폭이 1.0 ms 이면 모터 회전축의 위치가 제일 좌측에 위치하고, 1.5ms 이면 가운데, 2.0ms 이면 제일 우측에 위치하는 특성을 가진 모터이다. 

또한 그 사이의 시간값에 따라 각각 위치하게 된다. 다만, 제조회사별 모터의 종류와 연결된 회로 및 프로그램에 따라 시간값의 범위에 변동이 있을 수 있다. 

 

  아래 프로그램에서는 이런 위치에 대한 제어 코드가 보이지 않는데, 이는 프로그래밍을 간편하게 작성 하도록 하기위해 다음과 같은 함수를 사용하기 때문이다. 

 "servo.write(angle) " 

 : angle에 각도 값을 넣어 주면 해당하는 각 위치로 회전축이 회전한다. 이 함수를 사용하기 위해서는 <Servo.h> 헤더파일을 선언하여 사용해야 한다. 

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

▶ 부품 목록    :  Servo 모터, 전원을 보강해줄 콘덴서 100 ㎌ 이상 아무거나

▶ 실습 절차  : 
 1. 위 회로도를 참고하여 모터 와 부품들을 연결한다. 
 2. 서보 모터는 세개의 라인이 있으며, +,- 전원 라인과, 제어를 위한 하나의 신호 라인으로 구성 되어 있다. 전원라인은 아두이노의 +5V 와 GND 단자에 연결하고, 신호라인은 PWM 신호 출력이 가능한 디지털 포트에 연결한다.
( 위 회로에서는 9번핀 보통 "~" 이 그려져 있는 포트가 PWM 신호 출력이 가능한 단자를 표시한 것이다.  )

 3. 위 회로에서 콘덴서는 반드시 달아주어야 하는 것은 아니나, 대개 모터가 연결 된 회로에서 모터의 출력을 보완해 주는 용도로 콘덴서를 전원라인에 연결해주는 것이 일반적이다. 

 
 4. 아래 프로그램 코드를 작성해서 실행해 본다.

▶ 실습 목표  : 

  1. 서보모터를 180도 회전 시켜 본다(위치가 180도 가 되면 자동으로 원위치 함)

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

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

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

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

int pos=0;        // 현재 각도를 저장할 변수를 지정한다

void setup() {

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

}

void loop() {

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

  {      servo.write(pos);       // 서보모터의 각도를 1씩 증가

    // 서보 모터의 각도가 변하는 것을 기다린다.  0.015초 시간 지연한다

      delay(50);

  }

}

 

▶ 실행 영상 : 

※ 프로그래밍에 의해 '180도' 에 다다르면, 자동으로 '0도' 로 회전하는 특성이 있다. 

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

sketch_ServoMotor.ino
다운로드

반응형