본문 바로가기
아두이노

5.2 서보모터 제어하기

by Beijing_KingGod 2019. 12. 18.

[Micro Servo motor SG-90]

servo모터는 자체적으로 속도 조절을 할 수 있어 속도를 정밀하게 통제할 수 있는 모터 시스템으로 내부에 컨트롤러를 이용하여 어느 정도 회전했는지 센싱하고 입력 받은 값만큼 회전시켜주는 기능을 가지고 있다.

 

Servo 모터 구성

Servo모터는 보통 전원부 Vcc, GND, Servo모터를 제어할 수 있는 총 3개의 핀으로 구성되어 있다. 이 제어용1핀에 PWM파형을 입력해서 Servo모터를 제어한다.

 

Servo 모터 동작 원리

제어 핀에는 20ms가 주기이고 펄스폭이 1~2ms되는 pwm파형을 보내주어 서보모터를 제어 할 수 있다.

 

위의 그림처럼 펄스폭에 따라 서보모터가 제어되게 될 것이다.

 

 

아두이노에 Servo모터 연결하기

전원부와 GND부분은 그대로 연결하되 제어용 핀은 PWM출력이 가능한 포트에 연결한다.(~표시가 있는 부분이 PWM 가용 포트이다.)

[서보모터 배선도]

 

[서보모터 회로도]
[서보모터 회로구성]

#Servo 모터 모듈 연결 방식

 

Servo 모터

아두이노

 

연결 핀

검은색 선

GND

빨간색 선

5V

주황색 선

디지털 핀

 

예제

라이브러리에 Servo.h 파일이 있는지 확인한다.

[서보모터 예제 프로그램]

Servo.myservo; 서보모터의 변수를 지정하는 함수이다. 우리가 앞서 흔히 썼던 int와 비슷한 역할을 한다고 보면 된다( int = myservo servo.myservo)

myservo.attach(9);9번 포트를 서보모터 전용 포트로 사용하겠다는 함수이다.괄호에 사용할 PWM포트 번호를 입력한다.

myservo.write(180); 서보모터 각도제어 함수이다. 괄호에 원하는 서보모터 각도를 입력한다.(0도에서 180도까지)

 

이 방법은 단순히 서보모터의 각도를 조절하는 것이다. 서보모터의 회전 각도뿐 아니라 속도를 좀 더 정밀하게 제어하기 위해서는 다른 방법이 필요하다.

 

 

예제2

 

예제3

 

위의 예제들은 for문을 이용하여 각도나 회전 시간을 조금 더 정밀하게 제어하는 방법이다.

for문이 실행되는 과정을 살펴보면 서보각의 변수인 angle의 초기값을 0으로 설정 한 후 증가량을 조작하여 서보모터가 한번 움직이는 각도를 조절하였다. 또한 delay함수를 조절하여 서보모터가 돌아가는 시간 또한 조절을 할 수가 있다. 이처럼 for문 내부의 조건문과 delay 조작을 통해 서보모터가 돌아가는 시간, 각도의 정밀 제어가 가능하다.

 

예제4

다음 예제에서는 시리얼모니터를 이용하여 서보모터의 각도를 제어한다.. 시리얼모니터를 사용하므로 다른 하드웨어구성은 필요하지 않다.

 

[프로그램]

 

실행결과

[시리얼모니터]

위 사진처럼 원하는 각도를 입력하면 그 숫자만큼 서보각이 조절된다.

 

 

 

 

 

 

 

 

 

 

 

 

/*여러개의 서보모터를 제어할 경우 아두이노에서 나오는 전류만으로는 부족할 수 있다. 이 경우 배터리등을 이용하여 서보모터에 추가전원을 입력해주어야 한다.*/

'아두이노' 카테고리의 다른 글

7. 블루투스 통신  (0) 2019.12.18
6 인터럽트& 타이머  (0) 2019.12.18
5.1 DC모터 제어하기  (0) 2019.12.18
4.3 아두이노 아날로그 출력  (0) 2019.12.18
4.2 아두이노 아날로그 입력  (0) 2019.12.18

댓글