前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >51循迹小车,从入门到放弃?

51循迹小车,从入门到放弃?

作者头像
飞哥
发布2020-07-10 10:15:38
1.1K0
发布2020-07-10 10:15:38
举报
文章被收录于专栏:电子技术研习社

大家好,这里是飞哥有话聊的第②篇文章,我是小飞。今天我将分享一个小白入手51单片机循迹小车的经历过程,相信大家在读完之后能够得到一些启示,灵感往往是从一些小东西里获得的。由于知识水平有限,对一些更好的处理办法希望能够提出指正

学过单片机的同学都知道单片机的控制作用是非常好的,又有人称为“微处理单元”、“微处理器”等等,它有很多I/O口,对于高低电平的输出能起非常好的控制作用。本文中的循迹小车就是以8051系列的单片机为核心器件的。接下来我将从几个方面来介绍循迹小车的制作过程。

原理分析

要让小车能够沿着设定的黑色轨迹走,我们必须让小车具有“识别”并且做出“判断”的能力。方法就是利用四个红外对管来感应黑线,将信号传输给单片机,单片机对信号处理,判断小车的位置并以此来调整车轮转速,以此达到循迹的目的。

一、元器件准备

小车板、车轮、两个电机、电池、开关、51单片机L298N驱动模块、红外对管4个以及螺丝和杜邦线若干。

二、接线原理

首先,我们应该按照说明书把小车组装好,然后是接线。大致接线思路为:

1、供电

从电源处引出的两根线给L298N驱动模块供电,之后再从L298N引出的线给单片机供电,单片机的电源I/O口有许多,除了接受来自L298N的供电之外,还可以给4个红外对管供电。(如果I/O口不够的话可以直接从电源处引出线给红外对管供电)。之后是L298N两侧的接线口应该是连接电机,使得电机能够正常运转。具体连线方法应仔细观察芯片上的VCC、GND等的指示。这样子的话,供电的部分就解决了。

2、信号传输

我们知道,只要给电机接入电源电机就是可以转动的,但是为什么还要连接单片机呢?这当然是为了让电机的转动按照我们的意愿进行。因此,从四个红外对管的DO端应该和单片机的I/O口相连,以便将采集的信号给单片机。L298N的四个输出口也是与单片机I/O口相连,以便对电机起控制作用。信号传输部分大概如此。

3、使能端

在L298N的四个输出口的两侧,有两个使能端,使能端也是节单片机I/O口,只有使能端有效时才能驱动电机。(这个将会在程序中体现出来)

供电和信号传输都没有问题,接线也就差不多完成了。接线时也要注意单片机上的一些短接片不要随便拔,否则可能出问题。接线总的来说不是很复杂,只要多观察基本问题不大。

注意事项:

接线要牢固,不好固定的地方可以用电烙铁将其焊接起来。

三、编写程序

完成好接线之后,接下来只要烧录合适的程序就行了。

思路:随着轨迹的变化,四个红外对管的感应将会不同,体现在信号0、1的差别,如当左边的红外对管感应到黑线时,意味着赛道可能要左转,这时,我们编写程序让左轮减速,右轮加速,即可达到左转的目的;当四个红外对管都没有感应到黑线时,让小车直走就好了。四个红外对管理论上有16种情况,我们既可以逐一分析每一种情况,也可以把那些不太可能出现的情况舍去。

具体分析:我们用到定时器和中断,设置一个定时周期,计时完成产生一个溢出中断。在中断函数里面,我们只让一个定时周期的某段时间里面的使能端有效,亦即占空比。通过调节占空比的大小,可以调节车轮的转速。之后具体编写每种情况里面占空比的大小,以此调节小车。

注意事项:

红外对管检测到黑线时是1还是0,最好是自己检测一下,否则很可能出现“难以理解”的问题。多个if语句,从第二个开始不能省略if前的else,否则可能不行(亲身经历)。程序里面要注意消除干扰,一些从理论上可以实现的程序在实际上不行,很有可能是因为没有排除干扰。因为在实际的跑道中并没有那么理想,因此要通过多次判断排除干扰。程序中对管脚的定义一定要与实际电路相符。程序编好后循着跑道不断调试即可。

心路历程

虽然从整体上来说不是很难,但是也是会出现一些问题让人很想不通的。作为初学者来说,我是一步一步做的,并没有太急。首先,我通过网上搜索电路图,加上对板子的观察,把线连好了,整个电路可以导通,这是我第一次觉得开心。然后开始编写程序(站在巨人的肩膀上)。当它可以动的时候,我知道我离成功又近了一步。接下来,我应该把各个元件固定好,不要那么松散,这样也有利于我不断去调试程序。再后来,我发现只有一个轮子可以受到控制,而且只有一边的两个红外对管同时感应时才能起作用,这是困扰我最久的。理论上说,轮子和程序都是高度对称的,不应该出现只能控制一边的情况,因此,我分别对电机、接线、I/O口逐一进行排查,均没有发现问题,因此只有可能是程序问题。我反复从理论上分析,都找不出问题,后来只好对每一个子程序进行排查,终于发现了问题,也就是前面说的多个if语句从第二个开始不要把前面的else省略。到这一步,终于可以控制两个轮子了。但是,这个时候发现只有当同一边的两个红外对管同时接收到信号时才能起控制作用,只有一个红外对管感受到信号时却不能反应,直到后来才发现原来是我对接受信号时究竟是1还是0判断反了。解决掉这些问题后终于可以按照意愿来控制小车运动了。当然,目前我还存在供电的问题还没有很好的解决,相信应该不久可以解决的。

如何获取源程序代码?关注本微信公众号,在后台回复“循迹小车”四个字,即可获得完整源程序代码哦。

总结:

在制作过程中,我们应该具有较强的信息检索能力,站在前人的肩膀上可以使我们少走很多弯路。其次,要有较强的问题排查能力,遇到问题时先自己分析,而不是立马去问别人。

喜欢这篇文章就关注我吧!

以上内容皆为原创,转载请注明出处。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-12-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 电子技术研习社 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档