Arduino

아두이노 L293D를 이용한 DC 모터 2개 구동하기

작성자 임베디드코리아 작성일25-05-15 23:52 조회339회 댓글0건

첨부파일

동영상 : https://youtu.be/WxmyOMvivD4
<* 아두이노 L293D를 이용한 DC 모터 2개 구동하기 *>
■ L293D IC의 주요 특징 :
  ► 듀얼 모터 제어: 동시에 두 개의 모터를 제어할 수 있다.
  ► 속도 및 방향 제어: 각 모터의 속도와 방향을 독립적으로 조절할 수 있다.
  ► 저전압 구동: 비교적 낮은 전압(5V)으로 구동 가능하며, 아두이노와 호환 된다.
  ► 다양한 활용: 소형 로봇, RC 차량, 팬, 펌프 등 다양한 프로젝트에 적용 가능하다

-------< 소스 코드 >-------------------------------------------------------------------------
// Motor A connections
int enA = 3;
int in1 = 4;
int in2 = 5;
// Motor B connections
int enB = 7;
int in3 = 8;
int in4 = 9;

void setup() {
  // Set all the motor control pins to outputs
  pinMode(enA, OUTPUT);
  pinMode(enB, OUTPUT);
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);

  // Turn off motors - Initial state
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);
  digitalWrite(in3, LOW);
  digitalWrite(in4, LOW);
}

void loop() {
  directionControl();
  delay(1000);
  speedControl();
  delay(1000);
}

// This function lets you control spinning direction of motors
void directionControl() {
  // Set motors to maximum speed
  digitalWrite(enA, HIGH);
  digitalWrite(enB, HIGH);

  // Turn on motor A & B
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
  digitalWrite(in3, HIGH);
  digitalWrite(in4, LOW);
  delay(2000);

  // Now change motor directions
  digitalWrite(in1, LOW);
  digitalWrite(in2, HIGH);
  digitalWrite(in3, LOW);
  digitalWrite(in4, HIGH);
  delay(2000);

  // Turn off motors
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);
  digitalWrite(in3, LOW);
  digitalWrite(in4, LOW);
}

// This function lets you control speed of the motors
void speedControl() {
  // Turn on motors
  digitalWrite(in1, LOW);
  digitalWrite(in2, HIGH);
  digitalWrite(in3, LOW);
  digitalWrite(in4, HIGH);

  // Accelerate from zero to maximum speed
  for (int i = 0; i < 256; i++) {
    analogWrite(enA, i);
    analogWrite(enB, i);
    delay(20);
  }

  // Decelerate from maximum speed to zero
  for (int i = 255; i >= 0; --i) {
    analogWrite(enA, i);
    analogWrite(enB, i);
    delay(20);
  }

  // Now turn off motors
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);
  digitalWrite(in3, LOW);
  digitalWrite(in4, LOW);
}