"Enter"a basıp içeriğe geçin

Çizgi İzleyen Robot

Çizgi izleyen yapmak isteyenlerin internetten buldukları çizgi izleyen robot yapımı örneğinin ancak bu kadar kötü olabileceği kanısına varıp en basitinden bir robotun nasıl yapılacağını anlatmaya karar verdim. En boy oranı düşünülmemiş, devre tasarımı Allaha emanet ve devre tasarımındaki gereksiz elemanlar beni bu yazıyı yazmaya sürükledi diyebilirim.

Robogazide çok zaman geçirdim, özellikle çalışma ortamı bana bir çok şey kattı. Şimdi düşündüğümde robogazide olduğum süreyi çok iyi değerlendirmediğimi düşünüyorum. Robogazinin sağladığı imkanlarla daha fazla şey yapılabilinirdi. Fecir hoca ve Meral hoca sayesinde çok şey öğrendim. Robogazide olduğum süre boyunca öğrendiklerimi ve deneyimlerimi robogazinin şu an ki üyelerine aktarmak boynumun borcu oldu.

İlk kez robot yapacak olan bir kişi için hazır çalışan bir robotu kopyalamak elbette zor olacaktır. Hele ki hiç deneyimi yoksa karşısına çıkan hataların ne olduğunu anlayamadığı için bir çözüm üretmesi de çok zor. Bu yüzden önce karşılaşılabilecek hatalardan ve çözüm yöntemlerinden başlayacağım.

YENİ!!!!

Robotun elektronik bölümünü parçalara ayırmak gerekiyor. Bu bölümler mikro denetleyici, sensörler, motor sürücü ve regülatörden oluşmaktadır. Devrelere gerilim verilmeden önce mutlaka kısa devre kontrolü yapılmalıdır.

cizgi_izleyen_robot_ust

7805-pin-gnd-voltage-regulator-5volts-converterRegülatör

Mikro denetleyiciyi, sensörleri ve motor sürücü entegresini devreye takmadan önce regülatör devresinin 5V verdiğinden emin olmalısınız. Eğer çıkma bir regülatör kullandıysanız ya da lehim yaparken fark edemediğiniz bir kısa devre varsa 5V olması gereken yerlerde giriş gerilimi olacağından mikro denetleyicinizi ve diğer elemanları bozabilirsiniz. Bu yüzden devrenize mikrodenetleyici, sensör ve motor sürücü entegresini takmadan  ilk regülatörünüzün düzgün çalışıp çalışmadığını  kontrol etmelisiniz. 7805 için eğer çıkış gerilimi 4,8 – 5,2 V civarında değilse regülatörünüzde bir sorun vardır. Ya takmadan öncede bozuktur, ya da kısa devre nedeniyle gerilim verdiğinizde bozulmuştur. Bir sorun olup olmadığını regülatörün ısınıp ısınmadığını kontrol ederek de anlayabilirsiniz. 7805 için olmazsa olmaz giriş ve çıkış kondansatörüdür, bu iki kondansatör mutlaka takılmak zorundadır.

cny70

Sensörler

CNY70 kolay bulunan ve ışıktan etkilense de kullanılmayacak kadar kötü olmayan bir sensör. Sensörün diyot kısmını bulmanın iki yöntemi vardır. Birincisi yazılı olan kısımdaki transistördür, ikincisi ise açık mavi olan kısım diyottur(Resimde aşağı taraftaki diyottur).

Genel olarak sensörlerde karşılaşılan sorun pcbsinin ters çıkartılması ya da çizimde ters çizilmesidir. Bu yüzden takmadan önce diyot kısmını ölçü aletinin diyot kademesinde ölçüp pcb’nin doğru olup olmadığı kontrol edilip takılmalıdır.

İkinci olarak lehimlemeler yapıldıktan sonra regülatör testi yapıldıysa gerilim verilip cep telefonu kamerasıyla çalışıp çalışmadığı kontrol edilebilir.

