본문 바로가기
로보틱스/라즈베리파이

서보 모터 제어하기 [라즈베리파이(Raspberry Pi)]

by J-Build 2020. 9. 2.

오늘은 라즈베리파이로 서보모터를 제어해 볼께요. 제가 사용하는 서보모터는 Hitec HS-303 입니다. 가격은 약 2만원정도 합니다.

 

Hitec HS-303 서보모터

자세한 스펙은 아래와 같습니다. 전원은 5V로 인가하면 되고 회전각도는 180도 까지 가능하네요. 

Hitec HS-303 - Economy Servo Specifications 

  • Modulation: Analog
  • Torque: 4.8V: 49.00 oz-in (3.53 kg-cm)
  • Speed: 4.8V: 0.19 sec/60° 6.0V: 0.15 sec/60°
  • Weight: 1.71 oz (48.5 g)
  • Dimensions: Length:1.60 in (40.6 mm) Width:0.80 in (20.3 mm) Height:1.40 in (35.6 mm)
  • Motor Type: 3-pole
  • Gear Type: Plastic
  • Rotation/Support: Bushing
  • Rotational Range: 180°
  • Pulse Cycle: 20 ms
  • Pulse Width: 900-2100 µs

 

라즈베리파이 GPIO Pinout 살펴보기

라즈베리파이 제로를 제외한 모든 라즈베리파이는 아래와 같이 40핀 GPIO 헤더가 붙어있어요. 이 핀들은 전원을 제공하기도 하고 그라운드 그리고 신호제어를 하기 위한 용도에요. 

