아두이노로 RC 카 만들기 두 번째 - 모터 움직이기

4 minute read

아두이노로 RC 카 만들기 두 번째 시간입니다! 이번에는 회로를 연결하여 모터를 움직이고 모터들의 특징을 알아보도록 하겠습니다.

DC 모터 조정

DC 모터 속도 조절

모터를 조종하기 위해서는 속도와 방향을 조절할 수 있어야 합니다. 우선 속도를 조절하는 방법을 알아보도록 하겠습니다. DC모터는 일반적으로 전압을 낮추면 천천히 돌고 전원을 높이면 빠르게 돌게 됩니다. 따라서 모터에 주는 전압을 직접 조정하여 모터의 속도를 조절할 수 있지만, 이 방법은 매우 비효율적입니다. 때문에 DC모터의 속도를 조절하는 데에는 주로 PWM (Pulse Width Modulation)이라는 방식을 사용합니다.

PWM 그림

그림에서 볼 수 있듯이, PWM은 주어진 시간 동안 HIGH인 시간의 비율(duty 비)을 사용하여 출력을 제어하는 방식입니다. 즉, HIGH가 0%이면 출력이 0이 되어서 모터가 멈추고, 50%라면 모터가 중간 속도로 움직이고, 항상 HIGH면 최고 출력이 되어서 모터가 최고 속도로 돌게 됩니다.

아두이노에서는 디지털 핀에 analogWrite()라는 함수를 사용하여 PWM을 조절할 수 있습니다.

analogWrite(pin, value)

이때, pin에는 아무 핀 번호나 사용할 수 없고, 아두이노에서 디지털 핀들 중 앞에 물결(~) 표시가 있는 핀들만 사용할 수 있습니다. 제가 사용한 아두이노 우노에서는 디지털 3, 5, 6, 9, 10, 11번 핀만 사용할 수 있었습니다.

또한, duty 비를 나타내는 value에는 0에서 255 사이의 정수 값을 줘야 합니다. 모터의 속도를 1/255 씩 조정할 수 있다고 생각하면 됩니다.

DC 모터 방향 조절

두 번째로 방향을 바꾸는 방법을 알아보도록 하겠습니다. DC모터는 전원의 양극과 음극을 거꾸로 주면 반대로 움직이게 됩니다. 보통 H Bridge라는 회로를 사용하여 방향을 조절합니다. 그림과 같이 모터를 중심으로 H자 모양으로 회로가 구성되어 H Bridge라고 부른다고 합니다. H Bridge의 스위치에 해당하는 회로를 조절하면 전류가 흐르는 방향을 바꾸어 모터의 회전 방향을 조정할 수 있습니다.

H bridge operating.svg
By Cyril BUTTAY - own work, made using inkscape, CC BY-SA 3.0, Link

L298N 모터 드라이버

그동안 사용했던 센서들과는 다르게 모터를 구동하는 데 필요한 전류가 너무 커서 아두이노에 바로 연결할 수 없습니다. 즉, 아두이노의 핀의 전류는 모터를 구동하기에는 턱없이 적어서 모터를 연결하려면 여러 회로를 구성해야 합니다.

이런 불편함을 해결하기 위해서 모터 드라이버를 사용합니다. 제가 사용한 모터 드라이버는 L298N인데요, 두개의 H Bridge 회로를 포함해서 한 번에 두개의 DC 모터를 제어할 수 있어서 RC카 프로젝트에 적합합니다.

L298N 모터 드라이버 사진

전원 설정

그림에서 노란색 원으로 표시된 점퍼가 있는데, 이 점퍼로 전원을 설정할 수 있습니다.

점퍼가 끼워져 있으면 외부에서 공급받는 12V를 이용해서 L298N 모듈의 회로가 동작하고 5V 단자로 5V 전원을 출력합니다. 만약 외부 전원을 이용해서 아두이노도 동작하고 싶다면 점퍼를 끼운 상테애서 L298N의 5V를 아두이노의 VIN에 연결하면 됩니다.

반대로 점퍼가 빠져 있으면 모터는 12V에 연결된 전원으로 동작하지만, L298N 모듈의 회로는 5V 단자에 공급되는 전원을 이용해 구동합니다. 저는 이 점퍼를 빼고 아두이노의 5V 출력을 이용해서 L298N 회로를 작동했습니다.

전원 설정에서 또 중요한 점이 있는데요, 외부 전원의 GND와 아두이노의 GND를 L298N의 GND 단자에 같이 연결해서 공통의 GND를 갖도록 해야만 회로가 제대로 동작하게 됩니다.

모터 연결

한 모터에서 나온 두 선을 각각 OUT1과 OUT2에 연결하고, 다른 모터의 두 선을 각각 OUT3과 OUT4에 연결합니다. 만약 나중에 회로를 구성한 뒤 모터를 구동해 보니 첫번째 모터가 원하는 방향과 반대로 회전한다면 OUT1과 OUT2에 연결된 두 선을 바꾸어 끼우면 원하는 방향으로 회전하게 만들 수 있습니다. 물론 두번째 모터의 회전 방향을 바꾸려면 OUT3과 OUT4에 연결된 선을 바꾸어 끼워야 하겠죠?