CNY ile ilgili üçüncü test ise görüp görmediğinin testidir. Sensörler mikro denetleyicinin hangi pinlerine bağlandıysa ölçü aleti o pinlere sırayla değdirilerek sensörlere parmak testi yapılır. Parmak testi kısaca sensörü parmağınızla kapatıp gerilim 0V olduğunu görüp, parmağınızı çektiğinizde 5V’a yakın bir değer aldığınızdan emin olmanızdır.

l293dMotor Sürücü

Eğer robot yarışması için bir robot yapmıyorsanız, bu işi öğrenmek için yapıyorsanız L293 ya da L298 ideal motor sürücülerdir. Bu sürücüler içerisinde çıkış, transistörlerden yapıldığı için minimum motor gerilimi olarak 5V kullanılabilir. Mosfetli sürücülerde (özel düşük voltaj motor sürücüler hariç) minimum motor gerilimi 10-12V civarındadır.

Çizgi izleyende üçüncü testimiz motor sürücü testi, motorları bağladıktan sonra iki küçük zil telinin uçları soyularak biri 5V’a diğeri GND’ye değdirilerek motor sürücünün in1 ve in2 uçlarına verilir. Bu şekilde motor sürücünün çalışıp çalışmadığı kontrol edilir.

16f877aMikro Denetleyici

Mikro denetleyici için ilk kontrolünüz beslemenin doğru verildiğini kontrol etmektir. Daha sonra mclr bacağında 5V olduğundan emin olmalısınız. Kristal ve 22pF lık konsansatörlerin lehimlerine ayrı bir özen göstererek kısa devre kontrolünü yapın. Pic’in doğru bir şekilde çalıştığını test etmek için motorların bağlı olduğu pinlere 1 saniye boyunca ileri 1 saniye boyunca geri gidecek şekilde programlayın. Eğer bu test programı çalışıyorsa ikinci olarak bir koşul ekleyin ve sensörlerden herhangi biri gördüğünde ileri hiç biri görmediğinde geri dönsün veya dursun. Tüm testler başarıyla yapıldığına göre artık çizgi izleyen programına başlayabilirsiniz.

Mekanik

cizgi_izleyen_robot_alt_olcekli

Fotoğraflarını paylaştığım çizgi izleyen robot en basit ve en zahmetsiz bir çizgi izleyen yapmak için yapılmıştır. Çizgi izleyen iki pleksiden oluşmaktadır. Birinci pleksi 10×8.5 cm lik olan motoru ve kontrol kartının montaj edileceği pleksidir. İkinci pleksi 8×5 cm lik sensörlerin ve sarhoş tekerleğin montaj edileceği pleksidir. Birinci pleksinin 8.5 cm lik olan kısmının uzun olduğunu düşünebilirsiniz ancak robotun şaha kalkmaması için ağırlık merkezinin tekerlerin biraz önünde olması gerekmektedir. Bu yüzden robotta her bir parçayı tek tek tarttığımızda en ağır parçası olan pili koymak için bu kadar uzun tutulmuştur. En boy oranı olarak 1.1 ila 1.4 arasında tasarım yapabilirsiniz. Eğer en boy oranınız 1.1 olursa motorlarınızdaki en ufak bir pwm değişimiyle çok çabuk yönünü değiştirebilirsiniz. Bu tür bir tasarım düşük hızlı motorlar için uygundur. Eğer motorlarınız çok hızlıysa motorun en boy oranını 1.4 lere çekmeniz gerekmektedir. Bu değerler uzun denemeler ile elde edilmiştir. En boy oranı iki tekerleğin yere değdikleri noktaların uzunluğunun sarhoş tekere olan dik uzanlığına oranıdır.

Elektronik

