基于单片机的智能循迹小车

摘要

智能循迹小车是一种在控制系统的作用下,能够精确地沿着所贴黑线经过一定算法从起点经过赛道一圈
返回起点的智能小车。本文介绍了硬件/软件的设计与实现,介绍了智能循迹小车控制系统的组成。这辆循迹小车使
用两路的红外传感器去检测地面上的黑线,而软件则会根据地面上的黑线信息并通过处理然后用我们特定的算法控
制车辆沿所贴黑线转向。PWM波的合适占空比为由单片机控制电机转速,正负极电机的运行由H桥驱动。智能循迹小
车可以沿着赛道从起点到达终点,根据地面情况选择最佳路径,智能车可以更好地我们所要让它执行的循迹任务,
并且我们通过一步步改进,它的速度会越来越快,越来越稳定。
关键词:单片机;智能小车;控制算法;PWM

1绪论

随着时代的发展,现阶段中国的发展速度是越来越快了,许多的东西都进入了自动化的时代,智能循迹小车就
是这样时代发展中的一个产物,现如今的人工智能,其中包括无人驾驶,都是这样的[10-11]。国家也在重视这样
的发展,所以现在国家大力发展自动化技术,智能循迹小车主要是通过单片机控制芯片作控制系统,来控制小车的
行动,让小车实现无人或自动化这样一个过程,让小车通过程序完成我们交给它的任务,也就是能够自动追踪地面
上黑线赛道然后自动走完这样一个赛道,现如今,许多高校的学生或者学院都会去参加智能小车的比赛,国内大大
小小的比赛有很多,这也是为了锻炼学生编程和动手能力[4]。
(一)、智能小车的概述
  智能循迹小车对于我们一般人来说可能并没有那么的熟悉,但是对于我们自动化专业的学生来说可能说再熟悉
不过了,我依稀记得我们大二的实践课,我们学过一门叫做单片机的实践必修课程,我们最后所要做的实验也就是将程序写完,然后也是一样的让小车能够完整的走完一圈,看谁用的时间更短,是的,我这一次做的跟那时候也差
不多,智能循迹小车我们的英文简称是AGV,英文全称叫做AutomatedGuidedVehicleo从字面意义上来理解,智能就
是智能化,循迹就是它能沿着一定的轨迹行走,具体是什么轨迹我们下面再讨论,小车就是模型车。现在很火热的
一个叫做无人驾驶汽车的行业,其本质和源头也是智能循迹小车,只不过它的循迹功能更加的完善,更加的智能,
里面用到的技术也比传统的要先进,包括算法,这里面涉及到的就是人工智能了,总而言之,言而总之,智能循迹
小车的特点通俗来讲就是没人控制,但是它能自己行走,并且不是乱走,而是根据特定的路径走,这样的一种小车
就可以替代我们人类做许多工作了,比如比较固定的,人工的成本费用比较的高,那么,用机器代替人工就比较省
钱了。小车并不是一个独立的个体,它可以和许多的设备进行一个万物互联,我们可以通过手机进行操控,这样,
小车就能实现一个半自动化的用途,就像无人驾驶汽车,虽然它说的是无人,但是我也可以进行手动操控,甚至,
我们还可以进行模拟器的操控,就像打游戏一样,开个玩笑,但是,这也不失为今后的无人驾驶汽车提供一个方
向,就像电影头号玩家里面所描述的一样,我们自己变成玩家去改变这个世界。此外,AGV小车可以通过蓄电池来提
供能量,还有生产清洁化、没有声音的运行和没有污染等许多的特点,可以在干净的工作环境中一显神通。
1、智能循迹小车的发展历程与回顾
  我记得10年前我们的智能手机还没有普及,但是你看,10年后的今天智能手机已经成为我们形影不离的角色,
说到底为什么智能手机能普及呢?就是因为我们人类懒,智能手机多方便,特别是在移动支付普及后,我们出门都
不用带钱包,随随便便扫个码就能去我敢说中国的任何一个地方,当然,这是非常绝对的说法,我的意思智能手机
的发展是符合我们人类发展需要的,智能循迹小车的发展也是符合我们人类发展需要的,说的简单点就是人类懒,
制造这样一个智能循迹小车来代替自己的劳动,同时呢,智能小车还能做到人类做不到的事,可以说是两全其美
了,智能小车其实应该是归为机器人的一种的,机器人发展的历史已经有几十年了,从机器人诞生到现在的几十年
时间里,许多技术都已经发展成熟了,这也得益于我们基础学科的发展,以及人们越来越认识到教育的重要性。现
如今的机器人已经发展成为了一门交叉性的学科,需要我们许多的工科知识。智能循迹小车主要有以下三大种:
  循迹小车的鼻祖是可编程式的智能小车,这种很古老的智能小车与其说是智能小车,不如说它是小车,因为它
还算不上智能,所有的东西都是内置的,程序是内置的,也没有传感器,路径也是事先用程序编写好的,所以,外
部环境的变化是不能改变这一种小车的路径或者是轨迹的,就像一个二愣子,你给它什么它就做什么,但是这一款
小车的诞生却为今后的智能小车的发展打下了坚实的基础。
  第二代循迹小车相比于第一代就进步了不少,我们说过,第一代小车就是给它什么就是什么,第二代小车进步
一点,我们给他什么,它能在此基础上调整些什么,并不是一个二愣子了,对于环境的变化它能有所察觉,我想这
是一个飞跃性的进步。
  第三代循迹小车是可以说比上两代有了飞速性的进步,它的智能化程度更高,在当前的研究和发展阶段,它可
