아두이노/아두이노 일반

서보모터(MG90S) 사용

아크리엑터 2020. 5. 10. 13:25
반응형



아두이노를 시작하게 되면, LED 를 켰다가 껐다 하는 것. 그 다음은 센서를 이용해서 정보를 측정하는 것들을 해보게 된다.

그 다음 단계로는 무언가 움직이는 것을 해보고자 하는 생각이 들게 된다. 직접 움직일 수 있는 것을 만들면 기존에 했던 것 보다 훨씬 더 잘했는 것 같고, 성취감도 높아지는 것 같다. 개인적인 생각이기는 하지만 말이다.

2족로봇의 경우에도 서보모터를 여러개 연결해서 각 관절이 움직이게 해서 만든 것이고, 무선조정 자동차의 앞바퀴 방향을 바꾸는 것도 서보 모터를 이용하여 휠의 방향을 바꿀수 있게 한다. 또한, 무선조정 비행기의 경우에도 서보모터를 이용하여 방향을 조정할 수 있다. 이 처럼 서보모터를 이용하고 활용되는 곳은 아주 많다.

 

기존의 제품을 변경하지 않고 사람이 하던 인터페이스를 유지하면서도 자동화할 수 있도록 하는 용도로도 서보모터를 활용할 수도 있다. 사람처럼 스위치를 눌러 줄 수 있는 것도 나오던데.... 하도 오래되어서 제품이름은 기억이 안난다.

 

서보모터는 아주 다양하다. 서버모터의 움직이는 각도는 보통은 180도 이지만, 이보다 작거나 큰 것도 있으며, 어떤 경우에는 서보모터를 분해/수정하여 더 많은 각도로 움직일 수 있도록하는 경우도 있다.

또한, 사용될 곳의 필요한 힘 크기에 따라 토크가 높은 모터를 사용해야 되는 등 하고자 하는 목적에 맞추어서 서보모터를 선택할 수 있다.

 

일반적으로 큰 힘을 받지 않는 것의 경우에는 값싼 작은 서보모터로도 충분한데, 이런 경우에는 SG90 또는 그와 비슷한 것을 사용한다. (나는 서보모터의 기어가 메탈로 되어있다는 MG90을 이번에 한 20개 산 것 같다. 어디에 쓸지 모르겠지만...)

서보모터를 구매하면 아래의 추가적인 부품들이 같이 제공된다.

 

 

 

 

서보모터의 PIN배열은 좀 독특하다. 보통은 검정색이 GND, 빨간색이 VCC 인데, 독특하게 브라운색상이 들어있어서 착각할 때가 많다. 주황색(오렌지색) 라인은 서보를 움직이기 위한 방향, 즉 각도 조절용으로 사용된다.

 

 

 

 

 

 

 

 

 

마지막으로, 서보 모터를 사용하기 위해 전원이 최소 500mA가 제공되어야 한다. 그래서, 모터용 전원을 별도로 넣도록 하는데, 이것은 나중에 정리해보자. 또한, 서보모터를 사용할 때 잡음으로 인해 작동이 이상하게 되는 경우가 있는데, 이것은 콘덴서로 해소를 할 수 있다. 100% 해소 되는지는 아래에서 2가지를 다르게 만들어서 시험해보자.

설명히 한참 길었는데,   서보모터를 사용하는 방법을 아래에 정리한다.

 

필요 부품

  - 서보모터: MG90S   (SG90, SG90R 등 다른 서보모터도 무관)

  - 전해콘덴서: 470uF / 16v

 

