久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6243|回復: 2
打印 上一主題 下一主題
收起左側

電賽WIFI智能小車實驗報告下載(控制類題)

[復制鏈接]
跳轉到指定樓層
樓主
自己寫的關于WiFi智能小車的實驗報告,寫的不好,敬請改正

2018年全國大學生電子設計競賽
WIFI智能小車(控制類題)

摘要

隨著科學技術的發展,機器人的設計越來越精細,功能越來越復雜,智能小車作為其的一個分支,也在不斷發展。在近幾年的電子設計大賽中,關于小車的智能化功能的實現也多種多樣,因此本次我們也打算設計一智能小車,通過WiFi連接,使用PC端或手機軟件控制,使其能夠實現前進后退,攝像并將圖像傳回控制端,并實現循跡和避障等功能。
本次小車采用STC89C51單片機作為控制芯片,步進電機作為行進部件,WIFI模塊作為接受部件,紅外對管為識別器件,要求能在遙控的情況下,能在方圓20米的范圍內自由活動,且能夠識別以白底為道路色,寬度10mm左右的黑色膠帶制作的不規則的封閉曲線為引導軌跡并能沿該軌跡行進的智能小車。并能實現避障功能

A
bstract
With the development of science and technology, the design of robots is becoming more and more sophisticated and functions are becoming more and more complex. As a branch of intelligent vehicles, intelligent cars are also developing. In the electronic design competition in recent years, the realization of the intelligent function of the car is also varied, so this time we also intend to design a smart car, through the WIFI connection, using the PC end or mobile software control, so that it can achieve forward back, camera and image back to the control end, and achieve tracking and obstacle avoidance and so on Function.
This small car uses STC89C51 as the control chip, the stepping motor is a moving part, the WIFI module is used as the acceptance component, the infrared pair is a recognition device, and it is required to operate freely within the range of 20 meters in the square circle under the condition of remote control, can identify the black tape with the white bottom as the road color and the width of about 10mm. The production of irregular closed curves is a smart car that guides the trajectory and travels along the trajectory. And the obstacle avoidance function can be realized


目錄

一、系統方案
1.單片機模塊的選擇
2.電機控制模塊的選擇
3.無線通信模塊的論證與選擇
4.驅動模塊的選擇與論證
5.其他模塊的選擇與論證
二、系統理論分析與計算
1.系統總體設計
2.超聲波模塊的距離計算方法
三、電路與程序設計
1.電路的設計
2. 程序的設計
(1)程序功能描述與設計思路
(2) 程序流程圖
四、測試方案與測試結果
1、測試方案
2 測試條件與儀器
3 測試結果及分析
五、結論與心得
六、參考文獻
附錄(程序)

WIFI智能小車

專科組】

一、系統方案
本次智能小車主要采用無線通信模塊、驅動模塊、單片機模塊、傳感器模塊、超聲波模塊、電源模塊組成。下面分別論證這幾個模塊的選擇。
1.單片機模塊的選擇
方案一: 采用STC89C51為主控芯片的最小系統板,即由單片機來實現對WIFI模塊接受的信號進行處理并發出。STC89C51是一種低功耗、高性能CMOS 8位微控制器,具有4K 在系統可編程Flash 存儲器。使用Atmel 公司高密度非易失性存儲器技術制造,與工業80C51 產品指令和引腳完全兼容。片上Flash允許程序存儲器在系統可編程,亦適于常規編程器。在單芯片上,擁有靈巧的8 位CPU 和在系統可編程Flash,使得STC89C51在眾多嵌入式控制應用系統中得到廣泛應用。
優點:操作方便,配置簡單,應用普遍。
缺點:I/O口較少,設計外部電路較為復雜。
方案二:STM32系列單片機
STM32系列為高性能、低成本、低功耗的嵌入式應用控制系統。
優點:處理速度快,片內程序存儲空間大,功耗低,資源豐富。
缺點:程序編寫要求較高,價格高。
為了能夠很好的完成題目的基本要求以及發揮部分的要求,考慮到本次小車結構簡單,不需要較為復雜的運算。所以采用方案一
2.電機控制模塊的選擇
方案一:采用步進電機,其轉過的角度可以精確定位,可實現小車行進過程的精確定位。但步進電機的輸出力矩低,歲轉速的升高而降低,且轉速越快,下降的越快。
方案二:采用直流電機,其轉動力矩大,體積小,重量輕,裝配簡單,操作方便。速度的調節可以改變電壓也可以調節PWM。
基于以上方案,選擇方案二采用直流電機作為驅動電機。

