커뮤니티

  • 제 목 라즈베리파이 서보모터 ( SG90 ) 제어
  • 작성자 네오즈 조회 : 9,971 좋아요 : 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;
    }
    

     

  • #유튜브 #제목