주요부품
모터 드라이버 ( WB291111 / L298N )
- VMS 에 모터용 전원 연결
- GNS 에는 아두이노 GND와도 연결
- ENA, Int1, Int2 - 모터 A용 (속도, 앞, 뒤)
- Int3, Int4, ENB - 모터 B용 (앞, 뒤 속도)
- 속도 : PWM 으로 속도 제어.
- 앞,귀 : (HIGH, LOW) , (LOW, HIGH) 값으로 전진/후진 제어
회로구성
- 9V 배터리 : 아두이노 Vin, MotorDriver-VMS
- IR 센서 : 3번핀
- MotorDriver-Enable : 9번핀
- MotorDriver-Int1, Int2 : 12, 11번핀
- MotorDriver-Int3, Int4 : 6, 5번핀
하두이노 소스
#include "IRRemote.hpp"
int RECV_PIN = 3;
IRRemote irrecv(RECV_PIN);
int PIN_MOTOR_R_FORWARD = 11;
int PIN_MOTOR_R_BACK = 12;
int PIN_MOTOR_L_FORWARD = 6;
int PIN_MOTOR_L_BACK = 5;
int PIN_SPEED = 9;
void setup()
{
pinMode(PIN_MOTOR_L_FORWARD, OUTPUT);
pinMode(PIN_MOTOR_L_BACK, OUTPUT);
pinMode(PIN_MOTOR_R_FORWARD, OUTPUT);
pinMode(PIN_MOTOR_R_BACK, OUTPUT);
pinMode(PIN_SPEED, OUTPUT);
Serial.begin(9600);
irrecv.start();
irrecv.useRepeat(true);
}
void loop() {
if (irrecv.receive()) {
Serial.println(irrecv.toString());
analogWrite(PIN_SPEED, 255);
switch (irrecv.value()) {
case NUM1 :
digitalWrite(PIN_MOTOR_L_FORWARD, LOW);
digitalWrite(PIN_MOTOR_L_BACK, LOW);
digitalWrite(PIN_MOTOR_R_FORWARD, HIGH);
digitalWrite(PIN_MOTOR_R_BACK, LOW);
break;
case NUM2 :
digitalWrite(PIN_MOTOR_L_FORWARD, HIGH);
digitalWrite(PIN_MOTOR_L_BACK, LOW);
digitalWrite(PIN_MOTOR_R_FORWARD, HIGH);
digitalWrite(PIN_MOTOR_R_BACK, LOW);
break;
case NUM3 :
digitalWrite(PIN_MOTOR_L_FORWARD, HIGH);
digitalWrite(PIN_MOTOR_L_BACK, LOW);
digitalWrite(PIN_MOTOR_R_FORWARD, LOW);
digitalWrite(PIN_MOTOR_R_BACK, LOW);
break;
case NUM4 :
digitalWrite(PIN_MOTOR_L_FORWARD, LOW);
digitalWrite(PIN_MOTOR_L_BACK, HIGH);
digitalWrite(PIN_MOTOR_R_FORWARD, HIGH);
digitalWrite(PIN_MOTOR_R_BACK, LOW);
break;
case NUM5 :
digitalWrite(PIN_MOTOR_L_FORWARD, LOW);
digitalWrite(PIN_MOTOR_L_BACK, LOW);
digitalWrite(PIN_MOTOR_R_FORWARD, LOW);
digitalWrite(PIN_MOTOR_R_BACK, LOW);
break;
case NUM6 :
digitalWrite(PIN_MOTOR_L_FORWARD, HIGH);
digitalWrite(PIN_MOTOR_L_BACK, LOW);
digitalWrite(PIN_MOTOR_R_FORWARD, LOW);
digitalWrite(PIN_MOTOR_R_BACK, HIGH);
break;
case NUM7 :
digitalWrite(PIN_MOTOR_L_FORWARD, LOW);
digitalWrite(PIN_MOTOR_L_BACK, LOW);
digitalWrite(PIN_MOTOR_R_FORWARD, LOW);
digitalWrite(PIN_MOTOR_R_BACK, HIGH);
break;
case NUM8 :
digitalWrite(PIN_MOTOR_L_FORWARD, LOW);
digitalWrite(PIN_MOTOR_L_BACK, HIGH);
digitalWrite(PIN_MOTOR_R_FORWARD, LOW);
digitalWrite(PIN_MOTOR_R_BACK, HIGH);
break;
case NUM9 :
digitalWrite(PIN_MOTOR_L_FORWARD, LOW);
digitalWrite(PIN_MOTOR_L_BACK, HIGH);
digitalWrite(PIN_MOTOR_R_FORWARD, LOW);
digitalWrite(PIN_MOTOR_R_BACK, LOW);
break;
}
} else {
digitalWrite(PIN_MOTOR_R_FORWARD, LOW);
digitalWrite(PIN_MOTOR_R_BACK, LOW);
digitalWrite(PIN_MOTOR_L_FORWARD, LOW);
digitalWrite(PIN_MOTOR_L_BACK, LOW);
}
delay(300);
}