3.無線通訊模塊的論證與選擇
方案一:藍牙模塊
采用普遍的HC05藍牙模塊,是一種新興無線通訊技術是一個標準的無線通訊協議,基于低成本設備的收發器芯片,近距離傳輸、功耗低。屬于WPAN無線個域網,即點對點、多點對多點、主要是用來連接一些外接設備的,或者是在近距離進行數據傳輸。在2016年5月份推出的最新的版本Bluetooth5.0傳輸距離可以達到150米。
方案二:WIFI模塊
Wi-Fi模塊又名串口Wi-Fi模塊,屬于物聯網傳輸層,功能是將串口或TTL電平轉為符合Wi-Fi無線網絡通信標準的嵌入式模塊,內置無線網絡協議IEEE802.11b.g.n協議以及TCP/IP協議。傳統的硬件設備嵌入Wi-Fi模塊可以直接利用Wi-Fi聯入互聯網,是實現無線智能家居、M2M等物聯網應用的重要組成部分。其傳輸速度快。信號穿墻能力強。
綜合以上兩種方案,考慮到傳輸距離的問題,采取方案二的WIFI模塊。
4.驅動模塊的選擇與論證
驅動模塊是本次智能小車的關鍵所在,直流電機的功率較大,所以必須選擇合適的驅動模塊
方案一:采用L298N模塊, L298N是一種特殊的驅動集成電路,屬于H橋集成電路, 其輸出電流增加, 功率增強。其輸出電流為2A,最高電流為4A, 最高工作電壓為50V。它可以驅動感應負載, 如大功率直流電機、步進電機、電磁閥等, 特別是其輸入端子可以直接連接到單片機, 因此單片機控制非常方便。在驅動直流電機時,它可以直接控制兩個電機, 實現電機的正反向, 使我們只能改變輸入端的邏輯電平。該系統設計所用的電機是大功率的直流電機,故在考慮范圍之內。
方案二: 中小電流電機專用驅動器, 使用芯片1298屬于H橋集成電流,輸出電流為 2000mA, 最大電流為 4A, 最大工作電壓為 36V, 可驅動感應負載,比如: 中繼電器、直流電機、步進電機和光功率晶體管, 特別是輸入可以直接與單片機連接, 可以很容易地由單片機控制。但此模塊只能驅動小型直流電機, 不能驅動大功率型的直流電機。
經過仔細反復的論證與選擇,我們發現方案一比較合適,所以我們選擇L298N模塊作為驅動模塊。
5.其他模塊的選擇與論證
傳感器模塊使用光電傳感器來采集路面信息。使用紅外光電管,其結構 簡明,實現方便,成本低廉,沒有復雜的圖像處理工作,因此反應靈敏,響應時間少。
電源模塊:采用5V直流電源作為為電機及WIFI模塊供電的電源。
超聲波模塊:SSD-ME007TX串口超聲波測距模塊是高性能,高性價比的非接觸式距離感測模塊,測量范圍在0.02~4.00m,測量精度1cm,測量時與被測物體無直接接觸,能夠清晰穩定地顯示測量結果。
二、系統理論分析與計算
1.系統總體設計
智能小車系統總體框圖如圖1.1,系統工作流程為:以STC89C51單片機作為控制核心,通過手機上的APP對小車發出控制命令,小車上的WIFI芯片接收到APP發出的指令后通過串口傳輸給STC89C51單片機,開發板通過對指令的一系列處理控制小車上的相關原件:電機,來指導小車完成指導小車的動作。

