본문 바로가기

Dev/C언어

아두이노 L293D 모터 드라이버 사용하기

728x90
반응형

오늘은 아두이노 보드에 L293D 모터 드라이버를 사용해 DC모터를 제어해 보도록 하겠습니다.

 

저번 포스팅에서는 DC모터와 가변저항을 이용해 모터의 속도를 제어했었죠.

programmingandengineering.tistory.com/54

 

아두이노 DC모터와 가변저항 사용하기

오늘은 저번에 DC모터와 멀티미터를 사용했던 회로에 이어 멀티미터 대신 가변저항을 연결해보겠습니다. DC모터와 멀티미터를 연결했던 회로가 궁금하신 분들은 아래 링크를 먼저 보고 와주시��

programmingandengineering.tistory.com

 

이번 회로에서는 모터 드라이버를 이용해서 속도와 방향까지 조절할 수 있습니다.

 

회로도

회로는 9V 배터리를 모터 드라이버에 연결하고 이 칩에 모터를 연결해줍니다.

 

또, 모터 드라이버는 보드 전원과도 연결해주었습니다.

 

당연히 속도나 방향을 제어하기 위한 데이터를 송수신하기 위해 아두이노와도 연결해줍니다.

 

여기서, L293D 모터 드라이버칩의 많은 핀 중에서 굳이 몇개를 골라서 썼는지 궁금하실 건데요.

 

L293D 모터 드라이버

위의 그림처럼 각 핀의 기능이 다르기 때문에 잘 보고 연결해주어야 합니다.

 

Tinkercad에서는 저기 하얀 점이 1번 핀이라는 뜻입니다. 따라서, 위의 그림을 왼쪽으로 90도 회전시킨 것과 같겠죠?

 

여기서 그럼 제가 연결한 핀은 1, 2, 3, 4, 6, 7, 8, 16번입니다.

 

차례대로 모터 활성화, 속도 제어, 모터 연결, 접지, 모터 연결, 방향 제어, 모터 전원, 칩 전원입니다.

 

활성화, 비활성화 신호를 위한 1번 핀. PWM을 이용해 속도 제어를 하기 위한 2번 핀.

모터의 두 핀을 연결한 3번과 6번 핀. 접지를 위한 4번 핀.

모터가 왼쪽으로 돌 것인지 오른쪽으로 돌 것인지 방향을 제어하기 위한 7번 핀.

모터에 전원을 공급하기 위한 8번 핀. 모터와 별개로 L293D 모터 드라이버 전원 공급을 위한 16번 핀.

 

코드

const int pin_293_EN=11;
const int pin_293_IN1=10;
const int pin_293_IN2=9;

void setup()
{
  pinMode(pin_293_EN, OUTPUT);
  digitalWrite(pin_293_EN, HIGH);
  pinMode(pin_293_IN1, OUTPUT);
  pinMode(pin_293_IN2, OUTPUT);
}

void loop()
{
  digitalWrite(pin_293_IN2, LOW);
  for(int pwm=0;pwm<256;pwm++)
  {
    analogWrite(pin_293_IN1, pwm);
    delay(30);
  }
  analogWrite(pin_293_IN1, 0);
  delay(1000);
  
  digitalWrite(pin_293_IN2, HIGH);
  for(int pwm=255;pwm>=0;pwm--)
  {
    analogWrite(pin_293_IN1, pwm);
    delay(30);
  }
  analogWrite(pin_293_IN1, 255);
  delay(1000);
}

위 코드는 DC모터가 정방향으로 서서히 빨라지면서 최대 속력까지 돌고 회전을 멈춘 후,

다시 역방향으로 서서히 빨라지면서 최대 속력으로 도는 코드입니다.

 

setup함수에서 1번 핀의 값을 HIGH로 digitalWrite함으로써 모터를 활성화했습니다.

 

모터에 연결된 IN1, IN2(2번, 7번) 핀의 동작을 출력으로 설정했습니다.

 

IN1은 속도 제어, IN2는 방향 제어입니다.

 

따라서 loop함수에서는 방향 제어핀을 LOW, 이 때 속도 제어 핀을 int pwm을 for문을 통해 최댓값까지 올려줍니다.

 

최댓값이 되면 속도가 0이 되고 1초동안 정지했다가

방향 제어핀을 HIGH, int pwm을 for문을 통해 최솟값까지 내립니다.

 

그리고 최솟값이 되면 1초동안 정지합니다.

 

이 과정을 반복하게 됩니다.

 

마치며

오늘도 부족한 저의 글 봐주셔서 너무 감사합니다.

 

언제나 피드백은 환영입니다! 다음에는 더 좋은 글로 오겠습니다.

 

감사합니다.

728x90
반응형

"); wcs_do();