글 작성자: 취업중인 피터팬
728x90



 목적

무선 조종기로 움직이면서 장애물을 만나면 자동으로 피하는 자동차

 현재 상황

키트와 코딩수정을 완료하였습니다.

 Part1 문제 3 해결 방안

전력 문제가 있었음으로 9v건전지 하나가 아니라 건전지 3개로 작동하게 변경하였습니다.



1. 무선 통신에 사용한 모뎀 : HC-06



2. 무선 통신에 사용한 어플



3. 코드 수정


 수정 전 코드

수정 후 코드 

 #define LEFT_A1 4 //왼쪽 바퀴

#define LEFT_B1 5  //왼쪽 바퀴

#define RIGHT_A2 6 //오른쪽 바퀴

#define RIGHT_B2 7 //오른쪽 바퀴

 #define LEFT_A1 3//왼쪽 바퀴

#define LEFT_B1 11  //왼쪽 바퀴

#define RIGHT_A2 13 //오른쪽 바퀴

#define RIGHT_B2 8 //오른쪽 바퀴

 void left(){       // 좌회전 - 오른쪽 바퀴가 전전,왼쪽 바퀴는 후진하면서 빠르게 좌회전

  digitalWrite(LEFT_A1, LOW);
 
digitalWrite(LEFT_B1, HIGH);
 
digitalWrite(RIGHT_A2, HIGH);
 
digitalWrite(RIGHT_B2, LOW);
}
void right(){     //
우회전 -왼쪽 바퀴가 전진,왼쪽 바퀴는 후진하면서 빠르게 우회전
 
digitalWrite(LEFT_A1, HIGH);
 
digitalWrite(LEFT_B1, LOW);
 
digitalWrite(RIGHT_A2, LOW);
 
digitalWrite(RIGHT_B2, HIGH);
}

 삭제

  #define SONAR_NUM     1 // 초음파센서의 갯수럴 설정합니다.

#define MAX_DISTANCE 500 // 최대거리는 500(cm)로 제한합니다.

#define PING_INTERVAL 250

unsigned long pingTimer[SONAR_NUM];

unsigned int cm[SONAR_NUM];

uint8_t currentSensor = 0;

NewPing sonar[SONAR_NUM] = {

  NewPing(7, 6, MAX_DISTANCE), // Trigger pin, echo pin, 그리고 최대거리

};

 추가

  for (uint8_t i = 0; i < SONAR_NUM; i++) { // 둘 이상의 초음파 센서를 사용할경우 모든 센서를 체크합니다.

    if (millis() >= pingTimer[i]) {         // 핑 타임 체크

      pingTimer[i] += PING_INTERVAL * SONAR_NUM;  // 다음 핑 타임을 위한 시간 체크

      if (i == 0 && currentSensor == SONAR_NUM - 1) oneSensorCycle();

      sonar[currentSensor].timer_stop();      

      currentSensor = i;

      cm[currentSensor] = MAX_DISTANCE;              

      sonar[currentSensor].ping_timer(echoCheck);

    }

  }

  if (cm[0] < 20)  // 만약 20cm 안에 장애물이 감지되면,

       {

          turn_right(); // 오른쪽으로 회전합니다.

      

 추가

 turn_right() 함수 참조

 void turn_right(){     // 우회전 -왼쪽 바퀴가 전진,왼쪽 바퀴는 후진하면서 빠르게 우회전

  digitalWrite(LEFT_A1, LOW);

  digitalWrite(LEFT_B1, HIGH);

  digitalWrite(RIGHT_A2, HIGH);

  digitalWrite(RIGHT_B2, LOW);

  delay(500); //0.5(500밀리초)동안 유지합니다.]

  forward();

}



4. 문제점

아우이노 중간 완성.mp4




멈췄을 때도 초음파 센서가 감지되며 바퀴가 도는 문제 발생


5. 해결 방안


문제 원인

 if (cm[0] < 20)  // 만약 20cm 안에 장애물이 감지되면, 

    {

       turn_right();// 오른쪽으로 회전합니다.

    }

 문제 해결

 코드 수정 

 코드 설명

변수 : unsigned int Keep_stop = 0;

Stop -> Keep_stop = 1;

전진, 우회전, 좌회전 -> keep_Stop = 0;

변경하여 0일때는 센서 감지 허용

1일때는 센서 감지 금지

 whlie문 안에 변수 변경 안됨...


Keep_stop을 변경하는 함수를 호출에 거기에서 Keep_stop변수 변경




'전공_STUDY > 아두이노' 카테고리의 다른 글

무선 통신으로 만드는 자동차 part : 1  (0) 2018.11.14