【 아두이노 기초 】 #26 DC 모터 제어 하기 6
지난 시간에 DC 모터를 버튼을 이용하여 정회전과 역회전을 시켜보았다. 이번시간에는 모터 하나를 더 추가하여 동시에 두개의 모터의 정·역 제어를 해보도록 하자. L283D의 나머지 채널 하나만 추가로 연결하면 되니 어렵지 않을 것이다.
※ 모터 구동을 도와 주는 H브릿지 IC(L293D)에 대한 설명은 앞의 게시글을 참조. ( # 24 DC 모터 제어하기 4 바로가기 )
▶ L293D 모터 제어 드라이버 IC 핀배열 및 구성도 :
▶ 실습 목표 :
두 개의 모터를 L283과 아두이노에 연결하고 같은 방향으로 전진을 시킨다. 푸쉬버튼을 누르고 있는 순간만 두 개의 바퀴가 역회전이 되도록 프로그래밍 하라. ( 가변저항을 통한 속도제어도 가능하도록 하라)
▶ 실습 회로도면 :
(이미지 클릭하면 확대 가능)
▶ 부대품 목록 : 아두이노 보드, 브레드 보드
▶ 부품 목록 : L293D IC, DC 모터 x 2, 푸쉬버튼, 가변저항 10KΩ~500KΩ 사이 아무거나
▶ 프로그램 (코드& 설명) :
int in1=7;
int in2=8;
int in3=12;
int in4=13;
int MotorA=6; // 좌측 모터
int MotorB=11; // 우측 모터
int pwmA;
int btn=10; // 모터 방향 변경을 위한 버튼 변수 선언
void setup() {
pinMode(in1, OUTPUT); // L293D의 1번 채널의 입력 1
pinMode(in2, OUTPUT); // L293D의 1번 채널의 입력 2
pinMode(in1, OUTPUT); // L293D의 2번 채널의 입력 1
pinMode(in2, OUTPUT); // L293D의 2번 채널의 입력 2
pinMode(MotorA, OUTPUT);
pinMode(MotorB, OUTPUT);
pinMode(btn, INPUT_PULLUP); //아두이노 보드 내부 풀업저항 사용 코드
}
void loop() {
boolean btnHL = digitalRead(btn); //boolean은0(LOW),1(HIGH)논리값
pwmA = analogRead(A0)/4; //0~256 값을 넣기위해 '/4'함
MotorSet(pwmA,btnHL); // 모터의 속도와 방향을 설정하는 함수 실행
}
void MotorSet(int pwmA, boolean btnHL) //속도값과 버튼상태 값 전달
{
analogWrite(MotorA, pwmA);
digitalWrite(in1, !btnHL); // A 모터 + Line에 btnHL의 반대 논리 값(!btnHL) 출력
digitalWrite(in2, btnHL); // A 모터 - Line에 btnHL의 논리 값 출력
analogWrite(MotorB, pwm);
digitalWrite(in3, !btnHL); // B 모터 + Line에 btnHL의 반대 논리 값(!btnHL) 출력
digitalWrite(in4, btnHL); // B 모터 - Line에 btnHL의 논리 값 출력
}
▶ 실행 영상 :
▶ 아두이노 소스 코드 다운로드 :
'아두이노 > 1. 아두이노기초' 카테고리의 다른 글
【 아두이노 기초 】 #28 서보(Servo) 모터 제어 하기 1 (0) | 2018.10.30 |
---|---|
【 아두이노 기초 】 #27 DC 모터 제어 하기 7 (RC카 모터구동) (0) | 2018.10.17 |
【 아두이노 기초 】 #25 DC 모터 제어 하기 5 (0) | 2018.10.10 |
【 아두이노 기초 】 #24 DC 모터 제어 하기 4 (0) | 2018.10.02 |
【 아두이노 기초 】 #23 서보 모터 제어 1 (0) | 2018.09.27 |