코드 검색

ESP32 튜토리얼 15/55 - ESP32 L293D로 DC 모터 속도 제어 | SunFounder의 ESP32 IoT 학습 키트

ESP32 튜토리얼 15/55 - ESP32 L293D로 DC 모터 속도 제어 | SunFounder의 ESP32 IoT 학습 키트

ESP32 튜토리얼 15/55 - ESP32 L293D로 DC 모터 속도 제어 | SunFounder의 ESP32 IoT 학습 키트

ESP32로 DC 모터를 제어하는 것은 어렵게 보일 수 있지만, 올바른 부품과 이해가 있다면 꽤 관리하기 쉽습니다. 이 튜토리얼에서는 L293D 모터 드라이버를 사용하여 DC 모터의 속도와 방향을 제어할 수 있는 프로젝트를 구축할 것입니다. 마지막에는 모터를 앞뒤로 회전시키면서 속도를 조절할 수 있는 작동 설정을 갖추게 될 것입니다. 시각적 참고를 위해 (비디오 00:00)의 영상을 확인하세요.

ESP32-15_L293D_motor_schematic

하드웨어 설명

이 프로젝트의 주요 구성 요소는 ESP32 마이크로컨트롤러와 L293D 모터 드라이버입니다. ESP32는 내장 Wi-Fi 및 Bluetooth 기능을 갖춘 강력한 마이크로컨트롤러로, IoT 애플리케이션에 적합합니다. GPIO 핀을 통해 모터를 포함한 다양한 하드웨어 구성 요소를 제어할 수 있습니다. L293D는 듀얼 H-브리지 모터 드라이버로, 두 개의 DC 모터의 방향과 속도를 제어할 수 있습니다. 각 H-브리지는 모터 단자에 인가되는 전압의 극성을 반전시켜 모터를 어느 방향으로든 구동할 수 있습니다. 또한 L293D는 채널당 최대 600mA의 전류를 처리할 수 있어 소형 및 중형 모터에 적합합니다.

L293D-Motor-Driver-IC

데이터시트 세부 정보

제조업체 텍사스 인스트루먼트
부품 번호 L293D
로직/IO 전압 2.5 – 7 V
공급 전압 4.5 – 36 V
출력 전류 (채널당) 600 mA (일반)
피크 전류 (채널당) 1.2 A (최대)
PWM 주파수 가이드 20 kHz (일반)
입력 로직 임계값 0.8 V (높음), 2.0 V (낮음)
전압 강하 / RDS(on) / 포화 1.5 V (최대)
열 제한 150 °C (최대)
패키지 16-DIP
참고 / 변형 쿼드러플 하프-H 드라이버

 

  • 고전류 애플리케이션의 경우 적절한 방열판을 확보하세요.
  • 전압 스파이크를 방지하기 위해 커패시터로 전원 공급 장치를 디커플링하세요.
  • 극성 반전을 방지하기 위해 배선에 주의하세요.
  • 과열을 방지하기 위해 속도 제어에 PWM을 사용하세요.
  • 손상을 방지하기 위해 모터의 정격 전압을 확인하세요.

배선 지침

ESP32-15_L293D_motor_wiring

ESP32와 L293D 모터 드라이버를 배선하려면 전원 연결부터 시작하세요. L293D의 핀 16을 전원 공급 장치의 양극 단자에 연결하고, 핀 4를 접지에 연결하세요. 다음으로 모터를 연결합니다: 한 단자는 L293D의 핀 3에, 다른 단자는 핀 6에 연결하세요. 제어 신호의 경우 ESP32의 GPIO 핀 13을 L293D의 핀 2에, GPIO 핀 14를 핀 7에 연결하세요. 마지막으로 공통 기준을 보장하기 위해 ESP32의 접지를 L293D 접지에 연결해야 합니다. 비디오에서 대체 배선(비디오 05:00)을 언급하는 경우, 표시된 특정 변경 사항을 따르세요.

코드 예제 및 설명

모터 제어를 위한 코드는 모터 핀을 정의하고 해당 모드를 설정하는 것으로 구성됩니다. 다음은 setup 함수의 일부입니다:

#define motor1A 13
#define motor2A 14

void setup() {
  pinMode(motor1A, OUTPUT);
  pinMode(motor2A, OUTPUT);  
}

이 스니펫에서 모터 제어 핀을 상수로 정의하고 setup 함수에서 출력으로 설정합니다. 이는 모터 제어를 위한 핀을 준비하는 데 중요합니다. loop 함수는 모터의 동작이 제어되는 곳입니다. 다음은 loop의 핵심 부분입니다:

void loop() {
  digitalWrite(motor1A, HIGH);     
  digitalWrite(motor2A, LOW);   
  delay(2000); 

  digitalWrite(motor1A, LOW);     
  digitalWrite(motor2A, HIGH);    
  delay(2000); 

  digitalWrite(motor1A, LOW);     
  digitalWrite(motor2A, LOW);    
  delay(3000);
}

이 코드는 모터를 한 방향으로 2초 동안 회전시킨 다음, 방향을 반전시켜 2초 동안 회전시키고, 마지막으로 3초 동안 모터를 정지시킵니다. 이 루프는 무한히 반복되어 연속적인 제어를 가능하게 합니다. 더 자세한 통찰과 전체 코드는 기사 아래에 로드되는 전체 프로그램을 참조하세요.

데모 / 기대 효과

배선과 코드 업로드가 성공적으로 완료되면 모터가 한 방향으로 2초 동안 회전하고, 방향을 바꿔 2초 동안 회전한 다음, 3초 동안 정지하는 것을 볼 수 있습니다. 모터가 예상대로 반응하지 않으면 극성 반전이나 잘못된 핀 연결(비디오 08:00)과 같은 일반적인 문제를 확인하세요. 이 설정은 ESP32와 L293D를 사용하여 DC 모터의 속도와 방향을 제어하는 간단한 방법을 제공합니다.

비디오 타임스탬프

  • 00:00 시작
  • 2:01 DC 모터 소개
  • 6:14 L293D 모터 드라이버
  • 9:17 프로젝트 문서
  • 11:04 배선 설명
  • 14:41 ESP32를 이용한 Arduino 모터 제어
  • 17:10 ESP32 보드용 Arduino 포트 선택
  • 18:52 프로젝트 시연
  • 22:08 ESP32를 이용한 모터 속도 제어
  • 26:22 속도 제어 데모
  • 28:01 속도 및 방향 제어 Arduino 코드
  • 29:05 속도 및 방향 시연

이미지

L293D-Motor-Driver-IC
L293D-Motor-Driver-IC
ESP32-15_L293D_motor_schematic
ESP32-15_L293D_motor_schematic
ESP32-15_L293D_motor_wiring
ESP32-15_L293D_motor_wiring
814-ESP32 Tutorial 15/55- Arduino code for L293D motor control
언어: C++
#define motor1A 13
#define motor2A 14

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin as an output.
  pinMode(motor1A, OUTPUT);
  pinMode(motor2A, OUTPUT);  
}

// the loop function runs over and over again forever
void loop() {
  
  // Rotate
  digitalWrite(motor1A, HIGH);     
  digitalWrite(motor2A, LOW);   
  delay(2000); 

  // Rotate in the opposite direction
  digitalWrite(motor1A, LOW);     
  digitalWrite(motor2A, HIGH);    
  delay(2000); 

  // Stop
  digitalWrite(motor1A, LOW);     
  digitalWrite(motor2A, LOW);    
  delay(3000);
}

필요할 수 있는 것들

자원 및 참고자료

파일📁

데이터시트 (pdf)