找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5622|回复: 0
打印 上一主题 下一主题
收起左侧

智能小车实践编程设计记录 附程序

[复制链接]
跳转到指定楼层
楼主
ID:551348 发表于 2019-5-30 19:50 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
该系统主要由四个部分组成,分别为系统初始化、蓝牙控制模块、红外检测模块,
自动循迹模块。下面进行详细介绍。
一、  系统初始化
函数原型:void setup()
  函数功能:首先要对该系统进行初始化,初始化大致又可分为三个部分,分
别为传感器接口的初始化、轮胎电机接口的初始化、轮胎电机电位的初始化。
  详细设计:
1.1 传感器接口的初始化
由于小车是用传感器感知外界环境的,所以各个传感器的接口设置为输入模
式,将传感器读取的数据输入到接口中。
1.2 轮胎电机接口的初始化
小车在运行过程中需要我们给轮胎电机相应接口相应的电位值,所以是把数
据从接口输出到电机上,各电机接口设置为输出模式,将我们设置的电位值从接
口输出到电机上,使小车运动起来。

1.3  轮胎电机电位的初始化
  初始化只会在小车的第一次启动运行,所以小车的电机电位设置为零,小车
初始状态为静止。
二、  蓝牙控制模块
该模块的功能是使小车能够根据手机等设备通过蓝牙输出的字符值来进行
不同的运动。代码内容就是几个 if 语句判断不同的字符值,详细设计参照“图 1
主流程图”。
三、红外检测模块
  函数原型:void _track()
  函数功能:使小车能够根据前方物体的位置来进行不同的运动,例如用手挡
在左传感器前方,小车左转。

  详细设计:参照“图 2  红外追踪函数流程图”
四、自动循迹模块
函数原型:void _trace()
  函数功能:使小车能够根据下方的道路颜色来自动直行或者转弯。
  详细设计:参照“图 3  自动寻路函数流程图”
六.创新点
对于这次项目,我们小组主要有两个创新的地方。
1.首先就是对于小车转弯处的速度的一个修改  ,我们考虑到转弯的时候,左右
两个轮子的速度并不一样,所以对两个轮子的速度进行了一个调整,使小车在转
弯时又快又稳。
2.第二个地方就是在蓝牙控制小车进入指定区域的时候,我们下载了另外一个软
件,在上面我们能够进行更为细致的设置,比如每个键,手指按住的时候就执行
相关操作,如左转右转前进等,而手指松开的时候就自动转变为 stop 状态,这
样设置后,操作起来更为顺畅,并且更为精准。

八.计划进度
11:00-11:30:测试蓝牙模块、端口、传感器、电机及连线。连接上装置后,
通过已有程序测试,发现各装置运行正常。
11:30-11:50:开始系统代码的书写工作。
12:40-13:30:完成代码的书写工作,开始将代码录入到主板中,进行测试操
作,觉得车速有些慢,于是对代码进行适当修改。
13:30-14:20:将修改完后的代码录入到主板中,再次放到赛道上进行测试,
发现修改后小车在第一个赛道的位置总是不能够很好地转过去,仔细测试后发现
距离近一些就能过去,于是再次检查代码是否有问题。
14:20-15:00:将代码中的速度减小了一些,然后再进行测试,结果,小车依
旧不能完整地通过第一个弯道,经过一系列的观察,发现是车轮的问题,于是重
组小车的两个轮子,再次将小车进行测试,发现小车仍旧不能很好地转弯。
15:00-16:10:将代码仔细检查,确认无误后,再检查小车运行过程,发现车
轮所在的固定杆处并不完全成垂直状,于是将小车固定杆修理后,再次运行,结
果仍然不能通过。
16:10-17:10:将小车放置在赛道上发现灰度传感器的感应出现问题,于是开
始调试传感器的位置,改变多次却仍旧不能让小车完整通过赛道,并且装置盒处
也没有完好的传感器用于更换。
17:10-17:30:由于快到检测的时间了,我们决定向老师求助,老师检查后发
现传感器的检测高度太低,螺丝无法固定在如此低的高度,所以导致我们无论怎
么调整高度都无法实现目的。
17:30-17:35:在老师提供新的传感器并及时更换后,小车终于行驶正常。但
由于超过指定时间又有两次犯规,并且由于电池电量不足,导致小车速度很慢,
所以最终的成绩不是很理想。

