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

다음 사이트를 참조하였습니다 : https://kocoafab.cc/tutorial/view/232




현재 상황 : 키트를 모두 완성하였습니다. 다음 점프선을 연결하는데 어려움을 겪었지만 윗부분을 드라이버로 열어 연결하였습니다.
































다음 사이트에서 다운 받은 아두이노 툴에서 코딩을 시작합니다 : https://www.arduino.cc/



#include <NewPing.h> // NewPing라이브러리를 불러옵니다.


#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, 그리고 최대거리 

};


void setup() {

  Serial.begin(9600);

  pingTimer[0] = millis() + 75;

  for (uint8_t i = 1; i < SONAR_NUM; i++) // 센서의 초기값을 설정합니다.

    pingTimer[i] = pingTimer[i - 1] + PING_INTERVAL;


  //모터쉴드의 A & B채널 설정

  pinMode(12, OUTPUT); //Motor 채널 A pin을 출력으로 설정합니다.

  pinMode(9, OUTPUT); //Brake 채널 A pin을 출력으로 설정합니다.

  pinMode(13, OUTPUT); //Motor 채널 B pin을 출력으로 설정합니다.

  pinMode(8, OUTPUT); //Brake 채널 B pin을 출력으로 설정합니다.

}


void loop() {

  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(); // 오른쪽으로 회전합니다.

       } 

       



       else; // 아닐경우,

       {

          forward(); // 계속 전진합니다.      

       }

  

}


void echoCheck() {

  if (sonar[currentSensor].check_timer())

    cm[currentSensor] = sonar[currentSensor].ping_result / US_ROUNDTRIP_CM;

}


void oneSensorCycle() {

  for (uint8_t i = 0; i < SONAR_NUM; i++) {

    Serial.print(i);

    Serial.print("=");

    Serial.print(cm[i]);

    Serial.print("cm ");

  }

  Serial.println();

}

void forward()

{

  //전진모드에 대한 설정입니다.

  digitalWrite(12, LOW);  //12번 핀과 연결된 채널 A 모터의 방향을 설정합니다. 

  digitalWrite(9, LOW);   //9번 핀과 연결된 채널 A 모터의 브레이크를 해제합니다.

  analogWrite(3, 255);    //3번 핀과 연결된 채널 A 모터의 속도를 최대값(255)로 설정합니다.

  digitalWrite(13, HIGH); //13번 핀과 연결된  채널 B 모터의 방향을 설정합니다. 

  digitalWrite(8, LOW);   //8번 핀과 연결된 채널 B 모터의 브레이크를 해제합니다.

  analogWrite(11, 255);   //11번 핀과 연결된 채널 B 모터의 속도를 최대값(255)로 설정합니다. 

}


void turn_right()

  //우회전에 대한 설정입니다.

  digitalWrite(12, HIGH); //12번 핀과 연결된 채널 A 모터의 방향을 역방향으로 설정합니다. 

  digitalWrite(9, LOW);   //9번 핀과 연결된 채널 A 모터의 브레이크를 해제합니다.

  analogWrite(3, 255);    //3번 핀과 연결된 채널 A 모터의 속도를 최대값(255)로 설정합니다.

  digitalWrite(13, HIGH); //13번 핀과 연결된  채널 B 모터의 방향을 설정합니다. 

  digitalWrite(8, LOW);   //8번 핀과 연결된 채널 B 모터의 브레이크를 해제합니다.

  analogWrite(11, 255);   //11번 핀과 연결된 채널 B 모터의 속도를 최대값(255)로 설정합니다. 

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

}







문제 번호 

 문제 내용

해결 방안 

 1

 NewPing.h의 라이브러리가 없음

 다음 사이트에서 다운 받은 후 툴에 적용 https://code.google.com/archive/redirect/a/code.google.com/p/arduino-new-ping?movedTo=https:%2F%2Fbitbucket.org%2Fteckel12%2Farduino-new-ping%2Fwiki%2FHome

 2

 포트가 인식되지 않음

 다음 사이트에서 USB 드라이버를 설치해줌

https://www.ftdichip.com/Drivers/VCP.htm

 3

 연결 포트를 뽑는 순간 자동차가 멈춤

정확하지는 않지만 무선으로 업로드 할 경우 해결 될 것으로 예상 됨 아직 해결하지 못함 



1. 라이브러리 툴에 적용하는 방법






2. 나의 컴퓨터 사향에 따라 설치한 USB 드라이버


운영체제 : Windows 10, 종류 : 64비트 메모리(RAM) : 8.00GB, 프로세서 : Intel(R) Core(TM) i5-7400 CPU



*64 비트임으로 다음 파일을 설치해 줍니다




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

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