라즈베리 파이 서보모터 여러개 - lajeubeli pai seobomoteo yeoleogae

라즈베리파이3에서 Servoblaster를 이용해 서보 모터를 제어하는 방법을 정리한다.

0. Pan-Tilt 서보 모터 (SG90 * 2)

서보 모터는 다음과 같이 두 대를 결합하여 pan tilt 형식으로 사용 가능한 제품을 사용하였다.

라즈베리 파이 서보모터 여러개 - lajeubeli pai seobomoteo yeoleogae

1. ServoBlaster 설치

* 관련 링크: 

https://github.com/richardghirst/PiBits/tree/master/ServoBlaster

ServoBlaster는 라즈베리파이용 소프트웨어로, GPIO Pin들을 통해 여러 개의 서보 모터를 제어할 수 있게 하는 인터페이스를 제공한다.

// ServoBlaster 설치
$ git clone https://github.com/richardghirst/PiBits
$ cd PiBits/ServoBlaster/user/
$ sudo make install

// Servoblaster 데몬 실행
$ sudo ./servod

Board model:                     2
GPIO configuration:            P1 (40 pins)
Using hardware:                PWM
Using DMA channel:              14
Idle timeout:             Disabled
Number of servos:                8
Servo cycle time:            20000us
Pulse increment step size:      10us
Minimum width value:            50 (500us)
Maximum width value:           250 (2500us)
Output levels:              Normal

Using P1 pins:               7,11,12,13,15,16,18,22

Servo mapping:
     0 on P1-7           GPIO-4
     1 on P1-11          GPIO-17
     2 on P1-12          GPIO-18
     3 on P1-13          GPIO-27
     4 on P1-15          GPIO-22
     5 on P1-16          GPIO-23
     6 on P1-18          GPIO-24
     7 on P1-22          GPIO-25

데몬을 실행하면 위와 같이 각 GPIO 에 mapping된 서보 모터와 제어 가능한 범위에 대한 정보를 출력한다.

사용자에 따라 제어 범위와 값을 직접 수정/사용할 수 있다.

2. 서보 모터 연결

각 모터는 다음과 같이 점퍼 케이블 6개를 이용해 각각 연결하였다.

라즈베리 파이 서보모터 여러개 - lajeubeli pai seobomoteo yeoleogae

라즈베리 파이 서보모터 여러개 - lajeubeli pai seobomoteo yeoleogae

3. 서보 모터 제어

제어 방법은 간단하다. 

먼저 Servoblaster 데몬을 실행했을 때 출력되는 정보 중 Servo mapping에서 연결한 GPIO에 대한 pin 정보를 확인한다.

여기에서는 두 서보 모터를 각각 GPIO 17, 18번에 연결했으므로

제어할 번호는 1, 2번이 된다.

제어 가능 범위는 50(min)에서 250(max) 이며, 퍼센트(0~100%)로도 제어 가능하다.

// 1번 -> GPIO17 연결 모터 제어
$ echo 1=50% > /dev/servoblaster
$ echo 1=200 > /dev/servoblaster
// 2번 -> GPIO18 연결 모터 제어
$ echo 2=43% > /dev/servoblaster
$ echo 2=140 > /dev/servoblaster

입력한 대로 모터가 움직이는지 확인해 본다.

* 모터 조립 상태에 따라 최대/최소 제어 범위가 맞지 않을 수 있으므로,

중간 값부터 차례로 제어해 본 다음 최대/최소 값으로 제어해 본다.

범위 이상의 값으로 계속 제어할 경우 서보 모터에 무리가 갈 수도 있다고 한다.

sg90 서보모터는 다음과 같이 생겼습니다

라즈베리 파이 서보모터 여러개 - lajeubeli pai seobomoteo yeoleogae
서보모터 sg-90

이를 제어하기 위해서는 pwm을 이용합니다

pwm 값을 주어 서보모터를 회전시킬 수 있습니다

하지만 이는 스텝모터와 다르게 5를 준다고 5만큼 도는것이 아닙니다