圖1.1 系統總體框圖
2.超聲波模塊的距離計算方法
圖1.2示意了超聲波測距的原理,即超聲波發生器T在某一時刻發出一個超聲波信號,當該信號遇到被測物體后反射回來,被超聲波接收器R所接收到。計算從發出超聲波信號到接收到返回信號所用的時間,就可算出超聲波發生器與反射物體的距離。
圖1.2 超聲波測距原理圖
計算公式為:   d = s/2 = (Vt)/2    (1)
式中:d為被測物與測距儀的距離;s為聲波來回的路程;v為聲速;t為聲波往返所用的時間。
在測量中需要考慮兩個參數:聲速和發射脈沖個數。聲速的精確程度決定了測量精度。聲速與溫度有關,測距儀多用于常溫測量距離較短,如溫度變化不大,則可認為聲速是基本不變的,約為344m/s。如測距精度要求很高,則應通過溫度補償的方法加以校正。為增強系統可靠性,應在軟硬件上采用抗干擾措施。發射超聲波脈沖個數決定測距儀測量盲區,影響測量精度,同時與信號發射能量有關。發射脈沖個數少,可提高測量精度,但減少了發射能量對接收回波不利;脈沖個數過多會增加測量盲區。在設計中經過比較,選擇發射5個40KHZ的脈沖方波作為測量信號。
三、電路與程序設計1.電路的設計1.1 控制系統原理圖
圖1.1.控制系統原理圖
1.2L298N原理圖
圖1.2 L298N原理圖
1.3超聲波模塊原理圖
圖1.3超聲波原理圖
2. 程序的設計1程序功能描述與設計思路

1、程序功能描述

通過手機或電腦控制軟件控制小車前進,后退,左轉,右轉,尋跡,避障等功能。

2、程序設計思路

根據題目要求,程序設計要做到包括小車的前進,后退,左轉,右轉。即通過程序控制直流電機的轉動和方向。尋跡;通過光電傳感器檢測到地面信號后,程序控制車輪的左轉,右轉,停止等。避障;通過超聲波模塊檢測到前方15cm處有障礙物時,傳回至單片機,單片機控制舵機左右轉動,計算出最佳路線使小車避開障礙。

2)程序流程圖

1.主程序流程圖
圖1.4 主程序流程圖
2.WiFi模塊流程圖
圖1.5  WIFI模塊流程圖
3. 超聲波子程序流程圖

圖1.6超聲波子程序流程圖
4.尋跡模塊流程圖
圖1.7 尋跡模塊流程圖
四、測試方案與測試結果1、測試方案
1.1硬件測試
焊接完成后,首先進行的調試是用數字萬用表測量各個電路是否焊接正常,是否有虛焊漏焊等現象的出現,以及各個電容是否是正常的未被擊穿狀態、電阻的阻值是否與設計的原理圖上的一致。接通電源,用數字萬用表測量當有+5V的各引腳是否有+5V的電壓,測量電路中是否出現了不該有的短路現象。接入光電傳感器模塊,使各個光電檢測器的光電管靠近白紙,觀察對應的發光二極管是否發光,不發光表示正常。 然后再使各個光電管靠近黑線,觀察對應的發光二級管是否發光,發光表示正常。
通過手機或PC端軟件連接WIFI,控制小車相應功能是否實現。
1.2硬件軟件聯調
通過編寫簡單的關于電機轉動方向程序,觀察目的轉動方向與實際轉動方向是否一致,軟件都調試無誤后,進入系統最后的軟件編寫調試。
2 測試條件與儀器
測試條件:帶有尋跡條件的場地(在地板上貼有黑膠帶、適當障礙物)
測試儀器:數字萬用表、手機或PC端軟件
3 測試結果及分析
3.1測試結果(數據)
小車速度對尋跡的影響
速度
5cm/s
8cm/s
10cm/s
15cm/s
20cm/s
25cm/s
尋跡效果
較差
較好
最佳
較好
不能
不能
WIFI信號強弱對通訊的影響
距離
1m
5m
10m
15m
20m
50m
通訊狀態
不能
不能


