Thông báo

Collapse
No announcement yet.

Lập trình cho robot bám đường với tốc độ cao

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Lập trình cho robot bám đường với tốc độ cao

    Các cao thủ giúp mình phần này với!Giờ mình muốn robot đang chạy thẳng đến ngã tư thứ nhất chẳng hạn thì nó làm công việc 1,ngã tư thứ 2 làm công việc 2..vv..
    Mình viết bằng Cosvidsion AVR cho ATMEGA 16.Ai có cái cod nào của mấy năm trước thì cho mình tham khảo nha,có cả sơ đồ mạch cho mình nghiên cứu thì càng tốt.
    Nhận làm mạch, ĐAMH sử dụng vđk Pic & AVR tại tp.HCM
    Liên hệ sđt: 0902.808.371

  • #2
    Nguyên văn bởi manh89 Xem bài viết
    Các cao thủ giúp mình phần này với!Giờ mình muốn robot đang chạy thẳng đến ngã tư thứ nhất chẳng hạn thì nó làm công việc 1,ngã tư thứ 2 làm công việc 2..vv..
    Mình viết bằng Cosvidsion AVR cho ATMEGA 16.Ai có cái cod nào của mấy năm trước thì cho mình tham khảo nha,có cả sơ đồ mạch cho mình nghiên cứu thì càng tốt.
    Mình có bài lập trình sơ bộ thế này thôi, chỉ cần hiệu chỉnh phần chiến thuật, nhưng mà chưa đưa mạch lên được vì đang dùng máy thằng em. Mạch của mình gắn đồng thời 2 chip ATmega 16 chứ không dùng 1 chip như các mạch bình thường.

    Code:
    /*****************************************************
    This program was produced by 
    Nguyen The Manh- TDH 15A2 HN
    Dai Hoc Kinh Te Ky Thuat Cong Nghiep
    *****************************************************/  
    
    
    //                   KHUNG CHUONG TRINH
    
    /*        1. Phan khai bao VDK va hien thi.
              2. Phan di lai tren san va di cham.
              3. Phan re phai va trai.
              4. Phan xu ly cac cong doan
              5. Phan quet phim va reset.
              6. Phan cho cac cong tac hanh trinh, cac cong viec phu ....
              7. Phan chon cac chien thuat.
              8  Ham chinh.
     *************************************************************************************************************************************/                                 
    
    #include <mega16.h>
    #include <delay.h>
    #define DC_R OCR1B
    #define DC_L OCR1A
    #define CLK   PORTD.1
    #define DATA  PORTD.0
    #define s0  0b00100000
    #define s1  0b10101111
    #define s2  0b00010011
    #define s3  0b00000111
    #define s4  0b10001110
    #define s5  0b01000110
    #define s6  0b01000000
    #define s7  0b00101111
    #define s8  0b00000000
    #define s9  0b00000100
    #define sA  0b00011000
    #define sB  0b11010000
    #define sC  0b01110001
    #define sD  0b10010010
    #define sE  0b01110000
    #define sF  0b01111000
    int array_so[16]={s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,sA,sB,sC,sD,sE,sF};
    int LED_0=0,LED_1=0;
    int i,j,so;
    int a,b;
    // CAC GIA TRI MAC DINH : 0 = BAT , 1 = TAT 
    
    
    /***************************************** KHOI HIEN THI LED 7SEG ***********************************/ 
    
    /*
    void giatri_LED(void)                                                                      // Luu du lieu cua LED7SEG
    {if (LED_0==9){if (LED_1==9){LED_0=0;LED_1=0;}else{LED_0=0;LED_1++;};} else{LED_0++;};}
    
     */
      void dulieu_LED(void)                                                                      // Nhap du lieu 
     {so=array_so[j];for (i=0;i<8;i++){ so=so>>1;DATA=SREG.0;CLK=0;CLK=1;}; }
     void hien_thi(void)                                                                        // Hien thi tren led 7SEG
    {j=LED_0;dulieu_LED();j=LED_1;dulieu_LED();CLK=0;CLK=1;}
    
    /******************               HAM QUET PHIM BAM VA CONG TAC HANH TRINH (chon chien thuat va reset)            ****************************/
    #define CONG_1 PINB.3
    #define CONG_2 PINB.4
    #define phim15      phim[15]                            
    #define phim14      phim[13]                               
    #define phim13      phim[14]                               
    #define phim12      phim[12]                             
    #define phim11      phim[11]                             
    #define phim10      phim[10]                            
    #define phim9       phim[9]
    #define phim8       phim[8]
    #define phim7       phim[7]
    #define phim6       phim[6]
    #define phim5       phim[5]
    #define phim4       phim[4]
    #define phim3       phim[3]
    #define phim2       phim[2]
    #define phim1       phim[1]
    #define phim0       phim[0] 
    int phim[16];
    
    
    
    /****************************           HAM QUET PHIM CHON CHUONG TRINH VA CHUC NANG RESET          ***************/
    int x=0;
    void  reset(void)
    {if(phim0 == 0){while(phim0 == 0){PORTC.6 = 0;}PORTC.6 = 1;x++;LED_1 = x;hien_thi();};
    }
    void quetphim(void)
    { for (i=0;i<8;i++){PORTB=i;delay_ms(2);if (CONG_1==0)
                                               {phim[i]=0;       
                                            /*LED_0=i;hien_thi();      */
                                               }
                                            else{ phim[i]=1;};
                                            if (CONG_2==0)
                                               {phim[i+8]=0;
                                               /*LED_0=i;
                                                hien_thi();            */
                                                } 
                                            else{phim[i+8]=1;};};}  
                                                               
    /*********************************************            KHAI BAO ENCODER                **********************************************/ 
     
    int DEM_EN0 = 0;
    int DEM_EN1 = 0;  
    interrupt [EXT_INT0] void ext_int0_isr(void)
    {
    DEM_EN0++;
    if(DEM_EN0 == 1000000)
    { DEM_EN0 = 0;
    };
    }
    interrupt [EXT_INT1] void ext_int1_isr(void)
    {
    DEM_EN1++;
    if(DEM_EN1 == 1000000)
    { DEM_EN1 = 0;
    };
    }
                                    
    /*************************************  KHOI DI LAI TREN SAN ***************************************/
       
      
    
     void demvach(int sovach)
     { int demvach = 0;while(demvach < sovach){ PORTD.4 = 0;PORTD.5 = 0;a = DC_R;b = DC_L; 
                            if (PINA == 192){while(PINA == 192){DC_R = 30;DC_L = 30;PORTC.0 = 0;PORTC.1 = 0; PORTC.6 = 0;};demvach++;LED_0 = sovach;LED_1 = demvach;hien_thi();PORTC.6 = 1;delay_ms(150);};
                            if (PINA.0 == 0){PORTC.0 = 0;PORTC.1 = 0; DC_R = 255;DC_L = 30;};
                            if (PINA.1 == 0){PORTC.0 = 0;PORTC.1 = 0; DC_R = 150;DC_L = 30;};
                            if (PINA.1 == 0&& PINA.0 == 0){ PORTC.0 = 0;PORTC.1 = 0;DC_R = 200;DC_L = 30;} ;
                            if (PINA.4 == 0){ PORTC.0 = 0;PORTC.1 = 0;DC_R = 30;DC_L = 150;};
                            if (PINA.4 == 0&& PINA.5 == 0){PORTC.0 = 0;PORTC.1 = 0;DC_R = 30;DC_L = 200;};
                            if (PINA.4==0&&PINA.3 == 0){ PORTC.0 = 0;PORTC.1 = 0;DC_R = 30;DC_L = 100;};
                            if (PINA.1== 0&&PINA.2 == 0){ PORTC.0 = 0;PORTC.1 = 0;DC_R = 100;DC_L = 30;};
                            if (PINA.3 == 0&&PINA.2 == 0||PINA.3 == 0||PINA.2 == 0){ PORTC.0 = 0;PORTC.1 = 0;DC_R = 30;DC_L = 30;};
                            if (PINA.5 == 0){PORTC.0 = 0;PORTC.1 = 0;DC_R = 30;DC_L = 255;};
                            if (PINA == 63){DC_R = a;DC_L = b;}};}
                            
     /***************************             HAM DI THANG CHAM                         ************************************/
    
    
    
    void dithang_cham(int sovach)
    { int demvach = 0;while(demvach < sovach){ PORTD.4 = 0;PORTD.5 = 0;a = DC_R;b = DC_L; 
                            if (PINA == 192){while(PINA == 192){DC_R = 100;DC_L = 100;PORTC.0 = 0;PORTC.1 = 0; PORTC.6 = 0;};demvach++;LED_0 = sovach;LED_1 = demvach;hien_thi();PORTC.6 = 1;delay_ms(150);};
                            if (PINA.0 == 0){PORTC.0 = 0;PORTC.1 = 0; DC_R = 255;DC_L = 100;};
                            if (PINA.1 == 0){PORTC.0 = 0;PORTC.1 = 0; DC_R = 180;DC_L = 100;};
                            if (PINA.1 == 0&& PINA.0 == 0){ PORTC.0 = 0;PORTC.1 = 0;DC_R = 210;DC_L = 100;} ;
                            if (PINA.4 == 0){ PORTC.0 = 0;PORTC.1 = 0;DC_R = 100;DC_L = 180;};
                            if (PINA.4 == 0&& PINA.5 == 0){PORTC.0 = 0;PORTC.1 = 0;DC_R = 100;DC_L = 210;};
                            if (PINA.4==0&&PINA.3 == 0){ PORTC.0 = 0;PORTC.1 = 0;DC_R = 100;DC_L = 150;};
                            if (PINA.1== 0&&PINA.2 == 0){ PORTC.0 = 0;PORTC.1 = 0;DC_R = 150;DC_L = 100;};
                            if (PINA.3 == 0&&PINA.2 == 0||PINA.3 == 0||PINA.2 == 0){ PORTC.0 = 0;PORTC.1 = 0;DC_R = 100;DC_L = 100;};
                            if (PINA.5 == 0){PORTC.0 = 0;PORTC.1 = 0;DC_R = 100;DC_L = 255;};
                            if (PINA == 63){DC_R = a;DC_L = b;}};}
     
    /**********************************          HAM DI THANG CO ENCODER 0 THEO VACH TOC DO NHANH        **************************************/ 
    void dithang_en(int xung)
    {DEM_EN0 = 0;
    while(DEM_EN0 < xung){ PORTD.4 = 0;PORTD.5 = 0;a = DC_R;b = DC_L; 
                            if (PINA == 192){while(PINA == 192){DC_R = 30;DC_L = 30;PORTC.0 = 0;PORTC.1 = 0; PORTC.6 = 0;};PORTC.6 = 1;delay_ms(150);};
                            if (PINA.0 == 0){PORTC.0 = 0;PORTC.1 = 0; DC_R = 255;DC_L = 30;};
                            if (PINA.1 == 0){PORTC.0 = 0;PORTC.1 = 0; DC_R = 150;DC_L = 30;};
                            if (PINA.1 == 0&& PINA.0 == 0){ PORTC.0 = 0;PORTC.1 = 0;DC_R = 200;DC_L = 30;} ;
                            if (PINA.4 == 0){ PORTC.0 = 0;PORTC.1 = 0;DC_R = 30;DC_L = 150;};
                            if (PINA.4 == 0&& PINA.5 == 0){PORTC.0 = 0;PORTC.1 = 0;DC_R = 30;DC_L = 200;};
                            if (PINA.4==0&&PINA.3 == 0){ PORTC.0 = 0;PORTC.1 = 0;DC_R = 30;DC_L = 100;};
                            if (PINA.1== 0&&PINA.2 == 0){ PORTC.0 = 0;PORTC.1 = 0;DC_R = 100;DC_L = 30;};
                            if (PINA.3 == 0&&PINA.2 == 0||PINA.3 == 0||PINA.2 == 0){ PORTC.0 = 0;PORTC.1 = 0;DC_R = 30;DC_L = 30;};
                            if (PINA.5 == 0){PORTC.0 = 0;PORTC.1 = 0;DC_R = 30;DC_L = 255;};
                            if (PINA == 63){DC_R = a;DC_L = b;}};}
    /**********************************          HAM DI MU CO ENCODER 0 TOC DO NHANH        **************************************/
    void dimu_en(int xung)
    {DEM_EN0 = 0;
    while(DEM_EN0 <xung){ DC_R = 30; DC_L = 30;};
    }
    /**********************************          HAM RE PHAI CO ENCODER 0        **************************************/
    void rephai_en(int xung)
    {DEM_EN0 = 0;
    while(DEM_EN0 < xung) { DC_R = 200; DC_L = 20;};
    }
    /**********************************          HAM RE TRAI CO ENCODER 0        **************************************/
    void retrai_en(int xung)
    {DEM_EN0 = 0;
    while(DEM_EN0 < xung) { DC_R = 20; DC_L = 200;};
    }
    
    
    /***********************                    HAM CHO KHOI RE PHAI VA TRAI                    **********************/
    void retrai(int demt){int lant=0;PORTC.0=0;PORTC.1=1;delay_ms(10);DC_R = 100;DC_L = 100;delay_ms(200);
                         while(lant<demt){PORTC.0=0;PORTC.1=1;DC_R = 100;DC_L = 100;
                         if(PINA.5 == 0){PORTC.0=0;PORTC.1=1;DC_R = 250;DC_L = 250;};
                         if(PINA.2 ==0||PINA.3==0&&PINA.2 == 0){PORTC.0=0;PORTC.1=0;DC_R = 255;DC_L = 255;lant++;};};}
     void rephai(int demp){int lanp=0;PORTC.0=1;PORTC.1=0;delay_ms(10);DC_R = 100;DC_L = 100;delay_ms(200);
                          while(lanp<demp){PORTC.0=1;PORTC.1=0;DC_R = 100;DC_L = 100;
                         if( PINA.0 == 0||PINA.1 == 0||PINA.2 == 0){PORTC.0=1;PORTC.1=0;DC_R = 250;DC_L = 250;};
                         if(PINA.3 == 0||PINA.3==0&&PINA.2 == 0){PORTC.0=0;PORTC.1=0;DC_R = 255;DC_L = 255;lanp++;};};} 
    
     
     /**************************               CAC CHIEN THUAT           ******************************/
      
    
      void chien_thuat(long c)
      {                            
     
         if(c == 1)    // xanh                     
         {  dithang_en(256);
            rephai_en(100);
            dithang_en(1026);
             c = 0;
         };
         if(c==2)
         { demvach(4);
           retrai(2);
           demvach(4);
           c=0;
           };
           if(c==3)
           {;}
           }
     
     
    /****************************************************            HAM MAIN             **************************************************/
    
    void main(void)
    {PORTA=0xFF;
    DDRA=0x00;
    
    
    PORTB=0xFF;
    DDRB=0x67;
    
    PORTC=0xFF;
    DDRC=0xFF;
     
    PORTD=0xFF;
    DDRD=0xFF;
    
    TCCR0=0x00;
    TCNT0=0x00;
    OCR0=0x00;
    
    TCCR1A=0xA1;
    TCCR1B=0x02;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;
    
    ASSR=0x00;
    TCCR2=0x00;
    TCNT2=0x00;
    OCR2=0x00;
    
    GICR|=0xC0;
    MCUCR=0x00;
    MCUCSR=0x00;
    GIFR=0xC0;
    
    
    TIMSK=0x00;
    
    
    ACSR=0x80;
    SFIOR=0x00;
    
    #asm("sei")
    // INT0: On
    // INT0 Mode: Low level
    // INT1: On
    // INT1 Mode: Low level
    // INT2: Off
    PORTD = 255;
    DC_R = 255;
    DC_L = 255;
    
        while(1)
       { PORTB = 255;
         /* hien_thi();                        // Hien thi 2 so 0 tren 2 LED 7SEG 
          quetphim();
          reset();
          if(phim1 == 0)
            {
               chien_thuat(x);           
    
                                    };*/
                                     PORTC.7 = 1;
                                    quetphim();
                                    if(phim5 == 0)
                                    {PORTC.7 =0;
                                    delay_ms(100);
                                    };
                                    };
    }

    Comment


    • #3
      Bạn cho mình lại cái code ngắn gọn và dễ hiểu hơn chút đi,cái này phức tạp quá,cảm ơn nhiều nha!
      Nhận làm mạch, ĐAMH sử dụng vđk Pic & AVR tại tp.HCM
      Liên hệ sđt: 0902.808.371

      Comment


      • #4
        Mạch ADC dùng PIC_Mạch đk dùng Avr_Hihi_Lí do là vì Avr đắt quá nên đưa em pic vào cho nó rẻ. Mạch dò đường bọn mình chỉ dùng có 4 đèn thui, có thêm 2 đèn đếm vạch riêng là 6.


        Add: 97 Quán Nam - Lê Chân - Hải Phòng.
        Tel: 031 518648 Phone: 0904 283 505

        Comment


        • #5
          Đơn giản và cực kỳ ngắn gọn là chỉ dùng if và if !

          Comment

          Về tác giả

          Collapse

          manh89 Tìm hiểu thêm về manh89

          Bài viết mới nhất

          Collapse

          Đang tải...
          X