[실습세미나] 라인트레이서 2팀

작성자
김성준
작성일
2022-05-20 03:03
조회
307
RC카를 검정색 라인을 따라 주행하도록 하며, 라인의 방향 전환이 있을 경우 센서를 통해 인식하여 각 바퀴의 방향을 달리해 방향 전환을 하는 것이 주 목표였습니다.  아래 작성된 코드는 RC카  구동에 사용된 코드입니다.  왼쪽과 오른쪽 바퀴에 연결된 모터의 출력이 자체 기기 문제로 인해 다름을 인식하여 각 바퀴에 주어지는 속도를 달리하였습니다. 직진을 하는 straight를 보면 각 바퀴에 입력된 스피드가 다름에도 실제 출력되는 스피드는 비슷하여 직진 주행을 하였습니다. 좌회전과 우회전을 하는 경우 차량 앞 부분에 설치된  두 센서의 종류와 부착된 위치가 달라 하나의 센서가 지속적으로 물체가 없다고 인식하여 문제가 생겼습니다. 하지만 차량을 뒤집어 임의로 바닥면을 설정하여 바퀴의 회전 방향을 살펴본 결과 옳게 주행이 가능함을 알 수 있었습니다. ( 영상을 첨부할 수 없어 사진으로 대체하였습니다.)

int infrared_left = 13;
int infrared_right = 12;
int tire_left1 = 5;
int tire_left2 = 6;
int tire_right1 = 11;
int tire_right2 = 10;
int spd1 = 120;
int spd2 = 150;

void setup() {
/*infrared ray sensor*/
Serial.begin(9600);
pinMode(infrared_left, INPUT);
pinMode(infrared_right, INPUT);
/* 1,2 pin tire on right side*/
pinMode(tire_left1, OUTPUT);
pinMode(tire_left2, OUTPUT);
pinMode(tire_right1, OUTPUT);
pinMode(tire_right2, OUTPUT);
}

void loop() {

int left = digitalRead(infrared_left);
int right = digitalRead(infrared_right);



Serial.println(left);
if (left == 1 && right == 1){
/*straight*/
analogWrite(tire_left1, spd1);
analogWrite(tire_left2, 0);
analogWrite(tire_right1, spd2);
analogWrite(tire_right2, 0);
delay(100);
}

else if (left == 0 && right == 1){
/*turn left, left tire backward*/
analogWrite(tire_left1, 0);
analogWrite(tire_left2, 0);
analogWrite(tire_right1, spd2);
analogWrite(tire_right2, 0);
delay(100);
}

else if (left == 1 && right == 0){
/*turn right, right tire backward*/
analogWrite(tire_left1, spd1);
analogWrite(tire_left2, 0);
analogWrite(tire_right1, 0);
analogWrite(tire_right2, 0);
delay(100);
}

else{
/*stop*/
analogWrite(tire_left1, 0);
analogWrite(tire_left2, 0);
analogWrite(tire_right1, 0);
analogWrite(tire_right2, 0);
}

}
전체 0