아두이노로 다뤄볼 수 있는 장비 중에 모터가 있습니다.
모터도 사용되는 상황이나 조건에 따라 3종류를 선택해서 사용할 수 있습니다.
1. RC카 휠 동작 등에 필요한 모터인 DC 모터
2. 공장 자동화 기계의 반복적이고 명령받은 동작을 수행할 수 있게 하는 서보 모터
3. 3D 프린터의 위치 미세조정을 위해 사용하는 스텝 모터
이번 글은 이들 중 스텝 모터를 L298N(모터 드라이버)에 연결하고,
아두이노를 사용하여 동작시켜보는 과정을 정리했습니다.
L298N 모터 드라이버
아두이노로 모터를 작동시키기 위해서 필수로 요구되는 모듈입니다.
모터를 제어하기 위해서는 회전 방향과 속도를 다루어야 하는데,
모터 드라이버가 그 역할을 충실히 해줍니다.
L298N은 매우 잘 알려진 모듈이기 때문에 다양한 링크에서 판매 중입니다.
L298N에 연결할 수 있는 핀 구조는 다음과 같습니다.
L298N은 5V에서 12V의 모터를 제어할 수 있습니다.
아두이노는 최대 5V의 전압만 제공 가능합니다.
그래서, 5V를 초과하는 전압에서 동작하는 모터는 외부 전지를 사용해야 합니다.
대부분 다 초과하기 때문에 모터를 정상적으로 동작시키기 위해서는 외부 전지가 필수입니다.
이번에 사용할 스텝 모터 또한 12V 호환이기 때문에 충전형 배터리를 사용했습니다.
외부 배터리를 사용하는 경우에는 아두이노에도 전력 공급이 가능하도록 5V Vin 핀이 있습니다.
5V Vin을 아두이노의 Vin 핀 헤더와 연결하면 배터리가 On일 때 아두이노도 작동합니다.
"Moter A"와 "Moter B"는 모터를 연결하는 핀입니다.
부분마다 핀이 2개씩 존재하며 이는 모터의 + -를 각각 연결하기 위함입니다.
헷갈리지 않기 위해서 일반적으로 + - + - 순서로 적용하며
이는 out1 = +, out2 = -, out3 = +, out 4 = - 연결과 같습니다.
"Enable A", "Enable B"는 모터의 속도 제어를 위한 PWM(Pulse Width Modulation) 전용 핀입니다.
두 핀 사이의 In은 모터의 회전 제어를 위한 핀입니다.
L298N의 기본 구성으로 Enable 핀에는 접퍼핀이 연결되어 있습니다.
PWM을 직접 정의해서 구동하고자 한다면
점퍼 핀을 제거하고 아두이노의 PWM 지원 핀(~ 표시 있는 핀)과 연결합니다.
스텝 모터
스텝 모터는 4개의 핀이 있습니다.
2개씩 1쌍이며 Moter A, Moter B에 각각 들어갑니다.
따라서 연결하는 것에 헷갈림이 없도록 핀의 점퍼선 색상도 정해진 것 같았습니다.
관련 데이터 시트나 자료들을 찾아보니 검정-초록, 빨강-파랑의 쌍으로 되어 있었습니다.
영문이긴 하지만, 데이터 시트도 제공하고 설명도 잘 되어있는 링크를 올려놓겠습니다.
검정(+)과 초록(-)을 Moter A에 연결하고, 빨강(+)과 파랑(-)을 Moter B에 연결하는 구조입니다.
각 쌍을 어떤 모터 부분에 연결하는지는 선택입니다.
스텝 모터를 제어하기 위해서는 12V의 전압이 공급되어야 합니다.
그래서 12V 공급이 가능한 배터리 어댑터를 개조해서 사용하거나
전용 배터리를 사용해야 합니다.
아두이노와 연결하기 전,
스텝 모터와 모터 드라이버를 연결하는 핀 맵은 다음과 같습니다.
아두이노 연결
간단한 테스트를 할 때는 IN핀 4개만 연결해도 충분합니다.
그러면 최댓값을 가지는 회전 속도로 스텝 모터가 작동합니다.
수동으로 PWM 값을 조절해서 회전 속도를 조절하고 싶다면 Enable 핀도 아두이노에 연결합니다.
그러기 위해서는 기존에 5V 핀과 연결된 점퍼핀을 제거해야 합니다.
핀 연결은 임의로 연결하고 싶은 디지털 핀 공간에 연결하면 됩니다.
코드로 핀에 대한 값을 정의해서 작동시키면 되기 때문입니다.
저는 아두이노의 3, 4, 6, 7핀에 In1, In2, In3, In4 핀을 연결했습니다.
In1 | 아두이노 디지털 3 |
In2 | 아두이노 디지털 4 |
In3 | 아두이노 디지털 6 |
In4 | 아두이노 디지털 7 |
만약, PWM 값을 직접 지정해서 작동시켜보고 싶으시다면
아두이노에서 PWM을 지원하는 디지털 핀에 연결합니다.
디지털 핀 번호 앞에 " ~ " 표시가 있는 핀이 PWM을 지원하는 핀입니다.
아두이노 핀이 연결된 최종 구성은 다음과 같습니다.
구동을 위한 간단한 코드
정상적으로 작동하는지 확인하기 위한 간단한 코드를 작성합니다.
아두이노 코드에서는 모터 드라이버와 연결된 IN 핀의 번호를 정확히 지정해 줍니다.
Enable 점퍼 핀을 제거하고, 아두이노와 연결했다면, Enable 핀도 코드에 정의해 줍니다.
Enable 핀의 값을 digitalWrite로 High를 주면 점퍼 핀을 연결한 것과 같은 환경이 됩니다.
digitalWrite로 Low를 주면 반대로 모터는 정지 상태로 유지합니다.
digitalWrite가 아니라 세밀한 속도를 정하고 싶다면 analogWrite를 사용합니다.
analogWrite로 0~255 범위 사이의 값을 지정하면 해당 값에 맞는 속도로 모터가 동작합니다.
int IN1 = 3;
int IN2 = 4;
int IN3 = 6;
int IN4 = 7;
//int ENA = 9 EnableA를 아두이노와 연결했을 때
//int ENB = 10 EnableB를 아두이노와 연결했을 때
void setup(){
pinMode(IN1,OUTPUT);
pinMode(IN2,OUTPUT);
pinMode(IN3,OUTPUT);
pinMode(IN4,OUTPUT);
//pinMode(ENA,OUTPUT);
//pinMode(ENB,OUTPUT);
//digitalWrite(ENA,HIGH); # EnableA를 점퍼 핀 연결한 환경과 동일하게
//digitalWrite(ENB,HIGH); # EnableB를 점퍼 핀 연결한 환경과 동일하게
//analogWrite(ENA, 50); # 0~255 값으로 속도를 조절하고자 할 때
//analogWrite(ENB, 50); # 0~255 값으로 속도를 조절하고자 할 때
}
void loop(){
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);
delay(3);
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
delay(3);
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
delay(3);
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);
delay(3);
}
12V 전압을 공급하는 외부 배터리의 전원을 켜면,
모터 드라이버에 전원이 공급되며 아두이노로부터 받은 핀 명령을 바탕으로
스텝 모터가 동작하는 것을 확인할 수 있습니다.
- 끝 -
'작업 > Rasp & Arduino' 카테고리의 다른 글
온도 센서 (DS18B20) 라즈베리파이 연결 (3) | 2021.06.29 |
---|---|
GPS 센서 NEO-6M 연결하기 (라즈베리파이) (3) | 2021.06.29 |
GPS 센서 NEO-6M 연결하기 (아두이노) (0) | 2021.05.13 |
라즈베리파이 VNC 연결 (0) | 2021.04.12 |
라즈베리파이 4 Model B 라즈비안 설치하기 (Raspbian) (0) | 2021.04.11 |