프로젝트 대표사진

라즈베리파이 서보모터 ( SG90 ) 제어

라즈베리파이 서보모터 ( SG90 ) 제어
라즈베리파이 서보모터 ( SG90 ) 제어 작성자 : 네오즈

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;
}

 

※ e4ds make에 등록된 자료는 e4ds와 지식 제공자(기업포함) 이외에는 상업화 용도로 사용할 수 없습니다. 영리 목적 이외의 사용 시 출처를 밝혀야 합니다.