5의 위치로 돌게 됩니다

그리고 정밀하게 제어하기에 좋은 모터는 아닙니다

정밀한 제어가 필요하다면 스텝모터를 이용해야 합니다

 

그래서 저는 주로 이를 사용하기 전에 어떤 한 값으로 초기화

그 각도를 기준으로 각도를 맞춰 진행하였습니다

 

그리고 0~180도를 제어할 수 있다고 되어있지만

하드웨어의 한계로 보통 5~175정도 까지 회전가능하도 보면 됩니다

 

sg90 서보모터 특징

특징을 정리해보겠습니다

1. 가격이 저렴하다 보통 2000원이면 구매할 수 있다

2. 가볍다: 작고 가볍습니다

3. 회전을 구현하기 쉽다

4. 불량이 많다: 정말 많습니다.. 분명히 제대로 꽂은 것 같은데 안된다면 먼저 불량을 의심하세요!!

10개 중 절반 이상이 불량인 제품을 받은 친구도 있었습니다 ㅠㅠㅠ

 

간단하게 위의 특징이 있을 것 같습니다

 

softPwmCreate(핀번호, 시작 펄스 값, 주기)

주기는 1~1024 사이의 값을 가집니다

내부적으로는 *0.1ms가 됩니다

즉 위와 같이 200을 입력하면 주기는 20ms가 됩니다

 

sg90 서보모터 라즈베리 파이에 연결 방법

서보모터를 보시면 선이 3개가 있습니다

하나는 +, 하나는 GND, 하나는 데이터 핀입니다

뭐가 뭐일까요??

 

빨강은 전원선(+)

갈색은 GND(-)

오렌지색은 데이터 선 입니다

 

여기 중요합니다!!!

즉 빨강은 5V에 연결, 갈색은 GND에 연결, 오렌지색은 PWM이 되는 GPIO에 연결합니다

(저는 wpi 1번을 사용하겠습니다)

라즈베리 파이 서보모터 여러개 - lajeubeli pai seobomoteo yeoleogae
서보모터 라즈베리파이 연결

 

서보모터 테스트 코드

라즈베리 파이 서보모터 여러개 - lajeubeli pai seobomoteo yeoleogae

위와 같이 연결하고 위의 코드를 실행했는데도 되지 않는다면 불량입니다!!

먼저 테스트를 해보세요

 

역시 컴파일을 해주고 실행시켜봅니다

$ gcc -o servotest servotest.c -lwiringPi
$ ./servotest

 

 

 

모터가 정상이라면 위와 같이 동작합니다

 

서보모터 연속 회전하기

이번에는 조금 더 응용해봅시다!!

위에서는 한 각도로 돌고 끝이었지만 이번에는 연속회전하게 해보겠습니다

라즈베리 파이 서보모터 여러개 - lajeubeli pai seobomoteo yeoleogae

위 코드를 통해 5에서 25의 각도를 왔다갔다 하는걸 볼 수 있습니다

pos를 1씩 증가하면서 계속 값을 주어 연속적으로 움직이게 만든 것입니다

 

 

정말 깨방정 맞게 움직이네요 ㅋㅋㅋㅋㅋㅋ

 

이렇게 서보모터를 다루는 방법을 알아봤습니다!!

공유하기

게시글 관리

구독하기Code by horang

  • 카카오스토리
  • 트위터
  • 페이스북

'라즈베리파이' 카테고리의 다른 글

라즈베리파이 GPIO를 이용하여 led 제어 (파이썬 코드 포함)  (0)2020.05.24라즈베리파이4b led 밝기 조절하기 (PWM 출력 제어)  (0)2020.05.21라즈베리파이 wiringPi + gpio 유틸리티 사용법  (0)2020.05.20라즈베리파이4b에 스위치 2개 연결하여 led 제어하기(wiringpi)  (0)2020.05.18라즈베리파이4b에 스위치 연결하여 led 제어하기(wiringpi, C언어)  (0)2020.05.17