반응형

【 아두이노 기초 】 #28 서보(Servo) 모터 제어 하기 1

 이번 시간에는 서보 모터를 제어 해보도록 하자. 

서보 모터는 RC카의 방향제어나 로봇의 관절제어 등 360도 회전보다는 반복 회전 이면서, DC 모터 보다는 정밀한 제어를 요하는 곳에 사용된다. 



▶ SG90 및 각종 서보 모터 


《 SG90 》

《 HS311FS5106R 》

FS5106R - 무한 회전 서보 모터 》






▶ 실습 목표 :  

 서보 모터를 0˚ 에서 180˚ 회전 시켜 보도록 하자. 서보 모터가 프로그래밍에 의해 끝에(180˚ ) 다다르면 자동으로 원위치 된다. 



▶ 실습 회로도면 :

  (이미지 클릭하면 확대 가능)


▶ 부대품 목록 : 아두이노 보드, 브레드 보드 


▶ 부품 목록    : 서보모터(SG90), 전해 콘덴서 (10uf~100uf )-생략 가능


▶ 실습 절차  : 

 1. 회로도를 참고하여 모터 와 부품들을 연결한다.
 
 2. 회로의 콘덴서는 생략 가능하며 일반적으로 모터류에 콘덴서를 달면 노이즈 제거(세라믹 콘덴서) 효과와, 전원보충(전해 콘덴서)의 효과가 있어 달게 되나, 간단한 실험을 위해서는 달지 않아도 실험에는 크게 지장이 없다. 

 3. 회로의 모든 GND(그라운드, - 단자)는 하나로 연결 한다. 

 4. 회로에 서보모터 두 개 이상을 연결할 때는 아두이노 전원 만으로는 충분치 않으므로 외부 전원을 모터 전원선(+적색선, -흑색선) 에 직접 인가해야 정상적으로 동작 될 것이다. 




▶ 프로그램 (코드& 설명) : 


#include <Servo.h>    // 전용 서보 라이브러리 사용

#define servoPin 9     // 서보 모터핀을 지정

Servo servo;      // 서보라이브러리 변수를 초기화한다

int pos=0;        // 현재 각도를 저장할 변수를 지정한다


void setup() {

  servo.attach(servoPin);   // 서보모터 핀을 설정한다 (현재 9번 핀)

}


void loop() {

  for(pos=0; pos < 180; pos +=1)  {

      servo.write(pos);   // 서보모터의 각도를 1씩 증가

      delay(50);  }     // 서보 모터의 각도가 변하는 것을 기다린다

}


※ 서보 모터는 입력 되는 신호의 펄스 폭에 따라 회전의 각도가 정해지는 방식의 모터이다. 위 그림 처럼 1.0ms에 가까울 수록 좌측 끝의 각도로 움직이고, 2.0ms에 가까울 수록 우측 끝으로 회전하게 된다. 1.5ms 이면 가운데 위치하고, 그 사이 사이 펄스 값에 따라 해당 위치로 회전을 하게 된다. 



위 사진을 보면 하나의 신호 다음 이어지는 신호의 주기는 일정하지만, HIGH의 신호는 1ms~2ms 사이로 조절이 되어 HIGH 신호의 주기가 조절이 되는 되는 것으로 이 차이를 이용해 서보모터의 각도가 정해지는 것이다. 

PWM 파형의 폭이 1ms~2ms 사이일 때 서보모터가 0도~180도 사이로 움직이게 된다. 


 

▶ 실행 영상 : 






▶ 아두이노 소스 코드 다운로드 : 



반응형