以有多种外部传感器构成像我们人一样的感官,可以很精确的描述外部环境的变化从而实现现在我们所说的精准制
导。循迹小车的智能化任重而道远,一方面我们应当在当今的各个领域使用我们的循迹小车,智能化程度决定了小
车自主独立运行的能力,另一方面,我们必须加快基础学科的进步,我们要知道,任何科技的发展离不开基础科
学,这也意味着我们要大力培养人才,不断去突破,才能不断去创造。
2、智能循迹小车的分类
  AGV的光辉岁月已有50年有余,现在越来越多的应用和高科技应运而生,我们智能寻迹小车的应用范围也越来越
广泛,也出现了越来越多的种类和发展形式。导航方式的不同我们将智能循迹小车分为以下几种类型:
(1)电磁感应式
  电磁感应式的智能循迹小车是这样的,我们预先将电线埋在地下,这些电线组成特定的路径,而电磁感应式的
智能循迹小车就是在地面上的,当我们埋在地面下面的电线通过高频的电流时,我们学过物理电磁学的都知道,此
时电线的周围会产生磁场,小车上两边对称的地方装有两个电磁感应器,这个感应器的作用就是相当于会产生偏差
信号,一定程度上反应了AGV偏离路径的程度。智能小车基于这种偏差的情况,根据一定的算法,来达到控制小车向
左向右的方向,由于系统是闭环系统,而且是连续的,所以能保证AGV小车能稳定的自动跟踪目标。在目前现代化的
商业用途中,电磁式的小车也是应用非常的广泛,尤其是大型和中型车。
(2)激光式
  激光式的智能循迹小车顾名思义,上面有安装激光扫描仪,激光的一个很重要的特性就是我们可以用激光来测
距,这种激光式的小车,你可以在上面装许多的激光扫描仪,然后进行多个点位的激光扫描仪的测距,或者现在有
那种旋转式的激光扫描仪,安装上去,当我们的激光发射光线,然后周围的一些高反射激光标志就派上用场了(这些标志我们可以提前放在周围等),它们能反射回来这些光束,激光发射的光线从出去到反射回来是有时间的,这个时
间我们交给计算机去计算,我们就能得到小车实际的地理位置,运动状态,再通过和内置的路径进行对比,然后再
次调整,最终实现现实路径和理想路径的统一。目前,这种AGV类型的应用比较广泛。当然,这种小车的缺点就是如
果路面干扰激光反射的东西比较多,那么就可能出现偏差,再比如,我们把激光换成红外或者超声波,它也可以变
成此种类型的AGV。
(3)视觉式
  视觉式的AGV相较于前面两个类型的AGV来说,它的发展速度和趋势都是最猛的,也是最成熟的。这种类型的AGV
主要是装有镜头,传感器还有处理器等,在它的数据库中有许多预先设置好的周围路径的图像,当我们的小车在行
驶的过程中,它拍到的路面信息就和数据库中的路面信息或者环境信息进行对比,以此来确定自己的位置来进行下
一步的动作。需要用到现在最热门的人工智能的技术。这种AGV的优点就是它很灵活,是因为有自己的图像数据库,
所以它的实用性也是非常的强,这也得益于人工智能技术和大数据乃至云存储技术的发展。除此以外,还有许多类
型的AGV,我们就不一一介绍了。
(二)、智能小车的应用

智能循迹小车发展历史及主要应用场所如下:
(1)仓储业
  看到这个标题我相信大家应该都不陌生,平常我们在电视机上看到的这种智能式的一体化的小车,就在仓库里
走来走去的那种,其实它是在搬运货物,平常要是我们人类去运输的话,我们通常是用那种推车,起降车之类的,
现在很多的大公司为了节省成本,或者说是为了赚钱,都会用这样智能化的小车,首先,仓库很大,用人去做很费
事费力,最关键的一点是每天这些仓库的货放在哪里都是固定的,不会有大幅度的变动,这种固定的路径用智能小
车可以说是再合适都不过了,举例的话我们可以参考海尔集团。
(2)制造业
  AGV小车由于自己本身的一些特性,包括稳定性,准确性,快速性,这是控制的基本三要素,可以给予制造行业
很多的便利。由多台ACV小车组成的物流运输处理系统,较人工搬运系统来说更灵活,而且也更加的方便,由于我们
人本身的缺点,机器的孜孜不倦、高效率等特点可以在原本人工生产一件产品的时间之中,它能生产几十件,并且
毫不费力,这不比人工香?举个例子,这是某个汽车组装厂,他们为了减少成本,提高效率,做出了使用AGV小车来
运输的决定,在使用了AGV小车运输之后,他们惊奇的发现,他们的装配时间少了,组装错误也变少了,投资成本和
人工成本也降低了。在现在几个大型的著名的汽车公司比如通用,丰田,大众等来讲,AGV小车已经不可取代。近年
来,作为基于计算机的现代集成制造系统所不可替代的运输工具,AGV小车以一股不可匹敌的力量深入到了各行各
业,像是微电子行业,家电生产行业,机械生产行业,烟草行业等等,AGV小车紧跟潮流的步伐前进,正在迈向更远
的未来。
(3)邮局、图书馆、港口码头和机场
  传统的搬运方式在我们的邮局、图书馆、港口码头、机场、火车站、地铁站这些人流密集的地方,会非常的不
方便,何况在这种地方,许多的搬运工作都不好进行,还有可能随时发生意外,人工搬动也很单一,浪费成本。但
是AGV由于有智能化和自动化的特点,应付这些场合可以说不在话下。相较于国内在1990年才开始使用AGV小车,国
外早在几年前就开始了智能小车在邮局的应用,就比如瑞典和东京的邮局。
(4) 烟草、医药、化工、食品
  相对于人来讲,小车是比较干净的,所以它们可以处理一些干净环境下的工作,比如烟草、医药、化工、食品
等。我们也知道,中国是制造业大国,人口密集,需求量十分的大,此时,AGV小车就派上用场了,在我国的许多烟
厂,都广泛使用AGV,比如红河卷烟厂、淮阴卷烟厂等,都是使用AGV小车来完成作业的。现如今的医药行业或者是
食品行业的运输,都是使用的AGV,AGV的重要性不言而喻。
(5) 危险场所和特种中行业
  由于小车的本质是机器人,所以呢,它可以替代人去做一些危险的工作,比如在面对敌军时,可以进行带头侦
