Engelden kaçan robot değişik çalışıyor

Fatihkymz

Hectopat
Katılım
24 Mayıs 2020
Mesajlar
26
Merhaba, proje ödevi olarak engelden kaçan robot yaptım hiçbir problem yok ama çok saçma bir şekilde çalışıyor ya kendi etrafında dönüyor ya da bir sağ bir sol olmak üzere hareket ediyor sabahtan beri uğraşıyorum artık başım ağrıdı sağlıklı düşünemiyorum fikir almak istedim sizlerden fotoğraf ve video site izin vermediği için koyamıyorum ama kodu aşağıya bıraktım.


C++:
#define echoPin 12 //Ultrasonik sensörün echo pini Arduino kartımızın 12.pinine bağladık
#define trigPin 13 //Ultrasonik sensörün trig pini Arduino kartımızın 13. pinine bağladık.
#define MotorR1 4// L298N üzerindeki IN1 pinine bağlayın
#define MotorR2 5//L298N üzerindeki IN2 pinine bağlayın
#define MotorRenable 7  // L298N üzerindeki enA pinine bağlayın
#define MotorL1 2// L298N üzerindeki IN3 pinine bağlayın
#define MotorL2 3// L298N üzerindeki IN4 pinine bağlayın
#define MotorLenable 9// L298N üzerindeki enB pinine bağlayın


//Yukarıdaki kısımda motor pinlerini tanımladık.


long sure, uzaklik; //süre ve uzaklık adında iki değişken tanımlıyoruz.

void setup() {


  // ultrasonik sensör Trig pininden ses dalgaları gönderdiği için OUTPUT (Çıkış),
  // göndermiş olduğıu bu dalgaları Echo pini ile geri aldığı için INPUT yani (Giriş) olarak tanımlanır.
  pinMode(echoPin, INPUT);
  pinMode(trigPin, OUTPUT);

  pinMode(MotorL1, OUTPUT);
  pinMode(MotorL2, OUTPUT);
  pinMode(MotorLenable, OUTPUT);
  pinMode(MotorR1, OUTPUT);
  pinMode(MotorR2, OUTPUT);
  pinMode(MotorRenable, OUTPUT);
// yukarıdaki kısımda Motorlarımızı çıkış olarak tanımladık

  Serial.begin(9600);//  9600 baud rate üzerinden bir seri haberleşme başlattık

}

void ileri(){  // Robotun ileri yönde hareketi için fonksiyon tanımlıyoruz.

  digitalWrite(MotorR1, HIGH); // Sağ motorun ileri hareketi aktif
  digitalWrite(MotorR2, LOW); // Sağ motorun geri hareketi pasif
  analogWrite(MotorRenable, 250); // Sağ motorun hızı 150

  digitalWrite(MotorL1, HIGH); // Sol motorun ileri hareketi aktif
  digitalWrite(MotorL2, LOW); // Sol motorun geri hareketi pasif
  analogWrite(MotorLenable, 250); // Sol motorun hızı 150
 
 
}


void sag(){ // Robotun sağa dönme hareketi için fonksiyon tanımlıyoruz.

  digitalWrite(MotorR1, HIGH); // Sağ motorun ileri hareketi aktif
  digitalWrite(MotorR2, LOW); // Sağ motorun geri hareketi pasif
  analogWrite(MotorRenable, 0); // Sağ motorun hızı 0 (Motor duruyor)

  digitalWrite(MotorL1, HIGH); // Sol motorun ileri hareketi aktif
  digitalWrite(MotorL2, LOW); // Sol motorun geri hareketi pasif
  analogWrite(MotorLenable, 250); // Sol motorun hızı 150
 
 
}


void geri(){ // Robotun geri yönde hareketi için fonksiyon tanımlıyoruz.

  digitalWrite(MotorR1, LOW); // Sağ motorun ileri hareketi pasif
  digitalWrite(MotorR2, HIGH); // Sağ motorun geri hareketi aktif
  analogWrite(MotorRenable, 150); // Sağ motorun hızı 150

  digitalWrite(MotorL1, LOW); // Sol motorun ileri hareketi pasif
  digitalWrite(MotorL2, HIGH); // Sol motorun geri hareketi aktif
  analogWrite(MotorLenable, 150); // Sol motorun hızı 150
 
}
void loop() {


  digitalWrite(trigPin, LOW); //sensör pasif hale getirildi
  delayMicroseconds(5);
  digitalWrite(trigPin, HIGH); //Sensore ses dalgasının üretmesi için emir verildi
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW); //Yeni dalgaların üretilmemesi için trig pini LOW konumuna getirildi

  sure = pulseIn(echoPin, HIGH); //ses dalgasının geri dönmesi için geçen sure ölçülüyor
  uzaklik = sure / 29.1 / 2; //ses dalgasının gidiş ve dönüşünden elde edilen süre uzaklık birimine çevriliyor

  Serial.println(uzaklik);

  if (uzaklik < 15) // Uzaklık 15'den küçük ise,
  {
    geri();  // 150 ms geri git
    delay(150);
    sag();  // 250 ms sağa dön
    delay(250);
  }
  else {  // değil ise,
    ileri(); // ileri git
  }

}
 
