基于单片机的视觉导航小车设计

目 录

摘 要 I
Abstract II
引 言 1
1 总体方案设计 3
1.1 方案论证 3
1.2 项目总体设计 3
2 项目硬件设计 4
2.1 主控模块设计 4
2.1.1单片机选型 4
2.1.2 STM32F103RCT6芯片 4
2.2单片机最小系统电路 5
2.3电机驱动模块设计 7
2.4红外模块设计 8
2.5红外遥控模块设计 9
2.6超声波避障模块设计 10
2.7 视觉采集模块设计 11
2.8 WIFI模块设计 12
3 项目软件设计 14
3.1 软件开发环境介绍 14
3.2 视觉导航软件设计 15
3.3 循迹模块软件设计 16
4 仿真与调试 18
4.1 系统硬件调试 18
4.2 系统软件调试 18
4.3实物测试 18
结论 20
参考文献 21
附录:程序主函数 23
致 谢 27

摘 要

随着智能化的到来,通讯网络,计算机,自动控制等产品正在不断发展,人们对于产品的方便性以及舒适性也越来越看重,使得传统的人工工艺和机械装备不再满足人们的需求,而又随着时代水平的提高,汽车逐渐成为人们在生活和工作中不可缺少的工具。
为了消除人们在各种工业繁琐的危险环境对于自身的危险的问题,本着让工作更加高效而且节省成本,提升人们生活水平的原则,本课题利用STM32单片机作为主控芯片,视觉采集模块采用USB摄像头以及PWM驱动技术实现视觉导航小车,同时在小车上增加WIFI传输功能,从而实现人们可以规划小车的行驶路径以及人们可以在手机终端或者PC端实时看见周围的情况并且实时控制小车,从而随时应付突发情况。结果表明,通过完成系统总体设计、硬件设计、软件编写、软硬件调试的工作,人们完全可以让视觉导航小车去他们无法进入地方进行勘测,从而可以让工作更加有效,提升生活效率,而且对安全也可以得到保障,即使由于环境导致小车损坏,只需修理,既做到了节省成本,又可以消除安全隐患,从而带来了巨大的经济和社会效益。

关键词:STM32; PWM驱动; WIFI; 视觉导航

Abstract
With the advent of intelligent, communication network, computer, automatic control, and other products are growing, people for the convenience and comfort of products also more and more value, makes the traditional manual craft and machinery and equipment no longer meet people’s needs, and with the increase of age level, car become people indispensable tools in the life and work.
In order to eliminate people in all kinds of industrial cumbersome dangerous environment for their own problems, make work more efficient and cost savings, improve the principle of people’s living standard, this topic using STM32 MCU as the master control chip, visual acquisition module driven by USB camera and PWM technology to realize visual navigation car, at the same time increase the WIFI transfer function on the car, so as to realize the moving path of people can plan the car and in the mobile terminal or PC real-time people could see the situation around and real-time control of the car, so as to cope with emergency at any time. Results show that by completing the system overall design, hardware design, software programming, hardware and software debugging work, people can make a vision navigation map the car to go to places where they cannot enter, thus can make work more effectively, improving the efficiency of life, but also to the safety can be guaranteed, timely car due to environmental damage, need to repair, both cost savings can be achieved, but also can eliminate the safety hidden trouble, which brought great economic and social benefits.

Keywords: STM32; PWM drive; WIFI; Visual navigation

引 言