九.个人心得体会
罗吉:
这次关于智能小车的项目,让我体会颇深。
一开始我们小组其实进度比较快的,从拿到小车到检查,都没什么问题,于是就
开始着手写代码,按照老师上课提到的内容进行代码的书写。下课之后,我们吃
完午饭也没有回到寝室休息,而是直接到实验室将代码完成并且进行后面的操作
步骤。将代码录入到小车主板后,进行运行后,发现红外这方面没有问题,蓝牙
控制这里也没有问题,就是自动寻路这里,第一个弯道处总是过不去,可是拿近
一点又能够过去,所以我们就猜想是不是速度太快。因此我们又将代码中的速度
修改了一下,再去测试,结果还是不行,又考虑到是不是左右轮的速度其实在转
弯时是有差别的,所以我们又在代码上修改了一下,再次录入后进行操作,结果
还是不行。我们又观察到转弯时这个左轮总是像转不动似的,所以又猜想是不是
轮子的问题,换上轮子后,我们再进行测试,结果还是不理想。
我们又看到左轮的转轴的固定杆的那个铁杆并不成 90 度,于是又换了一个固定
杆,换完后我们再进行测试,结果还是不行。观察了半天,我们觉得问题只能是
出在这个灰度传感器上了。所以测试了一下,果然,这个灰度传感器并不灵敏,
离地高度有些高,然后我们就将灰度传感器的位置调整了一下,可是仍然达不到
要求,台上也没有好的灰度传感器替换,所以只能向老师求助了。老师测试后发
现,这个灰度传感器的感应范围太低了,螺丝也没法固定了,所以就跟我们拿了
一个新的传感器,换上之后再进行测试,果然就成功了。可是电池电量又没了,
好不容易找到一个电池,虽然电量不足,但还是勉强过了。
怎么说呢,我们就是没找准方向,在错误的地方花费了太多时间。可是之前测试
时这个灰度传感器也没有问题,所以没想着它会坏掉的。并且一开始我们还一度
怀疑是不是自己的代码出了问题,可是最后才发现,代码也没有问题。所以,问
题还是得找到本质的错误地方,否则还是解决不了问题。另外,还是得感谢老师
和助教的宽容!

陈:
记得在老师上课的时候说,很多同学会踩很多坑,有些同学运气不好拿到了
不太好的车子,我相信你们一定会在报告中个人心得体会这一块吐槽一番。刚开
始我还想,这种事情怎么可能会发生在我们组身上呢。没想到结果还真就发生了。  
上午的 ppt 演示完之后,我们三个人用蓝牙同时连接上了 5 号和 12 号车,
最终我们选择了5号车,也正是这个时候,大半年里最紧张刺激的一天开始了。  
在测试完基本功能后,我们一马当先来到了电脑前,打开编译器。就这两行
破代码还用得着图形界面? 直接上手代码,很快就写完,然后把程序烧进小车,
一发指令,车轮转向均正确。欣喜之余,我们开始讨论,反正已经写完了,中午
要不要回去睡觉啊。。。下午还有那么多时间,我们该干嘛啊。。。我们要不要把声
控功能加进去啊等等高瞻远瞩的话题。在膨胀结束之后,我们决定放小车到跑道
上测试一下。

蓝牙发送指令 ok,红外传感 ok,自动寻迹。。。这下问题来了。我们非常惊
讶的发现,小车在第一个弯道处无法转弯,而在第二个弯道处却顺利转弯了。测
试了很多遍都是如此,这就奇怪了,两个弯道转向都是一样,唯一不一样的是距
离,因为跑道是一个类似于长方形的跑道。于是我们很自然得想到把小车第一个
转弯之前的行驶距离缩短,这下果然,小车顺利转弯了,但是小车在直道行驶中
车速是不变的,怎么会出现这种情况呢?(这个问题至今也没想通,不过后面会
有推测)。
但最后验收的时候总不能中途强行用手让车子停下吧,于是我们想了个办法,
在代码中设置一个指令,是让车子减速的。于是我们重新写了函数,再烧进去。
这是,我们又惊讶的发现,车子居然不!动!了!第一反应是代码问题,确实写
错了一个地方,再烧进去车子还是不动。我们三个人从头到尾仔仔细细看了代码,
都没问题。然后把新加进来的代码注释掉后,车子还是不动。把注释掉的代码删
除后,车子还是不动。撤销撤销撤销变回最开始的时候,车子居然动!了!
那是我那个早上最为震惊的一瞬间。学过编程的人都知道,这种事情是根本
不可能发生的。我开始思考各种可能,我是不是无意间改了原来的代码什么地方,
但不可能啊,我们三双眼睛一行行对照过了;是不是编译器的问题,不可能啊,
这么出名的软件怎么会有 bug;是不是端口没识别,不可能啊,端口一直在呢;
是不是没把传感器线拔掉导致端口被占,不可能啊,我们四个传感器线都拔了。
根据福尔摩斯所说,排除了一切的不可能,剩下的,无论你相信不相信,都一定
是事实。在这里,就是小车的问题跑不掉了,不过究竟是什么问题我们也不知道。
不过不管怎样,现在车子好歹能动了。我们再去测试,还是老样子,第一个
弯转不了第二个弯能转。我们继续考虑调整车速,同时考虑到“蓝牙串口通信助
手”这个软件这能通过键盘输入字符发送指令,这样难免有点考验手速,于是我
们又找了一个能按键操作的软件,这样就方便多了。同时我们继续回去修改车速,
再烧进去时,车子又!不!动!了!这次,虽然很不情愿,我还是撤回撤回撤回
把代码恢复到最初状态,这下车子彻底没了动静,这也证实了我们之前的推测是
对的,就是车子自身的问题。

