OwnProject/RPi B+

[RPi 2 B+] Mini Servo 돌려보기

성엽이 2016. 1. 23. 23:33

오늘의 목표는 Servo Motor 돌려보기 !


구입한 서보모터는 Micro Servo 9g SG90 이라는 엄청 싼 가격의 모터이다.


대부분의 라즈베리파이 유저들은 wiringPi 라이브러리를 사용해서 코딩을 하므로, 


테스트겸 , C언어를 이용해서 구동시켜 보도록 할 것이다.


필요한 하드웨어

서보모터, PNP or NPN 트랜지스터, RPi, 저항 100~220옴 2개


구동영상



구동 시키기 위해서 필요한 정보는 서보모터에 입력되는 3가지선을 보면 알기 쉽다.



서보모터 사진



빨강 : 5V(VCC)

검정 : GND

노랑 : 신호선


회로사진




먼저 5V , GND 를 빨간선과 검은선으로 연결시켜준다.


그리고 신호선을 연결해야 하는데, 연결하기 전에 많은 양의 전류를 보내주면 라즈베리파이에 무리가 가므로


트랜지스터를 사용하면 좋겠다(솔직히 얼마나 무리가 갈지는 모르겠지만 ㅠ 소중하니까). 위에선 PNP TR을 사용하였다. 


TR에는 이미터, 베이스, 콜렉터 라고 부르는 3가지 반도체가 존재한다.


크기로만 봤을때 콜렉터 > 이미터 > 베이스 순이고, 베이스에 작은 전류만 흘려줘도 커다란 콜렉터에 많은 전류를 흐르게 할 수 있다.


예를 들어서 회로를 보았을 때 이미터에 100mA의 전류를 흘려보내면 1mA가 베이스, 99mA가 콜렉터로 흐를 것이고, 200mA를 흘려보내면 2mA가 베이스, 198mA가 콜렉터로 흘러간다. 그러므로 1mA->2mA 가 되면서 베이스에 대한 콜렉터의 전류 증폭률은 여기서 거의 99배 라고 보면 된다.


그래서 전류증폭기 인 것이다.


위의 사진에서 빨간점에서부터 오른순으로 이미터, 베이스, 콜렉터이다.


이미터에는 GND, 베이스에는 신호선과 220옴 저항, GPIO 17번 핀 콜렉터에는 220옴 저항, 5V 전원을 인가하였다.


다음은 소스를 보도록 하겠다.


소스

#include <wiringPi.h>

#include <stdio.h>

#include <stdlib.h>

#include <softPwm.h>

#include "softServo.h"


int  main(void)

{

int pos = 180;

int dir = 1;

if(wiringPiSetupGpio() == -1) return 1;


softServoSetup(17,-1,-1,-1,-1,-1,-1,-1);


while(1)

{

softServoWrite(17,-250);

delay(500);

softServoWrite(17, 500);

delay(500);

softServoWrite(17, 1250);

delay(500);

}

}


지금은 wiringPi 를 사용하였지만 , wiringPi 안에 함수들이나 소스를 보고 , 다음 항목부터는 나만의 라이브러리로 구동시킬 것이다.