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

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

 

테스트에 사용한 서보모터는 '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도까지만 제어가 가능한듯합니다.

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

  1. 2015.01.11 20:51  Address  Edit/Delete  Reply

    비밀댓글입니다

  2. 사영인 2015.12.22 14:05 신고  Address  Edit/Delete  Reply

    안녕하세요, 서보모터와 아듀이노를 이용하여 채찍질하는 모양을 만들려고 해서 자료를 찾다가 포스팅을 보게되어 질문드립니다. 제가 서보모터에 고정하려는 채찍(?)이 무게가 좀 나갈것같아서 12v전력을 사용하는 서보모터를 이용하려고하는데요, 이럴경우 아듀이노와 연결해서 제어할 때 외부에서 전력을 공급받을 때 어떤 부속을 사용하면 되는지 (배터리말고 240v 코드에서 바로 서보모터에 12v로 변환된 전력을 지속적으로 공급하려고 합니다.) 알려주시면 정말 감사드리겠습니다!!

  3. 개구리 2018.01.31 23:03 신고  Address  Edit/Delete  Reply

    "1-3. 전류가 부족하다? "의 설명 사진 "ServoMotor_001_002.fzz"에 보면
    검은색(음극)은 GND로 연결되었고,
    빨간색(양극)은 5V와 연결되지 않고,
    빈 곳에 연결되어 있네요. 사진 설명 오류인 듯 보입니다.

    [질문.1] 서보모터에 사용되는 P(전력, W) = I(전류) * V(전압)는 어떻게 알 수 있는지 궁금합니다.
    [질문.2] 서보모터의 490마이크로 패럿 이상을 사용해야 하는 근거는 무엇을 보고 알 수 있나요?
    권장 내압보다 높은 것과 낮은 것에 나타 나는 현상은 무엇인가요?
    권장 패럿(F)보다 높은 것과 낮은 것에 나타 나는 현상은 무엇인가요?

    • Favicon of http://blog.danggun.net BlogIcon 당근천국 2018.02.01 01:50 신고  Address  Edit/Delete

      이미지 수정하였습니다~

      질문1 : 데이터시트를 확인합니다.
      질문2 : 이게 계산식이 있는것으로 아는데 저는 모릅니다.
      참고링크 보시면 490uF이상 사용하라고 하고 있습니다.

댓글 작성

이름
패스워드
홈페이지
비밀글

티스토리 툴바