공기정화 식물-인공지능-IOT

아두이노 우노 L293D DC모터 제어 실험

coding art 2021. 2. 1. 13:41
728x90

RC카 제작에 사용하는 DC모터를 제어해 보자. DC모터 제어 배선은 아래 그림과 같이 아두이노 우노와 DC모터 사용에만 한하기로 하자. DC모터의 배선은 디지털 3번 핀과 GND 핀을 사용하도록 배선한다.

DC모터를 제어하기 위한 아두이노 모터 제어 코드는 다음과 같다.

 

int pin = 3;// 아두이노 PWM 디지털 핀

int rpm1 = 150;// DC모터 저속 회전

int rpm2 = 255;// DC모터 고속 회전

 

void setup() {

Serial.begin(9600);

pinMode(pin, OUTPUT);

}

 

void loop() {

analogWrite(pin, rpm1);

delay(5000);

analogWrite(pin, rpm2);

delay(5000);

}

 

물론 이 코드는 아무런 문제없이 잘 작동하지만 스스로 회전을 시작하지 못하기 때문에 모터 구동을 위해 손으로 돌려 줄 필요가 있다. 따라서 이 문제를 개선하기 위하여 L293D 모터 제어 IC칩을 사용해 보자.

이 배선의 특징은 전압이 5V가 아닌 5~32V 사이의 높은 배터리 전압의 경우에도 Vcc2에 공급이 가능하지만 아두이노 PWM 핀을 사용하는 이유로 인해 PWM 의 최대전압이 5V에 국한된다는 제약이 있다는 점이다. 한편 Vcc2 는 고정된 전압 5V를 공급하면서 Enable1,2에서 공급하는 전압을 PWM 신호로 공급하는 방법이 있을 수 있다. 이렇게 배선을 하면 Vcc25~32V 사이의 높은 전압 배터리를 사용할 수 있는 이점이 있을 수 있다.

 

다음은 실제 배선 사례이다. RC카용 직류모터를 사용하면 모터 부하로서 바퀴를 끼워주도록 한다.

//motor_contrpl_01

int pin2 = 2;//pwm 이 불가능한 그냥 디지털 핀

int pin3 = 3;//pwm 출력 가능 핀

int rpm1 = 150;

int rpm2 = 255;

 

void setup() {

Serial.begin(9600);

pinMode(pin2, OUTPUT);

digitalWrite(pin2,HIGH);

pinMode(pin3,OUTPUT);

}

 

void loop() {

analogWrite(pin3, rpm1);

delay(5000);

analogWrite(pin3, rpm2);

delay(5000);

 

}