Devre tasarımı bir robotun planlamasında en başta yapılması gereken bir bölümüdür. Ancak PCB tasarımı robotun mekanik tasarımı yapıldıktan sonra yapılmalıdır. Paylaşacağım devre tasarımı en az elemanla yapılabilecek bir devre tasarımıdır. Mikro denetleyici olarak Pic16F877A kullanmış olmamıza rağmen bu tasarımdaki bir robot için Pic16F876A mikro denetleyicisi de yeterlidir. Elimde kullanmadığım 877A olduğu için tasarımı 877A ile yaptım.

Toplam çekilen akımı azaltmak için 4 tane CNY70 bir birine seri bağlanarak 1 ohmluk direnç bağlanmıştır. 5. CNY70 ise 100 ohmluk direnç ile beslemeye bağlanmıştır. Kristal 4 ya da 20 MHz kullanılabilinir ve motor akımları yükte 900 mA ‘i geçmemelidir.

NOT : Devre üzerindeki RESPACK-7 isimli seri direnç’in değeri 22k olacaktır.

ISIS Professional - D:ProjelerTezlertez-8 (çizgi izleyen 877

*Program CCS C derleyicisinde yazılmıştır.
On-Off Kontrol programı

#include <16F877A.h>
#device adc=10
#FUSES HS //High speed Osc (> 4mhz)

#use delay(clock=20000000)

#use fast_io (a)
#use fast_io (c)

void main()
{
   set_tris_a(0xFF);
   set_tris_c(0xF0);
   while (true)
   {
      if(input(pin_a0)==1)
      {
         output_c(0x0a); // Sağ geri sol ileri
      }
      if(input(pin_a1)==1)
      {
         output_c(0x02); // Sağ duruyor sol ileri
      }
      if(input(pin_a2)==1)
      {
         output_c(0x06); // Sağ ileri sol ileri
      }
      if(input(pin_a3)==1)
      {
         output_c(0x04); // Sağ ileri sol duruyor
      }
      if(input(pin_a5)==1)
      {
         output_c(0x05); // Sağ ileri sol geri
      }
   }
}

PWM programı

#include <16F877A.h>
#device adc=10
#FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)

#use delay(clock=20000000)

#use fast_io(a)
#use fast_io(c)
unsigned int8 sensorler=0,solpwm=0,sagpwm=0;

void main()
{
   setup_timer_2(T2_DIV_BY_1,249,1); //50.0 us overflow, 50.0 us interrupt
   setup_ccp1(CCP_PWM); // ccp1 ucu pwm çıkışı olarak ayarlandı
   setup_ccp2(CCP_PWM); // ccp2 ucu pwm çıkışı olarak ayarlandı
   set_tris_a(0xFF); // a portunu giriş olarak ayarla
   set_tris_c(0xF0);

   while(true) //sonsuz döngü
   {
       sensorler = input_a(); // A porundaki tüm pinleri oku
       sensorler = sensorler * 0b00101111; // Sensörden gelen değerleri maskeleyerek al

       // birinci ifade beyaz zemin üzeri siyah çizgi için
       // ikinci ifade siyah zemin üzerine beyaz çizgi için
       //Düz git
       if(sensorler==0b00000100 || sensorler==0b00101011)
       {
           solpwm=990;
           sagpwm=990;
       }
       //sola dön vites1
       if(sensorler==0b00000110 || sensorler==0b00101001)
       {
           solpwm=700;
           sagpwm=990;
       }
       //saga dön vites1
       if(sensorler==0b00001100 || sensorler==0b00100011)
       {
           solpwm=990;
           sagpwm=700;
       }
       //sola dön vites2
       if(sensorler==0b00000010 || sensorler==0b00101101)
       {
           solpwm=500;
           sagpwm=990;
       }
       //saga dön vites2
       if(sensorler==0b00001000 || sensorler==0b00100111)
       {
           solpwm=990;
           sagpwm=500;
       }
       //sola dön vites3
       if(sensorler==0b00000011 || sensorler==0b00101100)
       {
           solpwm=300;
           sagpwm=990;
       }
       //saga dön vites3
       if(sensorler==0b00101000 || sensorler==0b00000111)
       {
           solpwm=990;
           sagpwm=300;
       }
       //sola dön vites4
       if(sensorler==0b00100000 || sensorler==0b00001111)
       {
           solpwm=0;
           sagpwm=990;
       }
       //saga dön vites4
       if(sensorler==0b00000001 || sensorler==0b00101110)
       {
           solpwm=990;
           sagpwm=0;
       }
       set_pwm1_duty(solpwm);
       set_pwm2_duty(sagpwm);
    }
}

Çizgi izleyen için sensör fonksiyonu yazımı buradan inceleyebilirsiniz.

Hex dosyalarını buradan indirebilirsiniz.

Projenin proteus dosyalarını buradan indirebilirsiniz.

5 Yorum

  1. Bahattin Bahattin Haziran 13, 2013

    merhaba hayirli isler dilerim size. CCS- C program .yazma bilgi az. PIC Basic Pro .pic programlama. yazmayi. ögrendim. sizin bu . cizgi izleyen robot. programi ve hexi.verirseniz.
    cok sevinirim?. allah isinizi. rast. getirsin. allaha. emanet olun.isvecten selamlar.

  2. kare68 kare68 Temmuz 24, 2013

    merhaba..öncelikle çalışmalarınız için teşekkür ederim…benim aklıma bir şey takıldı…devre çizimlerinizdeki pespack ne oluyor…1×16 display falan mı acaba..müsait olduğunuzca bana cevap verebilir misiniz…
    bir de ben bu yazılıma şöyle bir eklenti yapmak istiyorum…mesela. aracımızın siyah zemin üzerine beyaz şeridi takip ettiğini varsayalım…yolda ilerlerken bütün sensörlerin beyaz zemini gördüğünü ve her beyaza denk geldiğinde bunu saymasını istiyorum…mesela beşinci kez bütün sensörler beyazı gördügünde program bir alt programa dallanarak oradan devam etdin alt program sonunda kaldığı yere dönsün..bunu yapabilirmiyiz..bana fikir verebilirmisiniz..iyi akşamlar..

    • emrahbudak emrahbudak Temmuz 24, 2013

      Şema üzerinde RESPACK-8 yazan şey sıralı dirençtir. her bir sensörü 5 Volt ile pull-up yapmak için genelde kullanılır. Söylemiş olduğunuz yöntem videodaki ikinci robottaki gibi bir şey. Çizgileri sayıyor ve ikinci çizgide duruyor. Böyle bir şey tabiki mümkün ve yapılabilinir. Yalnız dikkat edilmesi gerekilen şey beyaz çizgideki kalma süresidir. Burada bir kontrol algoritması yazılmazsa bir çizgiden geçtiğinde 4-5 tane sayabilir.
      http://www.youtube.com/watch?v=IB3LB98WO8M

  3. Bahattin Bahattin Temmuz 27, 2013

    merhaba. emrah. size hayirli. isler dilerim. size. pic CCS program. yazma. bilgim az.
    sizden istedigim. bu cizgi izliyen . dört tekerli. hexi. istiyorum. eger .mumkunse. sitedeki. yazdiginiz. program. pic ccS . denedim. hexe. cevirmedim. onun. icin rahatsiz. etim. sizi.
    sizin. sayenizde. cok seyler ögrendim. pic basic yazmayi. sizlerin sayenizde. ögrendim.
    hayirli ramazanlar dilerim size. allaha. emanet olun. umarim. cevap verirsiniz. hersey. icin tesekkurler.

  4. Can Gürel Can Gürel Aralık 21, 2016

    Merhaba biz bu devreye PBM eklemek istiyoruz. Robotun hızlanıp yavaşlaması için bayırdan inip-çıkarken, köşeleri dönerken kullanılabilir. Acaba bununla ilgili bir çalışmanız var ise kodlar ve şema ile paylaşabilir misiniz? Ve bu konu için de çok teşekkür ederim. Çok yararlı ve anlaşılır bir sunum olmuş.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir