Çizgi İzleyen Robot Yapımı

Ç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 hocasayesinde ç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.
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.
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 * "b00101111"; // 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=="b00000100" || sensorler=="b00101011")
       {
           solpwm=990;
           sagpwm=990;
       }
       //sola dön vites1
       if(sensorler=="b00000110" || sensorler=="b00101001")
       {
           solpwm=700;
           sagpwm=990;
       }
       //saga dön vites1
       if(sensorler=="b00001100" || sensorler=="b00100011")
       {
           solpwm=990;
           sagpwm=700;
       }
       //sola dön vites2
       if(sensorler=="b00000010" || sensorler=="b00101101")
       {
           solpwm=500;
           sagpwm=990;
       }
       //saga dön vites2
       if(sensorler=="b00001000" || sensorler=="b00100111")
       {
           solpwm=990;
           sagpwm=500;
       }
       //sola dön vites3
       if(sensorler=="b00000011" || sensorler=="b00101100")
       {
           solpwm=300;
           sagpwm=990;
       }
       //saga dön vites3
       if(sensorler=="b00101000" || sensorler=="b00000111")
       {
           solpwm=990;
           sagpwm=300;
       }
       //sola dön vites4
       if(sensorler=="b00100000" || sensorler=="b00001111")
       {
           solpwm=0;
           sagpwm=990;
       }
       //saga dön vites4
       if(sensorler=="b00000001" || sensorler=="b00101110")
       {
           solpwm=990;
           sagpwm=0;
       }
       set_pwm1_duty(solpwm);
       set_pwm2_duty(sagpwm);
    }
}
Projenin proteus dosyalarını buradan indirebilirsiniz.
iNdirme Sitesi: http://www.emrahbudak.com/indir/cizgi_izleyen_robot.rar

Yorum Gönder

0 Yorumlar