Merhaba, proje ödevi olarak engelden kaçan robot yaptım hiçbir problem yok ama çok saçma bir şekilde çalışıyor ya kendi etrafında dönüyor ya da bir sağ bir sol olmak üzere hareket ediyor sabahtan beri uğraşıyorum artık başım ağrıdı sağlıklı düşünemiyorum fikir almak istedim sizlerden fotoğraf ve video site izin vermediği için koyamıyorum ama kodu aşağıya bıraktım.


C++:
#define echoPin 12 //Ultrasonik sensörün echo pini Arduino kartımızın 12.pinine bağladık
#define trigPin 13 //Ultrasonik sensörün trig pini Arduino kartımızın 13. pinine bağladık.
#define MotorR1 4// L298N üzerindeki IN1 pinine bağlayın
#define MotorR2 5//L298N üzerindeki IN2 pinine bağlayın
#define MotorRenable 7  // L298N üzerindeki enA pinine bağlayın
#define MotorL1 2// L298N üzerindeki IN3 pinine bağlayın
#define MotorL2 3// L298N üzerindeki IN4 pinine bağlayın
#define MotorLenable 9// L298N üzerindeki enB pinine bağlayın


//Yukarıdaki kısımda motor pinlerini tanımladık.


long sure, uzaklik; //süre ve uzaklık adında iki değişken tanımlıyoruz.

void setup() {


  // ultrasonik sensör Trig pininden ses dalgaları gönderdiği için OUTPUT (Çıkış),
  // göndermiş olduğıu bu dalgaları Echo pini ile geri aldığı için INPUT yani (Giriş) olarak tanımlanır.
  pinMode(echoPin, INPUT);
  pinMode(trigPin, OUTPUT);

  pinMode(MotorL1, OUTPUT);
  pinMode(MotorL2, OUTPUT);
  pinMode(MotorLenable, OUTPUT);
  pinMode(MotorR1, OUTPUT);
  pinMode(MotorR2, OUTPUT);
  pinMode(MotorRenable, OUTPUT);
// yukarıdaki kısımda Motorlarımızı çıkış olarak tanımladık

  Serial.begin(9600);//  9600 baud rate üzerinden bir seri haberleşme başlattık

}

void ileri(){  // Robotun ileri yönde hareketi için fonksiyon tanımlıyoruz.

  digitalWrite(MotorR1, HIGH); // Sağ motorun ileri hareketi aktif
  digitalWrite(MotorR2, LOW); // Sağ motorun geri hareketi pasif
  analogWrite(MotorRenable, 250); // Sağ motorun hızı 150

  digitalWrite(MotorL1, HIGH); // Sol motorun ileri hareketi aktif
  digitalWrite(MotorL2, LOW); // Sol motorun geri hareketi pasif
  analogWrite(MotorLenable, 250); // Sol motorun hızı 150
 
 
}


void sag(){ // Robotun sağa dönme hareketi için fonksiyon tanımlıyoruz.

  digitalWrite(MotorR1, HIGH); // Sağ motorun ileri hareketi aktif
  digitalWrite(MotorR2, LOW); // Sağ motorun geri hareketi pasif
  analogWrite(MotorRenable, 0); // Sağ motorun hızı 0 (Motor duruyor)

  digitalWrite(MotorL1, HIGH); // Sol motorun ileri hareketi aktif
  digitalWrite(MotorL2, LOW); // Sol motorun geri hareketi pasif
  analogWrite(MotorLenable, 250); // Sol motorun hızı 150
 
 
}