이미지 출처 - 라즈베리파이 공식페이지 (https://www.raspberrypi.org/)

아래 그림처럼 핀들은 빨간색과 주황색은 전원, 검정색은 그라운드, 노란색은 신호제어를 할 수 있도록 나눠져 있어요. 

이미지 출처 - 라즈베리파이 공식 페이지 (https://www.raspberrypi.org/)

준비물

그럼 준비물을 알아볼께요. 라즈베리파이는 제로를 제외한 모든 버전에서 가능합니다. 와이어 점퍼는 서보모터의 커넥터를 쉽게 라즈베리파이 GPIO 핀들에 연결하기 위한 목적이에요. 

  • 라즈베리파이
  • 서보모터 1개
  • Wire jumper male to female 3개

참고로 점퍼케이블 사진 첨부할께요

Male to Female jumper cable

 

파이썬 라이브러리 설치

라즈베리파이에서 GPIO제어를 위해서는 아래와 같은 라이브러리를 설치해 주어야 합니다. 

저는 파이썬 3.7을 사용하고 있고 독립적으로 라이브러리 관리를 위해서 vitualenv 툴을 사용하고 있습니다. 라이브러리의 버전이 꼬여버리는것을 방지하기 위해서 저는 virtualenv를 사용하는것을 추천드립니다. 그럼 먼저 virtualenv를 설치해 볼께요.

pi@raspberrypi:~ $ sudo pip install virtualenv

 

설치가 완료되었으면 파이썬코드를 저장할 폴더를 만들어주세요. 저는 저는 Projects라는 폴더를 만들고 그 안에 gpio-control이라는 폴더를 만들었어요. 

pi@raspberrypi:~ $ mkdir -p ~/Projects/gpio-control

 

Projects 폴더로 이동후 virtualenv로 python3 개발환경을 하나 만들께요. 

pi@raspberrypi:~ $ cd ~/Projects
pi@raspberrypi:~/Projects $ virtualenv venv-py3 -p python3
created virtual environment CPython3.7.3.final.0-32 in 771ms
  creator CPython3Posix(dest=/home/pi/Projects/venv-py3, clear=False, global=False)
  seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/home/pi/.local/share/virtualenv)
    added seed packages: pip==20.2.2, setuptools==49.6.0, wheel==0.35.1
  activators BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator

 

이제 방금 만들 python3 virtualenv 환경을 로드할께요. 그럼 쉘 앞쪽에 방금 위에서 만든 venv-py3 환경 이름이 아래처럼 추가가 됩니다. 그리고 이 환경에 GPIO 제어에 필요한 라이브러리 2개를 설치해 줄께요. 

pi@raspberrypi:~/Projects $ source venv-py3/bin/activate
(venv-py3) pi@raspberrypi:~/Projects $ pip install RPi.GPIO
(venv-py3) pi@raspberrypi:~/Projects $ pip install gpiozero

 

그럼 실제 프로젝트 폴더인 gpio-control 폴더로 이동합니다. 

(venv-py3) pi@raspberrypi:~/Projects $ cd gpio-control
(venv-py3) pi@raspberrypi:Projects/gpio-control $

 

그리고 gpio.py 파일을 만들고 아래 내용을 입력시켜 주세요. 이 파일은 GPIO 17번핀을 사용해서 서보모터의 위치를 최대, 중간, 최소로 계속 움직여주게 합니다. 소프트웨어는 이제 준비가 되었습니다.

from gpiozero import Servo
from time import sleep

servo = Servo(17)

while True:
    servo.min()
    sleep(1)
    servo.mid()
    sleep(1)
    servo.max()
    sleep(1)
    servo.mid()
    sleep(1)

 

서보모터 연결

이제 서보 모터를 라즈베리파이에 연결해주세요. 서보모터의 빨간색 핀을 라즈베리파이 GPIO 5v 핀에 연결, 서보모터의 검정색 핀을 라즈베리파이 GPIO ground 핀에 연결, 그리고 서보모터의 노란색 핀을 라즈베리파이의 GPIO 17번 핀에 연결합니다. 저는 아래처럼 연결을 했어요.

 

서보모터 연결

 

서보모터 프로그램 실행

자 이제 마지막으로 아까 코딩했던 파이썬 코드를 실행해 볼께요. 

(venv-py3) pi@raspberrypi:Projects/gpio-control $ python gpio.py

 

그럼 아래와 같이 동작하는것을 확인 할 수 있습니다. 

 

서보모터 동작

 

이제 터미널에서 Ctrl C 를 눌러서 프로그램을 빠져나오세요. 사용중인 python3 개발환경(venv-py3)를 빠져나오게 위해서는 아래 명령을 입력해주세요. 

(venv-py3) pi@raspberrypi:Projects/gpio-control $ deactivate
pi@raspberrypi:Projects/gpio-control $

 

개발환경을 다시 로드해서 프로그램을 실행 시키고 싶다면 아래 명령을 해주시면 되겠죠. 

pi@raspberrypi:~ $ source ~/Projects/venv-py3/bin/activate
(venv-py3) pi@raspberrypi:~ $ cd ~/Projects/gpio-control
(venv-py3) pi@raspberrypi:Projects/gpio-control $ python gpio.py

 

팁~! 

개발환경 로드는 아래와 같이 alias를 해 놓으면 더 쉽게 사용할 수 있어요. 먼저 텍스트 에디터로 ~/.zshrc 파일을 열어줍니다. (저는 zsh를 사용하고 있기 때문에 .zshrc파일을 여는것입니다. 라즈베리파이는 기본적으로 bash를 사용하기 때문에 기본쉘을 사용하고 있다면 ~/.bashrc 파일을 열어주세요)

pi@raspberrypi:~ $ vi ~/.zshrc

 

그리고 파일 제일 아래부분에 아래 내용을 복사해서 붙여넣어주세요. 

alias venv-py3="source ~/Projects/venv-py3/bin/activate"

 

파일을 저장하고 편집기를 닫아주세요. 그리고 터미널을 종료후 다시 접속하세요. 그리고 아래처럼 명령을 입력하면 virtualenv 환경이 로드가 됩니다. 

pi@raspberrypi:~ $ venv-py3
(venv-py3) pi@raspberrypi:~ $
(venv-py3) pi@raspberrypi:~ $ deactivate
pi@raspberrypi:~ $

 

오늘 포스팅은 여기까지입니다. 

그럼 즐파이 하세요~!! 

 

댓글