본문 바로가기

Hardware/Arduino and Friends

[아두이노 연재] 서보모터 사용해보기

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

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

오늘 우리가 다룰 서보모터입니다. 일반적인 모터로 가격은 몇 천원 수준입니다. 서보모터는 일반적으로는 약 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 함수입니다.

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

반응형