Python

[Python] 라즈베리파이3와 L298N 모터드라이버로 DC 모터 제어하기

teamnova 2023. 7. 15. 12:00
728x90

안녕하세요.

이번에는 라즈베리파이3와 L298N 모터드라이버로 DC모터의 회전 방향과 속도를 제어하는 예제를 진행하겠습니다.

 

준비물은 다음과 같습니다.

1. 라즈베리파이3

2. L298N

3. DC모터 2개

 

L298N은 모터의 회전방향, 회전속도를 제어할 수 있게 해주는 모터 드라이버입니다.
그림과 표를 보면서 사용법을 설명하겠습니다.

L298N
L298N 함수

 

사진을 보면 Input1, Input2, Input3, Input4 가 있습니다.

연결된 라즈베리파이3에서 표와 같이 디지털 값을 Input1, Input2에 보내서 A 모터를 제어할 수 있고, Input3, Input4에 보내서 B 모터를 제어할 수 있습니다.

 

GpioZero 라이브러리를 사용하여 모터를 제어하겠습니다. GpioZero의 핀배열은 다음과 같습니다

라즈베리파이3 핀배열

예제에서는

IN1 -> GPIO 22

IN2 -> GPIO 23

IN3 -> GPIO 24

IN4 - > GPIO 25

로 연결해서 사용합니다.

 

연결된 구조는 다음 그림과 같습니다.

 

파이썬 코드는 다음과 같습니다.

from gpiozero import Motor
from time import sleep

# 모터 핀 세팅.
motorR = Motor(forward=23,backward=22) # 오른쪽 모터 객체 생성. (그림에서 A 방향)
motorL = Motor(forward=24,backward=25) # 왼쪽 모터 객체 생성. (그림에서 B 방향)

# speed 변수에 0~1 사이의 값을 넣어서 속도를 조절할 수 있다. 수가 클수록 빠르다.
# 3초 동안 전진
motorR.forward(speed=0.7)
motorL.forward(speed=0.7)
sleep(3)

# 3초 동안 후진
motorR.backward(speed=0.7)
motorL.backward(speed=0.7)
sleep(3)

# 3초 동안 좌회전
motorR.forward(speed=0.7)
motorL.backward(speed=0.7)
sleep(3)

# 3초 동안 우회전
motorR.backward(speed=0.7)
motorL.forward(speed=0.7)
sleep(3)

# 양쪽 모터 정지.
motorR.stop()
motorL.stop()