아두이노 레시피

아두이노 레시피 : 모터드라이버 사용하기 - 기초편

arduinochef 2025. 2. 22. 18:41

# Recipe 6. 모터드라이버 / L298N (기초 편)

모터드라이버(L298N)를 이용한 아두이노 자동차

안녕하세요~ 아두이노 셰프입니다. 여러 학년을 대상으로 아두이노를 가르쳐봤었는데, 어린 학생들일수록 움직이는 뭔가를 좋아하더라고요ㅎㅎ 이 때문인지 초등학교에서는 ‘아두이노 자동차’가 제일 인기 있었어요. 아두이노는 그 자체로 모터를 동작시킬 수 없어서 따로 드라이버 회로를 필요로 해요. 모델로는 L298N과 L293D가 제일 대표적인데요. 오늘은 L298N 모터 드라이버를 알아볼게요!

(언젠가 멋진 블루투스 자동차를 만들어 보자고요!!)

오늘의 재료 Ingredient


<메인 재료>

모터 드라이버 (모델명 : L298N)

<그 외 재료>

아두이노 우노

암-수 점퍼케이블(4개)

수-수 점퍼케이블(2개)

DC모터 2개 (종류는 상관없어요)

외부전원

(저는 12V 전원어댑터를 사용했지만, 9V건전지로도 충분히 가능해요)


메이킹 방법 Steps

Step 1. 선 연결하기 Wiring

a. 드라이버의 IN1은 아두이노의 D7번 핀에,

b. 드라이버의 IN2는 아두이노의 D6번 핀에,

c. 드라이버의 IN3는 아두이노의 D5번 핀에,

d. 드라이버의 IN4는 아두이노의 D4번 핀에 연결해 주세요.

e. 외부전원의 + 는 드라이버의 12V(터미널블록)에,

f. 외부전원의 - 는 드라이버의 GND(터미널블록)에,

g. 아두이노의 5V는 드라이버의 5V(터미널블록)에,

h. 아두이노의 GND는 드라이버의 GND(터미널블록)에 같이 연결해 주세요.

주의! 모터드라이버를 구매했을 때 ENA, ENB에 점퍼캡이 써져 있을 거예요. 얘네들 제거하지 마세요ㅎㅎ

- - - - - - - - - -

Step 2. 아두이노 코드 Code review

여러분의 요리가 훨씬 간편해질 수 있도록, 숙성이 필요한 코드는 언제나 제가 준비할게요ㅎㅎ

// 모터 A는 7번핀과 6번핀으로 제어할 거에요.
int in1 = 7; //7번핀을 in1이라고 부를게요.(in1이라는 변수를 만들고 7이라는 값을 부여합니다.)
int in2 = 6; //6번핀을 in2라고 부를게요.

// 모터 B는 5번핀과 4번핀으로 제어할 거에요.
int in3 = 5;//5번핀을 in3라고 부를게요.
int in4 = 4;//4번핀을 in4라고 부를게요.

void setup() { //여기있는 코드는 한번만 실행됩니다.
  //모터를 제어할 수 있게 모든 핀들을 OUTPUT모드로 설정할게요.
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
  
  //먼저 모든 모터를 정지하겠습니다.(초기화)
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);
  digitalWrite(in3, LOW);
  digitalWrite(in4, LOW);
}

void loop() {//setup()을 다 실행하고 나면 여기있는 코드가 무한히 반복실행됩니다.
  // 이렇게하면 자동차가 회전할거에요.
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
  digitalWrite(in3, HIGH);
  digitalWrite(in4, LOW);
  delay(4000);
  // 반대방향으로 회전해볼까요?
  digitalWrite(in1, LOW);
  digitalWrite(in2, HIGH);
  digitalWrite(in3, LOW);
  digitalWrite(in4, HIGH);
  delay(4000);
  // 이제 앞으로 가보죠.
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
  digitalWrite(in3, LOW);
  digitalWrite(in4, HIGH);
  delay(4000);
  // "오라이~ 오라이~ ㅋㅋ" 이젠 뒤로 갈게요.
  digitalWrite(in1, LOW);
  digitalWrite(in2, HIGH);
  digitalWrite(in3, HIGH);
  digitalWrite(in4, LOW);
  delay(4000);
  //자 다 했으니까. 멈춰보죠.
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);
  digitalWrite(in3, LOW);
  digitalWrite(in4, LOW);
  delay(4000);
}

 

Step 3. 동작시키기 Working

● 코드를 아두이노 우노에 업로드해 주세요.(업로드 완료 후에도 USB선은 뽑지 않고 유지합니다.)

● 시리얼 모니터를 열어주세요.(값이 표시될 거예요.)

