728x90
반응형
아래 블로그를 참조하였습니다.
L293D 모터 드라이버 쉴드
L293D 모터 드라이버 쉴드는 DC 모터와 스텝 모터를 제어하기 위한 아두이노 쉴드입니다. 이 쉴드는 두 개의 L293D IC를 탑재하고 있으며, 최대 4개의 DC 모터 또는 2개의 스텝 모터를 제어할 수 있습니다. 각 모터는 개별적으로 전압을 조절할 수 있으며, 전진 및 후진, 속도 제어가 가능합니다.
▶ L293D 모터 드라이버 쉴드는 DC 모터 혹은 서보 모터 제어용으로 사용됩니다.
▶ 아두이노의 USB 포트 전원 입력은 전류량이 약하므로 모터를 구동할 때는 별도의 전원을 이용해 전류를 공급해야합니다.
주요 기능
- 듀얼 H-브리지 드라이버: L293D는 듀얼 H-브리지 회로를 내장하고 있어, 하나의 IC로 두 개의 모터를 독립적으로 제어할 수 있습니다.
- 과전류 보호: 모터 드라이버가 과전류로부터 보호되므로 안정적으로 모터를 제어할 수 있습니다.
- 전원 관리: 쉴드는 외부 전원을 통해 모터에 공급되는 전압을 조절할 수 있어, 다양한 전압의 모터를 제어할 수 있습니다.
- 아두이노와 적층 사용: 아두이노 우노와 쉴드를 적층하여 사용합니다.
제품 사양
크기 | 5.3 * 7 * 2.0 cm |
입력 전압 | 최대 9V |
특성 | 1. 우노, 메가, 듀에, 레오나르도 보드 등에 적층하여 사용가능 2. DC 모터 4개 또는 서보 모터 2개 또는 스텝 모터 2를 동작시킬 수 있음 (동시 불가) 3. 브릿지당 0.6A(1.2 피크)를 제공하며 4.5 ~ 45V DC까지 호환됨 4. 아두이노 우노 정품 및 호환 보드와 호환 가능 |
L293D 모터 드라이버 쉴드 라이브러리
아두이노에서 모터 드라이버 L293D 쉴드를 사용하기 위해선 라이브러리를 등록해야 합니다. 추가적인 파일 다운로드 할 필요없이, 아두이노 내의 라이브러리 창에서 Adafruit-Motor-Shield 라이브러리를 다운로드 합니다.
서보 모터 동작하기
핀 번호
Adafruit Motor Shield는 DC 모터, 스텝퍼 모터 등을 제어할 수 있는 AF_DCMotor 및 AF_Stepper 클래스를 제공하지만, 서보 모터는 이 라이브러리를 통해 직접 제어할 수 없습니다. 따라서 서보 모터는 서보 모터 라이브러리인 Servo 라이브러를 사용해야합니다.
Servo 라이브러를 사용할 때 기본 문법은 동일하며, 핀번호는 아래 표를 참조합니다.
L293D 쉴드 | 핀 |
SER1 | 10 |
SER2 (SERVO_2) | 9 |
서보 모터에 대한 해당 블로그의 포스팅을 참조합니다.
서보 모터 동작 예제
이때 SER1에 해당하는 핀은 10, SER2에 해당하는 핀은 9임을 유의합니다.
#include <AFMotor.h>
#include <Servo.h> // 아두이노 기본 Servo 라이브러리 포함
// 서보 모터 제어
Servo myServo;
void setup() {
Serial.begin(9600); // 시리얼 통신 시작
Serial.println("Motor test!");
// 서보 모터 설정 (Adafruit Motor Shield의 SER1 핀에 연결됨)
myServo.attach(10); // SER1에 해당하는 핀 번호는 10번입니다.
myServo.write(90); // 서보 모터를 90도로 초기화
}
void loop() {
// 추가 동작 없음 (필요시 여기서 서보나 DC 모터 제어 가능)
}
DC 모터 동작하기
결선도
예제 코드
// Adafruit Motor shield library
// copyright Adafruit Industries LLC, 2009
// this code is public domain, enjoy!
#include <AFMotor.h>
// 2번 DC 모터를 제어하기 위한 AF_DCMotor 객체 생성
AF_DCMotor motor(2);
void setup() {
Serial.begin(9600); // 시리얼 통신 시작 (속도: 9600bps)
Serial.println("Motor control ready!");
// 모터 초기 설정
motor.setSpeed(200); // 모터 속도 설정 (0-255)
motor.run(RELEASE); // 모터 초기 상태를 RELEASE로 설정
}
void loop() {
if (Serial.available()) { // 시리얼 입력이 있을 경우
char command = Serial.read(); // 시리얼로부터 문자 읽기
if (command == 'F' || command == 'f') { // 'F' 또는 'f' 입력 시
Serial.println("Motor moving forward for 10 seconds");
motor.run(FORWARD); // 모터 전진
delay(10000); // 10초간 대기
motor.run(RELEASE); // 모터 정지
Serial.println("Motor stopped");
}
else if (command == 'B' || command == 'b') { // 'B' 또는 'b' 입력 시
Serial.println("Motor moving backward for 10 seconds");
motor.run(BACKWARD); // 모터 후진
delay(10000); // 10초간 대기
motor.run(RELEASE); // 모터 정지
Serial.println("Motor stopped");
}
}
}
- 모터 객체 생성: AF_DCMotor motor(2);는 2번 DC 모터를 제어하기 위한 객체를 생성합니다.
- 시리얼 통신 설정: Serial.begin(9600);은 시리얼 통신 속도를 9600bps로 설정합니다.
- 모터 초기 설정:
- motor.setSpeed(200);로 모터 속도를 설정합니다. 속도 범위는 0(정지)에서 255(최대 속도)입니다.
- motor.run(RELEASE);로 모터를 초기 상태에서 정지시킵니다.
- 시리얼 입력 처리:
- Serial.available()는 시리얼 입력이 있는지 확인합니다.
- 입력된 문자에 따라 'F' 또는 'f'를 입력하면 모터가 전진하고, 'B' 또는 'b'를 입력하면 후진합니다.
- motor.run(FORWARD);는 모터를 전진시키고, motor.run(BACKWARD);는 모터를 후진시킵니다.
- delay(10000);으로 10초 동안 동작한 후, motor.run(RELEASE);로 모터를 정지시킵니다.
- 시리얼 모니터 출력: 모터 동작 및 정지에 대한 메시지가 시리얼 모니터에 출력됩니다.
728x90
반응형
'Arduino > [2] Arduino Module' 카테고리의 다른 글
#29. L9110 미니팬 (0) | 2024.12.26 |
---|---|
#28. OLED 0.96인치 128x64 SPI 6핀 A37 디스플레이 (0) | 2024.12.24 |
[Arduino Module] #26. ESP32 CAM (0) | 2024.07.12 |
[Arduino Module] #25. Wemos D1 R32 (1) | 2024.04.08 |
[Arduino Module] #24. 와이파이 모듈(NodeMcu/ESP8266) (0) | 2024.04.01 |