随着时代的发展,人们在科技上的提高是显而可见的,智能化产品逐渐走进人们的生活当中。在如今的大数据时代,智能化产品无非是人们得力的助手,可以满足人们的各种需求,因为它们比人工作效率更快,更准。在70-80年代,人们驾驶汽车减轻负担,代替从前的车马,确实给让生活带来了便利和快捷,但是却增加了人们的疲劳以及艰辛。随着人们逐渐走在科技的前沿,智能化汽车走进各行各业。智能小车具有许多功能,例如自动跟踪,避障和可控驾驶。它可以在不同的环境中完成工作。智能小车在各个行业具有良好的应用价值,使得智能小车具有广阔的应用前景。
作为现代的新发明,智能小车可以根据预设模式在环境中自动运行,并且无需人工管理即可工作。智能小车可以像真正的汽车一样,显示生活的时间,此时行驶的速度以及里程总数。智能小车可以自动根据人们设置的轨迹进行移动,可以根据光线进行移动并且可以在即将碰见障碍物时进行躲避等功能。由于需要像汽车一样进行可控的行驶速度,停车定位位置,并把图像远程输出,它的研究离不开自动化专业,需要利用智能传感器技术,机器人控制技术,运动控制系统等多方面学科。除军事应用外,它还可以用于物流运输,地质勘探,灾害搜寻等领域。
视觉导航小车的研究主题来自对智能汽车自动驾驶功能的研究。智能汽车自动驾驶的研究可以对人类社会的进步产生重大影响。例如,在解决交通安全以及便捷的问题上,提高了交通网络的利用以及减少车辆排放等等。由于在数据控制终端中集成了嵌入式系统,该系统具有低功耗和高度集成的优点。将嵌入式技术应用于手持设备可以使其朝着更快、更薄、更用户友好的目标发展。
本课题研究目的是以STM32为基础设计的视觉导航小车,将它应用到人们的实际生活当中。视觉导航小车能够实现自主避障、自主行驶、实时采集小车周围的图像信息并在终端实时显示。将采集到的数据通过WIFI信号发送到手机终端或PC电脑,同时用户在终端可通过监控界面对智能小车发送控制指令从而达到灵活的控制视觉导航小车,小车在遇到障碍物时,通过设定的功能实现避障。该项技术还可用来控制家用电器,实现智能家居,故有很高的应用价值。本篇文章共分为四个章节,具体内容如下:
第一章重点说明了系统的方案设计,主要阐述了系统的功能和设计目标,并根据设计目的选择合适的主控芯片,做出了系统的总体方案设计框图。
第二章介绍了视觉导航小车的硬件设计,其中包含各个模块的设计原理,并根据系统的设计要求选取单片机型号,选择最适合小车功能的传感器和摄像头。
第三章介绍了系统的软件设计,简要介绍了系统的开发环境和应用程序设计。
第四章是视觉导航小车的调试部分,囊括了系统的硬件调试以及软件调试,并就本设计出现的问题,做了简单的论述以及解决办法。

1 总体方案设计

1.1 方案论证
本课题是为了让小车进入人类无法进入的地方进行勘测,从而让人类在手机终端或者PC端看见小车周围的环境,从而进行操作和工作。所以为了控制小车实现功能做出以下两种设计方案进行对比:
方案一:是采用STM32主控+摄像头+PWM驱动技术实现视觉导航小车,具体为通过STM32作为主控芯片驱动小车,以便来控制小车的运行,根据视觉采集模块采集的图像信息通过WIFI模块发送到手机或电脑,人们在界面上实时查看,再将图像信息传递给STM32,从而控制小车。
方案二:是采用FPGA+图像采集单元+驱动板实现视觉导航小车,具体地,视觉导航小车利用CMOS传感器采集图像信息。FPGA利用COMS传感器提供的时钟信号作为同步的信号进行图像采集,然后通过控制板的数字接口将相机的8位数据线和相应的控制信号直接连接到图像采集,优点是集成度高,速度快和可靠性高[1]。如果要更改驱动电路的时序并添加一些功能,则只需对设备进行重新编程。
经过比较,考虑到性能,第一种更加灵活。对于变化的车速,使用PWM脉冲代码速度控制进行控制,并通过更改电动机的平均电压来改变汽车的速度。相对于第二种,成本也是很低,所以采用第一种方案。
1.2 项目总体设计
本设计基于STM32主控模块,该功能主要通过7个模块的电路设计来实现,分别是电源模块,红外模块,电机驱动模块,视觉采集模块,WIFI模块,循迹模块,超声波模块。系统功能图如图1.1所示。
在这里插入图片描述

图1.1 系统功能图

2 项目硬件设计

2.1 主控模块设计
2.1.1单片机选型
控制芯片的选择应适合设计要求,性能应具有功耗低,性能高,稳定性好,存储空间大的优点。当设计要求准确时,代码指令的兼容性就很高。 STM32结构设计最大限度地减少了外围设备,以实现最大的集成度。与STC89C51相比,它具有更多I/O口,可以进行更多的功能,包括上电复位,按钮复位,定时器时钟等功能,可以用作系统的主时钟,以满足丰富的片外设备和各种接口[2]。因此,在本设计中,选择了STM32,它起着编写程序的作用。它类似于微型计算机,可以用C语言和汇编语言进行编程,以它为核心,每个模块都连接到微控制器以实现各种功能。
2.1.2 STM32F103RCT6芯片
本设计使用STM32F103系列单片机的STM32F103RCT6作为主控制芯片。 STM32F103RCT6是嵌入式微控制器集成电路(IC)。该单片机具有32位ARM Cortex-M3内核,具有72MHz的速度和512K FLASH和48K SRAM存储器容量,具有3个ADC,13个通信接口。STM32F103系列芯片的主要参数如图2.1所示:
在这里插入图片描述

图2.1 STM32F103系列
其中本设计选用的STM32F103RCT6的管脚描述如图2.2所示:
在这里插入图片描述

图2.2 STM32F103RCT6引脚图

2.2单片机最小系统电路
STM32F103的最小系统电路由电源电路,时钟源电路,BOOT启动电路,调试接口电路,复位电路五部分组成。最小系统原理图如图2.3所示:
在这里插入图片描述