察,让我们的战士可以规避很多危险,还可以进行人质的搜救,在面对犯罪分子时,我们可以使用我们视觉式的AGV
进入内部去观察人质还有犯罪分子的行动和走向,为我们的下一步行动作铺垫。在核电厂的核储存地点使用AGV小
车,以避免辐射的危险。AGV小车可在黑暗环境中,准确、可靠的运输物料。
(三) 、智能循迹小车中使用的关键技术
  AGV所引领的时代趋势和潮流势不可挡,现在许多的国家都在研究无人驾驶汽车,无人驾驶汽车本质上就是由AGV变化改进而来的,由于现在人工智能和大数据技术的快速发展,无人驾驶汽车也是非常的火热,无人驾驶汽车的
系统非常的复杂,首先它本身要具有运动功能,其次,它还要有路径规划,信息决策,环境感知等拟人的一些功
能。
  人们获取信息的渠道是什么?就是通过我们的感官来获取信息的,我们的嘴,我们的鼻子,我们的眼睛,我们
的耳朵,我们的肢体,我们的这些感官将我们所接触到的信息传给我们的大脑,大脑进行处理整合,总结出来的信
息是对于事物综合的全面的描述,我们将这种信息处理加工的过程叫作信息的融合过程。
  多传感器信息融合这样的技术原理就是模仿人类的感官系统所改进而来的,这也是我们人为什么这么智能化的
原因。人的大脑十分的先进,我们人能认识到某一物体,并不是一个感官的结果,要是一个感官就能认识全,认识
准确的话,那岂不是盲人摸象,自欺欺人罢了。所以呢,我们的认识某一事物需要多种感官结合来认识,这也是为
什么叫多传感器信息融合了,为的就是准确认识某一事物,各种感官系统互相认识,然后互相补足,最终得到事物
的最终形态。多传感器信息融合有许多的特点,比如减少信息模糊性,提高了可信度等。
(四) 、智能循迹小车的研究意义
  人们一直以来的梦想就是能让机器代替人的劳作,经过了几十年的发展,从第一台机器人诞生初始,机器人被
普遍应用在机械、电子、交通等传统或者高科技行业。与此同时,机器人的智能化程度也越来越高,伴随着改变的
便是人们的生活方式。这一切终究要得益于孜孜不倦的人们为了梦想所作出的贡献。
  随着科学技术的发展,作为机器人身上所必不可少的感官系统,其内在的图像处理技术已经非常发达了,但
是,机器人对于图像的理解还略有瑕疵,现在最流行的人工智能所搭载的视觉技术也仅仅只能识别一些结构比较简
单的物体,对于结构比较复杂的物体,其识别的困难性不言而喻。对于视觉传感器来说,我们主要用到的就是摄像
管还有CCD,经过不断的发展,现在CCD技术已经逐渐趋于成熟,现在可以达到自动变焦,但是其缺点就是成本还是
相当昂贵,而且其体积不小,集成化程度不高。现在很多基于感官的传感器越来越多,视觉式的传感器无非是现在
许多技术的不二选择,对于AGV来说也是如此。
  对于我们本文所要介绍的AGV来说,无疑它是机器人中的一个典型,而对于如今最火热的无人驾驶技术,其本质
也是AGV的一种,包括使用在AGV上的视觉技术,其最终的归宿就是现如今的智能导航,可见,智能循迹小车的重要
性。而且,这种技术并不是只在无人驾驶技术上得到展现,包括医疗仪器,包括无人机,特别是无人机的使用,对
于视觉技术的使用和图像处理的使用尤为关键,那这些技术就是由我们本文所要介绍的AGV衍生出去的。
  那这种智能小车它由三大部分组成,传感器检测部分、CPU、执行部分。我们的智能小车由于所要执行的功能相
对来说比较简单,不需要用到我们的视觉技术,那么我们可以舍弃掉昂贵的CCD传感器,转而用比较便宜的红外传感
器作代替。对于CPU部分,我们选择的就是STC89C52这颗单片机作为硬件的主体,执行部分我们选择的是直流电机来
充当的,考虑到实际的情况,我们采用的方案就是通过软件模拟PWM调制,因为这样我们单片机的选择余地就比较
大,不然我们的选择也比较少,唯一的缺点就是可能调速不准确,不过没关系,本设计可以忽略这些缺点,当然,
除此以外,有了这些还不够,我们还需要我们的控制算法,如何精确的让小车沿着黑线运行是我们软件设计所要着
重描述的。至此,研究智能小车的意义便是让我们打好基础,面对当今世界人工智能的潮流能做到从容不迫,游刃
有余。

二、智能循迹小车任务设计

(一)、整体设计方案
  本设计整体的方案就是红外传感器感应黑线通过信号传给单片机,单片机再做出反应给电机驱动,电机驱动驱
动直流电机进行反应,这样就形成了一个反馈,让我们的小车可以完整的沿着黑线前进,并完整走完一圈。
1、 系统设计步骤
  第一步就是确定整个小车整体的设计框架。第二步就是通过我们的软件设计合理的原理图。第三步就是确定程
序流程,用软件进行编程。第四步就是焊接PCB板,并烧录程序。第五步就是调试功能。
2、 系统基本组成
  单片机我们使用的是STC89C52,红外循迹模块我们使用的是TCRT5000,电机驱动模块我们使用的是L293D,还有包
括像其他的一些部分比如小车板子,还有电源模块。整体示意图如图1所示。
在这里插入图片描述

图1系统的基本组成
(二)、整体控制方案确定
  循迹小车的系统控制组成图如图2所示[14-16]。这里就是自控原理里面所说的单闭环控制回路。由光电传感
