arduino çizgi izleyen robot, engel algılayan robot?

Kodla Büyü

bidene

Süper Üye
Süper Üye
Mesajlar
2,491
merhabalar.
nette pek çok kaynak var ancak çalışan devre ve kodlar bulamadım.
yapıyorum ya çizgi izlemiyor ya engel algılamıyor.
elimde hemen her türlü malzeme var.
elinde çalışır devre kodlar olan arkadaşlar varsa bende kendileriyle projelerimi paylaşabilirim.
 
Sayin hocam
Sizin yapmış olduğunuz ve çalışır durumdaki program proje paylasimlarinizdan sonra bu konuda calisma yapanlar içinde paylasim yapmalari husunda teşvik edici olacağını düşünüyorum
Saygılar

aydinDr
 
hocam
devamı arkadaşlardan bir şeyler gelir diye paylaşıyorum.
mesafeyi algılayıp lcd ye yazan program kodlarımdır.
proje bu haliyle oyuncak arabaların üzerine monte edilip park sensörü olarak sergilenebilir.
 

Ekli dosyalar

  • Untitled_Sketch_bb_3.jpg
    Untitled_Sketch_bb_3.jpg
    219.9 KB · Görüntüleme: 1,692
  • mesafe.rar
    2.7 KB · Görüntüleme: 144
hocam önümüzdeki ay antepte olan robot yarışmasına katılacağız. şu an çizgi izleyen robotun kodları hazır. 3 tane engel algılayan sensör eklemem gerekiyor. şu an onlar üzerinde çalışıyorum. bitince devre şeması, kod eklerim.
 
Hocam yaptim aaglikli calusmadi.
ustelik ben entegre ile degil motor surucu devresi ile kullannak istiyorum
surucu devre olmadan entegre cok isiniyor
 
hocam mayıs 10-11-12 antepteyiz. arduino uno üzerinde ardumoto shield var. çizgi sensörü olarak 8 tane QTR kullandım. cisim sensörü olarak mz80 kullanacağım. siparişlerini verdim bekliyorum.
 
motor olarak 1000 ve 2500 rpm'lik iki çift motorum var. cisim sensörlerimde sıkıntı çıkmazsa 2500rpmleri kullanacağım. sıkıntı olursa 1000'likleri kullanıp, 2500 rpm'likler ile hızlı çizgi izleyen için hızlıca bir robot yapacağım.
 
Hocam 7. sınıflara arduino ile engel algılayan robot yaptırdım. Bir adet hc-sr04 sensör kullandırdım. Bu sensörü servo motor üzerine monte ettik ve bu sayede sensörümüzün denizaltı periskopu gibi sağa sola dönmesini sağladık. Dc motor sürücüsü olarak da l298n motor sürücü kullandık. Kaynak olarak sadece şu üç kaynaktan faydalandım;

Hc-sr04 sensör için: http://arduinodunyasi.blogspot.com.tr/2 ... animi.html
Servo motor için: https://api.turkcell.com.tr/konu/arduin ... ervo-motor
L298N motor sürücü için: https://www.youtube.com/watch?v=kE0Vrtbw4Vw

Her bileşenin user's manuel'ini indirip baksanız da olur. Aynı şey. Amaç her parçanın nasıl çalıştığını öğrenmek. Sonra bu üç parçayı kullanarak engel tanıyan robotun kodlarını yazabilirsiniz.

Devre şemasına da ihtiyaç duyar mısınız bilmiyorum ama bizim kodumuz şu şekilde:
Kod:
#include <Servo.h>  // Servo kutuphanesini include ettik
Servo servom;  // Servo motor nesnesi yarattık
const int trigPin = 12; //Hc-sr04'ün trig pini için
const int echoPin = 13; //Hc-sr04'ün echo pini için
const int in1=7; //L298N'nin in1 pini için
const int in2=10;
const int in3=5;
const int in4=4;
const int en1=6;
const int en2=3;
int hiz1=150; /* İleri hareket hızı */
int hiz2=80; /* Dönme hızı */
int sure=700; /* Dönme süresi */
int x=0; /* Ultrasonik sensör öne bakarken gelen mesafe bilgisi için */
int y=0; /* Ultrasonik sensör sola bakarken gelen mesafe bilgisi için */
int z=0; /* Ultrasonik sensör sağa bakarken gelen mesafe bilgisi için */
void setup()
{
  servom.attach(11);  // Servo motoru 11 numarali pine bagladık      
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
  pinMode(en1, OUTPUT);
  pinMode(en2, OUTPUT);
  }
 