图2.3 最小系统原理图
晶振电路也就是时钟电路,整个系统处理信号和其它各部分运行也是一个频率,晶振电路就是为它们提供一个稳定的振荡频率,使系统各部分保持同步。本设计的晶振电路由两个30μF的电容和一个8MHZ的晶振组成。本设计使用的是内部时钟方式,即使用晶振内部电路产生时钟脉冲。
在这里插入图片描述

图2.4 晶振电路原理图
每个单片机系统都需要带复位电路。单片机复位电路就好比电脑的重启部分,当电脑在使用中出现死机,按下重启按钮电脑内部的程序从头开始执行。单片机也一样,当单片机系统在运行中,受到环境干扰出现程序跑飞的时候,按下复位按钮内部的程序自动从头开始执行。STM32只需在RESET接低电平信号即可实现复位功能,在单片机系统中,系统上电启动的时候复位一次,当按键按下的时候系统再次复位,如果释放后再按下,系统还会复位。所以可以通过按键的断开和闭合在运行的系统中控制其复位。图2.5如下图所示:
在这里插入图片描述

图2.5 复位电路原理图

2.3电机驱动模块设计
本设计使用的是L298N电机驱动模块,原理图如下图2.6所示。该芯片使用标准逻辑电平控制信号,并具有两个使能控制信号,可以检测外部电阻的变化并将该变化反馈到控制电路,为了改变车速,使用PWM脉冲编码速度控制来操控,并且通过改变DC伺服电动机的占空比电压来改变平均电压的值,从而改变电动机的速度[5]。相比于其他电机,还具有以下几点优点:
(1)直流电动机的转矩大,可以克服传动装置的摩擦转矩和负载转矩;
(2)能适应各种复杂的速度和信号的快速变化,并具有良好的响应能力;
(3)直流电动机的空载转矩大。当控制系统失速时,它可以立即做出反应并产生大扭矩,以防止汽车由于惯性而继续前进;
(4)与其他电动机相比,直流电动机声音小,运行稳定。
在这里插入图片描述

图2.6 L298N电机驱动模块原理图
其中,p4是电机控制部分, L298N用于驱动四个直流减速电机。本设计中,四个直流电机的线左右两边分别用不同颜色的线连接电机驱动模块的OUT1, OUT2, OUT3, OUT4,引脚A和B可用于PWM控制实现直线行驶,转弯,加速和减速等待动作。在本设计中,当给定ENA使能端的信号为1,IN1为1,IN2为0时,电动机正转;当给定的IN1为0,IN2为1时,电动机反转,原理相同,这样就能控制电动机的正反转。当给定ENA使能端的信号为0时,电动机停止转动。
2.4红外模块设计
在视觉导航小车的设计中,为了实现最基本的循迹功能以及避障功能,采用了2个TCRT5000循迹模块,2个红外避障模块。本设计中,利用红外线对不同物体的的反射特性不一样的原则,对白色物体,红外线反射多,对黑色物体,红外线反射少的特性,进行了循迹模块的设计,将左右循迹的线插在了单片机的D3和D4引脚上。循迹模块的工作原理是当左循迹模块检测到是白色,右循迹模块检测到的也是白色,小车继续根据轨迹行驶;当左循迹模块检测到是黑色,右循迹模块检测到的是白色,小车会根据检测到的信号向右行驶;当左循迹模块检测到是白色,右循迹模块检测到的是黑色,小车会根据检测到的信号向左行驶。
在本设计中,为了让小车通过两种不同方式进行避障,选用了红外避障模块,红外避障的方向是向前进行发射,和循迹是向下进行发射,在调试过程中,将左右避障模块的线分别插在了单片机的D5和D6引脚上,如图2.7所示。红外避障模块的工作原理是红外灯检测到前方有障碍物,将输出低电平,相应电路板上的指示灯点亮,如果没有障碍物,则输出高电平。
在这里插入图片描述

图2.7 循迹和避障模块原理图
2.5红外遥控模块设计
为了让人们可以在现场远程控制小车,从遥控器进行调试小车,让它去人们无法工作的地方进行工作,所以在本课题中加了一个红外接收头,插在了单片机的A4端口上,如下图2.8所示,用来遥控视觉导航小车。可以通过按遥控器的按钮,对小车进行控制,CH键是前进,蓝色是向左前进,绿色是向右前进,+号是向后倒退,蓝色的向右键是停止,遥控器如下图2.9所示。当用遥控器对着红外接收头控制时,红外线进入模块,它可以在其输出端便可以获悉原来发射器发出的数字编码,只要它由STM32解码程序解码,就可以知道按下了哪个按钮并执行相应的控制过程以完成红外遥控操作。
在这里插入图片描述

