標題: 小白做的尋跡小車教程與單片機源程序,適合小白 [打印本頁]

作者: 996054544    時間: 2018-7-4 15:29
標題: 小白做的尋跡小車教程與單片機源程序,適合小白
第一次發(fā)帖,有什么不好的會改進
適合小白的教程,只是簡單的尋跡功能,
文件包含程序代碼,原理圖

制作出來的實物圖:


簡單尋跡小車教程
如果有條件的話,可以買模板
原理圖,因為某某原因,只能手畫了,有點丑,慢慢看

P3.0連接1號紅外線端口
P3.1連接2號紅外線端口
P3.2連接3號紅外線端口
P3.3連接4號紅外線端口
(注;我這里的1234號紅外線端口可能和板子是的印刷字不一樣)
馬達1是由P1.0和P1.4控制
馬達2是由P1.1和P1.5控制
馬達3是由P1.2和P1.6控制
馬達4是由P1.3和P1.7控制
(解釋;在L298N模板上,IN1輸入高電平,那么OUT1輸出高電平,如果IN1是低電平,那么OUT1也是低電平)同理
IN1----------OUT1
IN2----------OUT2
IN3----------OUT3
IN4----------OUT4
(L298N模板上有印刷IN,OUT的字樣)
如果要馬達轉(zhuǎn)動,對應(yīng)的端口輸入一個高電平,一個低電平就行了,



