본문 바로가기

Raspberry

wiringPi를 이용한 서보모터 구동하기

GPIO는 라즈베리파이와 외부 하드웨어의 입출력을 위한 인터페이스 이다. 라즈베리파이는 ARM기반 BCM2835/2836을 CPU로 사용하는데  wiringPi는 이 CPU의 GPIO의 사용을 위한 C언어 기반 라이브러리 이다.

리눅스는 모든 디바이스가 파일로 인식이 되고 GPIO또한 하나의 파일이므로 open( ),write( ), read( )같은 시스템 라이브러리로 제어가 가능하지만 wiringPi를 이용하면 더 쉽고 직관적으로 제어할 수 있다. 좀 더 상세한 내용은 아래 링에서 확인 할 수 있다.


1. wiringPi 설치

먼저 아래 명령어를 차례대로 실행해서 git에서 패키지를 내려 받은 후에 설치하자.

$ sudo apt-get install git-core

$ sudo apt-get update

$ sudo apt-get upgrade

$ git clone git://git.drogon.net/wiringPi

$ cd wiringPi

$ git pull origin

$ ./build


2. wiringPi 설치 버전 확인

아래 명령으로 버전을 확인 해 보자.

$ gpio -v

정상적으로 설치가 됬다면 아래와 같이 버전정보를 확인 할 수 있다.


3. GPIO 핀번호 확인

wiringPi의  GPIO 핀번호는 기본적인 라즈베리파이의 GPIO 핀번호와 다르다. 아래 명령어로 핀 번호를 확인 할 수 있다.

$ gpio readall

다음 화면과 같이 확인 할 수 있다. wpi부분이 번호 이고 name이 그 용도이다.


4. 회로도


5. wiringPi 함수

5.1 GPIO값의 초기범위 설정

라즈베리파이에서는 1번(BCM 18) 핀만 PWM출력을 지원한다. PWM은 Pulse Width Modulation (펄스 폭  변조)의 약어로 GPIO는 디지털 신호를 가지기 때문에 PWM으로 아날로그 신호를 제어를 해야 한다. 모터는 연속된 값으로 움직이는 아날로그 신호이다. softPwmCreate (1,0,200)는 1번 핀의 출력을 200단계로 구성된 20ms길이의 주기를 만든다.(200 * 100 = 20000 microseconds)

int softPwmCreate(int pin, int initialValue, int pwmRange);


5.2 PWM 값 변경

value 매개변수로 각도를 조절 할 수 있다.

void softPwmWrite(int pin, int value);

6. 서보모터 구동 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <wiringPi.h>
#include <stdio.h>
#include <softPwm.h>
#define PIN 1
int main()
{
    if(wiringPiSetup() == -1)
        return 1;
    softPwmCreate(PIN ,0200);
    softPwmWrite(PIN ,5); // - 방향
    delay(600); //600ms 동안 softPwmWrite()상태가 지속됨
    softPwmWrite(PIN ,25); //+ 방향
    delay(600);
    return 0;
}
cs

7. wiringPi 코드 빌드와 실행 

위의 코드를 빌드하기 위해선 wiringPi 라이브러리가 필요하다. 아래와 같이 소문자 L을 붙여서 라이브러리를 링크시킨다.

$ gcc -o test test.c -lwiringPi

8. 실행 동영상


'Raspberry' 카테고리의 다른 글

[feeder] screw와 서보모터 연결  (0) 2017.06.29
Gstreamer 파이프라인 테스트  (0) 2017.06.20