天天看點

[精品書單]試着用51單片機來弄智能小車(小機器人)

說到隻能循迹小車是我最早的一輛自己搭起又編寫好的程式弄成功的很開心的小車,雖然隻是很普通的電路,最小系統闆,和延時之類的中斷但很是心滿意足,也很感謝我的另外兩個小夥伴,一起加油打氣,很難忘的一次比賽............................那是大二第一學期麼,哈哈.....
           

話不多說,回憶拿出來分享吧............................

先來一張車的整體圖吧,了解下車的大概情況

[精品書單]試着用51單片機來弄智能小車(小機器人)

車還可以吧,履帶型的,這個是根據情況來選擇的車型,這個大家可以參考下,

在附一張

[精品書單]試着用51單片機來弄智能小車(小機器人)

(這張旁邊是其他隊友的,也跟着我倆弄了好多東西)

思路:這個車主要功能是避障和循迹,避障用了黃色的光電傳感器,循迹是普通的光電傳感器,在這裡的提個醒,算是經驗吧,很多硬體都得選擇好的硬體,這個非常重要,然後電機驅動我用了L298N(後面那個看到沒有)的這個接線也得注意有一點是得共地GND形成回路,不然你加上程式他始終就是不執行,還有

  單片機最小系統闆,這個也是最核心一會電路硬體再講,當然接錯線難免會爆,這個我也遇到過。就算不爆也很容易是燒,沒事剛開始都這樣,感覺所有情況我都遇到了,沒遇到都對不起自己了,算是成長吧...........最後基本智能的東西是三部分:傳感器識别、控制部分、執行部分。

電路硬體

[精品書單]試着用51單片機來弄智能小車(小機器人)

最小系統原理圖

[精品書單]試着用51單片機來弄智能小車(小機器人)

電路其實可以結合程式來連接配接,比如引腳的什麼。

程式代碼

1 *******************************************************************************************************/
 2 #include"reg52.h"
 3 #include"intrins.h"
 4 #define  uchar  unsigned char
 5 #define  uint  unsigned  int
 6 /*********************電機********************/
 7 sbit  ZQDJ=P1^1;//電機左向前
 8 sbit  ZHDJ=P1^2;//電機左後
 9 sbit  YHDJ=P1^3;//電機右後
10 sbit  YQDJ=P1^4;//電機右前
11 /*********************傳感器********************/
12 sbit  YB1 = P3^1;//右外傳感器
13 sbit  YB2 = P3^2;//右内
14 sbit  ZB3 = P3^3;//左内
15 sbit  ZB4 = P3^4;//左外
16 /********************标志位*******************/
17 sbit bz= P1^0;
18 /**********************************************/
19 #define ZQDJ_G ZQDJ=1//左前電機高電平
20 #define ZHDJ_G ZHDJ=1//左後高
21 #define YHDJ_G YHDJ=1//右後高
22 #define YQDJ_G YQDJ=1 //右前高
23 #define ZQDJ_D ZQDJ=0//左前低
24 #define ZHDJ_D ZHDJ=0//左後低
25 #define YHDJ_D YHDJ=0//右後低
26 #define YQDJ_D YQDJ=0 //右前低
27 /**********************************************/
28 bit flag=0;         //避障标志位
29 /***************************************************************
30 31 ****************************************************************/
           

其他子函數代碼

/***************************************************************
50usÑÓʱ
****************************************************************/
void delay_50us(uint t)
{
    uchar j;
    for(;t>0;t--)
    for(j=19;j>0;j--);
}
/***************************************************************
50msÑÓʱ
****************************************************************/
void delay_50ms(uint t)
{
    uint j;
    for(;t>0;t--)
    for(j=6245;j>0;j--);
}
/***************************************************************
Ç°½ø
****************************************************************/
void forward(void)
{
   ZHDJ_G;
     YHDJ_G;
     ZQDJ_D;
     YQDJ_D;
}
/***************************************************************
ºóÍË
****************************************************************/
void back(void)
{
   ZHDJ_D;
     YHDJ_D;
     ZQDJ_G;
     YQDJ_G;
}
/***************************************************************
Í£Ö¹
****************************************************************/
void stop(void)
{
   ZHDJ_G;
     YHDJ_G;
     ZQDJ_G;
     YQDJ_G;
}

/***************************************************************
×óת˫ÂÖ
****************************************************************/
void turn_left(void)
{
   ZHDJ_D;
     ZQDJ_G;
     YQDJ_D;
     YHDJ_G;
}
/***************************************************************
ÓÒת˫ÂÖ
****************************************************************/
void turn_right(void)
{
   ZHDJ_G;
     ZQDJ_D;
     YQDJ_G;
     YHDJ_D;
}

子函數
           

循迹部分

1 /**************************************************************
 2 循迹部分
 3 ****************************************************************/
 4 void track(void)
 5 {
 6    if(ZB4==0&&ZB3==0&&YB2==1&&YB1==0)    // 右邊檢測到黑線 
      turn_right();
 9 
10          }
11 }
           

避障部分

/***************************************************************
避障部分
****************************************************************/
void obstacle(void)
{  back();
   delay_50us(4000);
   turn_left();
   delay_50us(10000);
   forward();
   delay_50us(23000);
      turn_right();
   delay_50us(800);
      forward();
   delay_50us(3000);
   turn_right();
   delay_50us(15000);
     forward();
if(ZB4==0&&ZB3==0&&YB2==0&&YB1==1)  

    {
    turn_left();
    delay_50us(70000);  }
    track();
}
           

主函數代碼

/***************************************************************
主函數
****************************************************************/
void main(void)
{  
   delay_50us(25000);                      //等待系統啟動
   while(1)
   {
     if(flag==0)                       //...................
     {     flag=1;
               obstacle();              //bizhang
         }
//.................        
} 
}
           

代碼結束。

這裡大家大概思路應該懂了吧,先試着來弄自己第一輛智能車吧。

繼續閱讀