2015년 5월 29일 금요일

아두이노 servo 라이브러리로 서보 모터 제어하기

 Servo 라이브러리는 서보 모터(servo motor)의 제어를 위한 객체를 정의한 것이다. 서보모터는 R/C카의 조향장치나 마이크로로봇의 구동장치로 쓰이는 모터로서 신호선 한 가닥으로 0도~180도의 각도를 조절할 수 있는 것이다.
[그림 1] 서보 모터의 외형
그림에서 보듯이 전원선인 Vcc/GND와 신호선 세 가닥이 인터페이스의 전부이다. 모터축의 각도는 신호선으로 인가되는 펄스폭으로 조정된다.
[그림 2] 서보 모터의 신호선으로 인가되는 펄스(pulse)
[그림 2]에 서보모터의 신호선으로 인가되는 펄스를 도시하였다. 주기 B는 3ms~20ms 의 범위를 가지며 주기가 짧을 수록 모터축의 회전 속도가 빨라진다. 펄스의 폭 A는 1.5ms 일때 중심각도인 0도를 가리키게 되고 1ms(최소값 0.7ms)일때 –90도, 2ms(최대값 2.3ms)일 때 +90도를 갖는다. 즉, 이 펄스폭을 조절하여 –90도에서 90도 사이의 원하는 각도를 가지도록 제어할 수 있는 것이다.

 아두이노의 Servo 라이브러리는 이러한 펄스를 발생시키는 기능을 구현하고 있으며 사용자는 세부 동작 원리를 알지 못하더라도 라이브러리 함수를 사용하는 방법만 알면 서보모터를 제어할 수 있다. 생성자는 입력인수가 없는 것 하나이며 멤버함수로 다음과 같은 것들이 있다.

  • void attach(pin) : 서보모터의 신호선이 연결된 핀을 지정한다.
  • void attach(pin, min_us, max_us) : 펄스폭 A의 최소, 최대값까지 지정한다.
  • void write(angle) : 각도를 지정한다. (angle: 0~180)
  • void writeMicroseconds(us) :펄스폭 A를 us단위로 지정한다.
  • int read() : 현재 각도를 읽는다.반환값은 [0, 180]의 정수.
  • boolean attached() : 서보모터 핀이 지정되어 있는지 검사한다.
  • void detach() : 서보모터의 지정된 핀을 내부적으로 제거한다.
실험에 사용된 서보모터는 SG-90이라는 초소형 모터이다.
[그림 3] SG-90 초소형 서보 모터

첫 번째 예제

 첫 번째로 서보모터를 설정하고 중심각도를 유지하는 간단한 예제를 작성해 보자.
#include <Servo.h>
Servo sm;
void setup() {
   sm.attach(9); //9번 핀에 서보모터의 신호선을 연결
   sm.write(90); //90도(중심각) 각도로 회전
}
void loop() {
}

두 번째 예제

 두 번째로 서보모터 축이 0도에서 180도로 계속 왕복 운동을 하도록 프로그램을 작성해 보자.

#include <Servo.h>
Servo sm;
void setup() {
   sm.attach(9); //9번 핀에 서보모터의 신호선을 연결
}
void loop() {
   sm.write(0); //0도로 회전
   delay(2000);
   sm.write(180); //180도로 회전
   delay(2000);
}

 이와 같이 servo 라이브러리를 사용하면 간편하게 디지털 핀 하나를 이용하여  서보 모터를 제어할 수 있으며 동시에 다수의 서보 모터를 제어하는 것도 가능하다.


댓글 없음:

댓글 쓰기