找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6305|回复: 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 单片机教程网

快速回复 返回顶部 返回列表