void loop()
{
  servom.write(78);
  x=ontara();
  delay(1000);
  while(x>20) { //Engele 20 cm yaklaşana kadar ilerleyecek
        ilerle();
        x=ontara();
        delay(100);
  }
      dur(); 
      delay(1000); 
      servom.write(180);
      delay(1000);
      z=sagtara();      
      delay(100);
      servom.write(0);
      delay(1000);
      y=soltara();
      if(y>=z){ //Sol mesafe sağdan büyükse sola dönüyor
       soladon();
       delay(1000);
         }
     else { //Sağ mesafe soldan büyükse sağa dönüyor
        sagadon();
        delay(1000);
        }
}
int sagtara(){
      
      long duration,cm;
      digitalWrite(trigPin, LOW);
      delayMicroseconds(2);
      digitalWrite(trigPin, HIGH);
      delayMicroseconds(10);
      digitalWrite(trigPin, LOW);
      duration = pulseIn(echoPin, HIGH);
     // pulsIn komutuyla veri alıyoruz
     // cm cinsinden dönüşümleri yapıyoruz
      cm = duration / 29 / 2;
      return cm;
}
int soltara(){
      long duration,cm;
      digitalWrite(trigPin, LOW);
      delayMicroseconds(2);
      digitalWrite(trigPin, HIGH);
      delayMicroseconds(10);
      digitalWrite(trigPin, LOW);      
      duration = pulseIn(echoPin, HIGH);
     // pulsIn komutuyla veri alıyoruz
     // cm cinsinden dönüşümleri yapıyoruz
      cm = duration / 29 / 2;
      return cm;
}
int ontara(){
      
      long duration,cm;
      digitalWrite(trigPin, LOW);
      delayMicroseconds(2);
      digitalWrite(trigPin, HIGH);
      delayMicroseconds(10);
      digitalWrite(trigPin, LOW);
      duration = pulseIn(echoPin, HIGH);
     // pulsIn komutuyla veri alıyoruz
     // cm cinsinden dönüşümleri yapıyoruz
      cm = duration / 29 / 2;
      return cm;
}
void ilerle(){
analogWrite(en1, hiz1);
analogWrite(en2, hiz1);
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
}
void soladon(){
analogWrite(en1, hiz2);
analogWrite(en2, hiz2);
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
delay(sure);
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
void sagadon(){
analogWrite(en1, hiz2);
analogWrite(en2, hiz2);
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
delay(sure);
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
void dur(){
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
 
hocam ben motor sürücü kartı yerine resimdeki motor sürücü devresini kullanmaya çalıştım.
sanırım videolardaki sonuçlara o yüzden ulaşamadım.
şimdi siparişi veriyorum :)
şimdi sürücü kartının siparişini veriyorum.

arduino-motor-surucu-shield-arduino-motor-driver-shield-5585-51-B.jpg
 
buzdagi83' Alıntı:
Hocam 7. sınıflara arduino ile engel algılayan robot yaptırdım. Bir adet hc-sr04 sensör kullandırdım. Bu sensörü servo motor üzerine monte ettik ve bu sayede sensörümüzün denizaltı periskopu gibi sağa sola dönmesini sağladık. Dc motor sürücüsü olarak da l298n motor sürücü kullandık. Kaynak olarak sadece şu üç kaynaktan faydalandım;

Hc-sr04 sensör için: http://arduinodunyasi.blogspot.com.tr/2 ... animi.html
Servo motor için: https://api.turkcell.com.tr/konu/arduin ... ervo-motor
L298N motor sürücü için: https://www.youtube.com/watch?v=kE0Vrtbw4Vw

Her bileşenin user's manuel'ini indirip baksanız da olur. Aynı şey. Amaç her parçanın nasıl çalıştığını öğrenmek. Sonra bu üç parçayı kullanarak engel tanıyan robotun kodlarını yazabilirsiniz.

Devre şemasına da ihtiyaç duyar mısınız bilmiyorum ama bizim kodumuz şu şekilde:
Kod:
#include <Servo.h>  // Servo kutuphanesini include ettik
Servo servom;  // Servo motor nesnesi yarattık
const int trigPin = 12; //Hc-sr04'ün trig pini için
const int echoPin = 13; //Hc-sr04'ün echo pini için
const int in1=7; //L298N'nin in1 pini için
const int in2=10;
const int in3=5;
const int in4=4;
const int en1=6;
const int en2=3;
int hiz1=150; /* İleri hareket hızı */
int hiz2=80; /* Dönme hızı */
int sure=700; /* Dönme süresi */
int x=0; /* Ultrasonik sensör öne bakarken gelen mesafe bilgisi için */
int y=0; /* Ultrasonik sensör sola bakarken gelen mesafe bilgisi için */
int z=0; /* Ultrasonik sensör sağa bakarken gelen mesafe bilgisi için */
void setup()
{
  servom.attach(11);  // Servo motoru 11 numarali pine bagladık      
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
  pinMode(en1, OUTPUT);
  pinMode(en2, OUTPUT);
  }
 
void loop()
{
  servom.write(78);
  x=ontara();
  delay(1000);
  while(x>20) { //Engele 20 cm yaklaşana kadar ilerleyecek
        ilerle();
        x=ontara();
        delay(100);
  }
      dur(); 
      delay(1000); 
      servom.write(180);
      delay(1000);
      z=sagtara();      
      delay(100);
      servom.write(0);
      delay(1000);
      y=soltara();
      if(y>=z){ //Sol mesafe sağdan büyükse sola dönüyor
       soladon();
       delay(1000);
         }
     else { //Sağ mesafe soldan büyükse sağa dönüyor
        sagadon();
        delay(1000);
        }
}
int sagtara(){
      
      long duration,cm;
      digitalWrite(trigPin, LOW);
      delayMicroseconds(2);
      digitalWrite(trigPin, HIGH);
      delayMicroseconds(10);
      digitalWrite(trigPin, LOW);
      duration = pulseIn(echoPin, HIGH);
     // pulsIn komutuyla veri alıyoruz
     // cm cinsinden dönüşümleri yapıyoruz
      cm = duration / 29 / 2;
      return cm;
}
int soltara(){
      long duration,cm;
      digitalWrite(trigPin, LOW);
      delayMicroseconds(2);
      digitalWrite(trigPin, HIGH);
      delayMicroseconds(10);
      digitalWrite(trigPin, LOW);      
      duration = pulseIn(echoPin, HIGH);
     // pulsIn komutuyla veri alıyoruz
     // cm cinsinden dönüşümleri yapıyoruz
      cm = duration / 29 / 2;
      return cm;
}
int ontara(){
      
      long duration,cm;
      digitalWrite(trigPin, LOW);
      delayMicroseconds(2);
      digitalWrite(trigPin, HIGH);
      delayMicroseconds(10);
      digitalWrite(trigPin, LOW);
      duration = pulseIn(echoPin, HIGH);
     // pulsIn komutuyla veri alıyoruz
     // cm cinsinden dönüşümleri yapıyoruz
      cm = duration / 29 / 2;
      return cm;
}
void ilerle(){
analogWrite(en1, hiz1);
analogWrite(en2, hiz1);
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
}
void soladon(){
analogWrite(en1, hiz2);
analogWrite(en2, hiz2);
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
delay(sure);
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
void sagadon(){
analogWrite(en1, hiz2);
analogWrite(en2, hiz2);
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
delay(sure);
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
void dur(){
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
const int en1=6;
const int en2=3;
hocam bu arada en bacakları ne oluyor çıkaramadım.
 
L298n üzerindeki en1 ve en2 pinleri dc motorlara giden akımı analog olarak kontrol etmeyi sağlıyor ve bu sayede motorların hızını kontrol etmenize imkan veriyor. Bu pinleri kullanmak istemeyebilirsiniz ama o zaman motorlar sürekli tam güçte çalışır. Bu da hem dönüşleri kontrol etmenizi güçleştirir hem de daha fazla pil tüketimine yol açar. :)
 
hocam netteki kodları alıp değiştirebilirsin. mesela servo motor ile sensör dönecek ise 180 derece dönmes gereksiz 140 150 derece yetiyo. sıkıstıgında geri gidecek ama biraz cok gitmesi bence önemli yoksa ileri geri gidip durur. ben yeni yazdım kodlarını hazır çalışıyo fakat deniyorum ki hatlarını bulup düzelteyim döngüleri. v.s.
senin yapacagın;
1-sensörden nası olçüm alacaksın
2- bu ölçümü nası cm ye dönüştüreceksin
3-döngülerile nası hareket edicek
4- motoru nası sürüceksin
ayrı ayrı arşatır kendin yaz kodunu bana sorarsan
ama istersen ekleyeyim kodu.... genelde diğerlerinden bir kaç farkı var.bende net den alıp eklemeler düzeltmeler yaptım.
 
ayrıca elindeki kart çok iyi bi kart bence onu kullan...enable pinine yarışmada ihtiyacın yok orda en önemli şey hız.....
 
buzdagi83' Alıntı:
L298n üzerindeki en1 ve en2 pinleri dc motorlara giden akımı analog olarak kontrol etmeyi sağlıyor ve bu sayede motorların hızını kontrol etmenize imkan veriyor. Bu pinleri kullanmak istemeyebilirsiniz ama o zaman motorlar sürekli tam güçte çalışır. Bu da hem dönüşleri kontrol etmenizi güçleştirir hem de daha fazla pil tüketimine yol açar. :)
hocam ben nette kartın resimlerine bakıp anlamaya çalıştım elimde kart olmadığı için pinleri göremedim çok teşekkürler.
 
inanin.ozu' Alıntı:
hocam netteki kodları alıp değiştirebilirsin. mesela servo motor ile sensör dönecek ise 180 derece dönmes gereksiz 140 150 derece yetiyo. sıkıstıgında geri gidecek ama biraz cok gitmesi bence önemli yoksa ileri geri gidip durur. ben yeni yazdım kodlarını hazır çalışıyo fakat deniyorum ki hatlarını bulup düzelteyim döngüleri. v.s.
senin yapacagın;
1-sensörden nası olçüm alacaksın
2- bu ölçümü nası cm ye dönüştüreceksin
3-döngülerile nası hareket edicek
4- motoru nası sürüceksin
ayrı ayrı arşatır kendin yaz kodunu bana sorarsan
ama istersen ekleyeyim kodu.... genelde diğerlerinden bir kaç farkı var.bende net den alıp eklemeler düzeltmeler yaptım.
hocam ben o kartla netten faydalanarak bluetooth ile kontrol edilen araba yaptım. yani kodlar üzerinde inceleme yaparak pek çok düzenleme yaptım. hatta bunun gibi pek çok çalışmam var. ancak bir yerde tıkandım kaldım o yüzden yardım istiyorum.
eğer kodları ve bağlantıyı paylaşırsanız çok memnun olurum
 
bidene' Alıntı:
merhabalar.
nette pek çok kaynak var ancak çalışan devre ve kodlar bulamadım.
yapıyorum ya çizgi izlemiyor ya engel algılamıyor.
elimde hemen her türlü malzeme var.
elinde çalışır devre kodlar olan arkadaşlar varsa bende kendileriyle projelerimi paylaşabilirim.

Engelden kaçan robotum çalışır durumda. Arduino da kütüphaneleri eklerken dikkat edin hocam. 2 gün uğraştırdı bu robot. Yararlandığım kaynak ise;

http://www.instructables.com/id/Arduino ... nic-Rover/

Yukarıdaki linkteki kodlar sıkıntı yapınca aşağıda verdiğim kodlar ve kütüphaneleri sorunsuz çalışıyor. Bir deneyin derim.
 

Ekli dosyalar

  • Arduino_Adafruit_RunAway_Robot.zip
    28.2 KB · Görüntüleme: 157
Hocam ben bunu yapmistim ancak calismadi.
motorlardan garip sesler geliyordu ayruca duzgun calismiyordu.
hemen deneyecegim sabah kodlari ;)
Problem neydi kodlardaki bu arada
 
bidene' Alıntı:
Hocam ben bunu yapmistim ancak calismadi.
motorlardan garip sesler geliyordu ayruca duzgun calismiyordu.
hemen deneyecegim sabah kodlari ;)
Problem neydi kodlardaki bu arada

Araç sürekli dönüyordu ve engel algılamıyordu hocam. Motor sürücünün kütüphanesiyle ilgili olduğunu düşünüyorum.

Abbas hali hazırda bekliyor :)
 

