본문으로 바로가기

아두이노 연재를 한동안 못 올렸네요. 이번에는 아두이노 연재 - 서보 모터 구동편입니다. 아두이노로 뭔가를 작업하는 분들이 많이 사용하는 모터입니다. 마이크로 서보모터라고 하는 작은 모터부터 다양하게 있습니다. 그러나 그 구동 방법은 비슷합니다.

구글 검색 결과인데요. 낮은 가격에서 다양하게 있습니다. 위 그림에서 보이듯이 서보모터의 생김새는 비슷비슷합니다.

오늘 우리가 다룰 서보모터입니다. 일반적인 모터로 가격은 몇 천원 수준입니다. 서보모터는 일반적으로는 약 180도 정도의 회전 각도를 가졌습니다. 당연히 그것만 있는 것은 아니지요. 또 다른 종류로는 무한턴이라고 해서, 속도 명령을 이수할 수 있는 모터들도 있습니다.

제일먼저 고민하는 것은 당연히 저 커넥터를 어떻게 연결할 건가.. 죠^^. 서보모터 하나 정도를 단지 구동하는 것은 아두이노의 전원 공급핀에서 사용해도 됩니다. 그 외에 다수의 서보모터나 좀 힘이 필요한 경우는 아무래도 외부 전원을 사용해 줘야죠. 아무튼 저렇게 색상을 가진 경우라면, 제일 위의 주황색은 신호선입니다. 이 번 글에서는 7번 핀에 연결합니다. 가운데 빨간선은 아두이노의 5V에, 제일 밑에 갈색선은 그라운드(GND, -)로 아두이노의 GND에 연결합니다.

이렇게 연결했습니다. 흠... 아까 이야기한 신호선은 7번핀에 연결했습니다.^^ 서보모터는 신호선에 PWM 파형을 인가해서 각도를 조절합니다.

출처 : https://www.servocity.com/how-does-a-servo-work

우리가 7번에 연결한 신호선에 50Hz의 PWM의 상승 구간이 1ms면 0도, 2ms면 180도가 위치 지령이 됩니다. 일일이 파형을 만들어 주어야겠지만, 아두이노에서는 Servo라는 라이브러리가 있습니다.

#include <Servo.h>

Servo servo;

void setup() {
  // put your setup code here, to run once:
  servo.attach(7);
}

void loop() {
  // put your main code here, to run repeatedly:
  servo.write(15);
  delay(1000);
  servo.write(170);
  delay(1000);
}

이 코드는 servo를 include한 후에 7번핀이 서보모터에 연결되었음을 setup에서 설정해주고, write 명령을 통해 각도를 주면 됩니다. 이 과정에서 원래는 0도부터 180도가지 구동될 수 있다는 서보모터지만, 실제로는 제품별로 조금씩 못가는 곳이 있어서 테스트를 하게 됩니다. 지금 글에서 다루는 모터는 15도정도의 여유를 주어야 하네요. 위 코드를 실행하면 서보모터가 15도 위치에서 가서 1초간 대기, 다시 170도 위치에서 1초간 대기를 합니다.^^

#include <Servo.h>

Servo servo;
int t = 0;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  servo.attach(7);
}

void loop() {
  // put your main code here, to run repeatedly:
  t += 1;
  float angle = 180*sin(t*PI/180);
  int angle_remap = map(angle, -180, 180, 15, 165);
  servo.write(angle_remap);
  Serial.println(angle_remap);
  delay(50);
}

이번에는 살짝 응용했습니다. 부드럽게 180도를 회전하도록 하고싶은거죠. 반복해서^^. 그 방법 중 하나로 삼각함수(sin)를 동원했습니다. 위 코드처럼 짜면, -180도와 +180도의 결과가 나오니 map 함수를 이용해서 간단하게 -180, 180 구간의 값을 15도부터 165도까지로 변경하는 역할을 하는 것이 map 함수입니다.

이렇게 구동이 되는거죠. 저렴한 모터이기 때문에 약간의 소음과 비정상적 떨림이 있긴합니다.^^


댓글을 달아 주세요

  1. BlogIcon 공수래공수거 2019.08.28 08:54 신고

    가격이 생각보다 싸군요^^

  2. BlogIcon 예스투데이 2019.08.28 12:55 신고

    서보모터가 그렇게 비싸진 않군요...
    좋은 정보 잘 보고 갑니다. ^^

  3. BlogIcon 잉여토기 2019.08.28 15:23 신고

    모터의 프로펠러가 왔다갔다 천천히 안정감 있게 잘 도네요.

  4. BlogIcon 핑구야 날자 2019.08.29 06:45 신고

    모터에 대한 정보 잘 얻어갑니다 오늘도 즐거운 하루 보내세요

  5. BlogIcon 북두협객 2019.09.02 09:43 신고

    모터가 코딩한 각도대로 좌우로 왔다갔다 잘 동작이 되네요~