모터 드라이버란?

모터 드라이버는 전기 모터를 제어하기 위해 사용되는 전자 장치입니다. 주로 DC 모터나 스텝 모터와 같은 전기 모터를 제어하는 데 사용되며, 모터의 회전 방향, 속도, 전원 공급을 조절할 수 있습니다. 모터 드라이버는 보통 저전력의 신호(예: 마이크로컨트롤러에서 나오는 신호)를 받아 이를 고전력으로 변환하여 모터를 구동합니다.

주요 기능

  1. 방향 제어: 모터의 회전 방향을 제어할 수 있습니다. 대부분의 모터 드라이버는 H-브릿지 회로를 사용하여 모터의 방향을 바꿀 수 있습니다.
  2. 속도 제어: PWM(Pulse Width Modulation) 신호를 사용하여 모터의 속도를 제어합니다. PWM의 듀티 사이클을 조절함으로써 모터의 평균 전압을 변화시켜 속도를 조절할 수 있습니다.
  3. 전류 보호: 모터가 과도한 전류를 소비하면 손상될 수 있기 때문에, 모터 드라이버에는 과전류 보호 기능이 포함된 경우가 많습니다.
  4. 전압 증폭: 마이크로컨트롤러의 출력 전압(예: 5V)을 모터에 필요한 전압(예: 12V, 24V 등)으로 증폭하여 모터가 충분한 전력을 공급받도록 합니다.

모터 드라이버의 종류

  1. L293D: 가장 널리 사용되는 DC 모터 드라이버로, 두 개의 DC 모터를 독립적으로 제어할 수 있습니다.
  2. L298N: 고전압 모터 드라이버로, DC 모터 두 개나 스텝 모터 한 개를 제어할 수 있습니다.
  3. DRV8825: 주로 스텝 모터에 사용되며, 고전류와 고전압 모터에 적합합니다.

라이브러리 다운로드

모터테스트 코드

#include <SoftwareSerial.h>
#include <AFMotor.h>

AF_DCMotor motor_L(1);              
AF_DCMotor motor_R(4); 

void setup() {
  motor_L.setSpeed(150);              
  motor_L.run(RELEASE);
  motor_R.setSpeed(150);                 
  motor_R.run(RELEASE);
}

void loop() {
 motor_L.run(FORWARD); 
 motor_R.run(FORWARD); 
 delay(2000);
 motor_L.run(RELEASE);
 motor_R.run(RELEASE);
 delay(3000);
 motor_L.run(BACKWARD);
 motor_R.run(BACKWARD);
 delay(2000);
 motor_L.run(RELEASE); 
 motor_R.run(RELEASE); 
 delay(1000);
}

적외선센서를 고정시켜줍니다.

적외선 센서 코드가 결합된 코드

적외선 센서는 디지털 12번, 13번 pin에 연결하도록 한다.

void setup() {
  pinMode(7, OUTPUT);       // Motor A 방향설정1
  pinMode(8, OUTPUT);       // Motor A 방향설정2
  pinMode(4, OUTPUT);       // Motor B 방향설정1
  pinMode(5, OUTPUT);       // Motor B 방향설정2
  
  analogWrite(9, 130);       // Motor A 속도조절 (0~255)
  analogWrite(3, 130);        // Motor B 속도조절 (0~255)
  Serial.begin(9600);
}

void loop() {
 
    int val1 = digitalRead(12);    // 라인센서1 왼쪽
    int val2 = digitalRead(13);    // 라인센서2 오른쪽
    Serial.print(val1);
    Serial.println(val2);
    
      if (val1 == 1 && val2 == 1)   // 직진
      {                 
       digitalWrite(7, HIGH); 
       digitalWrite(5, HIGH);
      }
      else if (val1 == 0 && val2 == 1)  // 좌회전
      {             
       digitalWrite(7, LOW); 
       digitalWrite(5, HIGH);
      }
      else if (val1 == 1 && val2 == 0)  // 우회전
      {             
        digitalWrite(7, HIGH); 
        digitalWrite(5, LOW);
      } 
      else if (val1 == 0 && val2 == 0)  // 정지
      {              
        digitalWrite(7, LOW); 
        digitalWrite(5, LOW);
      }           
}

Comments

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다