모터 속도 조정

모터 A와 모터 B의 속도는 각각 ENA 핀과 ENB 핀으로 조절합니다. 사진에서 노란색 사각형으로 표시된 부분에 있는데 왼쪽이 ENA이고 오른쪽이 ENB입니다. 그림에서 보듯 이 핀에는 점퍼가 연결되어 있는데요, 연결된 상태에서는 항상 최고 속도로 움직입니다. 속도를 조절하려면 점퍼를 제거하고, 아두이노의 PWM이 가능한 핀에 연결해야 합니다.

모터 방향 조정

모터 A의 방향은 IN1와 IN2로 조절하고 모터 B의 방향은 IN3과 IN4로 조절 할 수 있습니다.

IN1 (IN3) IN2 (IN4) 방향
LOW LOW 정지
HIGH LOW 전진
LOW HIGH 후진
HIGH HIGH 정지(하지만 사용 안함)

회로 구성하기

차체 수정

우선 전선을 연결하기 위해 지난번에 만든 차체에서 일부 수정을 했습니다. 모터와 아두이노의 건전지를 따로 연결하기 위해 9V 짜리 건전지를 차체 아래에 붙였습니다. 처음에는 양면 테이프로 붙였으나 자꾸 떨어져서 케이블타이로 고정했습니다. 또한, 회로를 쉽게 연결하기 위해 차체 위에 브래드 보드를 붙이고 배터리 홀더를 뒤쪽으로 옮겼습니다.

바뀐 차체 윗면 사진 바뀐 차체 아랫면 사진

회로도

회로도

L298N에 전원 연결

L298N 모터 드라이버를 다른 기기와 연결하기 전 전기를 공급할 건전지와 먼저 연결하겠습니다.모터 드라이버는 배터리 홀더에 끼운 4개의 AA 건전지들과 연결해줘야 합니다. 모터 드라이버에서 각각 +12V와 GND라고 명시된 구멍에 건전지의 (+)극과 (-)극을 연결해주면 모터 드라이브에 전기가 공급되게 됩니다.

L298N에 모터 연결

우선, L298N에는 각각 OUT1, OUT2, OUT3, OUT4라고 명시된 4개의 단자가 있습니가. 이 단자들은 모터에 연결하여 작동시키기 위한 단자들인데요, OUT1과 OUT2를 한 쪽 모터에, OUT3와 OUT4를 다른 쪽 모터에 연결해주시면 됩니다. 참고로 너무 세게 조이면 전선이나 3d 프린트한 마운트가 손상될 가능성이 있으니 고정될 정도로만 조여주셔야 합니다.

L298N과 아두이노 연결

다음으로 GND, +5V라고 명시된 2개의 구멍을 각각 아두이노의 GND와 +5V에 연결해야 합니다. 여기서 저는 선이 엉키고 더러워지는 것을 방지하기 위해 브래드 보드를 사용하여 GND를 끝의 (-)줄에, +5V를 (+)줄에 연결하였습니다.

마지막으로 ENA, IN1, IN2, IN3, IN4, ENB 라고 명시된 핀을 아두이노에 연결해야 하는데요, 저는 각각 ~6, 7, 8, ~9, ~10, ~11번의 디지털 핀에 연결하였습니다. 여기서 주의하셔야 할 사항은 ‘IN’이라고 명시되어있는 핀은 아무데나 꽂아도 상관 없습니다만 ‘EN’이라고 되어있는 핀들은 반드시 PWM에 연결하여야 한다는 것입니다.

배선 정리

지금까지 아래의 표는 지금까지 연결한 핀들을 정리한 것입니다.

아두이노 L298N 기타
5V 5V  
  12V 4xAAA 건전지 홀더 (+)극
GND GND 4xAAA 건전지 홀더 (-)극
6번 핀 ENA  
7번 핀 IN1  
8번 핀 IN2  
9번 핀 IN3  
10번 핀 IN4  
11번 핀 ENB  
  OUT1 모터 A
  OUT2 모터 A
  OUT3 모터 B
  OUT4 모터 B

코드

아래 코드는 앞으로 한 번, 뒤로 한 번 속도를 1에서 255까지 변화시키면서 모터가 제대로 동작하는 지를 살펴보기 위해 작성했습니다.

실행 결과

비디오에서 알 수 있듯 회로는 잘 구성되어 모터가 원하는 방향으로 속도가 변화하며 제대로 동작했습니다. 허나, 생각과는 다르게 PWM 수치가 낮은 곳에서는 이상한 소리가 나며 정작 모터는 움직이지 않는 모습을 관찰 할 수 있었습니다. 또한, 오른쪽 모터가 반응하는 구간과 왼쪽 모터가 반응하는 구간 역시 차이가 난다는 것을 알 수 있었습니다. 다음 포스트에서는 이를 고려하여 rc카 조종 프로그램을 만들어보겠습니다.