본문으로 바로가기

보 모터(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 == 210)        //각도가 210도가 되면 (180도보다 커지면)
        value = 0;            //각도를 0으로 초기화
    }
    else                      //그외의 데이터가 입력되면
      value = 0;              //각도를 0으로 초기화
      
    servo.write(value); //value값의 각도로 회전. ex) value가 90이라면 90도 회전
  }
}
cs

ex10_Servo.ino


결과 영상






댓글을 달아 주세요

  1. 구름이 2017.04.28 18:29 신고

    많이배워갑니다~

  2. ㅁㄴㅇ 2017.07.21 02:47 신고

    각속도는 따로 제어가 가능한가요?

  3. jamie0202 2017.08.09 19:41 신고

    이상하게 1을 입력하면 무한회전을 하네요 ㅠㅠ

  4. 늅늅이 2017.09.03 14:47 신고

    90도 움직이고 신호없이 바로 다시 반대로 90도 돌아가게 하려면 어떻게 해야할까요?

    원상복구하는법?

  5. kos2000 2017.10.07 00:55 신고

    서보모터 여러개를 제어하려면 어떻게 해야 하나요?

  6. 아쿠아맨 2017.12.31 18:41 신고

    이상하게 반응이 전혀없네요 모터가 고장난건가ㅠ

  7. LEE 2018.01.20 18:05 신고

    동작을 시키면 30도가 아닌 90도로 회전을 하고, 그 뒤에 1을 한번 더 치면 회전하지 않고 심한 진동만 일으킵니다 ㅠ 혹시 몰라 예제파일을 그대로 다운 받아서 동작시켜 보았는데 그대로인데 어떻게 해야 할까요? ㅠ

티스토리 툴바