이번 포스팅에서는 파이썬 코드를 통해서 PS3 컨트롤러로 서보모터를 움직일 수 있는 프로그램을 만들어 볼께요.
시작하기 전에
먼저 PS3 컨트롤러와 서보모터를 제어하는 포스팅을 읽어주세요. 본 포스팅은 아래 두 포스팅의 내용이 라즈베리파이에 적용되었다는 전제로 작성되었습니다.
2020/09/02 - [라즈베리파이] - 라즈베리파이(Raspberry Pi) 서보 모터 제어하기
2020/09/03 - [라즈베리파이] - 라즈베리파이(Raspberry Pi) PS3 컨트롤러 조작하기
Github에서 코드 받기
PS3 컨트롤러 조작하기 포스팅을 완료하셨다면 라즈베리파이에 ps3-controller 폴더가 존재할것입니다. 아직 읽어보지 않으셨다면 아래와 같이 코드를 받고 라이브러리를 설정해 주세요.
그리고 github에서 제가 만든 PS3 컨트롤러 제어 코드를(https://github.com/jlim262/ps3-controller) Projects 폴더에 클론해주세요.
pi@raspberrypi:~ $ mkdir ~/Projects && cd ~/Projects
pi@raspberrypi:~/Projects $ git clone https://github.com/jlim262/ps3-controller.git
이제 파이썬3 개발환경을 virtualenv를 사용해서 생성 후 로드할께요.
pi@raspberrypi:~/Projects $ virtualenv venv-py3 -p python3
pi@raspberrypi:~/Projects $ source venv-py3/bin/activate
(venv-py3) pi@raspberrypi:~/Projects $
그리고 ps3-controller 폴더로 이동 후, pip로 필요한 라이브러리를 설치해주세요.
(venv-py3) pi@raspberrypi:~/Projects $ cd ps3-controller
(venv-py3) pi@raspberrypi:Projects/ps3-controller ‹master›$ pip install -r requirements.txt
라즈베리파이에서 서보모터를 제어하기 위해서는 아래와 같이 추가 라이브러리를 설치해주세요.
(venv-py3) pi@raspberrypi:Projects/ps3-controller ‹master›$ pip install RPi.GPIO
(venv-py3) pi@raspberrypi:Projects/ps3-controller ‹master›$ pip install gpiozero
이제 servo_control.py 라는 이름의 파일을 ps3-controller 폴더 안에 만들어주세요. 그리고 텍스트 에디터를 열어서 servo_control.py의 내용을 아래와 같이 편집해주세요.
from gpiozero import Servo
from ps3_controller import PS3Controller
from event_handler import EventHandler
class ServoHandler(EventHandler):
def __init__(self, gpio_pin):
super().__init__()
self.servo = Servo(gpio_pin)
def handle_x(self):
return {'stop': True}
def handle_stick(self, axies):
if sum(axies) > 0 or sum(axies) < 0:
self.servo.value = axies[0]
else:
self.servo.value = 0
if __name__ == "__main__":
handler = ServoHandler(17)
controller = PS3Controller(handler)
controller.run()
print('Program is stopped')
만약 다른 버튼을 눌렀을때 원하는 코드를 실행하기 위해서는 ServoHandler의 부모 클래스인 EventHandler의 메소드를 오버라이드 해주시면 됩니다. 현재 지원되는 함수는 아래와 같습니다.
handle_stick(axies)
handle_x()
handle_circle()
handle_triangle()
handle_square()
handle_l1()
handle_l2()
handle_l3()
handle_r1()
handle_r2()
handle_r3()
handle_up()
handle_down()
handle_left()
handle_right()
handle_select()
handle_start()
handle_ps()
각각의 버튼들의 이름은 아래 사진과 같습니다. 즉, R1 버튼을 눌렀을때 특정 코드를 실행시키고 싶다면 handle_r1() 함수를 오버라이드 해서 특정코드를 추가시키면 됩니다.
이제 파이썬 코드를 실행해 보겠습니다.
(venv-py3) pi@raspberrypi:Projects/ps3-controller ‹master*›$ python servo_control.py
PS3 컨트롤러의 왼쪽 스틱을 움직이면 서보모터 역시 따라서 움직이는 것을 확인 할 수 있습니다. 그리고 X 버튼을 누르면 프로그램이 종료됩니다. 오늘 포스팅은 여기서 마치도록 하겠습니다. 혹시 파이썬 코드 실행중에 문제가 생긴다면 답글로 알려주세요.
그럼 즐파이 하세요~!!
'로보틱스 > 라즈베리파이' 카테고리의 다른 글
라즈베리파이 4 공식 데스크탑 키트 개봉기 (0) | 2020.09.08 |
---|---|
라즈베리파이 제로 시작하기 (0) | 2020.09.06 |
PS3 컨트롤러 조작하기 [라즈베리파이(Raspberry Pi)] (0) | 2020.09.03 |
서보 모터 제어하기 [라즈베리파이(Raspberry Pi)] (0) | 2020.09.02 |
scp 명령으로 파일 전송하기 [라즈베리파이(Raspberry Pi)] (0) | 2020.08.31 |
댓글