오늘의 목표는 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 안에 함수들이나 소스를 보고 , 다음 항목부터는 나만의 라이브러리로 구동시킬 것이다.
'OwnProject > RPi B+' 카테고리의 다른 글
[RPi 2 B+] 라즈베리파이2 랜선 접속하기. (0) | 2016.01.21 |
---|