器和黑色引导线所组成偏差信号,这个偏差信号作为输入进入单片机,也就是系统的控制器,经过单片机处理的信
号进入驱动模块和直流电机,直流电机作为整个系统的执行器就开始行动,让小车沿着预定的路线行驶。在这里插入图片描述

图2智能循迹小车控制框图
  采用4个1.5V的可充电池组作为主电源。STC89C52单片机作为主控制器。本设计中使用的直流电机本身是具有减
速功能的,所以调速功能就不在考虑之中。不使用步进电机,而是使用L293D去驱使直流电机。L293D是怎么进行电
机驱动的呢?原理就是它是由TTL电平来进行电机的操控的,输入量的变化会直接影响小车的运动状态。我们用
L293D的一个重要的原因就是它便宜,方便,可操控性好等优点。用光敏电阻组成光敏探测器。光敏电阻的阻值可以
跟随周围环境光线的变化而变化。当我们的传感器检测到光源,就说明这个地方的反光性特别强,说明这个地方没
有黑线,当我们的传感器没有检测到反射光,就说明是黑线,因为黑色是不反射光线的,光线经过会被完全的吸
收,这是个简单的物理知识,也是此传感器的物理特性。这样单片机和循迹传感器组成了一个带有反馈信号的系
统。

三、智能循迹小车的总体设计及工作原理简介

(一)、智能小车的总体硬件结构设计
智能循迹小车总体硬件结构设计该车的结构主要分为以下几个部分:
  首先是电源模块,这个就是给整个小车上电的,提供动力的模块。其次是循迹模块,我们选用的红外传感器,
用来感测黑线的位置。再次是电机驱动模块,用来驱动直流电机用的,本设计选用的是L293D模块,最后我们的主角
就是STC89C52单片机主控模块,用来处理信息和各种指令的。
  总体硬件结构框图如图3所示[3]。整个的过程,STC89C52作为整个部分的重中之重,红外传感器就是我们的
循迹模块,如果说STC89C52是我们的脑子的话,那红外传感器就是我们的眼,执行器就是我们的想法,也是就是我
们的电机驱动模块L293D。电源模块用4节1.5V的电池供电,经过LM393电压比较模块后输出电压稳定在+5V,然后再向
各个模块供电[17-19]在这里插入图片描述

图3智能循迹小车总体硬件结构图
(二)、智能小车工作原理简介
  在本设计中,我们用的是两路的一个智能循迹小车,循迹主要就是在地上贴上一厘米左右的黑色防火胶带,小
车能沿着这一厘米左右的黑色胶带线走,红外传感器的发射管发出红外线,传感器接受,两路的传感器分别是左边
一个,然后右边一个,在同一个传感器模块上,这也主要是减少成本,红外传感器接收到信号。同时,通过模数转
换将获得的物理量转变成电信号,经过双电压比较器处理信号得到比较稳定的信号,进入到单片机的P3.6,P3.7口,
再次的经过处理后,信号由P1.2,P1.3,P1.4,P1.5,P1.6,P1.7这几个口运送到电机驱动电路L293D芯片,小车因此
便会走动起来。循迹时,因为红外传感器的物理特性,对于不同物体或者颜色的东西反射系数不一样,所以可以根
据传感器接收红外线的光线不同作为偏差量来控制小车的走向。本设计采用两路红外传感器,装在了小车最前部
[7][13]。左间传感器接收不到反射回来的红外线,右边也接收不到反射回来的红外线,此时小车对应的是停
止,说明我们贴的线太粗了,把两路的红外传感器全都覆盖住了,小车停止前进;当左边的传感器没有检测到信
号,也就是输入为低电平0,但是右边传感器能检测到信号,也就是输入为高电平1,说明小车右偏程度过大,它已
经偏离了原来的轨迹,所以此时小车会向左转动;同样的一个道理,当右边的传感器检测不到信号,但是左边传感
器能检测到信号,说明小车左偏程度过大,那么小车会向右转动,以此来实现自动循迹的功能。本设计中红外传感
器离地面垂直距离为2cm,能在没有强烈日光干扰或在有日光灯的房间里,完全能满足探测要求,具有很好的可靠性
与抗干扰能力[5-6]。

四、智能循迹小车的硬件设计

(一)、智能小车的电路设计
  首先,一个单片机,我们拿到手,我们要去做它的整体系统的电路设计,我们就需要考虑两个部分:一是如何
解决系统的配置,简而言之就是怎么按照系统功能要求配置像键盘显示器,鼠标等这样的外部设备。二是如何解决
系统的扩展问题,当我们内部功能ROM,RAM,I/O接口等不够系统使用了,我们就需要设计外接接口,同时还要设计相
对应的电路[20]。
1.STC89C52单片机的功能特性描述和简介
  单片机的本质是一种集成电路芯片,它是一种超大规模的集成电路,它将计算机的很多功能单元都整合到了一
块仅用一只手就能把握住的硅芯片上,这些功能单元包括中央处理器,随机存储器,只读存储器,I/O和中断系统
等,还有许多可能的额外的功能比如显示驱动电路,脉冲宽度调制电路等。
  本设计选择了的单片机是STC89C52,它是由世界著名的公司STC公司生产的,它是一块带8K字节闪烁可编程可擦
除的只读存储器。一个芯片上拥有8位CPU,并且带有系统可编程的Flash。高灵活、超有效的解决方案是STC89C52带
给许多嵌入式控制应用系统的优势。STC89C52具有的标售功能我简单的列举以下几个:8k字节Flash,512字节RAM,
32位I/O口线,看门狗定时器,全双工串行口等。除此以外,在空闲模式下,CPU它也会累,就像我们人一样,它会
停止工作,但是它会允许RAM、定时器/计数器、串口、中断继续工作。在掉电保护方式下,RAM的内容被完整无缺的
保存下来,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
  可以说这块芯片就是整个设计部分的核心了,是驱动整个小车运动所最重要的部分,是整个小车的brain,
