毕业设计 基于51单片机的视觉导航小车的设计_单片机毕业设计-程序员宅基地

技术标签: c++  java  51单片机  php  嵌入式硬件  课程设计  单片机  


毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。
为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是:基于51单片机的视觉导航小车的设计

1 项目硬件设计 

1.1 主控模块设计

1.1.1单片机选型

控制芯片的选择应适合设计要求,性能应具有功耗低,性能高,稳定性好,存储空间大的优点。当设计要求准确时,代码指令的兼容性就很高。 STM32结构设计最大限度地减少了外围设备,以实现最大的集成度。与STC89C51相比,它具有更多I/O口,可以进行更多的功能,包括上电复位,按钮复位,定时器时钟等功能,可以用作系统的主时钟,以满足丰富的片外设备和各种接口[2]。因此,在本设计中,选择了STM32,它起着编写程序的作用。它类似于微型计算机,可以用C语言和汇编语言进行编程,以它为核心,每个模块都连接到微控制器以实现各种功能。

1.1.2 STM32F103RCT6芯片

本设计使用STM32F103系列单片机的STM32F103RCT6作为主控制芯片。 STM32F103RCT6是嵌入式微控制器集成电路(IC)。该单片机具有32位ARM Cortex-M3内核,具有72MHz的速度和512K FLASH和48K SRAM存储器容量,具有3个ADC,13个通信接口。STM32F103系列芯片的主要参数如图1.1所示:

图1.1  STM32F103系列

其中本设计选用的STM32F103RCT6的管脚描述如图1.2所示:

图1.2  STM32F103RCT6引脚图

1.2单片机最小系统电路

STM32F103的最小系统电路由电源电路,时钟源电路,BOOT启动电路,调试接口电路,复位电路五部分组成。最小系统原理图如图1.3所示:

图1.3 最小系统原理图

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

图1.4 晶振电路原理图

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

图1.5 复位电路原理图

1.3电机驱动模块设计

本设计使用的是L298N电机驱动模块,原理图如下图1.6所示。该芯片使用标准逻辑电平控制信号,并具有两个使能控制信号,可以检测外部电阻的变化并将该变化反馈到控制电路,为了改变车速,使用PWM脉冲编码速度控制来操控,并且通过改变DC伺服电动机的占空比电压来改变平均电压的值,从而改变电动机的速度[5]。相比于其他电机,还具有以下几点优点:

(1)直流电动机的转矩大,可以克服传动装置的摩擦转矩和负载转矩;

(2)能适应各种复杂的速度和信号的快速变化,并具有良好的响应能力;

(3)直流电动机的空载转矩大。当控制系统失速时,它可以立即做出反应并产生大扭矩,以防止汽车由于惯性而继续前进;

(4)与其他电动机相比,直流电动机声音小,运行稳定。

图1.6 L298N电机驱动模块原理图

其中,p4是电机控制部分, L298N用于驱动四个直流减速电机。本设计中,四个直流电机的线左右两边分别用不同颜色的线连接电机驱动模块的OUT1, OUT2, OUT3, OUT4,引脚A和B可用于PWM控制实现直线行驶,转弯,加速和减速等待动作。在本设计中,当给定ENA使能端的信号为1,IN1为1,IN2为0时,电动机正转;当给定的IN1为0,IN2为1时,电动机反转,原理相同,这样就能控制电动机的正反转。当给定ENA使能端的信号为0时,电动机停止转动。

1.4红外模块设计

在视觉导航小车的设计中,为了实现最基本的循迹功能以及避障功能,采用了2个TCRT5000循迹模块,2个红外避障模块。本设计中,利用红外线对不同物体的的反射特性不一样的原则,对白色物体,红外线反射多,对黑色物体,红外线反射少的特性,进行了循迹模块的设计,将左右循迹的线插在了单片机的D3和D4引脚上。循迹模块的工作原理是当左循迹模块检测到是白色,右循迹模块检测到的也是白色,小车继续根据轨迹行驶;当左循迹模块检测到是黑色,右循迹模块检测到的是白色,小车会根据检测到的信号向右行驶;当左循迹模块检测到是白色,右循迹模块检测到的是黑色,小车会根据检测到的信号向左行驶。

在本设计中,为了让小车通过两种不同方式进行避障,选用了红外避障模块,红外避障的方向是向前进行发射,和循迹是向下进行发射,在调试过程中,将左右避障模块的线分别插在了单片机的D5和D6引脚上,如图1.7所示。红外避障模块的工作原理是红外灯检测到前方有障碍物,将输出低电平,相应电路板上的指示灯点亮,如果没有障碍物,则输出高电平。

图1.7 循迹和避障模块原理图

1.5红外遥控模块设计

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

图1.9 遥控器实物图

1.6超声波避障模块设计

    为了避免小车在没人看管的情况下碰撞发生事故,又根据超声波测距,测量距离障碍物的位置可以避免这种事故,因此本设计中加入超声波避障模块以便实现该需求。

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

图1.10超声波模块原理图

1.7 视觉采集模块设计

