반응형

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편 모터의 속도제어

반응형

+ Recent posts