图2.8 红外接收头原理图
在这里插入图片描述

图2.9 遥控器实物图

2.6超声波避障模块设计
为了避免小车在没人看管的情况下碰撞发生事故,又根据超声波测距,测量距离障碍物的位置可以避免这种事故,因此本设计中加入超声波避障模块以便实现该需求。
根据设计要求,当超声波模块检测到前方有障碍物时,小车会停止移动并往后退一定距离,防止小车由于速度过快,从而传感器无法分析信号,在小车后退之后,舵机会开始左右转动,超声波模块开始工作,这时超声波模块会检测到三个数据值,左侧右侧前方,这时候会进行判断,这样的连续周期测量可以达到移动测量的值,小车可以根据测量值避开障碍物。因此,为了符合项目需求,选用了HC-SR04,该模块使用电压为5V,静态电流小于2mA,感应角度不大于15度,探测距离足够。该模块共有4个引脚,两个电源引脚,2个控制引脚,并将引脚插在单片机上,超声波模块原理图如下2.10中所示。
在这里插入图片描述

图2.10超声波模块原理图

2.7 视觉采集模块设计
本课题的目的是为了让视觉导航小车进入人们无法进入的地方,以便人们可以在手机端或PC端看到视觉导航小车周围的环境,以执行操作和工作。因此,为了实现观察功能,必须添加摄像头。摄像头的工作原理是通过图像传感器实现的。图像传感器的工作原理是将采集的场景对象的AD样本转换为图像电信号,然后将图像电信号发送到图像。根据处理芯片的像素大小和颜色分布,将其转换为相应的数字信号。成像系统基于对转换后的数字信号的分析和提取来判断获得了用于收集视频信息的各种运动信号。当前,有CMOS摄像头和USB摄像头。基于以上分析,比较了以下两种设计方案。
方案一:使用通用的CMOS图像传感器。它内部不仅包含图像传感器,还包含转换器,并且是可以连接到SCCB接口的主机控制芯片或视频编码器。 CMOS重量轻且外围电路简单,并且可以由5V供电。
方案二:采用USB数字摄像头。摄像机无需驱动即可实时收集数字视频信息。
由于USB接口是当前广泛使用的接口模式,即插即用且易于使用,因此,选择了Mosheng rqeso 008 USB摄像头。为了使电路设计更加简单方便,所以采用USB连接,仅从连接WIFI模块获得的电压可以满足摄像头正常工作所需的电压,因此无需连接外部电压。尽管就捕获动态图像和成像清晰度而言,USB摄像头无法与接口摄像头相提并论,但其操作简单且即插即用。
2.8 WIFI模块设计
随着时代的不断进步,WIFI技术也在不断完善,甚至进入人们的生活,无论人们身在何处,都可以连接WIFI进行娱乐。由于通信方式比传统通信方式具有更大的覆盖范围,布线相对简单,传输速度快,因此可以应用于机电设备密集,空间小的煤矿,在有线电缆连接很困难的环境中,并满足复杂工业现场对环境危害的各种要求,因此在视觉导航小车的设计中,为了使人们能够实时观察视觉导航小车的行驶周边情况,并可以在PC或手机上控制小车,所以本课题是在视觉导航小车中添加WIFI模块进行传输,在安装完WIFI模块之后,将杜邦线插在单片机的端口上,根据顺序依次连接。该模块体积小,功耗低,发热量低,WIFI和网络端口的传输性能稳定。模块的外围电路非常简单,仅需添加3.3V直流电源即可启动系统并控制WIFI。其参数以及实物如下2.11和2.12所示。
在这里插入图片描述

图2.11 WIFI模块参数图
在这里插入图片描述

图2.12 WIFI模块实物图

3 项目软件设计

3.1 软件开发环境介绍
Keil是行业领先的微控制器(MCU)软件开发工具的独立供应商。 Keil是由Keil Software在美国生产的单片机C语言软件开发系统。与汇编语言相比,C语言在功能,结构,可读性和可维护性方面具有明显的优势,因此易于学习和使用, Keil提供了完整的开发解决方案,包括C编译器,宏汇编,链接器,库管理和强大的仿真调试器,这些部分通过集成的开发环境进行组合, Keil软件使用Windows界面提供了功能强大的集成开发和调试工具以及库功能,另一方面,Keil具有非常高效的代码编译功能,其生成的目标代码十分契合项目使用,并且大多数语句生成的汇编代码易于理解和紧凑[9]。在大规模软件开发中,它可以更好地体现高级语言的优势。

在这里插入图片描述

图3.1 Keil_5软件界面
软件开发流程图如图3.2所示。

在这里插入图片描述

