BAĞLAN

Matlab Arduino Nesne Takip Robotu Yapımı

  • Görüntülenme 7720
  • PAYLAŞ
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  

    Kendi Robotunu Yap projelerimizin bu bölümünde matlab ile görüntü işleyerek, kırmızı nesneyi takip eden robot yapımını anlatacağım.Projemiz iki aşamadan oluşuyor. İlk aşama matlab kısmı yani görüntü işleyeceğimiz kısım. İkinci aşama ise arduino ile matlab den gelen bilgilere göre robotumuzu yöneteceğimiz kısım. Genel olarak projemizin hatları bu şekilde. Şimdi nesne takip robotu projemizin yapımına başlayabiliriz.

    Malzemeler:

    1. Arduino (modeli fark etmez)
    2. webcam
    3. L293d veya b serisi ya da isterseniz shield de kullanabilirsiniz.
    4. Motor, tekerlek ve şaseyi ister kendiniz yapın isterseniz hazır kit alın veya oyuncak araba da kullanabilirsiniz.
    5. Batarya (7.2v  lipo veya 6v  nimh)

     

    Elektronik Kısım:

    Devre bağlantıları şekildeki gibidir.

    Sağ motor >> 10. ve 11. dijital pinler

    Sol motor >> 8. ve 9. dijital pinler

    ena hız kontrol pini >> 5.dijital pin

    enb hız kontrol pini >> 4.dijital pin

    Fritzing dosyasını buradan indirebilirsiniz. >>matlab nesne takip robot

    Şimdi arduino ve matlab yazılımına bakalım.

    Arduino Yazılımı:

    // Robimek Robotik Sistemler
     
    //motor pinleri
    const int sag_ileri=11;
    const int sag_geri=10;
    const int sol_ileri=9;
    const int sol_geri=8;
    //hız kontrol pin
    const int ena=5;
    const int enb=4;
    //motorların hızı
    const int motor_hiz = 200; // motor hızı
    int led = 13;
    void setup()
    {
    Serial.begin(9600);
    pinMode(led,OUTPUT);
    pinMode(sag_ileri,OUTPUT);
    pinMode(sag_geri,OUTPUT);
    pinMode(sol_ileri,OUTPUT);
    pinMode(sol_geri,OUTPUT);
    pinMode(ena, OUTPUT);
    pinMode(enb, OUTPUT);
    }
     
    void loop()
    {
    int val;
    if (Serial.available())
    {
     
    val=Serial.read();
    if(val=='L')
    {
    analogWrite(ena,motor_hiz);
    analogWrite(enb,motor_hiz);
    digitalWrite(sag_ileri,HIGH);
    digitalWrite(sag_geri,LOW);
    digitalWrite(sol_ileri,LOW);
    digitalWrite(sol_geri,HIGH);
    digitalWrite(led,LOW);
    }
    else if(val=='R')
    {
    analogWrite(ena,motor_hiz);
    analogWrite(enb,motor_hiz);
    digitalWrite(sag_ileri,LOW);
    digitalWrite(sag_geri,HIGH);
    digitalWrite(sol_ileri,HIGH);
    digitalWrite(sol_geri,LOW);
    digitalWrite(led,LOW);
     
    }
    else if(val=='C')
    {
     
    digitalWrite(sag_ileri,LOW);
    digitalWrite(sag_geri,LOW);
    digitalWrite(sol_ileri,LOW);
    digitalWrite(sol_geri,LOW);
    digitalWrite(led,HIGH);
    }
    else if(val=='F')
    {
    analogWrite(ena,motor_hiz);
    analogWrite(enb,motor_hiz);
    digitalWrite(sag_ileri,HIGH);
    digitalWrite(sag_geri,LOW);
    digitalWrite(sol_ileri,HIGH);
    digitalWrite(sol_geri,LOW);
    digitalWrite(led,HIGH);
     
    }
    else if(val=='B')
    {
    analogWrite(ena,motor_hiz);
    analogWrite(enb,motor_hiz);
    digitalWrite(sag_ileri,LOW);
    digitalWrite(sag_geri,HIGH);
    digitalWrite(sol_ileri,LOW);
    digitalWrite(sol_geri,HIGH);
    digitalWrite(led,HIGH);
     
    }
    else
    digitalWrite(led,LOW);
    }
    }

    Arduino yazılımını yüklüyoruz.

    Şimdi matlab de yeni bir script safası açıp aşağıdaki kodu yapıştıralım.

    Matlab Yazılımı:

    vid = videoinput('winvideo',1);
    set(vid, 'FramesPerTrigger', Inf);
    set(vid, 'ReturnedColorspace', 'rgb')
    vid.FrameGrabInterval = 3;
    s = serial('COM3','BaudRate',9600);
    fopen(s);
    start(vid)
    i=1;
    q=1;
    c='A';
    min=5500;
    max=10500;
    while(i<=300)
    i=i+1;
    obj_found=0;
     data = getsnapshot(vid);
     [y x c]=size(data);
     x1=x/2;
     x2=x1-40;
     x3=x1+40;
     % IMAGE SEPERATION BLOCK ---------------------
     
     diff_im = imsubtract(data(:,:,1), rgb2gray(data));
     diff_im = medfilt2(diff_im, [3 3]);
     diff_im = im2bw(diff_im,0.18);
     diff_im = bwareaopen(diff_im,300);
     bw = bwlabel(diff_im, 8);
     stats = regionprops(bw, 'all');
     imshow(data)
     hold on
     
     for object = 1:length(stats)
     obj_found=1;
     bb = stats(object).BoundingBox;
     bc = stats(object).Centroid;
     ar=stats(object).Area;
     rectangle('Position',bb,'EdgeColor','r','LineWidth',2)
     plot(bc(1),bc(2), '-m+')
     
     pix=((((ar<=max)&(ar>=min))*2)+((ar>max)*4)+((ar<min)*5)); if (bc(1)>x2)&(bc(1)<x3)
     disp('center')
     switch (pix)
     case 2
     r=1;
     case 4
     r=4;
     case 5
     r=5;
     end
     
     else if bc(1)<x2 r=2; disp('left') else if bc(1)>x3
     r=3;
     disp('right')
     else
     end
     end
     end
     
     y1=1:y;
     plot(x2,y1);
     plot(x3,y1);
     switch(r)
     case 1
     fwrite(s,'C');
     case 2
     fwrite(s,'L');
     case 3
     fwrite(s,'R');
     case 4
     fwrite(s,'B');
     case 5
     fwrite(s,'F');
     otherwise
     fwrite(s,'N');
     end
     end
     if obj_found == 0
     fwrite(s,'C'); 
     disp('no image')
     end
     
     
     hold off
    end
    fwrite(s,'C');
    stop(vid);
    flushdata(vid);
    fclose(s);
    clear all

    Matlab yazılımındaki port adres kısmı yani s = serial(‘COM5′,’BaudRate’,9600); bu kısımda COM5 yazılı ifadeyi arduinonun takılı olduğu port numarasıyla değiştirin.

    Webcam kamerayı bilgisayara takın. Yazılım kısmındaki vid = videoinput(‘winvideo’,1); satırındaki “1” ifadesi bilgisayara takılan kamera numarasını gösteriyor. Yani şuan çalıştırırsanız bilgisayarın kendi kamerası açılacaktır.İkinci bir kamera takılı ise bu değer değiştirilmelidir. Yani “2” yapılmalıdır.Matlab programını çalıştırın.Tüm işlemler başarılı şekilde gerçekleştiyse robotunuz hazır demektir. Şimdi kırmızı bir nesneyi kameraya gösterdiğinizde nesnenin konumuna göre robotu hareket ettirecek ve nesneyi takip etmesi sağlanacaktır.

    Bütün yazılım dosyalarını buradan indirebilirsiniz. >> matlab nesne takip robotu

    Kendi Robotunu Yap projelerimizin bu bölümünde Matlab ile arduino tabanlı nesne takip eden robotumuzu yaptık.


    PAYLAŞ
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    •  
    Sezgin GÜL

    Sezgin GÜL

    Makine Mühendisi, Girişimci, Maker

    Kimler Neler Demiş?

    64 Yorum - "Matlab Arduino Nesne Takip Robotu Yapımı"

    avatar
    Sıralama:   En Yeniler | Eskiler | Beğenilenler
    Ziyaretçi
    Ziyaretçi

    Emeğinize sağlık çok güzel bir proje yapmışsınız. Projenizle ilgili anlamadığım birkaç şeyi sormak istiyorum.

    Burada yazdığınız
    q=1;
    c=’A’;
    min=5500;
    max=10500;
    Ne işe yarıyor?

    pix=((((ar=min))*2)+((ar>max)*4)+((arx2)&(bc(1)<x3)
    disp('center')
    switch (pix)
    case 2
    r=1;
    case 4
    r=4;
    case 5
    r=5;
    end

    else if bc(1)x3
    r=3;
    disp(‘right’)
    else

    Birde switch case yapısı kullanmışsınız. Bu yapı ne işe yarıyor onu anlayamadım. Yardımcı olursanız çok sevinirim.

    Erdi
    Ziyaretçi

    Emeğinize sağlık. Ben yalnızca arduino ve kamera kullanarak renk ayırmak istiyorum. Nasıl bir yol izleyebilirim. Teşekkürler

    Kazım Ünal
    Ziyaretçi

    vermiş olduğunuz bilgi için teşekkürler. Bunun c# kodu var mı acaba elinizde? Bir de robotu yaptım, matlabda görüntü aldım ama hafızadan dolayı şişme yaptı ve programı otomatik durdurdu, hocam c# istediği için test amaçlı matlab yapmıştım yardımcı olursanız sevinirim. Teşekkürler.

    hasan
    Ziyaretçi

    Merhaba,

    R2016a da preview ile görüntü alamıyorum.
    windows içinde bulunan uygulama ile kameranın çalıştığını doğruladım.
    ama matlab ta görüntü alamdım hata vermiyor preview penceresi açılıyor fakat görüntü gelmiyor.
    nerede sorun olabilir?
    yardımcı olurmusunuz.

    vid = videoinput(‘winvideo’,1);
    preview(vid);

    ramazan
    Ziyaretçi

    bunu bluetooth ile beni takip eden bi sistem yapmak istiyorum nasıl olabilir

    Arda inanç
    Ziyaretçi

    Hangi kamerayı kullandınız

    Arda inanç
    Ziyaretçi

    Bir de masaüstü bilgisayar ile kuallanırken matlab da 1 mi olucak 2 mi olucak

    mustafa
    Ziyaretçi

    merhabalar öncelikle teşekkür ederiz bu proje için. projeyi çalıştırdık fakat motorlar çok hızlı gidiyor arduino’daki motor hızını düşürdük en son 130 oldu ama hala çok hızlı ne yapmamız gerekiyor sizinki gibi yavaş olmadı topu görünce kafayı yiyor araba kolay gelsin.

    Muslum
    Ziyaretçi

    Merhaba hocam usb ile denedim çalışıyor Bluetooth ile denedim Matlab ile bağlantısını sağladım ama çalıştırıyorm robot çalışmıyor neden acaba? Bide hocam usb ile çalıştırınca ilk çalıştırınca calisiyor sonra tekrar deniyorum line 18,72 hata veriyor tekrar yürütülmuyor program neden acaba hocam? Teşekkürler hocam

    muslum
    Ziyaretçi

    merhaba hocam bluetooth ile matlab baglantısını sagladım ama robot çalişmiyor ? normalde usb ile çaliştırıyorum hiç bir sıkıntı çıkmıyor? bide kodu 1 kere çaliştırdıktan sonra 2. kez çaliştırınca line 18 72 de hata veriyor neden acaba bunları cevaplarsanız çok sevinirim tesekkuler saygılarımla hocam

    ahmet
    Ziyaretçi

    1) Bu kısım objeji bulduktan sonra yapacağı işlem mi

    if obj_found == 0
    fwrite(s,’C’);
    disp(‘resim yok’)
    end
    2) bu kısmı kodda yazmak zorunda mıyız sürekli renk okuma yapma istiyorsak bu kısm eklemesek olur mu
    hold off
    end
    fwrite(s,’C’);
    stop(vid);
    flushdata(vid);
    fclose(s);
    clear all

    wpDiscuz

    Yeni Projeler More

    • 16 Şubat 2017
      1 hafta ÖNCE 2 Yorum

      Öğrenme Fonksiyonuna Sahip Hareket Kopyalayan Robot Kol Yapımı

      Bu projede öğrenme yoluyla hareket kopyalayan robot kol yapımından bahsedeceğim. Endüstride kullanılan robot kollar, her zaman aynı hareketleri yapmaya odaklıdır. Örneğin ürün bandından bir nesneyi alıp başka bir banda aktarımını yapan robot kollar sürekli aynı hareketi yapmaktadır. Bu hareketler önceden öğretilerek robot kola aktarılır. Burada da aynı mantıkla robot ...

    • 11 Şubat 2017
      2 hafta ÖNCE 3 Yorum

      Arduino İle Labirent Çözen Robot Yapımı

      Kendi robotunu yap projelerimizin bu bölümünde arduino ile labirent çözen robot yapacağız. Labirent çözen robot özellikle robot yarışmalarında yer almaktadır. Bir labirentin çözüm yolunu bulmak aslında tek bir etkene bağlıdır. Bu etken sağ veya sol taraftaki herhangi bir duvarı takip ettirmektir. Bu etkenden yola çıkarak robot sol veya sağ ...

    • 07 Şubat 2017
      2 hafta ÖNCE Yorum Yok

      Arduino ile MLX90614 Kızılötesi Sıcaklık Sensörü Kullanımı

      Cisme temas etmeden, cismin sıcaklığını ölçen MLX90614 kızılötesi sıcaklık sensöründen bahsedeceğim. Dahili bir 17-bit ADC ve güçlü bir DSP, MLX90614'ün ölçümlerinde yüksek doğruluk ve çözünürlük verir. Vücut sıcaklığı ölçmek için uygundur. Ayrıca hareket algılamada da kullanabilirsiniz. MLX90614 Özellikler: Ortam sıcaklığı ölçme aralığı -40 ile + 125 ° C Nesne ...

    • 05 Şubat 2017
      3 hafta ÖNCE Yorum Yok

      Arduino ile Yazıyı Sese Dönüştüren Emic 2 Modülü Kullanımı

      Robotunuzu konuşturmak ve neler olup bittiğini söyletmek ister misiniz ? Emic 2 yazıyı sese çeviren modülle kolaylıkla projeleriniz konuşabilir. Emic-2, Parallax tarafından, ses sentezini tamamen zahmetsiz kılmak için Grand Idea Studio ile birlikte tasarlanmıştır.

    • 31 Ocak 2017
      3 hafta ÖNCE 7 Yorum

      Arduino ile DHT22 Sıcaklık Nem Sensörü Kullanımı

      DHT sensörleri, kapasitif nem sensörü ve bir termistör olmak üzere iki parçadan oluşur. DHT11 ve DHT22 olan iki DHT modelini ele alalım. Görünüm ve pin yapısı olarak benzer görünmelerine rağmen farklı ölçüm hassasiyetlerine sahiptirler. Aşağıda iki modelin karşılaştırmasına bakalım.

    Bizi Takip Et

    Son Yorumlar

    Sezgin GÜL
    Sezgin GÜL 2017-02-23 19:53:34
    I2Cdev.h MPU6050 kütüphanesinin içinde bulunuyor ayrı indirmenize gerek yok.
    mahmut 2017-02-23 18:25:28
    iyi günler ı2cdev.h kutuphanesını nerden bulabılırım
    Sezgin GÜL
    Sezgin GÜL 2017-02-23 15:27:37
    Arduino Uno
    mustafa 2017-02-23 15:02:27
    abi yukarida paylaştıgın videodaki arduino çeşidini yazarmisin aynısından alacağimda
    Sezgin GÜL
    Sezgin GÜL 2017-02-23 13:23:12
    İndirdiğin eklentiyi aç.Klasör içine gir. 3 dosya bir klasör olacak. Onların hepsini yukarıda belirtiğim konuma ekle. Önceki eklediğini sil. Programı.....
    mustafa 2017-02-23 13:06:37
    abi bütün yazilimi 1 sekmeyemi ekliyoruz
    Sezgin GÜL
    Sezgin GÜL 2017-02-22 13:37:41
    Eklentiyi yanlış yere kurmuş olduğunuz için görünmüyor.Attığınız konumu tekrar kontrol edin.
    enver 2017-02-22 13:17:45
    iyi günler ben inkspace 0.48,5 kurdum anacak içine linkini verdiğiniz gcode dosyasını belirrttiğiniz adrese atmama rağmen gcode dosyası olarak kaydedemiyorum......