관리 메뉴

Kim's Programming

아두이노 servo 모터 본문

Arduino/부품 이야기

아두이노 servo 모터

Programmer. 2015. 7. 1. 19:52

음 이번엔 서보 모터에 대해서 알아보겠습니다.

 

우선 작동원리입니다.

 

서보모터는 펄스의 길이에 따라서 움직이는 방향이 정해집니다.

 

음... 뭐 펄스가 감이 안온다면 직접 보면 되겠죠?

 

 

먼져 회로를 구성합니다

 

서보모터는 3가닥의 선으로 이루어 져 있습니다. Gnd Vcc 그리고 신호선 입니다.

 

위의 그림에서는 서보모터를 보드에 직접 연결을 하였으나.

 

사실 저렇게 연결을 해도 잘 움직이지 않습니다.

 

이유는 USB로 연결된 아두이노 보드의 전력이 서보 모터를 돌리기 어렵습니다.

 

그래서 중간에 전원을 따로 입력해 주어야 합니다

 

그렇게 저도 구성을 해보았습니다.

 

 

 

 

 

(오른쪽에 가려진 부분은 전원입니다)

 

서보모터를 전원에 연결해주고 GND 레벨을 맞추기 위하여 CPU에도 전원을 연결하였습니다.

 

자 이제 코드를 입력해서 업로드를 해봅니다

 

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
27
28
29
30
31
32
33
34
35
/* Sweep
 by BARRAGAN <http://barraganstudio.com> 
 This example code is in the public domain.
 modified 8 Nov 2013
 by Scott Fitzgerald
 http://www.arduino.cc/en/Tutorial/Sweep
*/ 
 
#include <Servo.h> 
 
Servo myservo;  // create servo object to control a servo 
                // twelve servo objects can be created on most boards
 
int pos = 0;    // variable to store the servo position 
 
void setup() 
  myservo.attach(9);  // 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 
  } 
 
cs

 

180도 회전후 180 재 회전 시키는 코드인데요

 

서보모터에는 가변 저항이 달려 있습니다. 회전을 하면서 기어작용으로 가변 저항이 조절 되는데 이에 따라 방향과 펄스등이 조정이 되고

 

그 덕에 사용자 입장에서는 각도만 입력을 해주면 됩니다(디지털 기준)

 

업로드를 마치고 실행을 해봤습니다

 

 

 

반대로 촬영이 되었네요

 

하지만 180도 ~ 0도 사이로 왔다 갔다 하는것을 볼 수 있습니다.

 

PS. 아날로그를 이용하는 경우는 원하는 각도 *6을 해주시면 원하는 ADC값을 얻으실 수 있습니다.