본문으로 바로가기

  아두이노(Arduino) 중급 모터 2편 - DC 모터  


애드라이프의 아두이노 모든 포스팅 리스트를 보고 싶으신 분은 공지 읽어주세요.


참고로 중급편 부터는 응용편이 없습니다. 

왜냐하면 고급편에서 중급에 사용했던 부품의 응용편을 다룰 예정이기 때문이죠!!


안녕하세요. 애드라이프 입니다.

모터 2편에서는 DC모터를 다루게 되었습니다.


우선 DC모터는 무엇일까요?


1. DC모터 

 직류전원에 의해 기계적인 동력을 얻는 모터입니다.

예전 미니카 모터를 분해해본 경험이 있다면 알 수 있는 사실입니다만 

DC모터 안에는 자석이 들어있습니다. 그리고 동선이 많이 감아져 있는 코일이 존재하죠.

거기서 자석은 고정되어있고 코일에 흐르는 전류에 방향에 의해 모터회전 방향이 정해지죠.

권장사양 이상의 전압을 인가하게되면 코일이 손상될 우려가 있으니 자신이 사용하는 모터의 사양을 

꼭 확인 한 후 인가전압을 정 할 수 있도록 합니다.


본격적으로 DC모터를 시작하기 전에 DC모터의 회전 방향을 조절하고 속도를 조절 할 수있도록 하기위해서는 모터 드라이버가 필요합니다. 그 역할을 해주는 IC가 L293B이죠.

뭐...모터 회전 방향을 수동으로 바꾸는 방법도 있습니다. 선을 바꿔 끼면되요...꼭 하셔야겠다면요.

그리고 고속으로 회전하는 DC모터의 회전력을 힘으로 바꾸기 위해선 기어박스를 사용하면됩니다.

제가 이번 포스팅에 쓸 DC모터도 기어박스가 결합되어 있는 상태입니다.


모터 1편 서보모터에서도 언급하였지만 모터는 기본적으로 전류를 많이 소비하기때문에 

외부전원을 연결하여 사용하는 것을 권장합니다.


그럼 L293B를 자세하게 알아볼까요?

모터드라이버(L293D)

L293B 핀 배치도입니다. (사진은 L293D이지만 사용하는 것은 L293B입니다.)


각 핀별로 특징을 살펴보겠습니다.


 핀 번호

핀 설명 

 1

Motor1 Enable

DC모터의 속도 설정

1번핀에 HIGH를 입력하면 최대속도로 회전

PWM을 이용하여 속도조절 가능(AnalogWrite()함수이용) 

1번핀에 LOW를 입력하면 모터 멈춤

 2

 모터 Input 1-1

Input 1-1, 1-2는 1번 모터의 회전 방향을 결정

Input 1-1을 HIGH Input 1-2를 LOW -> 모터 정방향

Input 1-1을 LOW Input 1-2를 HIGH -> 모터 역방향

 3

 모터 Output 1-1

Output 1-2 와 함께 DC모터에 연결되는 핀

 4,5,12,13

 GND

 6

 모터 Output1-2

Output 1-1 와 함께 DC모터에 연결되는 핀

 7

모터 Input1-2

상세설명 2번핀 참조 

 8

 모터 구동 전원(최대 36V)

 9,10,11

 1,2,3번핀 설명 참조

 14,15

 6,7번 핀 설명 참조

 16

 모터 구동 IC 전원(4.5V~36V)


L293B IC를 가지고 DC모터를 정방향 역방향을 전환해가며 돌리고 속도도 조절해보겠습니다.

DC모터를 돌리기위한 회로도를 같이 살펴봅시다.▼

아두이노 - 모터드라이버를 사용한 DC모터 제어회로

좀 배선이 복잡한가요? 위에 핀설명표를 참고하면서 회로를 하나하나 보면 좀더 쉬울겁니다.

다이오드 두개가 달려있는데 다이오드의 특성을 이용하여 역으로 전류가 흐르는 것을 방지하기 위함입니다.

실제로 회로를 구성하기 전에 TINKERCAD에서 프로그램을 시뮬레이션 해보세요. 간단한 회로문제는 

시뮬레이터에서도 발견가능하기 때문에 문제발생을 미리 방지할 수 있습니다.


이제 프로그램을 같이 살펴볼까요?▼

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
int DC_motorEnablePin = 9;                    //DC모터의 속도를 조정할수있는 L293B의 1번 Enable핀을 아두이노 디지털9번핀에 연결
int motor_in1 = 2;                            //L293B의 IC IN1-1핀을 아두이노 디지털2번핀에 연결
int motor_in2 = 4;                            //L293B의 IC IN1-2핀을 아두이노 디지털4번핀에 연결
 
void setup() {
  pinMode(motor_in1,OUTPUT);                    //디지털2번핀을 OUTPUT으로 설정합니다.
  pinMode(motor_in2,OUTPUT);                    //디지털4번핀을 OUTPUT으로 설정합니다.
  analogWrite(DC_motorEnablePin,0);             //초기 모터 속도를 0으로 설정합니다.
}
 
void loop() {
  digitalWrite(motor_in1,HIGH);                 //
  digitalWrite(motor_in2,LOW);                  //모터정방향
  analogWrite(DC_motorEnablePin,1023);          //최대속도 회전시작
  delay(2000);                                  //2초동안 최고속도로 회전
  analogWrite(DC_motorEnablePin,50);            //회전속도 50으로 회전 시작
  analogWrite(DC_motorEnablePin,0);             //회전속도 0 모터 멈춤
  delay(1000);                                  //멈춘상태로 1초 딜레이
  
  digitalWrite(motor_in1,LOW);                  //
  digitalWrite(motor_in2,HIGH);                 //모터 역방향
  analogWrite(DC_motorEnablePin,100);           //속도 100만큼 회전시작
  delay(2000);                                  //2초동안 100만큼의 속도로 회전
  analogWrite(DC_motorEnablePin,50);            //회전속도 50으로 회전시작
  analogWrite(DC_motorEnablePin,0);             //회전속도 0 모터 멈춤
  delay(1000);                                  //멈춘상태로 1초 딜레이
}
cs

프로그램의 전체적인 흐름은 주석을 참고해 주세요.


IC핀 설명표와 함께 프로그램을 해석해 보세요. 가독성이 좋아 집니다.

프로그램을 업로드하여 실제로 동작하는 모습을 확인하면서 이번 포스팅을 끝내겠습니다.


지금까지 아두이노(Arduino) 중급 모터 2편 - DC모터 포스팅이였습니다.

계속해서 도움되는 포스팅으로 찾아뵙겠습니다.

by 애드라이프