void geri(){ // Robotun geri yönde hareketi için fonksiyon tanımlıyoruz.

  digitalWrite(MotorR1, LOW); // Sağ motorun ileri hareketi pasif
  digitalWrite(MotorR2, HIGH); // Sağ motorun geri hareketi aktif
  analogWrite(MotorRenable, 150); // Sağ motorun hızı 150

  digitalWrite(MotorL1, LOW); // Sol motorun ileri hareketi pasif
  digitalWrite(MotorL2, HIGH); // Sol motorun geri hareketi aktif
  analogWrite(MotorLenable, 150); // Sol motorun hızı 150
 
}
void loop() {


  digitalWrite(trigPin, LOW); //sensör pasif hale getirildi
  delayMicroseconds(5);
  digitalWrite(trigPin, HIGH); //Sensore ses dalgasının üretmesi için emir verildi
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW); //Yeni dalgaların üretilmemesi için trig pini LOW konumuna getirildi

  sure = pulseIn(echoPin, HIGH); //ses dalgasının geri dönmesi için geçen sure ölçülüyor
  uzaklik = sure / 29.1 / 2; //ses dalgasının gidiş ve dönüşünden elde edilen süre uzaklık birimine çevriliyor

  Serial.println(uzaklik);

  if (uzaklik < 15) // Uzaklık 15'den küçük ise,
  {
    geri();  // 150 ms geri git
    delay(150);
    sag();  // 250 ms sağa dön
    delay(250);
  }
  else {  // değil ise,
    ileri(); // ileri git
  }

}
Kodu sanırım internet üzerindeki bir siteden aldınız. Eğer pin bağlantıları, özellikle sürücü ile motor arasındaki bağlantılar ile kodda tanımlanan pinler uyuşmuyorsa saçma sapan hareket etmesi normal.

Devreyi görmediğim için ve parçaların sağlam olup olmadığını bilmediğimden yorum yapamayacağım. Önce sadece elinizdeki sensörü bağlayıp test edin(iki pin bağlantısına da dikkat ederek yapın bunu). Doğru değerleri okuyorsanız ayrı bir kodda motor sürücü ile motorları kontrol etmeyi deneyin önce ileri sonra geri gibi komutlar vs. ile kontrol edebilirsiniz. En sonunda iki kodu tekrardan birleştirirsiniz.

Kodun orijinal halini buldum. Zaten kodda hiç bir değişiklik yapmamışsınız olduğu gibi duruyor🙂. Sorun yüksek ihtimalle devrede..
 
Kodu sanırım internet üzerindeki bir siteden aldınız. Eğer pin bağlantıları, özellikle sürücü ile motor arasındaki bağlantılar ile kodda tanımlanan pinler uyuşmuyorsa saçma sapan hareket etmesi normal.

Devreyi görmediğim için ve parçaların sağlam olup olmadığını bilmediğimden yorum yapamayacağım. Önce sadece elinizdeki sensörü bağlayıp test edin(iki pin bağlantısına da dikkat ederek yapın bunu). Doğru değerleri okuyorsanız ayrı bir kodda motor sürücü ile motorları kontrol etmeyi deneyin önce ileri sonra geri gibi komutlar vs. ile kontrol edebilirsiniz. En sonunda iki kodu tekrardan birleştirirsiniz.

Kodun orijinal halini buldum. Zaten kodda hiçbir değişiklik yapmamışsınız olduğu gibi duruyor🙂. Sorun yüksek ihtimalle devrede.

Devreyi koddaki gibi bağladım zaten yanlış bir bağlama olsa illa bir sıkıntı çıkar ya bir motoru çalışmaz ya sensör okumaz falan ama her şey çalışıyor gayet düzgün, problemini bende hala çözebilmiş değilim.

GPT engelden kaçan robot yaparsa bu kadar olur.

Kodları internetten aldım ya robocombo ya da robotistan olması gerekiyor.

Merhaba, proje ödevi olarak engelden kaçan robot yaptım hiçbir problem yok ama çok saçma bir şekilde çalışıyor ya kendi etrafında dönüyor ya da bir sağ bir sol olmak üzere hareket ediyor sabahtan beri uğraşıyorum artık başım ağrıdı sağlıklı düşünemiyorum fikir almak istedim sizlerden fotoğraf ve video site izin vermediği için koyamıyorum ama kodu aşağıya bıraktım.

C++:
#define echoPin 12 //Ultrasonik sensörün echo pini Arduino kartımızın 12.pinine bağladık.
#define trigPin 13 //Ultrasonik sensörün trig pini Arduino kartımızın 13. pinine bağladık.
#define MotorR1 4// L298N üzerindeki IN1 pinine bağlayın.
#define MotorR2 5//L298N üzerindeki IN2 pinine bağlayın.
#define MotorRenable 7 // L298N üzerindeki enA pinine bağlayın.
#define MotorL1 2// L298N üzerindeki IN3 pinine bağlayın.
#define MotorL2 3// L298N üzerindeki IN4 pinine bağlayın.
#define MotorLenable 9// L298N üzerindeki enB pinine bağlayın.

