본문 바로가기

라즈베리파이

8. 라즈베리파이 DC 모터 제어하기 2

8. 라즈베리파이 DC 모터 제어하기 2

지난 포스팅에서 라즈베리파이를 이용하여 간단하게 DC 모터 방향 및 속도 제어 방법에 대해서 알아 보았습니다.


계속 이어서 DC 모터 2개를 동시에 속도와 방향을 제어하는 방법에 대해서 같이 확인해 봅시다. 


먼저 아래 그림과 같이 DC 모터 2개를 구동하기 위한 회로를 구성해 봅시다.

외부 전원 6 Volt 사용(1.5 Volt 4개 직렬 연결)

  • L298N 모터 드라이브의 GND는 라즈베리파이의 Ground와 외부 전원의 (-) 극과 연결
  • L298N 모터 드라이브의 +12V는 외부 전원의 (+)극과 연결
  • L298N 모터 드라이브의 OUT1OUT2는 DC 모터(왼쪽)의 2개의 선과 연결(순서에 상관없이 연결 후 모터 회전 방향이 생각했던 방향과 반대로 회전하면 연결하였던 선의 순서를 변경하면 됩니다.)
  • L298N 모터 드라이브의 IN1과 라즈베리파이 GPIO 12 핀과 연결
  • L298N 모터 드라이브의 IN2와 라즈베리파이 GPIO 16 핀과 연결
  • L298N 모터 드라이브의 OUT3OUT4는 DC 모터(오른쪽)의 2개의 선과 연결
  • L298N 모터 드라이브의 IN3과 라즈베리파이 GPIO 20 핀과 연결
  • L298N 모터 드라이브의 IN4와 라즈베리파이 GPIO 21 핀과 연결


준비가 완료되었으면 2개의 모터를 동시에 제어하기 위한 파이썬 코드를 작성해보자.


지난번 포스팅에서는 DC 모터 1개를 제어하기 위해서 gpiozero.Motor()라는 Class을 사용하였지만 이 번 포스팅에서는 gpiozero.Robot()라는 Class을 사용하여 DC 모터 2개를 동시 제어합니다.


Robot Class에서 left는 왼쪽 DC 모터에 연결된 GPIO번호(12와 16)를 튜플 형식으로 입력하고 right에는 마찬가지로 오른쪽 DC 모터에 연결된 GPIO 번호(20과 21)를 입력하면 2개의 모터가 동시 제어가 가능해 집니다. 


forward(), backward()함수 내의 speed에는 0에서 1 사이의 숫자를 입력하면 입력한 숫자에 따라 DC 모터의 속도가 가변 됩니다. 1 일 때가 최대 속도입니다. 


from gpiozero import Robot

import time


dc_motor = Robot(left=(12, 16), right=(20, 21))


for num in range(4):

print(num, "Forward 회전")

dc_motor.forward(speed=1)

time.spleep(3)


print("모터 정지")

dc_motor.stop()

time.sleep(0.5)


print(num, "Backward 회전")

dc_motor.backward(speed=0.5)

time.sleep(3)


dc_motor.stop()


DC 모터 2 개가 동시에 잘 동작하나요?


앞으로 회전할 때는 최대 속도로 3 초간 회전하고 잠시(0.5초) 정지 후 50%의 속력으로 뒤로 3 초간 회전하는 것을 4회 반복할 것입니다.


오늘은 DC 모터 2개를 동시에 제어하는 방법에 대해서 알아보았습니다.  


내용 중에 잘 안되는 부분이 있으면 댓글 남겨 주세요.