아두이노 모터드라이버 제어
아두이노를 갖고 놀면서 가장 많이 사용하는 액추에이터 중 하나는 모터가 아닐까 싶은데요. 한 개의 모터만 제어한다면 디지털 핀에 바로 연결해서 제어를 할 수 있겠지만 여러 개의 모터를 상황에 따라서 움직이게 하려면 모터 드라이버가 꼭 있어야 하고 그 원리는 대충 알고 있어야 다양한 분야에서 사용을 할 수 있을 거 같아서 이번 글에서는 아두이노 모터 드라이버에 대해서 알아보려고 합니다.
그리고 이런 것들을 알아 볼때 그림이나 글로만 정리하는 것보다는 뭔가를 하나 만들어보면서 정리하면 더 재미가 있을 거 같아서 다음과 같이 아주 작은 장난감을 이용해서 그 원리를 알아보려고 합니다.
▲ 두 개의 DC 모터로 움직이는 장난감 탱크인데요. 아래쪽에 보이는 빨간색의 크고 작은 녀석들이 모터 드라이버입니다. 그 크기에 따라서 성능의 차이는 있겠지만 이번 글에서는 저 작은 녀석을 사용해볼 계획인데...
먼저 이 녀석들의 원리와 차이부터 살펴볼게요.
▲ 일단 상태적으로 큰 녀석을 보면 숫자별로 1번 쪽은 아두이노 디지털 핀에서 보낸 신호를 받는 역할을 합니다. 이 모터 드라이버의 경우 두 개의 모터를 제어할 수 있는데 총 네 개의 신호를 받아서 각각 두 개씩 할당을 한 후 한 쪽은 전류를 보내고 다른 쪽은 끄면 한쪽 방향으로 모터가 돌게 됩니다. 그리고 신호를 반대로 보내면 모터의 회전 방향도 바뀌게 되는 거예요.
그리고 그 네 개의 신호는 각각 3번과 4번으로 표시한 곳을 통해서 모터로 흘러가게 되고요. 즉, 모터 두 개는 각각 3번과 4번에 연결하면 됩니다. 또 2번은 총 세 개의 단자가 있는데 왼쪽부터 12V까지 연결할 수 있는 단자이고 나머지 두 개는 GND와 VCC(5V)입니다. 이 큰 녀석을 사용해보니 아두이노에서 들어오는 기본 5V 외에 다른 전류를 인가해주지 않으면 모터 두 개를 제어하기에는 무리가 있더라고요.
여하튼 네 개의 디지털 신호를 받아서 연결된 두 개의 모터를 상황에 따라서 회전시키고 높은 전류를 받아서 모터의 회전을 원활하게 해줄 수 있는 모터 드라이버 입니다.
다음은 작은 녀석을 살펴보죠.
작은 녀석이 딱 봐도 간단해 보이죠? 보드에 쓰여있는 글자를 통해서도 대충 알 수 있듯이 1번은 5V와 GND를 연결하는 곳이고요. 2번에는 4개의 디지털 신호를 입력합니다. 그리고 3번에는 두 개의 모터를 연결해서 똑같은 원리로 제어를 하게 됩니다.
오랜 시간 사용하려면 상대적으로 성능이 좋은 큰 녀석을 사용해야 할 테지만 제가 만들어보려는 장난감은 공간의 제약도 있고 잠깐씩 그 원리만 파악하기 위함이니 여기서는 작은 녀석을 사용해볼 생각입니다.
▲ 첫 단계로 이렇게 두 개의 모터를 MOTOR_A와 B에 각각 연결을 했네요.
▲ 그리고 반대쪽에는 아두이노 보드에서 들어오는 네 개의 신호와 5V, GND가 있는데요. 이것들을 마저 연결하겠습니다.
▲ 공간이 협소한 관계로 아두이노는 나노를 사용했고요. IN1~4번까지를 아두이노 D2~5까지 연결을 한 후 VCC와 GND 연결을 마쳤습니다. 이제 스케치 프로그램에서 코딩을 해서 이 모터를 제어해 볼텐데.... 실시간으로 회전의 방향을 바꿔보기 위해서 시리얼 통신으로 제어를 해보겠습니다.
▲ 먼저 네 개의 신호를 전달하는 디지털 핀은 모두 밖으로 시그널을 보내기 때문에 OUTPUT으로 초기화를 했고요. 시리얼 통신을 위한 준비를 했습니다.
▲ 시그널 모니터에서 w, a, d, s, q를 누를 때마다 char 값을 받아서 모터의 회전을 제어하게 했고요. 어떤 값이 들어오냐에 따라서 digitalWrite() 함수로 각각의 모터에 전류를 보내서 회전을 시키고 있습니다.
▲ 그리고 만약에 키보드의 'q'를 누르면 모든 모터를 멈추도록 했습니다. 이처럼 DC 모터는 전류를 어느 방향으로 보내느냐에 따라서 회전의 방향이 바뀌기 때문에 제어가 가능한데요. 코드를 업로드 한 후에 시리얼 모니터에서 각각의 char 값을 전달해보겠습니다.
▲ 그런데 컴퓨터와 아두이노를 연결해서 기본 전압인 5V로 두 개의 모터를 제어해보려고 했더니 이 작은 모터 드라이버도 역시 힘이 딸리네요. 그래서 급하게 배터리를 추가로 연결해서 테스트를 해봤습니다.
▲ 입력한 값에 따라서 모두 제가 원하는 방향으로 회전을 하는군요. 처음에 점퍼 선을 연결할 때는 같은 모터들끼리 짝을 지어서 대충 연결을 해놓고 스케치 프로그램에서 숫자나 HIGH, LOW를 변경하면서 회전의 방향을 맞추면 쉽게 그 방향을 맞추게 됩니다.
이렇게 해서 아두이노 모터 드라이버의 기본 작동 원리를 알아보고 직접 연결해서 사용을 해봤는데요. 여기서는 시리얼 통신으로 제어를 해봤지만 앞으로 각종 무선 모듈을 연결해서 제어를 해보기로 하고 오늘은 이만 마치겠습니다. 수고하셨어요.