//Yukarıdaki kısımda motor pinlerini tanımladık.

long sure, uzaklik; //süre ve uzaklık adında iki değişken tanımlıyoruz.

void setup() {

 // ultrasonik sensör Trig pininden ses dalgaları gönderdiği için OUTPUT (Çıkış),
 // göndermiş olduğıu bu dalgaları Echo pini ile geri aldığı için INPUT yani (Giriş) olarak tanımlanır.
 pinMode(echoPin, INPUT);
 pinMode(trigPin, OUTPUT);

 pinMode(MotorL1, OUTPUT);
 pinMode(MotorL2, OUTPUT);
 pinMode(MotorLenable, OUTPUT);
 pinMode(MotorR1, OUTPUT);
 pinMode(MotorR2, OUTPUT);
 pinMode(MotorRenable, OUTPUT);
// yukarıdaki kısımda Motorlarımızı çıkış olarak tanımladık.

 Serial.begin(9600);// 9600 baud rate üzerinden bir seri haberleşme başlattık.

}

void ileri(){ // Robotun ileri yönde hareketi için fonksiyon tanımlıyoruz.

 digitalWrite(MotorR1, HIGH); // Sağ motorun ileri hareketi aktif.
 digitalWrite(MotorR2, LOW); // Sağ motorun geri hareketi pasif.
 analogWrite(MotorRenable, 250); // Sağ motorun hızı 150.

 digitalWrite(MotorL1, HIGH); // Sol motorun ileri hareketi aktif.
 digitalWrite(MotorL2, LOW); // Sol motorun geri hareketi pasif.
 analogWrite(MotorLenable, 250); // Sol motorun hızı 150.

}

void sag(){ // Robotun sağa dönme hareketi için fonksiyon tanımlıyoruz.

 digitalWrite(MotorR1, HIGH); // Sağ motorun ileri hareketi aktif.
 digitalWrite(MotorR2, LOW); // Sağ motorun geri hareketi pasif.
 analogWrite(MotorRenable, 0); // Sağ motorun hızı 0 (Motor duruyor)

 digitalWrite(MotorL1, HIGH); // Sol motorun ileri hareketi aktif.
 digitalWrite(MotorL2, LOW); // Sol motorun geri hareketi pasif.
 analogWrite(MotorLenable, 250); // Sol motorun hızı 150.

}

void geri(){ // Robotun geri yönde hareketi için fonksiyon tanımlıyoruz.

 digitalWrite(MotorR1, LOW); // Sağ motorun ileri hareketi pasif.
 digitalWrite(MotorR2, HIGH); // Sağ motorun geri hareketi aktif.
 analogWrite(MotorRenable, 150); // Sağ motorun hızı 150.

 digitalWrite(MotorL1, LOW); // Sol motorun ileri hareketi pasif.
 digitalWrite(MotorL2, HIGH); // Sol motorun geri hareketi aktif.
 analogWrite(MotorLenable, 150); // Sol motorun hızı 150.

}
void loop() {

 digitalWrite(trigPin, LOW); //sensör pasif hale getirildi.
 delayMicroseconds(5);
 digitalWrite(trigPin, HIGH); //Sensore ses dalgasının üretmesi için emir verildi.
 delayMicroseconds(10);
 digitalWrite(trigPin, LOW); //Yeni dalgaların üretilmemesi için trig pini LOW konumuna getirildi.

 sure = pulseIn(echoPin, HIGH); //ses dalgasının geri dönmesi için geçen sure ölçülüyor.
 uzaklik = sure / 29.1 / 2; //ses dalgasının gidiş ve dönüşünden elde edilen süre uzaklık birimine çevriliyor.

 Serial.println(uzaklik);

 if (uzaklik < 15) // Uzaklık 15'den küçük ise,
 {
 geri(); // 150 ms geri git.
 delay(150);
 sag(); // 250 ms sağa dön.
 delay(250);
 }
 else { // değil ise,
 ileri(); // ileri git.
 }

}

Hareketlerini düzelttim ama şimdi de ileri git komutu çalışmıyor :D
 
Son düzenleme:

Yeni konular

Geri
Yukarı