中午已经过去了一半,而我们的小车还是时动时不动,去问老师,老师还信
誓旦旦的让我们把代码一行一行的烧进去看看。。。。。老师啊,你当我们计算机专
业编程都是白学的么。。。。。。就在我们万般无奈之时,我的手触碰到了传感器插
口的三根金属条,小车居然动!了!立马想到短路,立马又想到接触不良,不会
是电源接触不良吧,那这样问题就大了,这辆车和电源接触不良的话只能换车了
啊。没办法先给电池冲会电,这时,我们惊讶的发现,电池插进去显示的是绿色,
其实我们刚才并没有给电池充过多少电,而且小车又用了那么久,按理说充电器
显示的红色才对啊。瞬间我明白了,充电器刚刚根!本!就!没!有!充!进!
电!换了个充电插头充了一会电后,小车果然转了,一个困扰了我们整个中午的
问题居然是电池没电了!
这也解释了一下一系列现象:车速 20 和车速 200 是一个转速,小车时转时
不转(因为插着usb 接口能够充少量电,当电量足够后小车就能转了)。
困扰了一个中午的问题终于解决了,但是无济于事啊,灰度传感器依旧无法
正常工作。这时我们再想是不是传感器的位置不好,是不是考的太近了,于是我
们把传感器拆了下来装在了靠外的地方,然而还是没有效果。我们又装回来后这
下完了,传感器就像瞎了一样,连直线都走偏了。我们以为是轮胎问题,把轮胎
拆下来一看,果然,两个固定轮胎的金属板根本就不对称,一个歪的厉害,于是
我们换了一块,但是传感器仍然罢工,此时已经开始检查了,我们也越来越急,。
最后还得找老师,不过老师的检测故障方法确实厉害,把一边传感器压低靠近地
面来测试它的感应距离,这个方法我们确实没有想到。后来发现这个传感器不太
灵敏,需要减少他和地面的距离,然而,我们把整根螺丝都加满了螺母,已经把
距离减少到了极小值,传感器依然反应不过来。此时检查时间已经快结束了。这
时我们心态已经崩了。
最后,找老师换了个灰度传感器,一切正常,顺利完成检查。三个人傻眼了
四个小时,在最后五分钟终于变聪明了。
统计一下我们经历的问题:学校配的 usb 线无法显示端口,电池接触不良+
电池充不进电,车轮固定板不对称,灰度传感器灵敏度太低。
总而言之,这惊险刺激的一天告诉我:
1. 有的时候需要自信果断一些。不要不敢直视错误,无论是不是你的错。

2. 短板再怎么修也不可能变回原来的样子,唯一的办法是把这块板子拆了
装上新的,桶才不会漏水。
再急,也要拧好每一颗螺丝钉。产品如此,人生亦是如此。

刘:
这次智能小车的电工实习给我留下了很深刻的印象,在这次电工实习过程中我们
小组也是遇到了许多难以解决的问题,探索这些问题的解决方案的时候我们也是
思考了许多东西,当然也收获的许多经验,下面是我在这次电工实习中的心得体
会。
  我把这次电工实习的过程总结为了三个阶段。第一个阶段就是前期的一帆风
