# 목적
- 시리얼 통신을 이용하여 아두이노에게 키보드 입력을 받아, 두 개의 모터로 동작하는 자동차의 전진, 좌회전, 우회전, 후진, 정지 동작을 구현한다.
# 준비물
- DC 모터 드라이버(L9110S Dual DC motor deriver) 모듈 1개, DC 기어 모터 2개, 바퀴 2개
- 아두이노, 브래드보드, 점퍼케이블
# 회로도
# 코드-아두이노(arduino)
// code start
#define PIN_A1 11
#define PIN_B1 10
#define PIN_A2 9
#define PIN_B2 8
char val;
void setup() {
pinMode(PIN_A1, OUTPUT);
pinMode(PIN_B1, OUTPUT);
pinMode(PIN_A2, OUTPUT);
pinMode(PIN_B2, OUTPUT);
Serial.begin(9600);
Serial.println("Motor Test Start");
}
void loop() {
while(!Serial.available()); // 시리얼 입력 받을 때 까지 기다리기
while(Serial.available()){
val = Serial.read();
Serial.print("input data: ");
Serial.println(val);
if(val=='w'){
forward();
Serial.println("forward");
} else if(val=='s'){
backward();
Serial.println("backward");
} else if(val=='a'){
turn_left();
Serial.println("trun left");
} else if(val=='d'){
turn_right();
Serial.println("turn right");
} else if(val=='t'){
stop();
Serial.println("stop");
}
}
}
void forward(){
digitalWrite(PIN_A1, HIGH);
digitalWrite(PIN_B1, LOW);
digitalWrite(PIN_A2, HIGH);
digitalWrite(PIN_B2, LOW);
}
void backward(){
digitalWrite(PIN_A1, LOW);
digitalWrite(PIN_B1, HIGH);
digitalWrite(PIN_A2, LOW);
digitalWrite(PIN_B2, HIGH);
}
void turn_left(){
digitalWrite(PIN_A1, LOW);
digitalWrite(PIN_B1, HIGH);
digitalWrite(PIN_A2, HIGH);
digitalWrite(PIN_B2, LOW);
}
void turn_right(){
digitalWrite(PIN_A1, HIGH);
digitalWrite(PIN_B1, LOW);
digitalWrite(PIN_A2, LOW);
digitalWrite(PIN_B2, HIGH);
}
void stop(){
digitalWrite(PIN_A1, LOW);
digitalWrite(PIN_B1, LOW);
digitalWrite(PIN_A2, LOW);
digitalWrite(PIN_B2, LOW);
}
// code end
# 디버깅
- DC 기어 모터는 두 개의 핀에 어떤 극성을 주는지에 따라 회전방향이 바뀌게 된다.