找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8672|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

循跡小車制作資料-51單片機

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:425175 發(fā)表于 2019-5-29 22:13 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
分享一下哈。
本尋跡小車主要由2部分組成:1.黑線的檢測。2電機控制

1、黑線的檢測方法:
    黑線的檢測主要利用的是不同顏色對光的反射率不同來實現(xiàn)檢測。同種物體,黑色對光的反射最差,這樣利用光敏電阻檢測反射
回來的光線強度就可以判斷反射區(qū)域的顏色是否為黑色。這里用的光敏電阻型號是5516,有光的時候光敏電阻的阻值為5-10K,
沒有檢測到反射光的時候,電阻的阻值為0.8M左右。黑線的檢測分左右2組,這里以其中一組來講解,另外一組的原理也是這樣的。
    電路中的R4為光敏電阻,LM393比較器的6腳的電壓為[R4/(R4+R2)]*VCC,VCC為電源電壓,這里是4.5V。檢測到有反射光的時候,也就是白色區(qū)域的時候,比較器6腳的電壓為:1.5V-2.25V。沒有反射光的時候,也就是黑色區(qū)域的時候,
比較器6腳的電壓為:[800K/(800K+10K)]*4.5V,約為4.4V。通過調(diào)節(jié)R1電位器,使得比較器5腳的電壓再2.3-3.5V范圍左右,這樣在有反射光和沒有反射光的時候,LM393比較器的7腳就可以輸出不同的電平。有反射光的時候,6腳的電壓小于5腳,芯片7腳輸出高電平。無反射光的時候,6腳的電壓大于5腳,7腳輸出低電平,單片機通過檢查7腳的電壓,就可以判斷所處區(qū)域為白色還是黑色。
2、電機控制
    電機有2個,分左右2側(cè)。單片機通過一個PNP三極管來控制電機。當(dāng)單片機輸出的電平為低電平時,電機轉(zhuǎn)動。
    如果單片機輸出的電平為高電平,電機停止轉(zhuǎn)動。如果2個電機同時往前進的方向轉(zhuǎn)動,小車就前進。如果左邊的電機停止,右邊的電機前進,這樣小車就左轉(zhuǎn);
    如果左邊的電機前進,右邊的電機停止,這樣小車就右轉(zhuǎn)。利用這個原理就可以控制小車的左右轉(zhuǎn)和前進。


    尋跡原理:小車前進的時候,如果檢測到左邊碰到黑線了,左邊的電機就稍微停止轉(zhuǎn)動一下,這樣小車就會左拐。如果檢測到右邊碰到黑線了,右邊的電機就停止轉(zhuǎn)動一下,讓小車右拐。停止運行的時候和車速有關(guān)系,這樣需要多次調(diào)試,來取得一個合適的延時。









元件名稱    數(shù)量
PCB板    1
100歐電阻    5
4.7K電阻    3
10K電阻    7
1N4007    5
100UF25V    3
10UF25V    1
104瓷片電容    6
8550三極管    3
40P IC座    1
8P IC座    1
5MM LED 紅發(fā)紅    3
8*8自鎖開關(guān)    1
103藍白電位器    2
7號3節(jié)電位器(貼好雙面膠)    1
電機(貼好雙面膠)    2
車輪+橡皮圈    2
M2.5*8螺絲    2
M5*30螺絲+普通螺母+帶帽螺母    1
5MM LED 白發(fā)紅    3
5516光敏電阻    2
LM393芯片    1
AT89S52(燒寫好程序)    1