Ekli dosyalar

  • abbas1jpg.jpg
    abbas1jpg.jpg
    111.1 KB · Görüntüleme: 884
hocam ben bunu 4 tane 1.5 volt pille çalıştırsam olur mu.
illa 9 volt mu lazım
 
hocam sizin kütüphaneleri yükledim.
kodları derlerken şu hatayı alıyorum.
 

Ekli dosyalar

  • Ekran Alıntısı.PNG
    Ekran Alıntısı.PNG
    45.7 KB · Görüntüleme: 867
Projelerinizde kullandığınız servo motorlar boyut olarak ne ölçüde.
Mini servo motor olarak mi geçiyor acaba...

aydinDr
 
Sargon' Alıntı:
bidene' Alıntı:
Hocam ben bunu yapmistim ancak calismadi.
motorlardan garip sesler geliyordu ayruca duzgun calismiyordu.
hemen deneyecegim sabah kodlari ;)
Problem neydi kodlardaki bu arada

Araç sürekli dönüyordu ve engel algılamıyordu hocam. Motor sürücünün kütüphanesiyle ilgili olduğunu düşünüyorum.

Abbas hali hazırda bekliyor :)

Servo motor ve sensörün tutucularını siz mi bastınız hocam
 
Hocam benim hazırladığım robotun kod yapısı itibari ile biraz farklı. PID kontrol yaptırmam gerekiyor, çizgi üzerinde hızlı giderken sağa sola yalpalamaması için. Bir de benim engeller yol üzerinde sağda, solda ve başlangıç için kapı olacağı için sizin kullandığınız değil mesafesi ve açısını özelleştirebileceğim bir sensör kullanmam gerekiyor.
 
bidene' Alıntı:
hocam sizin kütüphaneleri yükledim.
kodları derlerken şu hatayı alıyorum.

Hocam eski kütüphaneyi silmeniz gerekiyor ilk önce. Araç okulda olduğundan deneyemiyorum ancak verdiği hata ile uğraşmıştım bende. Elimde bir tane daha kod daha var bir de onu deneyin bakalım.(Hangisini yüklediğimi hatırlayamıyorum çünkü)
 

Ekli dosyalar

  • engel_robot_motor_shield.rar
    1.2 KB · Görüntüleme: 66
cumhurtorun' Alıntı:
Sargon' Alıntı:
bidene' Alıntı:
Hocam ben bunu yapmistim ancak calismadi.
motorlardan garip sesler geliyordu ayruca duzgun calismiyordu.
hemen deneyecegim sabah kodlari ;)
Problem neydi kodlardaki bu arada

Araç sürekli dönüyordu ve engel algılamıyordu hocam. Motor sürücünün kütüphanesiyle ilgili olduğunu düşünüyorum.

Abbas hali hazırda bekliyor :)

Servo motor ve sensörün tutucularını siz mi bastınız hocam

Evet hocam okula aldığımız 3d yazıcı ile bastım.
 
Geri
Üst