顺,我们小组成员在上午老师讲完课分完组之后并没有回宿舍休息,而是吃完饭
之后直接回到了实验室来进行电工实习,中午留在实验室的小组并不多,我们一
小段一小段的完善代码并阶段性的把代码烧进小车中来检验每个模块的功能,直
至完成手动控制的全部内容,我们的实习都是一帆风顺的,大概到了下午一点多,
我们的已经可以很流畅的手动控制我们的小车了。接下来我们就开始编写小车红
外检测功能的代码,代码实际上是比较简单的,所以我们也是花费了很少的时间
就完成了,然后在赛道上进行检验的结果也非常不错。最后就是自动循迹功能的
完成了,自动循迹的代码和红外检测的代码十分相似,我们也是没有花费太长时
间就完成了,但是我们的第一个问题出现了。
  第二个阶段就是小车实际运行中难以解决的问题,首先第一个问题就是当我
们把添加好自动循迹功能的代码烧进小车后,我们用蓝牙控制小车时,不仅仅是
自动循迹功能不能正常工作,连原来检验好的手动控制和红外检测功能都不能运
行了,用手机蓝牙发出各种信号后小车完全没有反应,我们一开始认为这是代码
的问题,于是就开始检查我们的代码,并对代码进行各种删减发现把自动循迹功
能的代码删除以后小车又能回复正常工作,这更加让我们加深了是我们代码的问
题的观念,但是问题是把那部分代码注释掉却不行,这也让我们感到疑惑。在经
过漫无目的的寻找错误的过程中,我们突然发现小车又可以正常运行了,于是就
抓紧拿上跑道进行测试,一开始我们设置的速度比较低,我们不断测试调整自动
循迹的下面两个传感器的位置,最后终于可以使小车可以慢速的完整自动循迹完
两个弯道,于是我们就赶紧回去修改小车自动循迹时的速度,然后把代码烧进小
车中,我们以为我们的任务可以早早结束了(大部分小组中午都回去休息了,我
们经过一个中午的忙活,进度要远远快于其他人)。但是刚才出现的问题又出现
了,代码烧进小车之后再用蓝牙控制小车,小车并没有反应,我们还是刚才错误
的思想:认为我们的代码有问题。于是我们就不断修改那短短几行的代码,烧进
小车,检验,发现一直行不通。这时其他同学的进度都已经是慢慢赶上来了,我
们也感到非常着急。在我们自己琢磨了一个多小时后,发现我们的代码没有一点
问题,我们去问老师,但是老师也没有给出一个明确的答复,于是我们就开始思
考到底是哪里出错了。终于,我们偶然间发现换了一块电池,小车又能够正常运
行了,我们意识到这是电源的问题。我们经过检验发现了电源除了和小车接触不
良之外还和充电器接触不良,可能我们冲了一中午电的那块电池根本就没有充上
电。没想到是糟糕的硬件出了问题,当我们最终发现这个问题的时候,其他的小
组基本上都在进行最后的测试了。电池充了点电之后,我们又继续我们的测试,
这次手动控制和红外检测都没有问题但是问题却出在了最重要的自动循迹,在这
次测试中,我们的自动循迹功能完全不能正常运行,小车只能走直线,有时候会
有一些及其卫校的转向,我们首先认为这是传感器位置的问题,不断调节传感器
的位置甚至是重新再不同的位置安装传感器都没有任何效果,我们又注意到我们
的小车的车轮根本不正,就换车轮和固定车轮的部件,也没有效果。再次向老师
求助,老师拿着小车不断检验,发现还是传感器的位置,传感器的敏感程度太低,
让我们调整传感器的高度。我们调整完之后发现还是不行,老师就给我们拿了新
的传感器,我们安装好之后,小车果然可以正常运行了,又是硬件的问题。
  第三个阶段就是最后的检验阶段了,由于我们出现了各种各样难以解决的问
题,浪费了很多时间,本来进度领先许多的我们变成了最后几个没有检验的小组
之一,因为检查时间的问题,我们最后只能是用了个电量仅剩一点点的电源完成
检验,当然分数也是非常的不理想。

  通过这次电工实习,我感觉自己收获到了许多,尤其是动手能力、独立思考
的能力和团队合作的能力。在实习过程中出现的大部分问题,我们三个人都可以
经过缜密的思考和讨论最后得出问题的根源,虽然一些问题耗费了我们很多的时
间,这让我们不仅仅局限于理论,更深刻体会到了现实中会出现的各种问题。当
然,我也希望实验室中的传感器、电源之类的硬件能更加靠谱一些,这样当我们
发现是硬件的问题时可以及时的进行更换调整而不是浪费许多的时间去思考是
不是其他的问题。

完整的pdf格式文档51黑下载地址:
智能小车报告.pdf (1.09 MB, 下载次数: 16)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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