본문 바로가기
Python

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

by teamnova 2023. 7. 15.

안녕하세요.

이번에는 라즈베리파이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()