Çizgi İzeyen Robot Yapımı 2

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