아두이노2016. 3. 21. 15:32

L298N 모듈은 모터의 제어를 위한 모터 드라이버 모듈이다. 모터의 제어가 필요한 프로젝트를 진행 할 시 필수적으로 모터 드라이버 모듈이 사용된다. 모터 드라이버는 모터의 속도, 정방향, 역방향 회전 등을 아두이노의 프로그래밍을 통해서 제어하게 된다. 물론 블루투스 모듈, 와이파이 모듈 등을 결합한다면 모터의 원격조종도 가능하게 되어 홈오토메이션이나 로봇 등의 제어에도 사용할 수 있다. L298N 을 사용한 모터드라이버 모듈의 생김새는 다음과 같다.


가운데에 커다랗게 L298N 칩이 커다란 방열판과 함께 위치해 있으며 좌측과 우측에 각각 모터의 연결을 위한 아웃풋 단자가 마련되어 있다. 앞쪽에는 모터를 구동하기 위한 외부전원 입력 단자(12V 입력)와 그 우측에는 아두이노와 연결하여 컨트롤 하기 위한 단자들이 마련되어 있다. 또한 5V 레귤레이터에 의해 출력되는 5V 출력단자가 있어서 아두이노 등의 전원으로 활용이 가능하다. 


이 모듈은 2개의 DC모터 제어할 수 있으며 1개의 스텝모터를 제어할 수 있다. 그리고 모터 A, B의 정회전, 역회전과 함께 속도조절을 원할 경우 양끝의 단자인 ENA, ENB의 핀을 제거하고 아두이노 PWM 단자에 연결하면 analogWrite 를 이용하여 0~255 단계로 모터의 속도를 조절 할 수 있다. 즉 analogWrite(PIN번호, 127) 을 하게되면 모터는 절반의 속도로 회전하게 된다.


■ L198 H Bridge 데이터시트: 

L298_H_Bridge.pdf



이번에는 DIY 용으로 많이 쓰이는 노란색 기어박스 모터를 움직여 보려고 한다.


DC모터로 구동되는 기어박스 모터



9V 외부전원용 배터리



아두이노와 L298N 모듈 그리고 외부전원의 연결은 다음과 같이 연결을 하였다.



■ Fritzing 파일

L298N_DC_Motor.fzz



위와 같이 연결을 해 주었으며 오른쪽 모터가 A 왼쪽이 B이다. 


소스

모터 A와 B를 각각 아두이노로 컨트롤 하는 소스이다. 모터A는 6,7번, 모터B는 4,5번 디지털 단자에 연결되어 컨트롤 되고 각각 digitalWrite 신호를 보내게 된다.

기본 원리는 L298N의 IN1 단자에 신호가 걸리면 모터A가 정회전하게 되고 IN2 단자에 신호가 걸리면 역회전 하게 된다. 모터B의 경우도 마찬가지이다. (IN3-정회전, IN4-역회전)

아래의 소스는 2개의 DC모터를 컨트롤하는 경우의 함수를 만들어 loop()에서 하나씩 호출하여 모터를 제어하는 소스이다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
//모터A 컨트롤
int IN1=7;
int IN2=6;
 
//모터B 컨트롤
int IN3=5;
int IN4=4;
 
void setup() {
  pinMode(IN1,OUTPUT);
  pinMode(IN2,OUTPUT);
  pinMode(IN3,OUTPUT);
  pinMode(IN4,OUTPUT);
}
 
void loop() {
  bothMotorStart();
  delay(3000);
  turnLeft();
  delay(3000);  
  turnRight();
  delay(3000);
  motorA_Rotation();
  delay(3000);
  motorB_Rotation();
  delay(3000);
  motorA_Reverse();
  delay(3000);
  motorB_Reverse();
  delay(3000);
  stopAllMotor();
  delay(3000);
}
 
//모터A,B 정회전
void bothMotorStart()
{
    digitalWrite(IN1,HIGH);
    digitalWrite(IN2,LOW);
    digitalWrite(IN3,HIGH);
    digitalWrite(IN4,LOW);
}
 