單片機源程序如下:
  1. /*功能:尋跡小車
  2. 使用芯片:AT89S52 或者 STC89C52 或AT89S51 STC89C51
  3. 晶振:12MHZ
  4. 編譯環(huán)境:Keil
  5. 作者:zhengzhongxign39*/

  6. #include <reg52.h>            // 引用標準庫的頭文件
  7. #include <intrins.h>

  8. #define uchar unsigned char
  9. #define uint  unsigned int
  10. //=================電機驅(qū)動=====================
  11. sbit  dianji_r = P3^0;  //右邊電機控制口,低電平轉(zhuǎn)?
  12. sbit  dianji_l = P3^7;  //左邊電機控制口,低電平轉(zhuǎn)
  13. //=============循跡感應(yīng)接口======================
  14. sbit  xjmk_r   = P3^2;  // 右邊尋跡模塊檢測口 INT0
  15. sbit  xjmk_l   = P3^3;  // 左邊尋跡模塊檢測口 INT1


  16. void  check_righet();   //右邊檢測到黑線時候測試程序
  17. void  check_left();     //左邊檢測到黑線時候測試程序

  18. void delay_50us(uint t);
  19. void delayms(uint Ms);


  20. uchar r_count;          //右邊傳感器檢測到的次數(shù)計數(shù)單元
  21. uchar l_count;
  22. uint time;
  23. //***********************主程序******************************
  24. main()   
  25. {   
  26.    time=50;

  27.    dianji_r=0;//上電時右側(cè)電機運行
  28.    dianji_l=0;//上電時左側(cè)電機運行

  29.    EA=1;
  30.    EX1=1;
  31.    EX0=1;
  32.    IT1=0;
  33.    IT0=0;
  34.    xjmk_r=1;//置IO為1,準備讀取數(shù)據(jù)
  35.    xjmk_l=1;
  36.    _nop_();
  37.    r_count=0;
  38.    l_count=0;
  39.     while(1)
  40.     {
  41.           _nop_();
  42.       //  check_righet();//調(diào)用右邊尋跡檢測傳感器
  43.       //   check_left();//
  44.        if(r_count>=1)
  45.         {
  46.               delayms(time);
  47.               dianji_r=0;
  48.               dianji_l=0;
  49.               r_count=0;
  50.             _nop_();   
  51.         }
  52.         if(l_count>=1)
  53.         {
  54.             
  55.               delayms(time);
  56.               dianji_r=0;
  57.               dianji_l=0;
  58.               l_count=0;
  59.               _nop_();
  60.          }
  61.     }
  62.    
  63. }
  64. void init0int() interrupt 2
  65. {
  66.     l_count=5;
  67.     dianji_l=1;
  68.     dianji_r=0;
  69.     if(r_count>0)
  70.     {   EX0=0;
  71.         delayms(20);
  72.         if(time>=20)
  73.                         time-=19;
  74.         EX0=0;
  75.     }
  76.     return;
  77. }

  78. void init1int() interrupt 0
  79. {
  80.     r_count=5;
  81.     dianji_r=1;
  82.     dianji_l=0;
  83.     if(l_count>0)
  84.     {
  85.                 EX1=0;
  86.                 delayms(20);
  87.                 if(time>=20)
  88.                         time-=19;
  89.                 EX1=1;
  90.         }
  91.     return;
  92. }

  93. //*******************************************************************************
  94. //函數(shù)名稱:
  95. //功能:左邊檢測到黑線時候測試程序
  96. void  check_left()
  97. {
  98.     if(xjmk_l==0)//檢測右邊的傳感器是否感應(yīng)到黑線
  99.         {
  100.                 delay_50us(1);//延時,去除機械振動
  101.                _nop_();
  102.                if(xjmk_l==0)//再次檢測
  103.                {
  104.                  delay_50us(1);//延時,去除機械振動
  105.                  if(xjmk_l==0)
  106.                  {  
  107.                     l_count++;
  108.                     xjmk_l=1;
  109.                  }
  110.               }
  111.          }
  112. }
  113. //*******************************************************************************
  114. //函數(shù)名稱:
  115. //功能:右邊檢測到黑線時候測試程序
  116. void   check_righet()
  117. {
  118.     if(xjmk_r==0)//檢測右邊的傳感器是否感應(yīng)到黑線
  119.     {
  120.           delay_50us(1);//延時,去除機械振動
  121.           if(xjmk_r==0)//再次檢測
  122.           {
  123.              delay_50us(1);//延時,去除機械振動
  124.              if(xjmk_r==0)
  125.              {  
  126.                 r_count++;
  127.                 xjmk_r=1;

  128.              }
  129.           }
  130.      }
  131. }

  132. //*******************************************************************************
  133. //函數(shù)名稱:void delay_50US(unsigned int t)
  134. //功能: 延時50*t(us)
  135. void delay_50us(uint t)
  136. {
  137.   uchar j;
  138.   for(;t>0;t--)
  139.   {

  140.     for(j=19;j>0;j--);
  141.   }
  142. }

  143. /*====================================================================
  144.   設(shè)定延時時間:x*1ms
  145. ====================================================================*/
  146. void delayms(uint Ms)
  147. {
  148.   uint i,TempCyc;
  149.   for(i=0;i<Ms;i++)
  150.   {
  151.     TempCyc =70;
  152.     while(TempCyc--);
  153.   }
  154. }
復(fù)制代碼

Keil代碼與制作說明元件清單3文件下載:
51單片機循跡小車資料.zip (863.5 KB, 下載次數(shù): 107)

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏6 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:648017 發(fā)表于 2019-11-25 16:35 | 只看該作者
很棒,很詳細
回復(fù)

使用道具 舉報

板凳
ID:1075026 發(fā)表于 2023-5-2 22:30 | 只看該作者
能繼續(xù)分享下原理圖和PCB源文件嗎
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表