초음파 센서를 이용한 자동차 충돌 방지 소스코드
일단 간단하게 나마 코드 짜봄.. ^^;

이슈1 : 뒷바퀴가 맘대로 돌아서 바퀴는 직진을 하고 있으나 회전을 한다. ㅡㅜ.. 그냥 회전 바퀴를 고정 시킴 ㅡ.ㅡ;
이슈2 : 속도가 빨라서 나중에 힘들듯… 속도 컨트롤 작업 필요..(PWM을 넣어야 할듯.)
이슈3 : 이슈는 아니고 BT 로 컨트롤 하는 APP 을 만들어야 할듯.. 그래야 테스트가 용이할것으로 보임.
#define echoPin 7 // Echo Pin
#define trigPin 8 // Trigger Pin
//int maximumRange = 200; // Maximum range needed 넓은곳에서 테스트 불가하여 제거
int minimumRange = 0; // Minimum range needed
long duration; // Duration used to calculate distance
enum direction{
RIGHT = 0,
STRAIGHT,
LEFT,
STOP,
};
void setup()
{
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.begin(9600);
}
void turn(int d)
{
if(d == RIGHT)
{
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
}
else if ( d == LEFT)
{
digitalWrite(3, HIGH);
digitalWrite(2, LOW);
digitalWrite(5, HIGH);
digitalWrite(4, LOW);
}
else if (d == STRAIGHT)
{ //for STRAIGHT
digitalWrite(3, HIGH);
digitalWrite(2, LOW);
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
}else
{ //for STOP
digitalWrite(3, LOW);
digitalWrite(2, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
}
}
long check_distance(void)
{
long distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration/58.2;
Serial.println(distance);
| // if (distance >= maximumRange | distance <= minimumRange) |
if(distance <= minimumRange)#define echoPin 7 // Echo Pin
#define trigPin 8 // Trigger Pin
//int maximumRange = 200; // Maximum range needed
int minimumRange = 0; // Minimum range needed
long duration; // Duration used to calculate distance
enum direction{
RIGHT = 0,
STRAIGHT,
LEFT,
STOP,
BACK,
};
void setup()
{
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(13, OUTPUT);
Serial.begin(9600);
}
void turn(int d)
{
if(d == RIGHT)
{
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
}
else if ( d == LEFT)
{
digitalWrite(3, HIGH);
digitalWrite(2, LOW);
digitalWrite(5, HIGH);
digitalWrite(4, LOW);
}
else if (d == STRAIGHT)
{ //for STRAIGHT
digitalWrite(3, HIGH);
digitalWrite(2, LOW);
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
}else if (d == BACK)
{ //for STRAIGHT
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(5, HIGH);
digitalWrite(4, LOW);
}
else
{ //for STOP
digitalWrite(3, LOW);
digitalWrite(2, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
}
}
long check_distance(void)
{
long distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration/58.2;
Serial.println(distance);
| // if (distance >= maximumRange | distance <= minimumRange) |
if (distance <= minimumRange)
return -1;
else
return distance;
}
void loop()
{
long check_dist;
// Serial.println(check_distance());
check_dist = check_distance();
if(check_dist >10)
{
digitalWrite(13, HIGH);
Serial.println(“straight”);
turn(STRAIGHT);
}
else if(check_dist >= 0 && check_dist <= 10)
{
digitalWrite(13, HIGH);
Serial.println(“turn right”);
turn(RIGHT);
} else
{
digitalWrite(13, LOW);
Serial.println(“BACK”);
turn(BACK);
}
delay(100);
}