Çizgi İzleyen Robot (Güncellenmiş Veriyonu)


Ç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.

İ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.
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.



--------------------------------------------------------------------------------------------------------------------------

Voltaj regülatörü

Regü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.






--------------------------------------------------------------------------------------------------------------------------

Kontrast Sensörü
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.

--------------------------------------------------------------------------------------------------------------------------

motor sürücü entegre

 Motor 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.

--------------------------------------------------------------------------------------------------------------------------




PIC Mikrodenetleyicisi

                                 Mikro 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




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.


*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.



0 Yorumlar