STC89C52单片机是宏晶科技推出的新一代高速、低功耗并且它的抗干扰特别强的单片机,指令代码完全兼容传统
8051单片机,12时钟/机器周期和6时钟/机器周期可以任意选择。
的信号通过P3.7,P3.6口输入到单片机,经过处理后,由P1.2,P1.3,P1.4,P1.5,P1.6,P1.7口输出到L293D的IN1、
IN2、IN3、IN4、EA1、EA2引脚,从而完成对小车的控制。
  本设计中,单片机的40号引脚接+5V的电源,接地引脚接20号,18和19引脚都是XTAL,都接在频率为11.0592MHZ
的晶振上,并且还要接一个电容,电容的大小为20PF左右。9引脚RST外接复位电路,为单片机提供上电复位。作为
P3口的第二功能,单片机的通信端我们接单片机的10和11引脚,这两个口分别是串行输入口和串行输出口,用来下
载程序用。两路红外传感器的输出分别是L0和R0口,用来接单片机的16和17号引脚,这样以来,电信号的输入就完
成了。3引脚P1.2,4引脚P1.3,5引脚P1.4,6引脚P1.5,7引脚P1.6,8引脚

P1.7分别和L293D芯片的INI,IN2,IN3,IN4,ENA,ENB引脚相连,以完成将经过单片机处理过的信号输入给电机驱动电
路。
表1STC89C52单片机和AT89C52单片机的对比
  
STC89C52 AT89C52
序存储空间 8K字节 8K字节
数据存储空间 512字节 256字节
EEPROM存储空间 内带4K字节 无
是否可以直接使用串口下载 可以 不可以
  图4 STC89C52单片机引脚图gP0: Q/ADO P:d, 1/AD1 P0. 2/AD2 PO… ^/AD3 P&. 4/AD4 P’S &/AD5 PC.6/AD6
