본문 바로가기
라즈베리파이&아두이노

PWM으로 서보모터 제어

by minimax95 2020. 12. 26.

이번 포스팅에서는 GPIO 모듈의 PWM을 이용한 서보모터 제어에 대해 정리해 보겠습니다.

 

이번에 사용할 서보모터는 아래와 같습니다.

서보모터의 연결선이 주황색, 빨간색, 갈색으로 되어 있습니다.

주황색은 GPIO 18번에 연결하고 빨간색은 VCC(5V), 갈색은 GND에 연결하도록 하겠습니다.

 

아래 이미지처럼 각각의 선을 보드 확장 쉘드에 연결해 주었습니다.

이제 파이썬으로 서보모터 제어를 위한 소스코드를 작성해 보겠습니다.

각도 제어를 위해 기준이 되는 주파수는 50hz의 신호로 Duty Cycle을 아래와 같이 설정해 주겠습니다.

        주파수(hz)        Duty Cycle       각도 변이
50 2.5 0
7.5 90
12.5 180

import RPi.GPIO as GPIO

import time

 

GPIO.setwarnings(False)

GPIO.setmode(GPIO.BCM)

 

#서보모터 제어핀 설정

SERVO_PIN = 18

 

#서보모터 출력 설정

GPIO.setup(SERVO_PIN, GPIO.OUT)

 

#PWM 인스턴스 생성 및 주파수 50hz 초기화 설정

servo = GPIO.PWM(SERVO_PIN, 50)

 

#Duty Cycle 0으로 시작

servo.start(0)

 

try:

    while True:

        servo.ChangeDutyCycle(7.5)    #90도

        time.sleep(1)

        servo.ChangeDutyCycle(12.5)  #180도

        time.sleep(1)       

        servo.ChangeDutyCycle(2.5)   #0도

        time.sleep(1)

 

except KeyboardInterrupt:

    pass

 

servo.stop( )

GPIO.cleanup( )


실제 위 소스코드를 실행해 보겠습니다.

 

 

90도, 180도, 0도로 서보모터가 잘 회전하는 것을 확인할 수 있었습니다.

 

PWM을 통한 서보모터 제어에 대해서 정리해 보았습니다.

감사합니다.

댓글