커뮤니티
- 제 목 라즈베리파이 서보모터 ( SG90 ) 제어
- 작성자 네오즈 조회 : 10,051 좋아요 : 0 댓글 : 0
- 작성일 2019-09-27 오후 3:59:43
-
1. SG90 테스트 회로 구성
( SG90 서보모터 1EA, , 빨강 전원선(+) / 갈색 Ground(-) / 오렌지색 (데이터) : GPIO 18번 연결 )
코드 작성 및 실행 방법은 "; 라즈베리파이 GPIO 포트 ( LED, 버튼 ) 제어 "; 가이드 참조
2. SG90 테스트 Python 코드
import RPi.GPIO as GPIO # RPi.GPIO에 정의된 기능을 GPIO라는 명칭으로 사용 import time # time 모듈 pin = 18 # Python(BCM) 18번 핀 사용 GPIO.setmode(GPIO.BCM) GPIO.setup(pin,GPIO.OUT) P = GPIO.PWM(pin,50) #PWM 펄스폭 변조, 크기를 50으로 지정 p.start(0) try: while True: var = raw_input(“Enter L/R/C : “) if var == ‘R’ or var == ‘r’ : # R 또는 r 입력되면 각도 Right 조정 print “Right” p.ChangeDutyCycle(2.5) #Dutycycle을 인자로 받아 실행 중에 time.sleep(0.5) elif var == ‘L’ or var == ‘l’ : # L 또는 l 입력되면 각도 Left 조정 print “Left” p.ChangeDutyCycle(12.5) time.sleep(0.5) elif var == ‘C’ or var == ‘c’ : # C 또는 c 입력되면 각도 Center 조정 print “Center” p.ChangeDutyCycle(7.5) time.sleep(0.5) except KeyboardInterrupt: p.stop() GPIO.cleanup()
3. SG90 테스트 C 코드#include <stdio.h> // stdio.h 파일 포함( printf() 사용하기 위해 ) #include <wiringPi.h> // wiringPi.h 파일 포함 #include <softPwm.h> #define SERVO 1 // wiringPi GPIO 1번 = Python(BCM) 18번 int main() { char str; If(wiringPiSetup() == -1) Return 1; softPwmCreate(SERVO,0,200); // 주기를 200으로 하면 20ms 주기를 가지며, 20ms 마다 // 신호가 나오므로 50hz로 볼 수있다 while(1) { fputs(“select c(Center)/r(Right)/l(Left)/q(Quit) : “, stdout); scanf(“%c”, &str); getchar(); if(str == ‘C’ || str == ‘c’) softPwmWrite(SERVO,15); // 0 degree else if(str == ‘R’ || str==’r’) softPwmWrite(SERVO,24); // 90 degree else if(str == ‘L’ || str==’l’) softPwmWrite(SERVO,5); // -90 degree else if(str == ‘Q’ || str == ‘q’) return 0; } return 0; }