const int enable = 11; // 속도 조정핀
const int left = 6; // 방향 조절핀 1
const int right = 5; // 방향 조절핀 2
int speed = 0; // 속도 조절 변수
int direction = 0; // 방향 조절 변수
void setup()
{
Serial.begin(9600);
pinMode(enable,OUTPUT);
pinMode(left,OUTPUT);
pinMode(right,OUTPUT);
Serial.println("Program start\nRight direction\n");
}
void loop(){
if ( direction == 0 ){ // 방향 변수가 0이면 오른쪽 회전
analogWrite(enable,speed); // enable핀(D11)에 아날로그 0~255값 출력
digitalWrite(right,HIGH); // D5핀을 HIGH D6핀을 LOW
digitalWrite(left,LOW);
}
else if ( direction == 1 ) { // 방향 변수가 1이면 왼쪽 회전
analogWrite(enable,speed);
digitalWrite(left,HIGH);
digitalWrite(right,LOW);
}
speed++; // 스피드 변수를 1씩 증가시켜 모터 속도를 증가시킴
if ( speed == 256 ){ // 스피드 변수가 256이되면 (PWM최대값 초과)
speed = 0; // 속도를 0으로 초기화
direction = !direction; // 방향 변수를 토글(0이면 1으로, 1이면 0으로)
Serial.println("Change direction");
if ( direction == 0 ) Serial.println("Direction = Right\n");
else Serial.println("Direction = Left\n");
}
delay(20);
}
동작 영상입니다.
프로그램이 동작하면 모터가 오른쪽으로 회전하기 시작합니다. 시간이 지날수록 속도가 증가되고 최대속도가 되었을 때 속도를0으로 초기화하고 회전 방향을 바꾸는 동작을 반복하는 프로그램을 완성했습니다.
L293D모터 드라이버 IC를 사용하면 모터의 방향을 조절할 수 있고 속도까지 제어할 수 있습니다. 그리고 하나의 L293D로 2개의 모터까지 제어할 수 있습니다.
L293D의 핀맵입니다. 그림에서 볼 수 있듯 1~7번핀으로 하나의 모터를 제어하고 9~15번핀으로 모터를 제어할 수 있어 총 2개의 모터까지 제어할 수 있습니다.
ENABLE핀은 아두이노에서 PWM제어가 가능한 핀에 연결하여 아날로그 데이터를 입력합니다.