單片機源程序如下:
  1. //尋跡小車
  2. #include <reg51.h>
  3. #define hei 1                                                //紅外線如果探到黑色的地方,會輸出高電平
  4. #define bai 0                                                //紅外線如果探到白色的地方,會輸出低電平

  5. sbit s1=P3^0;                                                //p3   紅外線對應(yīng)端口,讀取數(shù)據(jù)
  6. sbit s2=P3^1;
  7. sbit s3=P3^2;
  8. sbit s4=P3^3;

  9. //P1口信號輸出
  10. //P1.0-P1.4控制1電機
  11. //P1.1-P1.5控制2電機
  12. //P1.2-P1.6控制3電機
  13. //P1.3-P1.7控制4電機



  14. void delay(unsigned int i)                //延時函數(shù)
  15. {
  16.         unsigned int k;
  17.         for (k=0;k<i;k++);
  18. }




  19. void main()
  20. {
  21.         while (1)
  22.                 {
  23. /**********************直走   直走  直走  直走  直走  直走  直走  直走  直走 *************************************/
  24.                         if (s1==bai && s4==bai && s2==hei && s3==hei)                //第1種,直線走,14為白,23為黑
  25.                                 {
  26.                                         delay(500);
  27.                                 if (s1==bai && s4==bai && s2==hei && s3==hei)
  28.                                 {                                                                                                                //p1        1 1 1 1                        分別對應(yīng)1234號馬達
  29.                                         P1=0x0f;                                                                        //                0 0 0 0                        上面是高電平,下面是低電平,四個馬達都會向前開
  30.                                         delay(500);                                                                //延時降速,如果L298N是接12V的電源,那么馬達的速度太快了,需要降速
  31.                                         P1=0x00;                                                                        //這里降速的原理是讓馬達轉(zhuǎn)500毫秒,停一下,轉(zhuǎn)500毫秒,停一下,轉(zhuǎn)500毫秒,停一下,從而達到降速的效果
  32.                                 }                                                                                               
  33.                                 else                                                                               
  34.                                 P1=0x00;
  35.                                
  36.                 }                       
  37.        

  38. /******************                左                左                左                左                左                左                左                左                左********************************************/               
  39.                        
  40.                          else if (s1==hei)                                                        //第1種,左轉(zhuǎn),1為黑
  41.                         {
  42.                                 delay(500);
  43.                                 if (s1==hei )
  44.                                 {                                                                                                //p1  0 1 0 1                                馬達2 4向前開,馬達1 3向后開
  45.                                         P1=0x5a;                                                        //    1 0 1 0
  46.                                         delay(1000);
  47.                                         P1=0x00;
  48.                                 }
  49.                                
  50.                                 else
  51.                                         P1=0x00;
  52.                         }               
  53.                        
  54.                        
  55.                        

  56.                          else if (s1==hei && s2==hei)                                                        //第2種,左轉(zhuǎn),1 2為黑
  57.                         {
  58.                                 delay(500);
  59.                                 if (s1==hei )
  60.                                 {                                                                                                //p1  0 1 0 1                        馬達24向前開,馬達13向后開
  61.                                         P1=0x5a;                                                        //    1 0 1 0
  62.                                         delay(1000);
  63.                                         P1=0x00;
  64.                                 }
  65.                                
  66.                                 else
  67.                                         P1=0x00;
  68.                         }                                       
  69.                        

  70.                        
  71.                         else if (s1==bai && s3==bai && s4==bai && s2==hei)                                                        //第3種,微左轉(zhuǎn),2黑,134白
  72.                         {                                                                                                                                                                                                        //本來小車是直線行走的,但是稍微偏離了一點,這時需要微調(diào)轉(zhuǎn)彎
  73.                                 delay(600);
  74.                                 if (s2==hei && s3==bai)
  75.                                         {                                                                        //P1        0 1 0 0                                        馬達2向前開,馬達3向后開,這樣做轉(zhuǎn)彎的幅度比較小,達到微調(diào)的效果
  76.                                         P1=0x5a;                                        //                0 0 1 0
  77.                                         delay(600);
  78.                                         P1=0x00;
  79.                                         }
  80.                                
  81.                                 else
  82.                                         P1=0x00;
  83.                         }
  84.                                
  85.                                
  86. /*********************右        右        右        右        右        右        右        右        右        右********************************************************/                       
  87.                                
  88.                         else if (s4==hei && s1==bai && s2==bai && s3==bai)                                                        //第3種,右轉(zhuǎn),4黑,123白
  89.                         {
  90.                                 delay(500);
  91.                                 if (s4==hei)
  92.                                 {                                                                                //P1 1 0 1 0                        馬達13向前開,馬達24向后開
  93.                                         P1=0xa5;                                        //         0 1 0 1
  94.                                         delay(1000);
  95.                                         P1=0x00;
  96.                                 }
  97.                                 else
  98.                                         P1=0x0;
  99.                         }       
  100.                        
  101.                        
  102.                                                 else if (s4==hei && s1==bai && s2==bai && s3==hei)                                                        //第3種,右轉(zhuǎn),4黑,123白
  103.                         {
  104.                                 delay(500);
  105.                                 if (s4==hei)
  106.                                 {                                                                                //P1 1 0 1 0
  107.                                         P1=0xa5;                                        //         0 1 0 1
  108.                                         delay(1000);
  109.                                         P1=0x00;
  110.                                 }
  111.                                 else
  112.                                         P1=0x0;
  113.                         }       
  114.                        
  115.                        
  116.                         else if (s1==bai && s2==bai && s4==bai && s3==hei)                                                        //第3種,微右轉(zhuǎn),3黑,124白
  117.                         {
  118.                                 delay(600);
  119.                                 if (s3==hei && s2==bai)
  120.                                 {                                                                //P1 1 0 0 0
  121.                                         P1=0xa5;                        //         0 0 0 1
  122.                                         delay(600);
  123.                                         P1=0x00;
  124.                                 }
  125.                                 else
  126.                                         P1=0x0;
  127.                         }       
  128.                        
  129. /*****************停車         停車         停車         停車         停車         停車         停車         *********************************/               
  130.                        
  131.                        
  132.                         else if (s4==hei && s1==hei && s2==hei &&s3==hei)                                                        //第4種,停車,1234黑
  133.                         {
  134.                                 delay(1200);                                                                //P1 0 0 0 0
  135.                                 P1=0x0;                                                                                        //         0 0 0 0
  136.                         }

  137.                                
  138.                        
  139.                         else if (s4==bai && s1==bai && s2==bai &&s3==bai)                                                        //第4種,停車,1234黑
  140.                         {
  141.                                 delay(1200);
  142.                                 if (s4==bai && s1==bai && s2==bai &&s3==bai)
  143.                                 {                                                                                //P1        0 0 0 0
  144.                                         P1=0x0;                                                //                0 0 0 0
  145.                                 }

  146.                         }       

  147.                
  148.         }

  149.        
  150. }
  151. //如果小車的速度不是你想要的效果,只要更改delay(****)里面的數(shù)值就行

復制代碼



所有資料51hei提供下載:

簡單尋跡小車教程.rar (14.51 MB, 下載次數(shù): 136)



作者: 狼狽的555321    時間: 2019-3-19 21:05
請問這個單片機只是用最小系統(tǒng)的么?最小系統(tǒng)就夠用了是吧?
作者: 狼狽的555321    時間: 2019-3-19 21:06
請問這個單片機最小系統(tǒng)就夠用了是吧?
作者: 加內(nèi)特tom    時間: 2019-6-1 17:41
這個軌道是什么樣的呀。
作者: 280570255    時間: 2019-6-26 17:24
我發(fā)現(xiàn)這里的帖子很不活躍,2018年的帖子,2019年有人問,
作者: zctwss321    時間: 2019-6-28 10:02
還能多點彩圖嗎?
作者: rujia    時間: 2019-9-21 13:14
加內(nèi)特tom 發(fā)表于 2019-6-1 17:41
這個軌道是什么樣的呀。

應(yīng)該是中間是一條黑線的
作者: wuxiandian    時間: 2019-10-16 00:08
電源放哪了?
作者: time'power    時間: 2020-2-24 11:15
很有用,謝謝老鐵




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1