Çizgi izleyen engel geçen robot

  • Konbuyu başlatan HalilSenn
  • Başlangıç tarihi

HalilSenn

Üye
Katılım
2 Ocak 2019
Mesajlar
10
Puanları
1
Yaş
25
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:

Erdem⁣

Katılımcı Üye
Katılım
14 Ocak 2013
Mesajlar
696
Puanları
56
Şö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 ;
    }
 
Konu Sah
HalilSenn

HalilSenn

Üye
Katılım
2 Ocak 2019
Mesajlar
10
Puanları
1
Yaş
25
Şö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.
 

Benzer Konular

Forum istatistikleri

Konular
118,002
Mesajlar
831,847
Kullanıcılar
429,269
Son üye
nefet

Yeni konular

Üst