2014. 12. 18. 17:00

서보모터는 별도의 드라이버 없이 아두이노의 라이브러리만 이용하여 동작시킬 수 있습니다. 

(엄밀히 말해서 서보모터 안에 컨트롤러가 들어있습니다.)

 

테스트에 사용한 서보모터는 'DGS-288'입니다.

(참고 : 스카이홀릭 - DGS-288 - Digital Servo)

 

 

1. 서보 모터 동작시키기

일단 서보모터를 연결해 봅시다.

 

1-1. 보드 구성

그냥 아두이노에 연결해도 됩니다.

전 포스팅을 하는 입장이라 다른 글과 비슷한 화면을 보여주기 위해 브레드보드를 사용한 것입니다.

ServoMotor_001_001.fzz
다운로드

 

1-2. 펌웨어 작성

서보모터는 라이브러리를 이용하면 간단하게 제어할 수 있습니다.

#include <Servo.h>

int potPin = 0;
int servoPin = 9;

Servo servo; 

int nSwitch = 0;
int nAngle = 0;
  
void setup() 
{ 
  Serial.begin(9600);
  pinMode(servoPin, OUTPUT);

  servo.attach(servoPin);
} 

void loop() 
{ 
  if(Serial.available())
  {
    nSwitch = Serial.read();
  }
 
  switch(nSwitch)
  {
    case '0':
      nAngle = 0;
      break;
    case '1':
      nAngle = 90;
      break;
    case '2':
      nAngle = 180;
      break;
  }

  servo.write(nAngle); 
}

 

스텝모터 때와 마찬가지로 라이브러리를 이용하여 서보모터 객체를 생성하고 '.write(각도)'를 통해 서보모터를 제어합니다.

 

 

1-3. 전류가 부족하다?

사용하는 서보모터가 40mA이상 사용하는 모터라면 아두이노보드가 죽는 현상을 볼 수 있을 것입니다.

이걸 해결하는 방법은 외부에서 전원을 공급하는 방법과 캐패시터(capacitor)를 이용하는 방법이 있습니다.

외부에서 전원을 공급하는 방법은 이 포스팅의 마지막에 다루도록 하고 캐패시터를 이용하려면 아래와 같이 하면 됩니다.

(캐패시터는 490uF이상을 사용해야 합니다.)

ServoMotor_001_002.fzz
다운로드

 

 

제가 전자 쪽은 잘 몰라서 무작정 쓸 수 있는 건지는 모르겠네요. ㅡ.-;;

(참고 : adafruit learning system - Arduino Lesson 15. DC Motor Reversing - If the Servo Misbehaves )

 

 

2. 입력받은 값으로 각도 조절하기

가변저항(potentiometer)의 각도에 따라 같이 움직이는 서보모터를 구현해 봅시다.

 

2-1. 보드 구성

기존 배선에 가변저항만 추가하면 됩니다.

 

ServoMotor_001_003.fzz
다운로드

 

 

2-2. 펌웨어 작성

'A0'핀의 가변저항 값을 읽어 서보모터를 제어합니다.

/*
Adafruit Arduino - Lesson 14. Knob
*/
 
#include <Servo.h> 
 
int potPin = 0;  
int servoPin = 9;
Servo servo; 

String sMeg = "Log - Angle : ";

void setup() 
{ 
  Serial.begin(9600);
  servo.attach(servoPin);  
} 
 
void loop() 
{ 
  int reading = analogRead(potPin);     // 0 to 1023
  int angle = reading / 6;              // 0 to 180-ish
  servo.write(angle);
  Serial.println(sMeg + int(servo.read()));
}

 

(참고 : adafruit learning system - Arduino Lesson 15. DC Motor Reversing - Arduino Code for 'Knob' )

 

 

코드를 보면 '.read()'가 있는데 서보모터 객체를 통해 서보모터의 각도를 받아올 수 있습니다.

시리얼 모니터를 통해 데이터를 확인해보면 서보모터의 각도가 나옵니다.

 

각도를 확인해보면 170까지만 나오는 것을 알 수 있는데 많은 서보모터가 0~170도까지 동작합니다.

만약 다른 각도까지 동작하는 서보모터를 사용 중이라면 코드를 수정하여 테스트하시면 됩니다.

이 코드는 최대 180도를 기준으로 하고 있습니다.

 

그리고 주의할 것이 아두이노의 서보모터 라이브러리는 180도까지만 제어할 수 있는듯합니다.

만약 더 큰 각도를 사용할 예정이라면 라이브러리를 수정하셔야 합니다.

 

 

3. 외부 전원 사용하기

서보모터의 전원과 접지를 외부전원과 연결하면 끝입니다.

ServoMotor_001_004.fzz
다운로드

 

 

마무리

서보모터는 펄스의 길이에 따라서 각도가 정해진다고 합니다.

자세한 내용은 아래 링크를 확인해 주세요.

(참고 : adafruit learning system - Arduino Lesson 15. DC Motor Reversing - Servo Motors )

서보모터 라이브러리에서 이 펄스를 제어해 주는 것 같습니다.

 

서보모터 라이브러리를 살짝 확인해 봤는데 180도까지만 제어가 가능한듯합니다.

만약 더 큰 각도의 서보모터를 사용한다면 라이브러리 자체를 수정해야 할듯하네요.