오차막대
이 문서는 아두이노의 모터 쉴드 중 L298P 다기능 모터쉴드(아두이노 L298P 모터 드라이버 H브리지 쉴드)의 사용법과 활용법에 대해 다룬다.
모터 드라이버란 아두이노 같은 마이크로컨트롤러의 약한 신호를 증폭해 여러 모터를 제어하는 장치이다. 모터 쉴드란 모터 드라이버의 일종으로 컨트롤러 보드에 직접 꽂아 여러 장치를 쉽게 제어할 수 있게 해주는 확장 보드이다.
아두이노는 기본적으로 5V로 작동한다. 따라서 모터 쉴드를 부착하더라도 외부 전원을 연결하지 않으면 모터에는 최대 5V까지만 인가할 수 있다. 반면, 외부 전원을 연결하면 최대 12V까지 전압을 공급할 수 있다. 이때 외부 전원을 사용할 경우에는 반드시 OPT 점퍼캡을 제거해야 한다. 따라서 출력이 큰 모터를 구동할 때는 외부 전원을 반드시 연결해야 한다. (허용 전류는 2A이다.) 외부전원의 (-)극은 GND, (+)극은 VMS에 연결한다.
OPT 점퍼캡은 아두이노와 모터 쉴드 사이를 연결하는 일종의 연결 다리 역할을 한다. 따라서 OPT 점퍼캡이 장착된 상태에서는 아두이노의 5V 전압이 모터 쉴드에도 전달된다. 이 경우 별도의 외부 전원 없이도 모터를 구동할 수 있다. 그러나 외부 전원이 필요한 상황에서는 반드시 OPT 점퍼캡을 제거한 뒤 외부 전원을 연결해야 한다. 점퍼캡이 연결된 상태에서 모터 쉴드에 높은 외부 전압을 인가하면, 그 전압이 그대로 아두이노로 전달되어 아두이노가 손상될 수 있기 때문이다. 한편, 점퍼캡을 제거한 상태에서도 블루투스와 같은 아두이노의 기본 기능은 정상적으로 사용할 수 있다.
모터 연결부에는 총 4개의 연결부가 존재하며, 이 연결부는 2개씩 A와 B로 구분된다. DC 모터를 사용하기 위해서는 A 혹은 B 중 하나를 선택하여 해당 연결부에만 선을 연결해야 한다. A에 하나, B에 하나씩 선을 연결할 경우 모터는 작동하지 않는다. 따라서 모터 A와 모터 B, 총 2개의 모터를 연결할 수 있다. 각 연결부의 핀 배치는 다음과 같다. A의 속도 조절은 10번, A의 방향 조절은 12번이며, B의 경우 속도 조절은 11번, 방향 조절은 13번이다.(스태핑 모터 또한 사용할 수 있다)
아래는 모터를 A에 연결했을 때의 코드 예제이다.
int E1 = 10;//속도 조절 핀
int M1 = 12; //방향 조절 핀
void setup()
{
pinMode(M1, OUTPUT); //12번핀으로 방향 조절
}
void loop()
{
digitalWrite(M1,HIGH); //HIGH에서 LOW로 바꾸면 반대 방향으로 회전
analogWrite(E1, 255); //0~255로 모터의 속도 조절이 가능하다.
delay(30);
}
실행 결과: A에 연결된 모터를 최대 속도로 작동시킴
기존 아두이노 우노에 서보모터를 연결하려면 별도의 선을 연결해야 하는 번거로움이 있지만, 모터 쉴드를 사용하면 서보모터를 매우 간편하게 연결할 수 있다. 서보모터에는 총 3개의 선이 순서대로 붙어 있으며, 모터 쉴드에도 이에 대응하는 3개의 연결부가 존재한다. 이때 (–)에 해당하는 검은색(또는 갈색) 선이 연결부 G에 연결되도록 꽂으면 된다. 이렇게 연결한 서보모터의 핀 번호는 9번이다. (추가 서보모터를 설치하고 싶다면 ⑧&⑨ 참고)
아래는 서보모터를 연결했을 때의 코드 예제이다.
#include<Servo.h> //서보 사용
Servo s1; // 서보 모터의 이름을 s1으로 설정
void setup()
{ s1.attach(9); //s1의 연결된 핀은 9번
s1.write(90); //초기 각도 설정(90도)
}void loop()
{ s1.write(180);
delay(100);
s1.write(90);
delay(100);
}
실행 결과: 서보 모터가 90도 사이를 180도를 반복해서 이동
블루투스 역시 서보모터와 마찬가지로 기존 아두이노 우노에 직접 연결하려면 별도의 선을 연결해야 하는 번거로움이 있지만, 모터 쉴드를 사용하면 매우 간편하게 연결할 수 있다. 사용 가능한 블루투스 모듈에는 여러 종류가 있으나, 여기서는 HC-06을 예시로 설명하겠다. (다른 모듈도 연결 방식은 유사하다.) 블루투스 모듈에는 4개의 연결부가 있으며, 모터 쉴드에도 이에 대응하는 4개의 연결부가 존재한다. 이때 HC-06 기준으로 모듈의 LED가 부저를 바라보는 방향으로 꽂아 연결하면 된다. 정상적으로 연결되면 LED에 빨간색 불이 깜빡인다.(전원 연결을 해야 불이 들어온다) 기본 코드는 다음과 같다.
#include <SoftwareSerial.h> //시리얼 통신 라이브러리 호출
int blueRx=1; //Rx (받는핀 설정)
int blueTx=0; //Tx (보내는핀 설정)
void setup()
{ Serial.begin(9600);
btSerial.begin(9600); //블루투스 시리얼 개방
}void loop()
{ while(btSerial.available()) // 블루투스에서 신호가 오는 동안 실행
{
char myChar = (char)btSerial.read(); //블루투스를 통해 받은 값을 char 형식으로 변환
Serial.println(myChar); // 시리얼 모니터에 받은 문자 출력
delay(5); //수신 문자열 끊김 방지
}
}
실행 결과: 휴대전화 블루투스를 통해 전송한 문자가 시리얼 모니터에 전송, 출력
블루투스 모듈은 휴대전화에 특정 앱을 다운로드하면 다양한 방식으로 활용할 수 있다. 휴대전화와 블루투스 모듈을 처음 연결할 때는 비밀번호가 필요한데, 일반적으로 초기 설정 값은 0000 또는 1234이다. (이 비밀번호는 이후 설정을 통해 변경할 수 있다.) 이때 휴대전화에 블루투스가 정상적으로 연결되면 깜빡이던 불빛이 계속 켜진 상태로 유지된다. 또한 아두이노에 코드를 업로드할 때 블루투스 모듈이 연결된 상태에서는 업로드가 원활하지 않을 수 있으므로, 코드 다운로드가 완료된 후 블루투스 모듈을 연결하는 것이 바람직하며 블루투스 모듈 제거 시 꼭 휴대전화의 연결을 끊고 제거해야 한다. 이 외에도 설정 항목이나 시리얼 번호 등 다양한 사항이 존재하지만, 본 문서에서 모두 다루기에는 분량이 많아 별도로 찾아보기를 권한다.
초음파 센서 역시 모터 쉴드를 사용하면 비교적 간단하게 연결할 수 있다. 다만 이 경우에는 단순히 꽂는 방식으로는 연결할 수 없으며, 별도의 선 연결이 필요하다. 핀 배치는 Echo 핀(R)이 8번, Trigger 핀(T)이 7번이다. 초음파 센서의 구체적인 연결 방법과 코드 예제는 별도로 찾아보기를 바란다.
모터 쉴드에는 능동 부저가 내장되어 있다. 능동 부저는 음계를 표현하기는 어렵고, 켜기, 끄기를 통해서만 구동되기 때문에 주로 경고음 용도로 사용된다. 부저의 핀 번호는 4번이다. 사용 코드는 아래와 같다.
void setup()
{ pinMode(4, OUTPUT); //능동부저가 연결된 4번 핀을 출력으로 설정
}void loop()
{ tone(4, HIGH); //능동부저 소리 켬
delay(1000);
digitalWrite(4, LOW); //능동부저 소리 끔
delay(1000);
}
실행 결과: 부저에 소리가 1초 간격으로 켜젔다 꺼지기를 반복
⑧, ⑨핀은 기존 아두이노 우노의 디지털 핀, 아날로그 핀, 전원 공급 핀을 모터 쉴드 위로 그대로 확장해 사용할 수 있도록 해주는 역할을 하며, 기능은 기존 아두이노의 핀과 완전히 동일하다. 따라서 추가 서보모터나 추가 센서를 설치할 경우에도 기존 아두이노와 동일한 방식으로 연결하면 된다.