//모터A,B Stop
void stopAllMotor()
{
    digitalWrite(IN1,LOW);
    digitalWrite(IN2,LOW);
    digitalWrite(IN3,LOW);
    digitalWrite(IN4,LOW);
}
 
//모터A 역회전, 모터B 정회전
void turnLeft()
{
    digitalWrite(IN1,LOW);
    digitalWrite(IN2,HIGH);
    digitalWrite(IN3,HIGH);
    digitalWrite(IN4,LOW);
}
 
//모터A 정회전, 모터B 역회전
void turnRight()
{
    digitalWrite(IN1,HIGH);
    digitalWrite(IN2,LOW);
    digitalWrite(IN3,LOW);
    digitalWrite(IN4,HIGH);
}
 
//모터A 정회전, 모터B Stop
void motorA_Rotation()
{
    digitalWrite(IN1,HIGH);
    digitalWrite(IN2,LOW);
    digitalWrite(IN3,LOW);
    digitalWrite(IN4,LOW);
}
 
//모터A Stop, 모터B 정회전
void motorB_Rotation()
{
    digitalWrite(IN1,LOW);
    digitalWrite(IN2,LOW);
    digitalWrite(IN3,HIGH);
    digitalWrite(IN4,LOW);
}
 
//모터A 역회전, 모터B Stop
void motorA_Reverse()
{
    digitalWrite(IN1,LOW);
    digitalWrite(IN2,HIGH);
    digitalWrite(IN3,LOW);
    digitalWrite(IN4,LOW);
}
 
//모터A Stop, 모터B 역회전
void motorB_Reverse()
{
    digitalWrite(IN1,LOW);
    digitalWrite(IN2,LOW);
    digitalWrite(IN3,LOW);
    digitalWrite(IN4,HIGH);
}
cs





이로서 기본적인 아두이노와 L298N 모터 드라이버 모듈을 연결하여 DC모터를 제어하는 방법에 대해 알아보았다. 위에서 언급했다시피 블루투스나 와이파이 모듈과의 연결을 통하여 원격제어를 한다면 유용하게 쓰일 수 있는 모터 드라이버 모듈로 생각된다.


☞ L298N 2편 모터의 속도제어

반응형
Posted by 대네브 (deneb)

