Çizgi izleyen engel geçen robot

HalilSenn

Üye
Katılım
2 Ocak 2019
Mesajlar
10
Puanları
1
Yaş
28
Merhaba arkadaşlar çizgi izleyen ve engel geçen araç yapıyorum. Çizgi izleme ve engele gelmede bir sorun yaşamıyorum ancak engelin önünde durduktan sonra aracın bir kez daha engel görmesini istiyorum. Bir kez daha engeli gördükten sonra geçecek. Eğer bunu yaptırmazsam engel yok diyerek geçmek isteyecek, belkide engel kapanırken denk gelecek ve engelle çarpışacak. O yüzden 1 kere daha engeli gördükten sonra geç işlemini nasıl yaptırabilirim?
Kod:
#define SensorSol 4 //left sensor

#define echoPin 12

#define trigPin 11

#define SensorSag 2 //right sensor



long sure, uzaklik; //duration, distance



#define MotorR1 9

#define MotorR2 8

#define MotorRE 10



#define MotorL1 7

#define MotorL2 6

#define MotorLE 5







void setup() {



pinMode(echoPin, INPUT);

pinMode(trigPin, OUTPUT);

pinMode(SensorSol, INPUT);

pinMode(SensorSag, INPUT);



pinMode(MotorR1, OUTPUT);

pinMode(MotorR2, OUTPUT);

pinMode(MotorRE, OUTPUT);



pinMode(MotorL1, OUTPUT);

pinMode(MotorL2, OUTPUT);

pinMode(MotorLE, OUTPUT);



Serial.begin(9600);





}



void loop() {

digitalWrite(trigPin, LOW);

delayMicroseconds(5);

digitalWrite(trigPin, HIGH);

delayMicroseconds(10);

digitalWrite(trigPin, LOW);



sure = pulseIn(echoPin, HIGH);

uzaklik = (sure / 2) / 29.1 ;

Serial.print("uzaklik: ");

Serial.println(uzaklik);

if (uzaklik > 5 ) {

if(digitalRead(SensorSol) == 0 && digitalRead(SensorSag) == 0){

ileri();

}



if(digitalRead(SensorSol) == 0 && digitalRead(SensorSag) == 1){

sag();

}



if(digitalRead(SensorSol) == 0 && digitalRead(SensorSag) == 0){

ileri();

}



if(digitalRead(SensorSol) == 1 && digitalRead(SensorSag) == 0){

sol();

}



if(digitalRead(SensorSol) == 0 && digitalRead(SensorSag) == 0){

ileri();

}



}



if (uzaklik < 5){

dur();

delay(500);



//SORUN BURADA BAŞLIYOR.

//ENGELİ BİR DAHA GÖR VE ARDINDAN if (uzaklik > 5);

//geç();

//delay(1000);

//void stop

//delay(500);

//Tekrar çizgi izlemeye devam et

}





}





void ileri(){ // move forward



digitalWrite(MotorR1, HIGH);

digitalWrite(MotorR2, LOW);

analogWrite(MotorRE, 60);



digitalWrite(MotorL1, HIGH);

digitalWrite(MotorL2, LOW);

analogWrite(MotorLE, 80);

}





void sag(){ //right



digitalWrite(MotorR1, HIGH);

digitalWrite(MotorR2, LOW);

analogWrite(MotorRE, 0);



digitalWrite(MotorL1, HIGH);

digitalWrite(MotorL2, LOW);

analogWrite(MotorLE, 80);

}



void sol(){ //left



digitalWrite(MotorR1, HIGH);

digitalWrite(MotorR2, LOW);

analogWrite(MotorRE, 80);



digitalWrite(MotorL1, HIGH);

digitalWrite(MotorL2, LOW);

analogWrite(MotorLE, 0);

}



void dur(){ // stop



digitalWrite(MotorR1, HIGH);

digitalWrite(MotorR2, LOW);

analogWrite(MotorRE, 0);



digitalWrite(MotorL1, HIGH);

digitalWrite(MotorL2, LOW);

analogWrite(MotorLE, 0);

}



void gec(){ //pass obstacle



digitalWrite(MotorR1, HIGH);

digitalWrite(MotorR2, LOW);

analogWrite(MotorRE, 250);



digitalWrite(MotorL1, HIGH);

digitalWrite(MotorL2, LOW);

analogWrite(MotorLE, 250);

}
Veya engeli gördürme konusunda MZ80 mi kullanmalıyım? Hangisi daha iyi sonuç verir, MZ80 mi yoksa HCSR04 mü?
Projem hakkında video;
 
Moderatör tarafında düzenlendi:
Şöyle olabilir mi acaba. Robotun önündeki engel durmaya devam ettiği sürece beklesin.

C++:
    while (uzaklik =< 5)
    {
        dur();
        delay(500);

        // uzaklığı ölç
        uzaklik = (sure / 2) / 29.1 ;
    }
 
Şöyle olabilir mi acaba. Robotun önündeki engel durmaya devam ettiği sürece beklesin.

C++:
    while (uzaklik =< 5)
    {
        dur();
        delay(500);

        // uzaklığı ölç
        uzaklik = (sure / 2) / 29.1 ;
    }
Öncelikle cevabınız için teşekkür ederim. Buradaki düşüncem while komutunun içinden çıkar mı acaba? Orada if ile de delay verip durdurabilirim diye düşünüyorum. Ama bu süreçten sonra engel olmayınca hemen geçmek isteyecektir ve engel kapanırkende geçebilir. Bu sırada da çarpacaktır. Aslında durup delay verdikten sonra son bir kez engeli görüp ondan sonra geçirmeye çalışıyorum. Bu işlemi MZ80 ile yapabilir miyim ona karar veremiyorum. Engel önünde durup 3 defa 1 ve 0 pozisyonları için beklese ve engelin 3. olmayışında geçse nasıl olur diye düşündüm ancak MZ80 ile bunu nasıl yapacağımı bilmiyorum.
 

Forum istatistikleri

Konular
127,950
Mesajlar
913,864
Kullanıcılar
449,598
Son üye
kadir12366

Yeni konular

Geri
Üst