图3.2 软件开发流程图
3.2 视觉导航软件设计
在本设计中,人们可以通过手机或PC控制视觉导航小车,因此需要设计出一个视觉导航软件的程序。本设计要实现的是,人们可以使用电脑或手机选择不同的按钮来控制小车,并实际监视视频机器以建立连接。人们可以在计算机界面上选择不同的按钮,并发送适当的命令来控制小车的运行和实时视频监控。该系统的目的是控制计算机上的终端软件。通过使用Visual C ++设计软件,它具有开发环境可视化的特征。用户可以直接在界面上进行编程,这给开发人员带来了很多便利。在PC端可以实现的功能是
(1)实时监控显示。可以实时显示摄像头采集的图像;
(2)可以对小车进行控制。比如说前进,后退,左右移动。
本设计中的应用程序设计也是两个部分。一部分是控制界面,另一部分是视频界面。在控制界面中,人们可以看到小车的不同行驶状态,并控制车辆向前,向后,向左和向右行驶。在视频界面中,人们可以看到视频的IP地址和视频显示界面。然后结合这两个界面,可以同时在手机上看到这两个界面,如图3.3所示。
在这里插入图片描述

图3.3 手机界面
视觉导航软件流程设计图如图3.4所示。
在这里插入图片描述

图3.4 视觉导航软件设计图
3.3 循迹模块软件设计
若想让小车在规定的轨迹上进行前进,后退,左转,右转,应当在软件设计中,编程好小车的代码,如下图3.5所示,循迹模块的流程图如下图3.6所示,当按下转接板的按钮时,系统开始初始化,小车开始在黑色引导线上移动,当左循迹模块检测到是白色,右循迹模块检测到的也是白色,小车继续根据轨迹行驶;当左循迹模块检测到是黑色,右循迹模块检测到的是白色,小车会根据检测到的信号向右行驶;当左循迹模块检测到是白色,右循迹模块检测到的是黑色,小车会根据检测到的信号向左行驶。
在这里插入图片描述

图3.5 循迹模块软件设计图
在这里插入图片描述

图3.6 循迹模块流程图

4 仿真与调试

4.1 系统硬件调试
在调试的过程中,小车循迹出现了在地面上不走的情况,于是检查了两路循迹探头的发射和接收有没有焊接好,然后调节了上面的电位器,增加它的灵敏度,这样做了之后还是不好使,于是检查了红外发射二极管有没有红外光发出,打开手电筒功能对着红外发射二极管,看有没有红外光发出,发现没有红外光发出,找了商家重新更换了循迹探头,最后实现了功能。
在调试循迹功能的过程中,发现小车在规定的轨道上可以进行移动,但是拐弯的时候,会跑出轨道,检查程序,程序没有错误,于是把目标转到循迹探头灵敏度,原因是灵敏度太强了,于是看哪边先出的轨道,就把对应的那个循迹探头上面的电位器往顺时针方向调节降低灵敏度,最后实现功能。
4.2 系统软件调试
在软件调试过程中,点击编译按键,若文件在系统中正常运行,会在下面的应用窗口上显示提示信息。若显示的提示的信息中有“error”,就要根据提示找到错误程序并且进行改正,无提示错误信息的图如下4.1所示。
在这里插入图片描述

图4.1 无错误信息图
在程序编译无错误之后,烧录程序到单片机中,开始验证系统功能是否满足要求,如果功能有问题,需要继续调试程序,反复进行,直到所有功能都满足为止。
但在实际调试过程中,首次对程序进行编译时提示窗口提示错误,经过检查发现在程序句中无分号以及少符号。

4.3实物测试
根据本设计需求,对实物功能进行逐一测试:
(1)当按钮启动的同时,小车可以在平面上进行运动;
(2)小车可以避开障碍物,选择一条无碰路径,遇见障碍物就停止运动;
(3)小车能够将控制器发出的命令以及采集出来视频与控制器连接;
(4)PC或手机可以清晰显示小车采集到的视频数据以及可以显示各种命令。
所有预设功能均以实现,实物展示图如图4.2所示。
在这里插入图片描述

图4.2 实物展示图

结论

本设计是以STM32为核心,在外围加电机驱动模块,循迹模块,红外模块,超声波模块,WIFI模块,使其构成一个基于单片机的视觉导航小车。WIFI模块的稳定性以及在手机上的操作灵敏,使得这次方案设计达到了最开始的设计期望。
论文首先分析了关于智能车的国内外相关现状,其次提出了视觉导航小车的设计方案以及总体思路,然后进行了单片机的选型以及对各种传感器进行了简单的介绍和说明。
本设计经过了硬件以及软件的测试,各部分均达到预期功能:当按钮启动的同时,小车可以在平面上进行运动以及随意变速;小车可以避开障碍物,选择一条无碰路径,遇见障碍物就停止运动;小车能够将控制器发出的命令以及采集出来视频与控制器连接;PC或手机可以清晰显示小车采集到的视频数据以及可以显示各种命令。本设计通过7个模块,达到了这些目的,并且首次通过自己的努力完成了以上的功能。
在设计出这个视觉导航小车之后,各个模块的功能需求很实用并且在WIFI信号稳定正常的情况下,手机或者PC端能够实现与小车的实时控制以及视频监测,根据这个功能,人类可以利用它进不能进入的地方进行勘测。

