반응형

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


 지난 시간(http://rasino.tistory.com/146)에는 서보 모터를 한 방향으로만 180도를 움직여 보았다.  명령에 의해 180도가 움직인 후에는 반복 루프문에 의해 자동으로 0도 위치로 되돌아 온 후, 다시 180도로 제어되는 모습을 보았다.  


 이번 시간에는 서보모터의 자동 감김이 아니라 반대방향으로도 제어를 해볼 것이다.  즉 처음 시계방향으로 180도 회전 후,  다시 반시계방향으로 180도 회전하도록 프로그래밍을 해보자. 



▶ SG90 및 각종 서보 모터 


《 SG90 》

《 HS311FS5106R 》

《 FS5106R - 무한 회전 서보 모터 》






▶ 실습 목표 :  

 서보 모터를 0˚ 에서 180˚ 회전 시킨 후 다시 반대방향으로 180˚ 회전 하도록 프로그래밍 해보자.


▶ 실습 회로도면 :

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


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


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


▶ 실습 절차  : 

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

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

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




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


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

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

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

int angle=0;        // 서보모터 각도 변수 설정과 위치를 0˚ 초기화


void setup() {

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

}


void loop() {


  for ( angle=0;  angle < 180; angle++)  {  // 0도~180도 까지 1도씩 증가 

      servo.write(angle);   

      delay(30);       // 서보 모터의 각도가 변하는 것을 기다려준다

  }


  for ( angle=180;  angle > 0; angle--)  {  // 180도~0도 까지 1도씩 감소

      servo.write(angle);   // 서보모터의 각도 증가

      delay(30);       // 서보 모터의 각도가 변하는 것을 기다려준다

  }

}


※ 서보 모터는 입력 되는 신호의 펄스 폭에 따라 회전의 각도가 정해지는 방식의 모터이다. 위 그림 처럼 1.0ms에 가까울 수록 좌측 끝의 각도로 움직이고, 2.0ms에 가까울 수록 우측 끝으로 회전하게 된다. 1.5ms 이면 가운데 위치하고, 그 사이 사이 펄스 값에 따라 해당 위치로 회전을 하게 되는데, 1.0ms~2.0ms 타이밍이 정확히 일치 하는 것은 아니니 회로를 구성해놓고 실험을 통해서 확인 하면 되겠다. 

 

▶ 실행 영상 : 






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



반응형