3.2測試分析與結論
根據上述測試數據,此系統所有硬件電路都正常工作,系統工作穩定,可實現下述功能:
1.能夠通過WIFI控制智能小車的前進后退等功能。
2.能夠傳輸視頻信號到設備上。
3.能夠一鍵尋跡。
4.能夠通過超聲波模塊實現避障功能。
五、結論與心得
經過自己不斷的搜索努力以及老師的耐心指導和熱情幫助,本設計已經基本完成。在這個過程中老師以及曾做過此類設計的同學給予了我很大的幫助,給我提供了大量的硬件和軟件資料,也給我的設計提出了寶貴的意見和建議。在此,對大家表示衷心的感謝!這次設計不僅是對我的專業知識的一次集中地檢驗,同時也為我們提供了一個進入職場前的實戰機會;通過這次在老師指導下做設計的機會,我對于技術實踐方面有了更深刻的認識,也進一步夯實了所學的專業知識。雖然在設計中對于知識的運用和銜接還不夠熟練。但是我將在以后的工作和學習中繼續努力、不斷完善。這設計是對過去所學知識的系統提高和擴充的過程,為今后的發展打下了良好的基礎。由于自身水平有限,設計中一定存在很多不足之處,敬請老師批評指正
六、參考文獻
[1]   單片機C語言教程      郭天祥          電子工業出版社
[2]  譚浩強.C語言程序設計[M].北京:清華大學出版社,2012.
[3] 黃智偉 全國大學生電子設計競賽訓練教程. [M].修訂版.北京:電子工業出版社
附錄(程序)
  1. #include <STC12C5A.h>               //包含STC12C5A系列單片機的頭文件

  2. /*晶振為22.1184MHz 以下為可選波特率*/
  3. #define BPS_9600       0x70
  4. #define BPS_19200                 0xB8
  5. #define BPS_38400                 0xDC
  6. #define BPS_57600                 0xE8
  7. #define BPS_11520      0xF4


  8. #define Left_moto_go1      {P10=1,P12=1;}    //左邊兩個電機向前走
  9. #define Left_moto_back1    {P10=0,P12=0;}               //左邊兩個電機向后轉                  
  10. #define Right_moto_go1     {P14=1,P16=1;}              //右邊兩個電機向前走
  11. #define Right_moto_back1   {P14=0,P16=0;}              //右邊兩個電機向前走


  12. #define Left_moto_go      {P10=1,P11=0,P12=1,P13=0;}    //左邊兩個電機向前走
  13. #define Left_moto_back    {P10=0,P11=1,P12=0,P13=1;}               //左邊兩個電機向后轉
  14. #define Left_moto_Stop    {P10=0,P11=0,P12=0,P13=0;}    //左邊兩個電機停轉                    
  15. #define Right_moto_go     {P14=1,P15=0,P16=1,P17=0;}              //右邊兩個電機向前走
  16. #define Right_moto_back   {P14=0,P15=1,P16=0,P17=1;}              //右邊兩個電機向前走
  17. #define Right_moto_Stop   {P14=0,P15=0,P16=0,P17=0;}              //右邊兩個電機停轉   

  18. #define Left_2_led         P24              //            
  19. #define Right_1_led        P25              //

  20. #define Left_moto_pwm                 P11              //PWM信號端
  21. #define Left_moto_pwm1                 P13            
  22. #define Right_moto_pwm                 P15
  23. #define Right_moto_pwm1                 P17            


  24. #define RELOAD_COUNT   BPS_9600              //波特率選擇

  25.             
  26. sbit TEST_WEEL =P0^0;              //測試電機
  27. sbit TEST_SEVR =P0^1;   //測試舵機
  28. sbit LED5     = P0^2;   //接收指示燈                                                                                   
  29.                                                                                                                

  30. bit rec_flag=0;
  31. unsigned char buffer[5];
  32. unsigned char se_timer[5]={0x0A,0x5a,0,0,0};
  33. unsigned int  time=0;

  34. unsigned char pwm_val_left  =0;//變量定義
  35. unsigned char push_val_left =0;// 左電機占空比N/10
  36. unsigned char pwm_val_right =0;
  37. unsigned char push_val_right=0;// 右電機占空比N/10
  38. bit Right_moto_stop=1;
  39. bit Left_moto_stop =1;

  40. void Delaynms(unsigned int di) //延時
  41. {
  42.               unsigned int da,db;
  43.               for(da=0;da<di;da++)
  44.                                for(db=0;db<1000;db++);
  45. }


  46. //前速前進
  47.      void  run(void)
  48. {

  49.               Left_moto_go ;   //左電機往前走
  50.               Right_moto_go ;  //右電機往前走
  51. }

  52. //前速后退
  53.      void  backrun(void)
  54. {

  55.               Left_moto_back ;   //左電機往前走
  56.               Right_moto_back ;  //右電機往前走
  57. }

  58. //左轉
  59.      void  leftrun(void)
  60. {

  61.               Left_moto_back ;   //左電機往前走
  62.               Right_moto_go ;  //右電機往前走
  63. }

  64. //右轉
  65.      void  rightrun(void)
  66. {

  67.               Left_moto_go ;   //左電機往前走
  68.               Right_moto_back ;  //右電機往前走
  69. }
  70. //STOP
  71.      void  stoprun(void)
  72. {

  73.               Left_moto_Stop ;   //左電機往前走
  74.               Right_moto_Stop ;  //右電機往前走
  75. }


  76. void UART_init(void)
  77. {
  78. //              PCON |= 0x80;                            //使能波特率倍速位SMOD
  79. //              SCON =  0x50;                            //8位數據,可變波特率
  80. //              BRT = RELOAD_COUNT;              //設定獨立波特率發生器重裝值
  81. //              AUXR |= 0x04;                            //獨立波特率發生器時鐘為Fosc,即1T
  82. //              AUXR |= 0x01;                            //串口1選擇獨立波特率發生器為波特率發生器
  83. //              AUXR |= 0x10;                            //啟動獨立波特率發生器

  84.               PCON |= 0x80;                            //使能波特率倍速位SMOD
  85.               SCON = 0x50;                            //8位數據,可變波特率
  86.               AUXR |= 0x04;                            //獨立波特率發生器時鐘為Fosc,即1T
  87.               BRT = 0xB8;                            //設定獨立波特率發生器重裝值
  88.               AUXR |= 0x01;                            //串口1選擇獨立波特率發生器為波特率發生器
  89.               AUXR |= 0x10;                            //啟動獨立波特率發生器


  90.               PS      =   1;
  91.               ES      =   0;      //允許串口中斷
  92.               TI      =   1;            
  93. }

  94. /*****************************************************
  95. void UART_send_byte(unsigned char byte)
  96. {
  97.               ES     =   0;  //關串口中斷
  98.     TI     =   0;  //清零串口發送完成中斷請求標志
  99.     SBUF   =   byte;
  100.     while(TI ==0); //等待發送完成
  101.     TI     =   1;  //清零串口發送完成中斷請求標志
  102.     ES     =   1;  //允許串口中斷
  103. }
  104. *****************************************************/

  105. void Communication_Decode(void)
  106. {            
  107.               if(buffer[0]==0x00)
  108.               {
  109.                     TR1=0;ET1=0;  //關閉中斷不尋跡
  110.                     stoprun();               
  111.                             switch(buffer[1])
  112.                             {
  113.                                           case 0x01: run();      break;
  114.                                           case 0x02: backrun();  break;
  115.                                           case 0x03: leftrun();  break;
  116.                                 case 0x04: rightrun(); break;
  117.                                           case 0x00: stoprun();  break;
  118.                                           default: return;
  119.                             }            
  120.               }
  121.               else if(buffer[0]==0x01)
  122.               {
  123.                   TR1=0;ET1=0;  //關閉中斷不尋跡
  124.                             stoprun();               
  125.                            
  126.                             if(buffer[2]>180)
  127.                                           return;
  128.                             switch(buffer[1])
  129.                             {
  130.                                           case 0x01:
  131.                                           {
  132.                                           se_timer[0]=buffer[2];
  133.                                           if(se_timer[0]<11)se_timer[0]=11;
  134.                                           if(se_timer[0]>162)se_timer[0]=162;
  135.                                           }
  136.                                           return;
  137.                                           case 0x02:
  138.                                           {
  139.                                           se_timer[1]=buffer[2];
  140.                                           if(se_timer[1]<11)se_timer[1]=11;
  141.                                           if(se_timer[1]>162)se_timer[1]=162;
  142.                                           }
  143.                                           return;
  144.                                           //case 0x03:se_timer[2]=buffer[2]; return;
  145.                                           //case 0x04:se_timer[4]=buffer[2]; return;
  146.                                           default : return;
  147.                             }
  148.               }
  149.               else if((buffer[0]==0x09)&&(buffer[1]==0x09))
  150.               {
  151.                             switch(buffer[2])
  152.                             {
  153.                                           case 0x00:    TR1=1;ET1=1;   break;                            //尋跡
  154.                                           case 0x01:                   break;                            //避障
  155.                                           default: return;
  156.                             }            
  157.               }
  158.                             else
  159.               {
  160.                             return;
  161.               }
  162. }

  163. void UART_Interrupt_Receive(void) interrupt 4
  164. {
  165.               static unsigned char i;
  166.             
  167.     if(RI==1)
  168.     {
  169.         RI  =   0;
  170.                            
  171.         if(rec_flag==0)
  172.                             {
  173.                                           if(SBUF==0xff)
  174.                                           {                                                         
  175.                                                         rec_flag=1;            
  176.                                                         i=0;
  177.                                           }                                         
  178.                             }
  179.                             else
  180.                             {
  181.                                           if(SBUF==0xff)
  182.                                           {
  183.                                                         rec_flag=0;            
  184.                                                         if(i==3)
  185.                                                         {            
  186.                                                                       Communication_Decode();                           
  187.                                                         }
  188.                                                         i=0;
  189.                                           }
  190.                                           else
  191.                                           {
  192.                                                         buffer[i]=SBUF;
  193.                                                         i++;
  194.                                           }
  195.                             }                           
  196.     }
  197.     else
  198.     {
  199.         TI  =  0;
  200.     }            
  201. }


  202. void Timer0_Init(void)
  203. {
  204.                  TMOD   &=   0xf0;
  205.     TMOD   |=   0x02;
  206.               AUXR   |=   0XC0;
  207. //              TH0=10;                 //              22.1184
  208. //              TL0=10;                 //

  209.               TH0=133;                 //              22.1184
  210.               TL0=133;                 //

  211.               TR0=1;
  212.               ET0=1;
  213. }

  214. void Timer1_Init(void)
  215. {

  216.       TMOD   &=   0x0f;
  217.       TMOD   |=   0x10;  
  218.     //  TH1     =   0xA9;   //1MS定時 22.1184
  219.      // TL1     =   0x9A;

  220.                 TL1 = 0xCD;                            //設置定時初值1MS定時               11.0592
  221.       TH1 = 0xD4;                            //設置定時初值
  222.       TR1     =   0;    //開定時器1
  223.                 ET1     =                0;

  224. }

  225. void Timer_0(void) interrupt 1                 //舵機控制程序
  226. {

  227.    time++;
  228.    if(time<=se_timer[0]+45)
  229.         P27=1;
  230.    else P27=0;

  231.    if(time<=se_timer[1]+45)
  232.         P26=1;
  233.    else P26=0;


  234.    if(time>=1800)
  235.    {
  236.      time=0;
  237.    }

  238. }

  239. /************************************************************************/
  240. /*                    PWM調制電機轉速                                   */
  241. /************************************************************************/
  242. /*                    左電機調速                                        */
  243. /*調節push_val_left的值改變電機轉速,占空比            */
  244.                             void pwm_out_left_moto(void)
  245. {
  246.    if(Left_moto_stop)
  247.    {
  248.     if(pwm_val_left<=push_val_left)
  249.                      {
  250.                                  Left_moto_pwm=1;
  251.                                  Left_moto_pwm1=1;
  252.                                }
  253.               else
  254.                      {
  255.                        Left_moto_pwm=0;
  256.                                  Left_moto_pwm1=0;
  257.                                }
  258.               if(pwm_val_left>=10)
  259.                      pwm_val_left=0;
  260.    }
  261.    else   
  262.           {
  263.            Left_moto_pwm=0;
  264.            Left_moto_pwm1=0;
  265.                               }
  266. }
  267. /******************************************************************/
  268. /*                    右電機調速                                  */
  269.    void pwm_out_right_moto(void)
  270. {
  271.   if(Right_moto_stop)
  272.    {
  273.     if(pwm_val_right<=push_val_right)
  274.                     {
  275.                      Right_moto_pwm=1;
  276.                                Right_moto_pwm1=1;
  277.                                }
  278.               else
  279.                     {
  280.                                Right_moto_pwm=0;
  281.                                Right_moto_pwm1=0;
  282.                               }
  283.               if(pwm_val_right>=10)
  284.                      pwm_val_right=0;
  285.    }
  286.    else   
  287.           {
  288.            Right_moto_pwm=0;
  289.            Right_moto_pwm1=0;
  290.                     }
  291. }


  292. void Timer_1(void) interrupt 3
  293. {
  294. //    static unsigned int ms_count=0;

  295.                 TL1 = 0xCD;                            //設置定時初值1MS定時               11.0592
  296.       TH1 = 0xD4;                            //設置定時初值

  297.      pwm_val_left++;
  298.               pwm_val_right++;
  299.               pwm_out_left_moto();
  300.               pwm_out_right_moto();

  301. //              if(ms_count++ >= 100)
  302. //              {
  303.                   // ms_count = 0;

  304.                               if(Left_2_led==0&&Right_1_led==0)
  305.                                             {
  306.                                              Left_moto_go1;
  307.                                              Right_moto_go1 ;   //右電機往前走
  308.                                              }

  309.                                             else
  310.                                           {                                          
  311.                                               if(Right_1_led==1&&Left_2_led==0)                            //右邊檢測到黑線
  312.                                                           {               
  313.                                                      // rightrun();                                                                            //右轉
  314.                                                                           Left_moto_go1 ;      //左電機往前走
  315.                                   Right_moto_back1 ;   //右電機往前走  
  316.                                                           }
  317.                                                       
  318.                                                         if(Left_2_led==1&&Right_1_led==0)                  //左邊檢測到黑線
  319.                                                         {
  320.                                     
  321.                                                                       //  leftrun();                                                                                        //左轉
  322. ……………………

  323. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

完整的Word格式文檔51黑下載地址(內含清晰圖片)
WiFi智能小車2.docx (420.06 KB, 下載次數: 31)


評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:587108 發表于 2019-10-30 08:51 來自手機 | 只看該作者
謝謝樓主分享
回復

使用道具 舉報

板凳
ID:632473 發表于 2019-10-30 09:23 | 只看該作者
謝謝,分享
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产亚洲欧美日韩精品一区二区三区 | 蜜桃av人人夜夜澡人人爽 | 国产精品久久久久久妇女6080 | 91亚洲视频在线 | 色婷婷综合久久久中文字幕 | 91高清在线观看 | 97国产一区二区精品久久呦 | 激情婷婷 | 国产一区二 | 少妇诱惑av | 一区二区三区四区视频 | 综合久久av | 亚洲精品国产区 | 特黄级国产片 | 国产精品视频久久久久久 | 欧美精品99 | 日韩精品a在线观看图片 | 日本久久www成人免 成人久久久久 | 日韩免费看视频 | 天天操天天干天天透 | www.色.com | av免费网站在线 | 欧美一区二区视频 | 国产精品一区二区福利视频 | 中文字幕视频一区 | 国产三级在线观看播放 | 国产精品国产成人国产三级 | 乱一性一乱一交一视频a∨ 色爱av | 91在线精品一区二区 | 日韩国产欧美在线观看 | 夜夜爽99久久国产综合精品女不卡 | 日韩二三区 | 超碰美女在线 | 午夜久久久久 | 日韩国产欧美视频 | 国产色播av在线 | 草久在线视频 | 在线观看www | 午夜黄色影院 | 日韩视频区 | 日本网站在线看 |