本课题的目的是为了让视觉导航小车进入人们无法进入的地方,以便人们可以在手机端或PC端看到视觉导航小车周围的环境,以执行操作和工作。因此,为了实现观察功能,必须添加摄像头。摄像头的工作原理是通过图像传感器实现的。图像传感器的工作原理是将采集的场景对象的AD样本转换为图像电信号,然后将图像电信号发送到图像。根据处理芯片的像素大小和颜色分布,将其转换为相应的数字信号。成像系统基于对转换后的数字信号的分析和提取来判断获得了用于收集视频信息的各种运动信号。当前,有CMOS摄像头和USB摄像头。基于以上分析,比较了以下两种设计方案。

方案一:使用通用的CMOS图像传感器。它内部不仅包含图像传感器,还包含转换器,并且是可以连接到SCCB接口的主机控制芯片或视频编码器。 CMOS重量轻且外围电路简单,并且可以由5V供电。

方案二:采用USB数字摄像头。摄像机无需驱动即可实时收集数字视频信息。

由于USB接口是当前广泛使用的接口模式,即插即用且易于使用,因此,选择了Mosheng rqeso 008 USB摄像头。为了使电路设计更加简单方便,所以采用USB连接,仅从连接WIFI模块获得的电压可以满足摄像头正常工作所需的电压,因此无需连接外部电压。尽管就捕获动态图像和成像清晰度而言,USB摄像头无法与接口摄像头相提并论,但其操作简单且即插即用。

1.8 WIFI模块设计

随着时代的不断进步,WIFI技术也在不断完善,甚至进入人们的生活,无论人们身在何处,都可以连接WIFI进行娱乐。由于通信方式比传统通信方式具有更大的覆盖范围,布线相对简单,传输速度快,因此可以应用于机电设备密集,空间小的煤矿,在有线电缆连接很困难的环境中,并满足复杂工业现场对环境危害的各种要求,因此在视觉导航小车的设计中,为了使人们能够实时观察视觉导航小车的行驶周边情况,并可以在PC或手机上控制小车,所以本课题是在视觉导航小车中添加WIFI模块进行传输,在安装完WIFI模块之后,将杜邦线插在单片机的端口上,根据顺序依次连接。该模块体积小,功耗低,发热量低,WIFI和网络端口的传输性能稳定。模块的外围电路非常简单,仅需添加3.3V直流电源即可启动系统并控制WIFI。其参数以及实物如下1.11和1.12所示。

图1.11 WIFI模块参数图

图1.12 WIFI模块实物图

2 仿真与调试

2.1 系统硬件调试

在调试的过程中,小车循迹出现了在地面上不走的情况,于是检查了两路循迹探头的发射和接收有没有焊接好,然后调节了上面的电位器,增加它的灵敏度,这样做了之后还是不好使,于是检查了红外发射二极管有没有红外光发出,打开手电筒功能对着红外发射二极管,看有没有红外光发出,发现没有红外光发出,找了商家重新更换了循迹探头,最后实现了功能。

在调试循迹功能的过程中,发现小车在规定的轨道上可以进行移动,但是拐弯的时候,会跑出轨道,检查程序,程序没有错误,于是把目标转到循迹探头灵敏度,原因是灵敏度太强了,于是看哪边先出的轨道,就把对应的那个循迹探头上面的电位器往顺时针方向调节降低灵敏度,最后实现功能。

2.2 系统软件调试

在软件调试过程中,点击编译按键,若文件在系统中正常运行,会在下面的应用窗口上显示提示信息。若显示的提示的信息中有“error”,就要根据提示找到错误程序并且进行改正,无提示错误信息的图如下2.1所示。

图2.1 无错误信息图

在程序编译无错误之后,烧录程序到单片机中,开始验证系统功能是否满足要求,如果功能有问题,需要继续调试程序,反复进行,直到所有功能都满足为止。

但在实际调试过程中,首次对程序进行编译时提示窗口提示错误,经过检查发现在程序句中无分号以及少符号。

2.3实物测试

根据本设计需求,对实物功能进行逐一测试:

(1)当按钮启动的同时,小车可以在平面上进行运动; 

(2)小车可以避开障碍物,选择一条无碰路径,遇见障碍物就停止运动;

(3)小车能够将控制器发出的命令以及采集出来视频与控制器连接;

(4)PC或手机可以清晰显示小车采集到的视频数据以及可以显示各种命令。

所有预设功能均以实现,实物展示图如图2.2所示。

图2.2 实物展示图

如果你需要帮助、建议或解决问题,不要犹豫,可以随时向老师提问或寻求支持。专注于单片机的解决方案可以为你提供有关电子设计、嵌入式系统、编程和硬件方面的宝贵信息。无论你的问题涉及到哪个方面,都可以向老师咨询,以获得有针对性的建议和指导。祝愿你在单片机设计领域取得成功!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Nueve_Y/article/details/134167377

智能推荐

c# 调用c++ lib静态库_c#调用lib-程序员宅基地

