본문으로 바로가기

보 모터(Servo Motor)


서보 모터는 일반 모터와는 다르게 회전이 정해져 있기 때문에 정확한 움직이 필요한 경우에 사용하는 모터이다. 서보 모터란 별도로 존재하는 모터가 아닌 서보(따른다 : 사용자의 명령에 따른다.)라는 기술이 적용되어 사용자가 원하는 각도, 속도로 움직임이 가능한 것이다. 서보모터는 로봇, 장난감, 드론, CCTV 등에서 광범위하게 쓰이고 있다.

우리가 사용하는 서보모터는 SG90이라는 서보모터이며 이는 수많은 제조사가 제작하고 있으므로 굉장히 저렴하지만 0~180도까지만 회전이 가능하다는 단점도 있다.


서보 모터 사용방법


SG90Servo.pdf

데이터 시트를 참고해 보면 PWM을 사용하여 서보 모터를 제어할 수 있다. 서보모터의 펄스폭은 1ms ~ 2ms의 범위를 가지며 1ms 일때 0도, 2ms일때 180도를 나타낸다. 그러므로 1.25ms일 때 45도, 1.5ms일 때 90도라는 것을 유추할 수 있다. 

위와 같은 방법은 보다 Servo라이브러리를 사용하면 좀 더 편하게 서보 모터를 제어할 수 있다. 이번 실습에서는 Servo라이브러리를 사용하여 서보모터를 제어해 볼 것이다.

Servo.zip

Servo라이브러리는 위 파일을 다운 받고, 라이브러리를 추가하는 방법은 아래 링크를 참고하기 바란다.

http://codingrun.com/100


서보 모터 핀 색상 구분


서보모터는 3개의 단자가 있다. 서보 모터에 따라서 색상이 다른 경우가 있으니 위 사진을 참고하기 바란다.

주황색(황색 or 흰색) : 데이터핀

빨간색 : VCC

갈색(검은색) : GND


실습 내용


시리얼모니터를 통해 '1'을 입력하면 서보모터가 30도씩 회전하며, 180도가 되었을 땐 다시 0도로 돌아오게 한다. '1'이외의 값이 입력되면 0도로 초기화한다.


준비물


아두이노 보드, 브레드 보드, 점퍼선 3개, 서보모터 1개


회로도




소스 코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include<Servo.h> //Servo 라이브러리를 추가
Servo servo;      //Servo 클래스로 servo객체 생성
int value = 0;    // 각도를 조절할 변수 value
 
void setup() {
  servo.attach(7);     //맴버함수인 attach : 핀 설정
  Serial.begin(9600); //시리얼 모니터 사용 고고
}
 
void loop() {
  if(Serial.available())      //시리얼 모니터에 데이터가 입력되면
  {
    char in_data;             // 입력된 데이터를 담을 변수 in_data
    in_data = Serial.read(); //시리얼모니터로 입력된 데이터 in_data로 저장
    if(in_data == '1')        //입력된 데이터가 1이라면
    {
      value += 30;            //각도를 30도 증가시킨다.
      if(value == 180)        //각도가 180도가 되면 (150도보다 커지면)
        value = 0;            //각도를 0으로 초기화
    }
    else                      //그외의 데이터가 입력되면
      value = 0;              //각도를 0으로 초기화
      
    servo.write(value); //value값의 각도로 회전. ex) value가 90이라면 90도 회전
  }
}
cs

ex10_Servo.ino


결과 영상