参考文献

[1]王明顺,沈谋全.传感器与智能车路径识别[J].电子产品世界,2007.4:14-15
[2]孙浩,程磊,黄卫华,程宇.基于HCS12的小车智能控制系统设计[J].单片机与嵌入式系统应用,2007.3:20-25
[3]齐永利,鲁云峰,刘鸣.LM2907频率/电压转换器原理及应用[J].国外电子元器件,2005.5:16-19
[4]孙涵,任明武,唐振民,杨静宇.基于机器视觉的智能车辆导航综述[J].公路交通科技,2005.5:26-30
[5]孙增圻,张再兴.智能控制的理论与技术[J].控制与决策,1996.1:40-42
[6]何奇文,彭建盛,周东,首家辉,葛姣龙.基于红外反射式传感器智能车系统的设计[J].高师理科学刊,2008.3:40-47
[7]徐友春,李克强,连小珉,赵玉凡. 智能车辆机器视觉发展近况[J].汽车工程,2003.5:15-16
[8]马雷,王荣本,赵东标.智能车辆导航控制器参数选取与鲁棒性分析[J].机械科学与技术,2005.2:16-17
[9]杨敬辉,洪炳镕,朴松昊.基于遗传模糊算法的机器人局部避障规划[J].哈尔滨工业大学学报,2004.7:23-24
[10]周浦城,洪炳镕,杨敬辉.基于混沌遗传算法的移动机器人路径规划方法[J].哈尔滨工业大学学报,2004.7:7-9
[11]任明伟.基于ARM的嵌入式视频采集与远程传输系统的设计与实现[D].河北大学,2011
[12]周柱.基于STM32的智能小车研究[D].西南交通大学,2011
[13]孙淑云.轮式足球机器人运动控制算法研究与实现[D].成都理工大学,2009
[14]夏明.基于Linux的嵌入式监控系统软件平台研究与设计[D].南京理工大学,2007
[15]祝海.TCP/IP协议在嵌入式系统中的设计与实现[D].电子科技大学,2007
[16]刘晨,崔斌.基于单片机的智能循迹小车设计 [J].河南工学院,2019.3:26-30
[17]孙育人. 基于Android的智能避障小车系统的设计与实现[J].宝鸡文理学院计算机学院,2019.10:40-42
[18]谷明信,焦志勇,王伟,侯佳男,蒋炜彤.多功能导航智能小车设计[J].重庆文理学院机电工程学院,2017.6:23-24
[19]钟文军,鲁植雄,刁秀永,黄相.基于PID的电子节气门实验平台的研究[J].南京农业大学工学院,2014.7:10-11
[20]魏雅.基于蓝牙控制的循迹智能小车的设计与研究[J].陕西工业职业技术学院,2016.04:26-28

附录:程序主函数
#include “stm32f10x.h”
#include “delay.h”
#include “motor.h”
#include “keysacn.h”
#include “IRSEARCH.h”
#include “IRAvoid.h”
#include “remote.h”

#define KEYMODE_1 1 // 定义模式1
#define KEYMODE_2 2 // 定义模式2
#define KEYMODE_3 3 // 定义模式3
uint8_t keyMode; //指无符号8Bit整形数

void IR_IN() //红外遥控子程序
{
u8 key;
// ZYSTM32_brake(10);
key=Remote_Scan();
switch(key)
{
case 98:ZYSTM32_run(20,100);break;
case 2:ZYSTM32_brake(100);break;
case 194:ZYSTM32_Left(20,100);break;
case 34:ZYSTM32_Right(20,100);break;
case 224:ZYSTM32_Spin_Left(20,100);break;
case 168:ZYSTM32_back(20,100);break;
case 144:ZYSTM32_Spin_Right(20,100);break;
}
}

void KeyScanTask(void)//按键子程序
{
static u8 keypre = 0;//按键被按下时置1

if((keypre == 0)&& (KEY))
{keypre = 1; //置1,避免持续按下按键时再次进入此函数。switch(keyMode){case KEYMODE_1:keyMode = KEYMODE_2; break;case KEYMODE_2:keyMode = KEYMODE_3; break;case KEYMODE_3:keyMode = KEYMODE_1; break;default: break;}
}
if(!KEY)  //按键被放开
{keypre = 0;//置0,允许再次切换LED模式
}

}

