Mechanic 공방

17. 아두이노 서보 모터 실습 (1) 본문

아두이노 (Arduino)

17. 아두이노 서보 모터 실습 (1)

H-Mechanic 2020. 8. 22. 14:12
728x90
반응형

이번 포스팅에서는 서보 모터를 활용한 실습을 진행해보고자 한다.

 

서보 모터는 스텝 모터와 비슷한 기능을 담당하고 있지만 그 원리는 다르다.

 

두 모터 모두 특정 각도 제어에 용이한 모터이긴 하지만, 서보 모터의 경우 전압에 따라 각도를 제어하기 때문에 정확도 측면에서는 스텝 모터에 비해 떨어진다는 단점이 있다.

 

반면에 스텝 모터의 경우 주어지는 전압의 펄스에 따라 각도를 제어하기 때문에 정확성이 훨씬 더 뛰어나다는 장점이 있다.

 

결과적으로 스텝 모터의 경우 정밀 가공 장비, 3D 프린터 등 정밀한 제어가 필요한 장치에 많이 사용된다.

 

본 포스팅에서는 아두이노 키트에 기본 구성품으로 포함되어 있던 서보 모터를 사용하여 제어를 실습해보고자 한다.

 

[회로도]

회로도는 아래와 같다.

 

서보 모터에는 총 3개의 핀이 필요하다.

 

VCC, GND, 신호선이 각각 필요하다.

 

본 실습에서 사용하는 서보 모터의 경우 5V의 전압을 사용하며, datasheet는 아래 페이지에서 볼 수 있다.

http://www.ee.ic.ac.uk/pcheung/teaching/DE1_EE/stores/sg90_datasheet.pdf

※아두이노를 사용한 실습을 진행할 때, 되도록이면 사용하고자 하는 부품의 정식 datasheet를 먼저 찾아놓은 뒤 수행하는 것이 큰 도움이 될 수 있다.

[코드 설명]

#include <Servo.h>

int servo_pin = 8;
int ang_max = 181;
int ang_init = 0;
int ang;

Servo servo;

void setup() {
    servo.attach(servo_pin);
    servo.write(ang_init);
}

void loop() {
    for (ang = ang_init; ang <= ang_max; ang++) {
        servo.write(ang);
        delay(10);
    }

    for (ang = ang_max; ang >= ang_init; ang--) {
        servo.write(ang);
        delay(10);
    }
}

본 실습에서는 기본적인 서보모터 제어를 해보는 것을 위주로 하였다.

 

아두이노에서는 서보모터를 제어하기 쉽도록 헤더 파일을 제공한다.

 

코드 상단 부분과 같이, ‘#include’ 구문을 사용하여 ‘Servo.h’라는 이름의 헤더 파일을 불러온다.

 

불러온 헤더 파일을 사용하기 위해서는 ‘Servo’라는 클래스의 이름을 새로운 변수명으로 선언해주어야 코드 내에서 직접 사용이 가능하다.

 

본 코드에서는 ‘servo’라는 이름의 변수로 선언해주었다.

 

Setup() 부분에서는 서보모터를 제어할 아두이노 핀을 선언해주기 위하여 ‘servo.attach()’라는 구문을 사용해주었다.

 

추가적으로 코드가 시작할 때 서보모터의 위치를 원점으로 조정하기 위하여 ‘servo.write()’라는 구문을 사용하여 0도로 초기화시켜주었다.

 

위에서 알 수 있듯이 서보 모터를 특정 각도로 구동시키기 위해서 사용하는 함수가 ‘servo.write()’임을 알 수 있다.

 

아래 loop() 부분에서는 0도에서부터 180도까지 순차적으로 모터를 돌리고, 다시 거꾸로 0도로 돌리는 동작을 하도록 코드를 작성하였다.

 

각 for문 마지막에 delay(10) 만큼을 넣어준 이유는 서보모터의 동작 속도를 조금 느리게 하여 눈으로 직접 확인할 수 있도록 하기 위함이다.

 

[동작 영상]

위 코드가 정상적으로 업로드 되었다면 아래와 같은 동작을 볼 수 있다.

 

 

이번 포스팅에서는 서보 모터가 돌아갈 수 있는 모든 각도에 대한 동작을 확인해보았다.

 

다음 실습에서는 원하는 각도를 입력 받았을 때 움직일 수 있도록 하는 예제를 실습하도록 하겠다.

728x90
반응형