文章浏览阅读2w次,点赞7次,收藏51次。四个步骤1.创建C++ Win32项目动态库dll 2.在Win32项目动态库中添加 外部依赖项 lib头文件和lib库3.导出C接口4.c#调用c++动态库开始你的表演...①创建一个空白的解决方案,在解决方案中添加 Visual C++ , Win32 项目空白解决方案的创建:添加Visual C++ , Win32 项目这......_c#调用lib

deepin/ubuntu安装苹方字体-程序员宅基地

文章浏览阅读4.6k次。苹方字体是苹果系统上的黑体,挺好看的。注重颜值的网站都会使用,例如知乎:font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, W..._ubuntu pingfang

html表单常见操作汇总_html表单的处理程序有那些-程序员宅基地

文章浏览阅读159次。表单表单概述表单标签表单域按钮控件demo表单标签表单标签基本语法结构<form action="处理数据程序的url地址“ method=”get|post“ name="表单名称”></form><!--action,当提交表单时,向何处发送表单中的数据,地址可以是相对地址也可以是绝对地址--><!--method将表单中的数据传送给服务器处理,get方式直接显示在url地址中,数据可以被缓存,且长度有限制;而post方式数据隐藏传输,_html表单的处理程序有那些

PHP设置谷歌验证器(Google Authenticator)实现操作二步验证_php otp 验证器-程序员宅基地

文章浏览阅读1.2k次。使用说明:开启Google的登陆二步验证(即Google Authenticator服务)后用户登陆时需要输入额外由手机客户端生成的一次性密码。实现Google Authenticator功能需要服务器端和客户端的支持。服务器端负责密钥的生成、验证一次性密码是否正确。客户端记录密钥后生成一次性密码。下载谷歌验证类库文件放到项目合适位置(我这边放在项目Vender下面)https://github.com/PHPGangsta/GoogleAuthenticatorPHP代码示例://引入谷_php otp 验证器

【Python】matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距-程序员宅基地

文章浏览阅读4.3k次,点赞5次,收藏11次。matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距

docker — 容器存储_docker 保存容器-程序员宅基地

文章浏览阅读2.2k次。①Storage driver 处理各镜像层及容器层的处理细节,实现了多层数据的堆叠,为用户 提供了多层数据合并后的统一视图②所有 Storage driver 都使用可堆叠图像层和写时复制(CoW)策略③docker info 命令可查看当系统上的 storage driver主要用于测试目的,不建议用于生成环境。_docker 保存容器

随便推点

网络拓扑结构_网络拓扑csdn-程序员宅基地

文章浏览阅读834次,点赞27次,收藏13次。网络拓扑结构是指计算机网络中各组件(如计算机、服务器、打印机、路由器、交换机等设备)及其连接线路在物理布局或逻辑构型上的排列形式。这种布局不仅描述了设备间的实际物理连接方式,也决定了数据在网络中流动的路径和方式。不同的网络拓扑结构影响着网络的性能、可靠性、可扩展性及管理维护的难易程度。_网络拓扑csdn

JS重写Date函数,兼容IOS系统_date.prototype 将所有 ios-程序员宅基地

文章浏览阅读1.8k次,点赞5次,收藏8次。IOS系统Date的坑要创建一个指定时间的new Date对象时,通常的做法是:new Date("2020-09-21 11:11:00")这行代码在 PC 端和安卓端都是正常的,而在 iOS 端则会提示 Invalid Date 无效日期。在IOS年月日中间的横岗许换成斜杠,也就是new Date("2020/09/21 11:11:00")通常为了兼容IOS的这个坑,需要做一些额外的特殊处理,笔者在开发的时候经常会忘了兼容IOS系统。所以就想试着重写Date函数,一劳永逸,避免每次ne_date.prototype 将所有 ios

如何将EXCEL表导入plsql数据库中-程序员宅基地

文章浏览阅读5.3k次。方法一:用PLSQL Developer工具。 1 在PLSQL Developer的sql window里输入select * from test for update; 2 按F8执行 3 打开锁, 再按一下加号. 鼠标点到第一列的列头,使全列成选中状态,然后粘贴,最后commit提交即可。(前提..._excel导入pl/sql

Git常用命令速查手册-程序员宅基地

文章浏览阅读83次。Git常用命令速查手册1、初始化仓库git init2、将文件添加到仓库git add 文件名 # 将工作区的某个文件添加到暂存区 git add -u # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,不处理untracked的文件git add -A # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,包括untracked的文件...

分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120-程序员宅基地

文章浏览阅读202次。分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120

【C++缺省函数】 空类默认产生的6个类成员函数_空类默认产生哪些类成员函数-程序员宅基地

文章浏览阅读1.8k次。版权声明:转载请注明出处 http://blog.csdn.net/irean_lau。目录(?)[+]1、缺省构造函数。2、缺省拷贝构造函数。3、 缺省析构函数。4、缺省赋值运算符。5、缺省取址运算符。6、 缺省取址运算符 const。[cpp] view plain copy_空类默认产生哪些类成员函数

推荐文章

热门文章

相关标签