//任务:循迹、避障、遥控模式处理
void LEDTask()
{
switch(keyMode)
{
case KEYMODE_1:
LED_D4_SET;
LED_D3_RESET;
SearchRun();
break;
case KEYMODE_2:
LED_D4_RESET;
LED_D3_SET;
AVoidRun();
break;
case KEYMODE_3:
LED_D4_SET;
LED_D3_SET;
IR_IN();
break;
default:
break;
}
}

// int val;
// val=KEY; //读取按键
// while(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_2))//当按键没有被按下时,一直循环
// {
// val=KEY;//词句可省略,可让循环跑空
// }
// while(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_2))//当按键被按下时
// {
// delay_ms(10); //延时10ms
// val=KEY;//读取数字端口PC2口电平值赋给Val
// if(val==1) //第二次判断按键是否被按下
// {
// BEEP_SET; //蜂鸣器响
// while(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_2)) //判断按时是否被松开
// BEEP_RESET; //蜂鸣器停止
// }
// else
// BEEP_RESET;//蜂鸣器停止
// }
//}

int main(void)
{
delay_init();
KEY_Init();
IRSearchInit();
IRAvoidInit();
TIM4_PWM_Init(7199,0); //初始化PWM
Remote_Init(); //红外接收初始化
ZYSTM32_brake(500);
// keysacn();
keyMode = KEYMODE_1;
while(1)
{

KeyScanTask();
LEDTask();

	}

}

致 谢

随着时间一点一滴的流逝,四年读书生活在6月即将划下一个句号,而我的人生却只是一个逗号,我即将又一次征程。虽然这届毕业生是充满遗憾的,没有毕业照,没有毕业典礼,但是对未来都是很充满憧憬的。在这次设计中,感谢我的同学们对我的帮助,也感谢培养我长大含辛茹苦的父母,他们在无言中对我很多的帮助。
在这次毕业设计中,忙忙碌碌,用心设计,倾注了很多经历,感谢胡海龙老师和于宏波老师的耐心点拨,感谢在校四年期间各位授课老师的教导。在制作该项目时,出现很多问题,自己用了各种办法都无法解决,后来在老师的帮助下,解决了在制作设计遇到的各种难题。在当我项目出现各种问题的时候,是胡海龙老师在自己空闲的时间给我指导,解决我各种问题。除了在专业知识,胡海龙老师也教会了我如何去面对生活中的难题。
感谢智能工程学院对我四年以来的栽培,让我在校四年见学习到了和自动化专业有关的很多知识,并且培养了我个人独立思想独立设计的能力,这都是我完成本次毕业设计关键的点,如果没有学院的栽培,我是无法完成本次毕业设计的。
感谢学校对我的培养,让我时时刻刻深知我们学校的校训我行我能,在我毕业设计的过程中每次遇到困难就会想到本校校训,让我充满自信,坚持完成毕业设计。学生深知作为一名深职学子的荣誉,使命和责任,感谢学校让我能有这份能力去面对未来职业生涯的挑战!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/737285.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计模式深度解析:工厂方法模式与抽象工厂模式的深度对比

​🌈 个人主页:danci_ 🔥 系列专栏:《设计模式》 💪🏻 制定明确可量化的目标,坚持默默的做事。 探索设计模式的魅力:工厂方法模式文章浏览阅读17k次,点赞105次&#xff0…

Axure 单键快捷键 加快绘图速度 提高工作效率

画图类 R:绘制矩形 先点击空白页面,输入R即可绘制 L:绘制直线 先点击空白页面,输入L即可绘制,绘制的时候按住shift直线 O:绘制圆 先点击空白页面,输入O即可绘制,绘制的时候按…

最新:Selenium操作已经打开的Chrome(免登录)

最近重新尝试了一下,之前写的博客内容。重新捋了一下思路。 目的就是,selenium在需要登录的网站面前,可能就显得有些乏力,因此是不是有一种东西,可以操作它打开我们之前打开过的网站,这样就不用登录了。 …

并发通信(网络进程线程)

