본문 바로가기

Arduino/[2] Arduino Module

#27. L293D 모터 드라이버 쉴드

728x90
반응형
아래 블로그를 참조하였습니다.
 

아두이노 모터 드라이버 L293D 쉴드

▶ 모터 드라이버 L293D쉴드는 아두이노 우노, 메가, 레오나르도, 듀에 등에 적층하여 사용하는 확장형 ...

blog.naver.com

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 모터 드라이버 쉴드 라이브러리

 

GitHub - adafruit/Adafruit-Motor-Shield-library: Adafruit Motor shield V1 firmware with basic Microstepping support. Works with

Adafruit Motor shield V1 firmware with basic Microstepping support. Works with all Arduinos and the Mega - adafruit/Adafruit-Motor-Shield-library

github.com

 

아두이노에서 모터 드라이버 L293D 쉴드를 사용하기 위해선 라이브러리를 등록해야 합니다. 추가적인 파일 다운로드 할 필요없이, 아두이노 내의 라이브러리 창에서 Adafruit-Motor-Shield 라이브러리를 다운로드 합니다.

최좌측 하단의 Adafruit-Motor-Shield  라이브러리를 다운로드

서보 모터 동작하기

출처: https://blog.naver.com/eduino/221185591299

핀 번호

Adafruit Motor Shield는 DC 모터, 스텝퍼 모터 등을 제어할 수 있는 AF_DCMotor 및 AF_Stepper 클래스를 제공하지만, 서보 모터는 이 라이브러리를 통해 직접 제어할 수 없습니다. 따라서 서보 모터는 서보 모터 라이브러리인 Servo 라이브러를 사용해야합니다.

 

Servo 라이브러를 사용할 때 기본 문법은 동일하며, 핀번호는 아래 표를 참조합니다.

L293D 쉴드
SER1 10
SER2 (SERVO_2) 9

 

서보 모터에 대한 해당 블로그의 포스팅을 참조합니다.

 

[Arduino Module] #4. 서보 모터 제어하기

Servo Servo 모터는 움직임을 만들어 내는데 아주 중요한 부품이다. 이러한 서보 모터는 Servo 라이브러리를 이용하여 제어한다. 서보 함수 servo.attach(pin); servo: 서보 모터에 사용할 객체 변수. 서보

udangtangtang-cording-oldcast1e.tistory.com

서보 모터 동작 예제

이때 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 모터 동작하기

결선도

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
반응형
댓글