구매정보

   - https://www.aliexpress.com/item/4000506860345.html (해외 2달러 미만: 배송비 무료)

   - https://www.devicemart.co.kr/goods/view?no=1313389 (국내 3300원: 배송비 별도)

 - 스펙

  • Dimensions: 23 x 12.2 x 29mm
  • Operating Speed (4.8V no load): 0.11sec / 60 degrees
  • Operating Speed (6.0V no load): 0.10sec / 60 degrees
  • Stall Torque (4.8V): 2.0 kg/cm
  • Stall Torque (6.0V): 2.5 kg/cm
  • Temperature Range: 0 to 55 degree C
  • Rotation angle: 360 °
  • Dead Band Width: 15 Microsecond
  • Operation Voltage: 4.8 - 6.0 Volts
  • Recommend Model: Mini Car / Mini Ship /Helicopter & Airplane

   이 모델은 180도가 아니라 360도 회전이 가능한 것으로 표시되어있다. 지금까지 사용하면서도 180도 이상을 돌려보지 않았는데, 이번에 정리를 하면서 알게 되었다. 기존에 알고 있던 제한된 지식을 기반으로만 사용하니, 당연히 안될 것이라 생각하고 제한된 영역만 사용하게 되었다.

 

 

 

 

 

브레드보드 연결

 

 

 

 

콘덴서를 전원에 연결하였고, 서보모터 제어는 Digital 8 PIN에 연결하였다.  전해콘덴서 470uF 용량의 것을 하나 추가해두었다. 이것은 잡음으로 인해 서보모터가 떨리거나 오작동하는 것을 방지한다. 관련해서는 아래의 정보를 참고한다.

http://geocaching.hyliston.net/2016/07/29/calming-a-jittery-servo/

Calming a Jittery Servo

When using a servo, does it bounce around a bit? Move when it's not supposed to? There are a few things you can try to fix this problem.

geocaching.hyliston.net

 

 

회로도

 

 

 

 

 

예제 소스 코드

서보제어를 위해 필요한 라이브러리를 설치하자. 라이브러리 없이도 만들수 있지만, 쉽게 살자. 

라이브러리는 아두이노 IDE 프로그램의 메뉴(스케치 --> 라이브러리 포함하기 --> 라이브러리 관리)에서 검색 설치할 수 있다. 라이브러리 매니저화면에서 servo를 검색하여 나온 것 중에서, 두번째로 있는 "Servo by Michael Margolls" 의 라이브러리를 선택하여 설치를 했다.

 

 

 

 

 

Servo 라이브러리를 설치 한 후에, 아래의 코드(샘플 예제)를 사용하여 서보 모터를 작동한다.

#include <Servo.h> 

#define PIN_SERVO 8

Servo myservo; 
 

void setup() 
{ 
  myservo.attach(PIN_SERVO);   
} 
 
void loop() 
{ 
  int pos;


  // 0 도 부터 180도 까지 이동
  for(pos = 0; pos <= 180; pos += 1)  {                                  
    myservo.write(pos);              
    delay(15);                       
  } 
  
  // 180도 에서 0도까지 이동
  for(pos = 180; pos>=0; pos-=1) {                                
    myservo.write(pos);              
    delay(15);                       
  } 
} 

 

사례

FTDI 모듈이 안보여서, 우노로 연결했다. 

 

 

 

아래는 동영상인데, 콘덴서를 연결한 것과 연결하지 않은 차이점을 느껴 보려고 했는데, 솔직히 잘 못 느낌. 케이블의 접점이 좀 이상했때에 모터가 이상하게 움직인 것과는 무관한 것 같고, 솔직히 잡음이 줄었다는 느낌은 들지 않았다.

https://youtu.be/fg89l7nMYXY 

 

잡담

마지막으로, 이 서보모터가 360도로 도는 것을 지원한다고 해서 위의 코드를 수정해서 해봤는데, 작동하지는 않았다. 라이브러리의 문제인가?!!! 지금은 180도 이상을 돌릴 이유가 없어서, 그 확인은 나중으로 미룬다.

그리고, 180도를 회전하게 했지만, 실제로는 170도 정도에서 왔다리 갔다리 하는 것 같다. 즉, 0~180도로 회전하게 하는 것 보다, 10~170 사이를 회전하도록 설정하는 것이 더 정확할 것 같다.

한번의 광고 클릭이 저에게 도움을 줍니다. 감사합니다.

반응형