댓글을 달아 주세요

  1. 모터드라이버 12v 외부전원 핀에 9v 배터리를 연결해도 상관이 없나요?

    2016.08.12 12:18 [ ADDR : EDIT/ DEL : REPLY ]
    • 네 별 이상 없었습니다. 9v도 연결해 보았고 1.5, 4개 6v 연결해도 동작이 되더군요... 다만 권장은 12v 이니 되도록이면 12v가 좋겠죠

      2016.08.12 12:21 신고 [ ADDR : EDIT/ DEL ]
  2. 빠른 답변 감사합니다
    모터드라이버 5v 핀은 전원공급 외에 다른 용도로도 쓰이나요?

    2016.08.12 12:27 [ ADDR : EDIT/ DEL : REPLY ]
    • 저기 그림에 드라이버 5v 핀에 대한 설명이 잘 못 되어 있는것 같아요. 오래전에 쓴 글이라...;; 외부전원 입력하면 레귤레이터에 의해서 5v 출력이 나옵니다. 이걸 아두이노 vin 에 연결해서 아두이노 전원으로 사용 가능 합니다. 물론 따로 해도 되구요. 내용 수정해야겠네요.

      2016.08.12 12:37 신고 [ ADDR : EDIT/ DEL ]
  3. jwc2012

    좋은파일 감사합니다 ㅎㅎ

    2016.10.31 17:31 [ ADDR : EDIT/ DEL : REPLY ]
  4. 이혁재

    정말 쉽게 설명해주셔서 너무 감사합니다

    2017.06.11 13:35 [ ADDR : EDIT/ DEL : REPLY ]
  5. simsim

    모터드라이브랑 리니어모터를 연결해서 하는데 역방향은 안되네요 ㅜㅜ 도와주세요 ㅜㅜ

    2017.06.14 14:55 [ ADDR : EDIT/ DEL : REPLY ]
  6. 익명

    비밀댓글입니다

    2017.08.10 12:40 [ ADDR : EDIT/ DEL : REPLY ]
    • 글쎄요. 어떤 컴파일러를 사용하는지 모르겠지만 함수의 위치를 바꿔보세요. 36줄 부터 105줄 까지 정의된 함수들을 void setup() 위로 올리는 겁니다. 컴파일러 특성을 타서 그럴 수도 있습니다.

      2017.08.12 06:49 신고 [ ADDR : EDIT/ DEL ]
  7. noname

    dc모터를 그냥 9v건전지에 연결했을 때 구동이 되는데 모터드라이버와 라즈베리파이를 연결했을 때 모터가 구동이 되지 않습니다.. 문제가 무엇일까요.. 배터리가 부족해서일까요?

    2017.08.24 15:35 [ ADDR : EDIT/ DEL : REPLY ]
    • 너무 막연한 질문 입니다

      2017.08.25 06:51 신고 [ ADDR : EDIT/ DEL ]
    • noname

      9v와 6v 합쳐서 모터드라이버에 연결햇는데도 돌아가지 않는 건 왜 그런거죠..?

      2017.08.25 11:47 [ ADDR : EDIT/ DEL ]
    • 전지가 망간전지일 경우 전류가 낮아 작동되지 않을 수도 있으니 알칼라인을 이용해 보세요.

      2017.08.25 13:07 신고 [ ADDR : EDIT/ DEL ]
  8. zzertkm

    이거 없으면 모터 안돌아가나요?(5v말고 디지털이나 아날로그 핀에 꼽아서 HIGH 이나 1023으로 값을 주었을때)

    2018.07.18 17:44 [ ADDR : EDIT/ DEL : REPLY ]
    • 돌아가겠죠. on/off 로만...
      단, 모터가 저전력 모터일 경우...
      그런데 안하는게 좋을 겁니다. 역전류 때문에 아두이노에 손상이 갈 수 있습니다. 역전류 방지 다이오드를 달던지요...

      2018.07.18 18:27 신고 [ ADDR : EDIT/ DEL ]
  9. Scimania

    방열판을 제거하면 성능이나 효율이 떨어지거나 오래사용하지 못하나요?

    2018.12.16 12:57 [ ADDR : EDIT/ DEL : REPLY ]
    • 전류 전압이 높을 경우 발열이 생길 수 있으므로 붙이는게 좋습니다

      2018.12.16 13:57 신고 [ ADDR : EDIT/ DEL ]
  10. kimysnara

    두개 모터를 좌우 버튼 움직이는 버튼을 추가한다면 어디에 연결해야 하나요? 버튼은 총 4개 겠죠?

    2019.02.17 22:43 [ ADDR : EDIT/ DEL : REPLY ]
    • 위의 모터 컨트롤 부분을 스위치로 call하면 됩니다. 스위치 부분은 제 블로그에서 스위치 검색 바랍니다.

      2019.02.18 07:11 신고 [ ADDR : EDIT/ DEL ]
  11. rkatkgkqslek

    한쪽만 안돌아가는데 어떻게해야하나요 ㅠ

    2019.11.11 11:02 [ ADDR : EDIT/ DEL : REPLY ]
    • 여러가지 원인이 있을 수 있어요. 배선, 전원, 코드, 부품불량 등...

      2019.11.11 17:05 신고 [ ADDR : EDIT/ DEL ]
  12. 레이먼

    DC220V모터를 정역회전, 속도제어는 어떻게 해야하는지 전문가의 도움 요청드립니다

    2020.05.17 12:02 [ ADDR : EDIT/ DEL : REPLY ]
    • DC라고 하셨지만 가정용 220V를 사용하는 교류 (AC) 모터를 말씀하시는것 같은데 그건 저도 잘 모릅니다

      2020.05.17 12:23 신고 [ ADDR : EDIT/ DEL ]
  13. 동동

    안녕하세요 l298을 사용한다면 다이오드는 따로 사용안해줘도되는건가요???

    2021.01.07 00:37 [ ADDR : EDIT/ DEL : REPLY ]