Pic ile Hız kontrollü İnfrared Kumandalı Oyuncak Araba

Başlatan zzcemzz, 29 Temmuz 2010, 16:11:40

zzcemzz

Bu araba İleri-Geri hız kontrolü ve İstenilen açıda sağ-sol dönüş özelliklerine sahiptir.

Arka motor ileri-geri hız kontrol devresi isis programındaki sample klasöründeki devredir.

LM555li 38Khz devresi www.melihkarakelle.com sitesinden alınmıştır.Ancak
sitedeki şemada kullanılan 10K trimpot yerine 22K trimpot kullanılmıştır.

Alıcı ve Verici programında gereksiz satırlar olabilir.İsteyen kendine zevkine
göre düzenleyebilir.

Verici üzerindeki BC547 nin beyzi boşa alınarak LM555 in 3 nolu ayağındaki
sinyal 22K trimpot ile 38Khz e ayarlanmalıdır.

Sağ-Sol ve Arka motor maximum-minimum dönüş imitleri verici programından
her arabaya göre istenilen değerlerde ayarlanabilir.

[IMG]http://img13.imageshack.us/img13/9543/93813392.th.jpg[/img]

[IMG]http://img826.imageshack.us/img826/2932/23253974.th.jpg[/img]

[IMG]http://img821.imageshack.us/img821/5180/53027956.th.jpg[/img]

[IMG]http://img801.imageshack.us/img801/7674/19309773.th.jpg[/img]

[IMG]http://img832.imageshack.us/img832/8773/30972517.th.jpg[/img]

Test video1 : http://img809.imageshack.us/img809/3555/arkamotor.mp4
Test video2 : http://img810.imageshack.us/img810/5355/servo.mp4

isis şeması : http://img824.imageshack.us/img824/7084/isissema.png


//IR Verici

#include <18f452.h>
#device ADC = 10
#fuses HS,NOWDT,NOPROTECT
#use delay(clock=20000000) 
 

unsigned int32 value=0;
unsigned int32 value1=0;
unsigned int32 potval=0;
unsigned int32 potval1=0;

void adc_olc()
{ 
set_adc_channel(0);//arka motor ADC ölçümü
delay_us(20);
potval=read_adc();
value1 = ( potval * 20 + 1 );

IF (value1 > 3450)//arka motor ileri max limit
{
value1 = 3450;
}
IF (value1 < 250)//arka motor geri max limit
{
value1 = 250;
}
      output_high(pin_b0);
      delay_us(value1);
       output_low(pin_b0);
    
       delay_us (160);
     
set_adc_channel(1);//servo motor ADC ölçümü
delay_us(20);
potval1=read_adc();
value = ( potval1 * 2 - 300  );

IF (value > 1430)//servo motor sağ max limit
{
value = 1430;
}

IF (value < 1050)//servo motor sol max limit
{
value = 1050;
}

      output_high(pin_b0); 
      delay_us(value);
      output_low(pin_b0);
      delay_us (260);
     
      output_high(pin_b0); 
      delay_us (14500); 
      output_low(pin_b0);
      delay_us (160); 

}

void main()
{
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_CCP1(CCP_OFF);
setup_CCP2(CCP_OFF);
setup_port_a(AN0);
setup_adc(ADC_CLOCK_INTERNAL);

set_tris_b(0x00);
output_b(0x00);
set_tris_c(0x00);
set_tris_d(0x00);
set_tris_e(0x00);

while(true)
{
adc_olc();
}
}


//IR Alıcı ve PWM
#include <16f628a.h>

#fuses HS, NOPROTECT, NOPUT, NOWDT

#use delay (clock=20000000)
#use fast_io ( a )
#use fast_io ( b )

#byte   PORT_A  =   5 
#bit    SERVO_IN        = PORT_A.2
#bit    SERVO_OUT       = PORT_A.3
#bit    SERVO_OUT1      = PORT_A.1
int16 say=0;
int16 say1=0;
int16 say2=0;
int16 say3=0;
int16 b=0;

    void servo()
    {              
                   SERVO_OUT1 = 0;//SERVO_OUT = 0;   
                   while( SERVO_IN == 1 ){delay_us(1);b++;}
                   if(b>1250){
                   
                while ( SERVO_IN == 0 ){SERVO_OUT = 0;say=0;say1=0;say2=0;say3=0;}                                                 
                while ( SERVO_IN == 1 ){SERVO_OUT =1;say=say+2;say2=say2+2;say3=say3+2;}
           
          
           SERVO_OUT = 0;
                         
                if (say3>999&&say3<1000)set_pwm1_duty(0);
                
                if(say>1000){
                output_low(pin_b0);
                say=say-999;
                set_pwm1_duty(say);
                }
                             
                if(say2<990){
                output_high(pin_b0);
                 say=say-1100;
                set_pwm1_duty(say);
                }               
                 b=0;say=0;say1=0;say2=0;say3=0;
                 while ( SERVO_IN == 0 ){SERVO_OUT1 = 0;say=0;say1=0;say2=0;say3=0;}                   
                while ( SERVO_IN == 1 ){SERVO_OUT1 = 1;say=0;say1=0;say2=0;say3=0;}                          
                 }
                 
              
    }
void main ( void )
        {

        set_tris_a ( 0b00000100 );              
        set_tris_b ( 0b00000000 );
        output_low(pin_b0);
 setup_ccp1(CCP_PWM);
 setup_timer_2(T2_DIV_BY_16,255,1);
 set_pwm1_duty(0);
        while ( TRUE )
                {              
              servo();             
                   }
                }         
       


rapidsiz Rar şeklinde dosya nasıl eklerim bilmediğimden baskı devre ve şemaları gönderemedim.

gevv

 

hansu_46

hocam merhaba..bu proje çok hosuma gitti yapmayı düşünüyorum ır alıcı göz derken tam olarak neyi kastettiniz?cevap verirseniz çok sevinirim

zcemix


hansu_46

program hakkında bilgi verebilirmisiniz acaba??mesela porta nın 3. biti devre şemasında kullanılmıyor ama programda yer alıyor anlayamadım