如果为每个客户端创建一个进程(或线程),因为linux系统文件标识符最多1024位,是有限的。 所以使用IO复用技术,提高并发程度。 阻塞与非阻塞 阻塞式复用 非阻塞复用 信号驱动IO 在属主进程(线程中声明&…

2.4_4 死锁的检测和解除

文章目录 2.4_4 死锁的检测和解除(一)死锁的检测(二)死锁的解除 总结 2.4_4 死锁的检测和解除 如果系统中既不采取预防死锁的措施,也不采取避免死锁的措施,系统就很可能发生死锁。在这种情况下,…

sql-mysql可视化工具Workbench导入sql文件

mysql可视化工具Workbench导入sql文件 1、打开workbench2、导入sql文件3、第一行加上库名4、开始运行 1、打开workbench 2、导入sql文件 3、第一行加上库名 4、开始运行

【图(1)】:用邻接矩阵和邻接表实现图

目录 一、图的基本概念 二、图的存储结构 1.邻接矩阵 2.邻接表 一、图的基本概念 注意:概念性的文字不列出太多,记不住也不便于理解 图(Graph)是由节点(Node)和边(Edge)组成的…

Vue 监听器:让你的应用实时响应变化

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

CSS居中对齐 (水平垂直居中对齐)

方案一&#xff1a;flex布局【推荐】 给容器添加样式 display: flex; justify-content: center; align-items: center; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" conte…

第三百九十六回

文章目录 1. 概念介绍2. 思路与方法2.1 实现思路2.2 实现方法 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何混合选择多个图片和视频文件"相关的内容&#xff0c;本章回中将介绍显示Snackbar的另外一种方法.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1…

算法-贪心-122. 糖果传递

题目 有 n个小朋友坐成一圈&#xff0c;每人有 a[i]个糖果。 每人只能给左右两人传递糖果。 每人每次传递一个糖果代价为 1。 求使所有人获得均等糖果的最小代价。 输入格式 第一行输入一个正整数 n&#xff0c;表示小朋友的个数。 接下来 n 行&#xff0c;每行一个整数…

【组合递归回溯】【StringBuilder】Leetcode 17. 电话号码的字母组合

【组合递归回溯】【StringBuilde】Leetcode 17. 电话号码的字母组合 StringBulider常用方法&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;17…

JavaScript实现通过键盘弹钢琴的效果

本片文章通过触发键盘事件来触发对应的音乐&#xff0c;而且给页面添加了渐变的active类名&#xff0c;通过触发不同的鼠标事件&#xff0c;然后active类移动来实现按下钢琴键的视觉效果。 关键代码&#xff1a; <!DOCTYPE html> <html lang"en"><h…

十堰网站建设公司华想科技具有10年的网站制作经验

2018年已经结束了。 华翔科技收到了很多客户的咨询&#xff0c;他们都有一个共同的问题&#xff1a;建一个网站需要多少钱&#xff1f; 但是&#xff0c;我们都会问&#xff1a;您有什么具体需求吗&#xff1f; 大多数人的答案是否定的&#xff0c;他们只是想打听一下价格。 十…

嵌入式3-11

1、整理思维导图 2、尝试学生结构体数组&#xff0c;完成成员的输入&#xff0c;以成绩为条件完成对学生成员的冒泡排序并输出&#xff08;全部在主函数内完成&#xff09; #include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.…

25改考408最新资讯!拷贝

东北大学 东北大学计算机考研全面改考408 东北大学计算机学院官网&#xff1a;http://www.cse.neu.edu.cn/6274/list.htm 东北大学计算机考研全面改考408 公告原文 东北大学计算机科学与工程学院关于调整2025年硕士研究生招生计算机科学与技术、计算机技术、人工智能专业初试…

【JAVA类】利用接口的多继承实现———图书管理系统【附源码】

引言 在我们学习了一些java的基础语法之后&#xff0c;需要把这些知识点可以串起来&#xff0c;这里使用一个简单的小项目可以很好的帮助我们牢记这些知识点&#xff0c;今天就带大家学习一个有关java的小项目&#xff0c;很多学校也经常把这个项目作为他们的课程设计——经典的…

从零学习Linux操作系统 第三十二部分 Ansible中的变量及加密

一、变量的基本设定及使用方式 变量命名&#xff08;与shell相同&#xff09;&#xff1a; 只能包含数字&#xff0c;下划线&#xff0c;字母 只能用下划线或字母开头 .变量级别&#xff1a; 全局从命令行或配置文件中设定的paly:在play和相关结构中设定的主机:由清单&…

基于 Win Server 2008 复现 IPC$ 漏洞

写在前面 本篇博客演示了使用 winXP&#xff08;配合部分 win10 的命令&#xff09;对 win server 2008 的 IPC$ 漏洞进行内网渗透&#xff0c;原本的实验是要求使用 win server 2003&#xff0c;使用 win server 2003 可以规避掉很多下面存在的问题&#xff0c;建议大家使用 …

如何在Linux部署FastDFS文件服务并实现无公网IP远程访问内网文件——“cpolar内网穿透”

文章目录 前言1. 本地搭建FastDFS文件系统1.1 环境安装1.2 安装libfastcommon1.3 安装FastDFS1.4 配置Tracker1.5 配置Storage1.6 测试上传下载1.7 与Nginx整合1.8 安装Nginx1.9 配置Nginx 2. 局域网测试访问FastDFS3. 安装cpolar内网穿透4. 配置公网访问地址5. 固定公网地址5.…