PB见 7/AD7EA . .ALE/PRO.GPSENP2. 7/A15 P^; 6/Al 4 P;备 5/A13 P2. 47-Al? P 2.d/Al 1 P 蕙 S-:7A1.0
P2.1/A9 P2…O/A8T2/P1. Q.[ T2WF1. 1 [ Pl. 2 1 Pl. 3:[ Fl. 4 j Pl. 5 [ Pl. 6 [ Pl. 7 [ RST : RXD
/P3j 0 [ TXD/P3. 1 [ JNT0/P3; 2 [ INT1/P3;;& [ TQ/P3… 4 [ T1/P3-. 5 [ 丽7PS?,:芯[ RD/P 3; 7 L
XTAL2 ? .XTAL1 - VSS:[
10在这里插入图片描述

图5STC89C52单片机实物图
2、晶振电路
  在我们单片机的内部,有一个高增益的反相放大器,它的作用就是用来构成振荡器,输入口和输出口分别是
XTAL1和XTAL2。内部振荡器产生自激振荡的条件就是在XTAL1和XTAL2的引脚上外接定时元件。定时元件通常采用石
英晶体和电容组成的并联谐振回路。从XTAL1接入,如图6所示。由于外部时钟信号经过二分频触发后作为外吝阳时
钟电路输入的,所以对外时钟信号的占空比没有要求。
  本设计选用的是11.0592MHZ的无源晶振、2个22pF电容,使得一个机器周期是1us。晶振的作用是为系统提供基
本的时钟信号,单片机的一切运行都要靠这个晶振,晶振提供的时钟频率越高,单片机的运行速度越快。而两个电
容的作用则是起到并联谐振,如果没电容,振荡电路会因为没有回路而停振,电路不能正常工作。

3、复位电路
  复位电路的作用是在上电或复位过程中,控制CPU的复位状态:这段时间内让CPU保持复位状态,而不是一上电
或刚复位完毕就工作,防止CPU发出错误的指令、执行错误操作,也可以提高电磁兼容性能。89系列单片机的复位信
号是从RST引脚输入到芯片内的施密特触发器中的。施密特触发电路是一种波形整形电路,当任何波形的信号进入电
路时,输出在正、负饱和之间跳动,产生方波或脉波输出。不同于比较器,施密特触发电路有两个临界电压且形成
一个滞后区,可以防止在滞后范围内之噪声干扰电路的正常工作。如遥控接收线路,传感器输入申路都会用到它整
形。当系统处于正常工作状态时,且振荡器稳定后,如果RST引脚上有一个高电平并维持2个机器周期C24个振荡周
期)以上,则CPU就可以响应并将系统复位。
  本设计采用的电容值为10UF的电容和10KQ的电阻。如图7所示上电后,由于电容充电,使RST持续一段高电平时
间。当单片机已在运行之中时,按下复位键也能使RST持续一段时间的高电平,从而实现上电且开关复位的操作。
GND
图7单片机复位电路
在这里插入图片描述

(二)、红外循迹模块
  在本次的设计中,红外循迹模块我们采用的是TCRT5000的一个双路红外循迹模块,为达到减少成本的目的,这
两路的红外传感器是在同一模块上的。这个模块安置在小车的最前端,左边和右边各一个红外传感器,这种放置的
方法既简单,又方便,小车更能稳定运行,并且其程序的控制算法来说相对简单。由于实在同一模块上,所以显得
比较笨重,对于幅度较大的弯道,这样的设计不利于对其信号采集的准确性。图8为传感器及其外围电路的原理图
回。
  TCRT5000型红外光电传感器由一个高发射功率的红外光电二极管和一个接收红外线高度灵敏的光电三极管(NPN
型)组成。其中滑动变阻器R3是一个蓝白电位器,通过调整R3的阻值从而达到调整光敏三极管对反射光的灵敏度。
  红外发射二极管不断的发射出红外线。当反射回来的红外线强度足够大时,光敏三极管饱和,则该模块输出为
高电平;当反射回来的红外线强度不够大或者没有反射回来红外线时,
  光敏三极管一直处于关断状态,则该模块的输出为低电平。光敏三极管除了具有将光信号转换成电信号的功能
外,还具有对电信号放大的功能[9]。在这里插入图片描述

图8TCRT5000传感器电路图在这里插入图片描述

图9红外循迹模块实物图
(三)、双电压比较模块
  我们单片机的电信号因为比较弱也比较不稳定,那么我们的比较器就出现了,它可以稳定电压电流,使电压电
流不会因为电容耦合出现不稳定偏高或偏低的情况出现。
LM393芯片的功能框图和引脚图如图10和图11所示。
  LM393是由两个独立的、高精度电压比较器组成的集成电路,失调电压低,最大为2.0mV。我们学习模电的时候
会学到一个差模放大器的知识点,LM393就是差模结构。它专为获得宽电压范围、单电源供电而设计,也可以以双电
源供电:而目无论电源申片大小,申电源消耗的电流者很低。还有一一个特性。使是单电流供由。比较驱的土模输
入电压范围接近地电平。主要应用于限幅器、简单的模/数转换器、脉冲发生器、方波发生器、延时发生器、宽频压
控振荡器、MOS时钟计时器、多频振荡器和高申平数字逻辑门电路。393被设计成能直接连接TTL和CMOS;当用双电源
供电时,它能兼容MOS逻辑电路一这是低功耗的393相较于标准比较器的独特优势。

(四)、电机驱动模块
  此设计用的是电机驱动模块L293D来进行电机的控制的。图6为驱动电机L293D的模块图。该芯片驱动方式比较简
单,直接驱动两个直流电机。控制每一路电机,都有三个信号,分别为ENA,INI,IN2和ENB,IN3,IN4。其中IN1IN4紧
紧相连着我们单片机的P1.2P1.5口,就像牛郎和织女一样紧密相连。这里芯片的工作电压为+5V。本设计中,采用两
个输出控制一个电机的方式。即OUT1和OUT2的使命就是牢牢控制住我们的左边那个直流电机,同理,OUT3和OUT4的
使命就是牢牢控制右边的那个直流电机。图6中的D1D8为箝位二极管。我们学过电磁学会知道,电机停止会产生一个
逆向的电流和电动势,我们设置这些箝位二极管,就是为了防止逆电动势烧坏芯片,芯片一旦烧毁,那么前面的工
作就前功尽弃,而且主控制器坏了,那么便一事无成,所以这亦是起到了保护电路和芯片的作用。我们这里解释下
为什么不用L298N,其实L298N和L293D的驱动原理是一样的,他们唯一的区别就是驱动电流不一样,封装不一样,本
设计用的智能循迹小车是两路的一个智能循迹小车,如果用L298N控制两路的循迹小车,那么就有点浪费,我们用
L293D来控制,就可以完美的避开这样一个问题节省成本。

(五)、智能循迹小车各部分PCB原理图1.图14电池电源电路PCB原理图
2、STC89C52主控电路
XtND
  图15STC89C52主控电路PCB原理图3、IO扩展输出接口扩展输出接口主要的功能简单来说就是增加单片机控制端
口的数量。
5、L293D驱动模块
在这里插入图片描述

图18L293D驱动模块PCB原理图

五、智能循迹小车的软件设计

(一)、软件设计所需要的软件
  在本设计中我们使用的软件有proteus和keilC51,proteus是在硬件设计中我们使用的,主要是用来画整个小车
各个部分的原理图的,那么keilC51就是用来编写小车程序的一个软件。我来简单介绍一下这款软件。
  在单片机的开发中,软件的作用也是非常大的。因此我来简单介绍一下程序语言的发展史,我们所学的C语言其
实是一种高级语言,一开始的语言并不是这样的,机器能读懂的语言叫做机器语言,只有0和1构成,又发展了几年
出现了汇编语言,这也是底层语言,但是其原理还是转化成机器语言让机器看懂的,又过了几年,C语言出现了,越
来越多的语言出现了,越来越面向我们所说的自然语言,我们也就更能理解,但是,所有的这样的一个本质都是转
化成机器语言才让机器执行的,这样的一个转化过程就需要我们的软件来解决,当然,也可以人工就行编译,不
过,现在这种方法已经淘汰了。我们对于单片机的汇编软件早期有A51,现在这几年我们都用keil,因为方便好用兼
容性还好,而且便宜。这几年来,大大小小的仿真机厂商全面支持keil可以看出来,keil对于单片机开发系列的重
要性不言而喻。
(二)、软件设计的流程
1、程序的main主函数
  程序的主函数比较简单,因为只有一个循迹功能,主要的控制流程是这样的,小车向右转或者是向左转都是程
序的指令,具体就是碰到哪种情况执行哪种指令,向右转是右边检测到黑线,向左转是左边检测到黑线。接下来我
将逐一分析小车的程序。
while(1)
{
if(Left_1_led0&&Right_1_led0)
run ()
Else
{
if(Left_1_led1&&Right_1_led0)
{
leftrun ();
}
if(Right_1_led1&&Left_1_led0)
{
rightrun();
}
if(Right_1_led1&&Left_1_led1)
{
stop();
}
}
}
程序的一开始我们定义的小车传感器检测到黑线,就为高电平,也就是1。反之,就是低电平,也就是0。
  第一句是while循环语句,条件永远为真,也就是程序无限进入循环,第二句是if语句,如果小车左边传感器没
有检测到黑线,右边的传感器也没有检测到黑线,也就是左右两边传感器信号都是低电平0的时候,那么程序将会调
用小车的run也就是前进函数,那么此时小车将会往前走。第三句也是if语句,如果小车左边传感器检测到黑线但是
右边传感器没有检测到黑线也就是左边传感器信号为1但是右边传感器信号为0时,程序将会调用小车的leftrun左转
函数,那么此时小车将会左转。第四句也是if语句,如果小车的左边没有检测到黑线但是右边检测到黑线,也就是
左边传感器信号为0右边传感器信号为1时,程序将会调用小车的rightrun右转函数,那么此时小车将会右转。第五
句是if语句,如果小车的左边传感器有信号,右边传感器也有信号,也就是小车左右传感器信号都为1,此时的情况
就是小车可能是悬空的一个状态亦或是小车左右两边的传感器都检测到黑线的时候,程序此时会调用小车的stop函
数也就是停止函数,那么此时小车就会停止。其实这样的时候我们就会出现问题,既然小车悬空和两边都碰到黑线
都会停止,如果是第二种情况那么怎么办?由于我们左右传感器是在同一个模块上的,左右传感器相隔的距离也就
是两厘米,如果黑线宽度超过两厘米,那么此时小车就会停止不同,为了避免这种情况,采用的黑线宽度应该尽量
在两厘米以下,这样保证小车程序的正常运行,这种情况我在调试的时候也是碰到过的,特意在此做个提醒。当
然,还有解决办法就是买两路的传感器不要装在同一模块上,这样能排除黑线宽度的影响,但是这样小车的速度就
会有一定程度上的牺牲。
2、程序的各个子程序
void run(void)
{
push_val_left=12;
push_val_right=12;
Left_moto_go;
Right_moto_go;
}
  这是循迹小车的前进函数,设置左右电机速度的调节变量为12(其中0是最小的,20是最大的,我这里面设置了
12),下面两条程序分别是左电机前进和右电机前进。
void backrun(void)
{
push_val_left=12;
push_val_right=12;
Left_moto_back;
Right_moto_back;
}
这是小车的后退函数,跟前进函数一样,前两条是小车左右电机的速度调节变量,后两条是左右电机后退。
void leftrun(void) push_val_left=5;
push_val_right=15;
Right_moto_go ;
Left_moto_back ;
}
  这是小车的左转程序,前两条是左右电机的速度调节,后两条实现的是让右电机前进,左电机后退,这样来实
现小车的左转。
void rightrun(void)
{
push_val_left=16;
push_val_right=8;
Left_moto_go ;
Right_moto_back ;
}
  这是小车的右转程序,和左转程序的逻辑差不多,前两条是小车左右电机的速度调节,后两条实现的是让左电
机前进,让右电机后退,从而实现小车的右转。
void stop(void)
{
17
Right_moto_Stop ;
Left_moto_Stop ;
}
这是小车的停止程序,左右点击都停止小车便停止。
void pwm_out_left_moto(void)
{
if(Left_moto_stop)
{
if(pwm_val_left<=push_val_left)
{
Left_moto_pwm=1;
}
else
{
Lef t_mo t o_pwm= 0;
}
if(pwm_val_left>=20)
pwm_val_left=0;
}
else
{
Lef t_mo t o_pwm= 0;
}
}
  这是小车左电机PWM调速的程序,所谓PWM,全称是脉冲宽度调制,是单片机最常用的控制电机转速的方法。根本
点是改变占空比来达到调节小车速度,当然也可以用加大或减小电压的方法来达到控制小车速度,但这样明显没有
改变占空比来的方便,占空比的改变我们只需要控制高电平在一个周期内的时间就可以了回。
void pwm_out_right_moto(void)
{
if(Right_moto_stop)
{
if(pwm_val_right<=push_val_right)
{
Right_moto_pwm=1;
}
else
{
Right_moto_pwm=0;
}
if(pwm_val_right>=20)
pwm_val_right=0;
}
else
{
Right_moto_pwm=0;
}
}
18
  这是小车右电机的调速,也是采用的PWM调速,和左电机一样,改变高电平在一个周期的比例也就是改变占空比
来达到调节电机速度的。
六、智能循迹小车的仿真实验
  为了验证我们整个设计的可行性,我们用我们的仿真软件Proteus搭建模拟电路来进行这样的一个仿真实验,如
下图是我们搭建的一个仿真图,接下来我们进行测试。
  在我们的这个仿真图上,基本上所有的模块都是有的,我们用一个LCD的显示电路去模拟我们的小车循迹的过
程,初始值都是设为50,在这样的一个情况下,我们小车是进行直行的,然后我们下面循迹模块模拟我们小车两边
传感器的偏差情况,假如我们调整循迹模块右边的阻值,显示器上右边的值就会变大,这样我们的小车左轮不动,
右轮向前动,可以实现小车的左转,假如我们调整左边的阻值,那么小车右轮不动,左轮向前动,这样模拟了小车
的右转,至此,小车通过传感器进行左右转动的方案的可行性可以得到验证,接下来我们进行实物的调试。在这里插入图片描述

图19智能循迹小车仿真图
七、智能循迹小车组装和整体调试
(一)、智能小车的组装
  智能小车的组装主要用到了这些东西,一块亚克力的板子,两个小车轮子,一个万向轮,两个电机,一个L293D
电机驱动模块,STC89C52单片机主控模块,IO扩展接口,以及红外传感器,电池盒,电烙铁,4节1.5V的电池,还有
若干线材,若干的螺丝和螺丝柱。组装的过程还是比较简单的,就是在使用电烙铁的过程中,还是有些不熟练,如
何准确的将锡丝融化然后粘上去是一个比较大的问题,此外,考虑到如何让小车的布局简洁美观也是在我们的考虑
之中。以下是小车整体组装的完成图和其他一些辅助器材。
在这里插入图片描述

图20智能循迹小车实物图

图22智能循迹小车程序下载器
(二)、智能小车的软件调试
  我们程序的调试主要是用到了我们的STC-ISP的软件来进行调试的,以下是程序调试的结果,我们看到HEX文件
已经写入进我们的单片机了,软件下面的提示框也显示程序已经写入,这样我们的小车就能根据我们的程序进行运
行了。
  在调试的过程中,我们也发现了一些问题,比如,我们USB的端口的选择一定要与电脑端口的选择对应,不然我
们的程序写入不了,还有就是一开始显示提示握手失败,后来我把最低波特率调低问题便解决了,后来我仔细的去
询问了这样的一个问题,原来是我们电脑的运行版本不一样,有的是windows?,比较古老,有的是windows11,比较
先进,这里统一调成最低便可以解决问题,我们这里就不去进行深究了。
  还有一个问题就是无论我们进行程序调试亦或是仿真的时候,我们都会注意到,很多软件没有STC89C52这样的
一块单片机,那这样的画我们其实可以用AT89C52来代替,这两块单片机其实本质上是一样的,都是基于51的内核,
唯一的不同可能就是封装的不同还有引脚的不同,功能都是一样的。
(三)、智能小车的实物调试
  小车实物的调试算是最重要也是最困难的一部分,我们在之前就说过,小车的电机部分和驱动模块之间需要焊
接,由于我是个新手,对于电烙铁的使用也是捉襟见肘,在全部完成组装开始调试的时候,我就出现了一个问题,
就是当我挡住左边的传感器,模拟了右边的传感器检测到黑线,这是红外传感器的特性,按照程序的设置小车轮子
应该是反转的,就是一个轮子往前转,另一个轮子往后转,而且应该是左边的轮子往后前转然后右边的往后转,因
为模拟了右边的轮子检测到黑线,但是在我调试的时候却不是这样,竟然是一个轮子转一个轮子不转,我一开始的
怀疑是可能是焊接的不好,所以我又重新焊接了一次,发现结果是一样的,后来我在调试的时候发现,那个轮子并
不是完全的不转,我如果轻轻用手碰一下,它是会转的,然后我就发现了不对劲,小车的整个电池组是用4节1.5V的
电池组装完成的,这
4节电池是老电池,而且型号还不一样,我就怀疑有可能是小车电池没电的情况,我又买来了新电池装上去,这回调
试的情况符合程序,所以我又赶紧买来1.5厘米的防水黑胶布,我用16张白纸组成一张大的白色底面,用黑色胶布贴
成圆形的赛道,准备进行调试,结果新的情况又出现了,小车居然后退了,我又按照原理图好好看了下,原来是我
左右电机线接反了,导致原来的前进变成了后退,检查完成再次进行调试,小车便能圆满走完一整圈。
在这里插入图片描述

图24小车调试过程
在这里插入图片描述

图25小车实物运行图

八、 结论

此设计作品选择的器件比较简单,在实际操作中也已很容易地实现了。经过我们多次的测试,最后得出了小车
基本上是能够沿着黑线前进的,基本是完成了我们预期的目标。不足之处是,由于小车的两个传感器集成在同一模
块上,这样就导致了如果贴的黑线太粗就会导致小车无法正常运行的问题,还有一个问题是小车采用的是直流电
机,控制会相对难而且不稳定,也不能大幅度转弯。现阶段小车实现的是最简单的寻迹、计时功能,但由干基础的
系统已经搭建,系统的稳定性很高,因此小车的功能可以继续扩展,借助稳定的基础系统,小车扩展的功能一定能
够很好的实现。
在设计的过程中,我查阅了大量的资料,学习了单片机等相应的知识,这使的设计得以顺利进行。

九、 讨论

本文提出了以STC89C52单片机为控制器的智能循迹小车的简单设计,主要的原理就是用红外传感器感应黑线,
以L293D作为驱动动力来使小车完整沿着黑线走完一整圈,实现了小车智能循迹的功能。整体来讲,此设计相对比较
简单,成本比较低廉,也比较容易实现,但是这种方案缺点也有,首先就是因为成本比较低廉,所以功能性上没有
特别的完善,小车前部传感器的布局方式让小车运行有了局限性,例如黑线不能太宽,最好控制在1.5厘米以内,这
样小车才能流畅完整的运行,还有就是小车的速度没办法特别快,因为L293D驱动电流也不是特别大,对于幅度比较
大的弯道,小车可能会冲出去等等,这些问题都有待去改善。

STM32是一款嵌入式微控制器系列,常用于物联网、机器人等项目。对于4路红外寻迹小车的代码,通常涉及硬件连接、中断处理、以及控制算法。这里是一个简化的流程概述: 1. **硬件准备**: - 需要STM32单片机,连接4个红外传感器模块和两个电机驱动器。 - 红外传感器接在STM32的输入端口上,用于检测前方障碍物。 - 电机通过PWM信号控制,可以使用定时器或HAL库来生成。 2. **软件配置**: - 使用Keil MDK或其他IDE编写代码。 - 初始化GPIO和ADC模块,配置传感器的中断触发条件。 - 实现中断服务函数(ISR),读取传感器数据并判断行驶方向。 3. **主程序循环**: - 主循环里,检查传感器的中断标志是否被设置,如果是,则读取数据并更新行驶决策。 - 根据传感器的数据调整电机的转动方向和速度,比如使用PID控制算法。 4. **行驶控制**: - 如果前方有障碍,车辆应该向两侧避开;如果无障碍,根据红外传感器信号的强度确定直线或者转弯。 5. **添加PID控制**: - 可能需要对车体位置进行PID控制,保证小车沿预设轨迹行驶。 ```c // 示例代码片段 void sensorISR() { uint16_t sensorValue = readSensor(); if (sensorValue > THRESHOLD) { // 中断处理:左侧障碍 leftMotor.backward(); rightMotor.forward(); } else { // ...其他方向处理... } } void main() { initializeSensors(); while(1) { if (sensorInterruptFlag) { sensorISR(); clearInterruptFlag(); } adjustMotors(); } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值