무선 통신으로 만드는 자동차 part : 1
다음 사이트를 참조하였습니다 : 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 드라이버를 설치해줌 |
3 | 연결 포트를 뽑는 순간 자동차가 멈춤 | 정확하지는 않지만 무선으로 업로드 할 경우 해결 될 것으로 예상 됨 아직 해결하지 못함 |
2. 나의 컴퓨터 사향에 따라 설치한 USB 드라이버
운영체제 : Windows 10, 종류 : 64비트 메모리(RAM) : 8.00GB, 프로세서 : Intel(R) Core(TM) i5-7400 CPU
*64 비트임으로 다음 파일을 설치해 줍니다
'전공_STUDY > 아두이노' 카테고리의 다른 글
무선 통신으로 만드는 자동차 part : 2 (0) | 2019.01.05 |
---|