-
아두이노 레시피 : 모터드라이버 사용하기 - 기초편아두이노 레시피 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단자들과 외부전원 단자가 있다.
'아두이노 레시피' 카테고리의 다른 글
아두이노 레시피 : 블루투스 사용하기 - 기본편 (0) 2025.02.23 아두이노 레시피 : 온습도센서 사용하기 - 기본편 (0) 2025.02.23 아두이노 레시피 : 릴레이 모듈 사용하기 - 기초편 (0) 2025.02.22 아두이노 레시피 : 서보모터 사용하기 - 기초편 (1) 2025.02.22 아두이노 레시피 : PIR센서 사용하기 - 기초편 (0) 2025.02.21