● 손으로 센서 위를 가려보기도 하고, 위에 빛을 비춰보면서 값이 어떻게 바뀌는지 확인해 보세요.


오늘의 레시피는 여기까지입니다~ 더 깊은 맛을 원하시는 분은 아래 과학시즈닝을 참고해 주세요!


과학으로 양념하기” Seasoning

모듈에 대한 과학적 원리와 세부내용으로 레시피에 더 깊은 맛을 넣어봅시다.

- - - - - - - - - -

드라이버에 대하여

과학원리

축하드려요!

이제 아두이노로 모터를 자유롭게 제어하실 수 있게 됐네요.

근데 살짝 궁금하지 않으세요?

“왜 아두이노만으로는 모터를 제어할 수 없을까?”

아두이노는 기본적으로 5V의 전압으로 움직여져요.

물론 12V까지 전원공급을 받을 수 있지만

그 12V도 5V로 변환해서 사용한답니다.

그리고 아두이노의 I/O핀 한 개가

출력할 수 있는 전류량은

작 40mA정도밖에 안 돼요..

센서는 충분히 동작시킬 수 있지만,

모터를 비롯한 대부분의 엑추에이터(구동장치)들은

큰 전류와 전압을 요구해요. (조금 어려운 말로 ‘부하가 크다’라고 합니다.)

그래서 5V, 40mA 이상을 요구하는 모터를 제어하기 위해서

모터드라이버와 외부전원을 사용한답니다.

동작원리

그럼 어떻게 L298N 드라이버는

외부전원으로 모터를 제어할 수 있는 걸까요?

혹시 이전에 릴레이 스위치 기억하세요?

고작 5V로 직류부터 교류전기까지

자유롭게 제어하는 스위치잖아요.

이 L298N 칩에는 이러한 스위치가 4개가 들어있어요.

'H-브리지'라는 구조를 사용하는데요.

자세히 몰라도 돼요.ㅋㅋㅋ

밑에 그림 보면 바로 이해가 될걸요?

 

아두이노로 각각의 스위치를 열고 닫는 거예요.

그래서 4개의 컨트롤핀을 필요로 했던 겁니다. ㅎㅎ

- - - - - - - - - -

코드의 동작 알고리즘

오늘은 알고리즘보다는 코드를 설명해 드릴게요.

알고리즘은

“정회 전, 반회전, 앞으로 뒤로. 이를 5초 간격으로 하라”

밖에 없잖아요ㅋㅋ

간단한 질문 해볼게요.

배터리로 DC모터를 돌리려고 할 때,

어떻게 돌리실 거예요?

당연히 +,-극을 모터에 연결하시겠죠?

그럼 반대로 회전시키려면요?

연결한 +,-극의 위치를 바꾸실 거예요.

축하합니다.

방금 코드원리를 모두 이해하셨어요.ㅋㅋ

모터 A는 IN1, IN2로 제어하고요.

모터 B는 IN3, IN4로 제어합니다.

이 IN들을 극이라고 생각하면 돼요.

아두이노 덕분에 언제든

+ 혹은 -로 바꿀 수 있는 극이지요.

모터 A를 회전시키고 싶으면

IN1을 +, IN2를 -로 하면 되겠죠?

반대로 회전하려면 서로를 바꾸면 되고요.

모터 B도 마찬가지예요.

이렇게 극성을 조작함으로서

원하는 동작(앞으로, 뒤로, 정회 전, 반회전)을

만들 수 있어요.

모터에 (-, -) 혹은 (+,+)를 연결하면 어떻게 될까요?

당연히 회전하지 않겠죠?

전류가 흐르지 않으니까요.

그렇게 IN핀들을 제어하면

당연히 모터들도 멈추게 된답니다.

이런 원리 덕분에 digitalWrite 하나만으로도

충분히 드라이버를 동작시킬 수 있답니다.

혹시나 궁금한 분들을 위해서 얘기하자면

ENA와 ENB는 각 모터의 속도를 제어하는 핀이에요.

전류의 세기에 따라 속도를 조절할 수 있어요.

우리는 속도를 조절할 것은 아니어서

점퍼캡을 이용해 5V(최대세기)에 고정해서 최대속도로 미리 지정한 거랍니다.

나중에 이 드라이버로 프로젝트를 하게 되면 그때 다뤄보도록 하죠^^

- - - - - - - - - -

 

모듈요약 카드

이름 : 모터드라이버 모듈 (L298N)

설명 : 외부전원을 이용해 다양한 모터를 제어하게 해주는 드라이버모듈이다.

모듈의 구성 : 모터를 제어하는 4개의 IN핀과 속도를 제어하는 ENA, ENB핀, 모터를 연결하는 OUT단자들과 외부전원 단자가 있다.