[아두이노] [강좌] 41. 서보 모터 (2) - Servo 함수 알아보기
대망의 모터 시리즈 완결편. 두둥.
서보 모터도 스텝 모터와 마찬가지로 아두이노에서 라이브러리를 제공하고 있다.
스케치 툴의 “파일→예제→Servo→Sweep” 파일을 선택해보자. 기본 동작은 이전 강좌에서 구현한 예제와 동일하다. 0°에서 180°를 왔다 갔다 하는 것.
Servo→Sweep.ino |
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int pos = 0; // variable to store the servo position
void setup() { myservo.attach(9, 600, 2400); // attaches the servo on pin 9 to the servo object }
void loop() { for(pos = 0; pos <= 180; pos += 1) // goes from 0 degrees to 180 degrees { // in steps of 1 degree myservo.write(pos); // tell servo to go to position in variable 'pos' delay(15); // waits 15ms for the servo to reach the position } for(pos = 180; pos>=0; pos-=1) // goes from 180 degrees to 0 degrees { myservo.write(pos); // tell servo to go to position in variable 'pos' delay(15); // waits 15ms for the servo to reach the position } } |
서보 라이브러리를 사용하기 위해 “Servo.h” 파일을 추가했고, Servo 클래스 타입인 ‘myservo’라는 객체를 선언했다. 그리고 서보 위치를 저장하는 변수 ‘pos’를 선언한 후 0으로 초기화 해준다.
setup() 함수에서는 ‘myservo’ 객체를 초기화해주는 attach() 함수를 호출한다.
Servo.attach(pin)
Servo.attach(pin, min, max)
Servo 객체의 초기화 함수다.
매개 변수
pin : 신호를 출력할 핀 번호를 지정한다. 여기서는 9번 핀을 지정했다.
min : 최소 펄스 폭, 모터가 시계 반대 방향으로 최대한 이동했을 때의 신호 시간을 설정한다. 설정하지 않을 경우 기본으로 544 마이크로초가 설정된다.
max : 최대 펄스 폭, 모터가 시계 방향으로 최대한 이동했을 때의 신호 시간을 설정한다. 설정하지 않을 경우 기본으로 2400 마이크로초가 설정된다. |
min과 max 값은 줘도 되고 안 줘도 됨.
참고로 pin 번호는 스케치 툴 버전이 0016 이후라면 어느 핀을 지정해도 상관 없지만 이전 버전이라면 9번 핀과 10번 핀만 사용할 수 있다.
서보 라이브러리는 아두이노 메가(Mega 2560/ADK) 이 외의 보드인 경우 최대 12개의 모터를 제어할 수 있고, 메가의 경우는 48개까지 제어할 수 있다. 메가 이 외의 보드에서, 즉 우노(Uno) 등의 보드에서 서보 라이브러리를 사용할 경우 9번 핀과 10번 핀을 PWM 핀으로 사용할 수 없다. 동일한 타이머를 사용하기 때문에. 메가의 경우 서보 모터 개수가 12개 이하라면 PWM 핀과 상관없이 사용할 수 있고 12개 이상을 사용한다면 11번, 12번 핀을 PWM 기능으로 사용할 수 없다.
다시 예제 소스로 돌아가서.
그리고 loop() 함수에서는 for() 반복문을 사용하여 0°에서 180°까지 회전한 후 다시 0°로 돌아온다. 회전 각도 설정을 위해 사용된 함수는write() 함수.
Servo.write(angle)
서보 모터의 위치를 지정한다. 지정한 위치에 해당하는 신호가 핀으로 출력된다.
매개 변수
angle : 회전 각도. 일반 서보 모터의 회전 각도를 설정하지만, 서보 모터가 회전 가능한 서보 모터일 경우 90°에서 정지, 0°에서 최고 속도로 회전하며 180°에서는 반대 방향으로 회전한다. |
회전 가능한 서보 모터란, 서보 방식으로 제어되는 DC 모터 등을 말한다. DC 모터를 제어하기 위한 모터 드라이버 중에 서보 방식을 사용하는 애들이 있음. 얘들을 사용할 경우에 0을 주면 최고 속도로 회전하며, 180을 주면 반대 방향으로 최고 속도로 회전한다. 45를 주면 중간 정도의 속도로 회전하겠지.
Servo.writeMicroseconds(us)
서보 모터의 신호를 각도가 아닌 마이크로초 단위로 지정한다. 대부분의 서보 모터의 경우 1000 ~ 2000 사이의 값을 지정하면 된다.
매개 변수
us : 서보 제어 신호 폭(=시간). 마이크로초 단위.
|
Servo.detach()
Servo.attach() 함수로 설정한 핀으로 출력하던 신호를 중단하고 기능을 해제한다. 매개 변수는 엄슴.
서보 라이브러리를 사용할 때 Servo.write() 함수나 Servo.writeMicroseconds() 함수를 사용해서 신호를 출력하면 Servo.detach() 함수가 호출될 때까지 계속해서 출력된다는 것을 기억할 것.
아두이노 라이브러리는 참 잘 만들었어. 만든 사람 만나면 궁디 팡팡 해주고 싶다.
지난 시간에 설명한대로, 서보 모터는 특히 전류를 많이 필요로 하므로 꼭 외부 전원을 연결해주자. 서보 모터의 전원 핀에 외부 전원을 바로 연결해도 되고, 아두이노 보드에 외부 전원을 연결한 후 VIN 핀에서 모터 전원으로 연결해도 된다. 신호는 당연히 아두이노 핀이랑 연결하면 되고. 외부 전원의 GND와 아두이노 보드의 GND는 연결되어야 한다.
자, 모터 설명은 여기까지. 끝! 바바이.