设 计 报 告
课程:机器人工程
设计名称:智能循迹小车
小组成员:
学号:
专业: 机械电子工程
日期: 2012/2/5
指导老师:
成绩:
1.任务及要求
1.1任务
设计一个基于直流电机的自动寻迹小车,使小车能够自动检测地面黑色轨迹,并沿着黑色车轨迹行驶。系统方案方框图如图1-1所示。
图1-1 系统方案方框图
2.系统设计方案
2.1小车循迹原理
这里的循迹是指小车在白色地板上循黑线行走,由于黑线和白色地板对光线的反射系数不同,可以根据接收到的反射光的强弱来判断“道路”。通常采取的方法是红外探测法。
红外探测法,即利用红外线在不同颜色的物体表面具有不同的反射性质的特点,在小车行驶过程中不断地向地面发射红外光,当红外光遇到白色纸质地板时发生漫反射,反射光被装在小车上的接收管接收;如果遇到黑线则红外光被吸收,小车上的接收管接收不到红外光。单片机就是否收到反射回来的红外光为依据来确定黑线的位置和小车的行走路线。
2.2控制系统总体设计
自动循迹小车控制系统由主控制电路模块、直流电压电源模块、红外检测模块、电机及驱动模块等部分组成,控制系统的结构框图如图2-1 所示。
主控制电路模块:用STC89C52单片机、复位电路,时钟电路
其他模块见表2-1所示。
表2-1 其他模块构成
3.系统方案
3.1 寻迹传感器模块
本寻迹采用简单的红外探头。白色的为红外发射探头,通电后连续的发射红外光线;黑色的为红外接收探头,接受反射回来的红外光线。
当寻迹时,红外接收头接收到黑线反射的红外光,电阻变小,对应P1端变为低电平。将信号送入单片机进行处理。
3.2控制器模块
采用STC89C52单片机作为主控制器。它是一个低功耗,高性能的8 位单片机,片内含32k 空间的可反复擦写100,000 次Flash 只读存储器,具有4K 的随机存取数据存储器(RAM),32 个I/O口,2个8位可编程定时计数器,且可在线编程、调试,方便地实现程序的下载与整机的调试。
时钟电路和复位电路 如图3-2(与单片机构成最小系统)
1)采用外部时钟,晶振频率为12MHZ
2)采用按键复位
图3-2 时钟电路和复位电路
3.3电源模块
电源采用直流电源,为四节五号电池供电。为电机驱动电路板、传感器模块板和单片机主控制板提供能源,满足寻迹要求。
3.4电机及驱动模块
3.4.1电机
车体采用四轮结构,前轮驱动;为三级减速机构,有一级蜗轮蜗杆传动,两级直齿轮传动。电机采用直流减速电机,直流减速电机转动力矩大,体积小,重量轻,装配简单,使用方便。由于其内部由高速电动机提供原始动力,带动变速(减速)齿轮组,可以产生较大扭力。
3.4.2驱动
驱动模块采用专用芯片LG9110 作为电机驱动芯片,以下为L298N的引脚图和输入输出关系表。
图3-3 LG9110外部引脚 表2 LG9110管脚定义
驱动电路的设计如图3-4 所示:
图3-4 LG9110电机驱动电路
4.软件设计
智能小车通过前端的红外传感器,识别寻迹的效果。当左指示灯探到白色道路时,说明小车往左跑偏,应该左轮比右轮转速快。此处设为左轮正转,右轮停转,从而实现寻线功能。
单片机控制端口初始化定义如下:
sbit LeftLed=P2^0; //定义前方左侧指示灯端口
sbit RightLed=P0^7; //定义前方右侧指示灯端口
sbit LeftIR=P3^5; //定义前方左侧红外探头端口
sbit RightIR=P3^6; //定义前方右侧红外探头端口
sbit M1B=P0^0; //定义左侧电机驱动A端
sbit M1A=P0^1; //定义左侧电机驱动B端
sbit M2B=P0^2; //定义右侧电机驱动A端
sbit M2A=P0^3; //定义右侧电机驱动B端
sbit B1=P0^4; //定义语音识别传感器端口
sbit SB1=P0^6; //定义蜂鸣器端口
……
void ControlCar(unsigned char ConType) //定义电机控制子程序
{
M1A=0; //将M1电机A端初始化为0
M1B=0; //将M1电机B端初始化为0
M2A=0; //将M2电机A端初始化为0
M2B=0;
寻迹相关程序段如下:
if(LeftIR==0 & RightIR==1) //左侧红外探头没有接收到白色道路信号
{
ControlCar(4); //左侧没有信号时,开始向右转一定的角度
Delay(); //修改这里进行转弯角度的调整
//Delay(); //同上
//Delay();
goto NextRun;
}
if(RightIR==0 & LeftIR==1)
{
ControlCar(3); //右侧没有信号时,开始向左转一定的角度
Delay(); //修改这里进行转弯角度的调整
//Delay(); //同上
//Delay();
goto NextRun;
}
if(RightIR==0 & LeftIR==0)
{
ControlCar(2); //后退
Delay(); //修改这里
// Delay(); //同上
// Delay();
goto NextRun;
}
if(RightIR==1 & LeftIR==1)
{
ControlCar(1); //前进
Delay(); //修改这里进调整
// Delay(); //同上
//Delay();
goto NextRun;
}
goto Start;
NextRun:
小车进入循迹模式后,即开始不停地扫描与探测器连接的单片机I/O口,一旦检测到某个I/O口有信号,即进入判断处理程序,如果小车左半部分压到黑线,车身向右偏出,此时应使小车向左转在经过了方向调整后,小车再继续向前行走,并继续探测黑线重复上述动作。循迹流程图如图4-1所示。
附录1:硬件电路图
附录2:程序源代码
#include <reg52.h> //包含51单片机相关的头文件
sbit LeftLed=P2^0; //定义前方左侧指示灯端口
sbit RightLed=P0^7; //定义前方右侧指示灯端口
sbit LeftIR=P3^5; //定义前方左侧红外探头端口
sbit RightIR=P3^6; //定义前方右侧红外探头端口
sbit FrontIR=P3^7; //定义前方正前方红外探头端口
sbit M1B=P0^0; //定义左侧电机驱动A端
sbit M1A=P0^1; //定义左侧电机驱动B端
sbit M2B=P0^2; //定义右侧电机驱动A端
sbit M2A=P0^3; //定义右侧电机驱动B端
sbit B1=P0^4; //定义语音 识别传感器端口
sbit SB1=P0^6; //定义蜂鸣器端口
#define RunShow P1 //定义数据显示端口
void Delay() //定义机器人调转子时间子程序
{ unsigned int DelayTime=50000; //定义机器人转弯时间变量
while(DelayTime--); //机器人转弯循环
SB1=!SB1; //蜂鸣器闪响
return;
}
void ControlCar(unsigned char ConType) //定义电机控制子程序
{
M1A=0; //将M1电机A端初始化为0
M1B=0; //将M1电机B端初始化为0
M2A=0; //将M2电机A端初始化为0
M2B=0; //将M2电机B端初始化为0
switch(ConType) //判断用户设定电机形式
{
case 1: //前进 //判断用户是否选择形式1
{ M1A=1; //M1电机正转
M2A=1; //M2电机正转
break;
}
case 2: //后退 //判断用户是否选择形式2
{ M1B=1; //M1电机反转
M2B=1; //M2电机反转
break;
}
case 3: //左转 //判断用户是否选择形式3
{
M2A=1; //M2电机正转
break;
}
case 4: //右转 //判断用户是否选择形式4
{ M1A=1; //M1电机正转
//M2电机反转
break;
}
case 8: //停止 //判断用户是否选择形式8
{
break; //退出当前选择
}
}
}
void main() //主程序入口
{
bit RunFlag=0; //定义小车运行标志位
RunShow=0; //初始化显示状态
ControlCar(1); //初始化小车运行状态
while(1) //程序主循环
{
Start:
LeftLed=LeftIR; //前方左侧指示灯指示出前方左侧红外探头状态
RightLed=RightIR; //前方右侧指示灯指示出前方右侧红外探头状态
if(FrontIR==0)
{
ControlCar(2); //前侧没有信号时,开始向后退
Delay(); //修改这里进行转弯角度的调整
//Delay(); //同上
//Delay();
ControlCar(4); //左侧没有信号时,开始向右转一定的角度
Delay(); //修改这里进行转弯角度的调整
Delay(); //同上
//Delay();
goto NextRun;
}
if(B1==0)
{
while(B1==0); //话筒,暂停
Delay(); //去除杂音
//Delay(); //同上
//Delay();
ControlCar(8);
Delay(); //停车
Delay(); //同上
Delay();
goto NextRun;
}
if(LeftIR==0 & RightIR==1) //左侧红外探头没有接收到白色道路信号
{
ControlCar(4); //左侧没有信号时,开始向右转一定的角度
Delay(); //修改这里进行转弯角度的调整
//Delay(); //同上
//Delay();
goto NextRun;
}
if(RightIR==0 & LeftIR==1)
{
ControlCar(3); //右侧没有信号时,开始向左转一定的角度
Delay(); //修改这里进行转弯角度的调整
//Delay(); //同上
//Delay();
goto NextRun;
}
if(RightIR==0 & LeftIR==0)
{
ControlCar(2); //后退
Delay(); //修改这里
// Delay(); //同上
// Delay();
goto NextRun;
}
if(RightIR==1 & LeftIR==1)
{
ControlCar(1); //前进
Delay(); //修改这里进调整
// Delay(); //同上
//Delay();
goto NextRun;
}
goto Start;
NextRun:
ControlCar(1);
}
}
第二篇:基于51单片机的智能循迹小车的设计
?54?
仪表技术??20xx年第2期
基于51单片机的智能循迹小车的设计
黄春平,万其明,叶?林
(中山职业技术学院电子信息工程系,广东中山528404)
??摘要:利用STC89S52为控制核心,通过红外发射和接收管采集信号,并将信号转换为能被单片机识别的数字信号。单片机控制直流电机不同的转动状态,实现小车的前进、后退、左转、右转等功能,并通过发光二极管指示不同的运动状态。整个系统的电路结构简单,可靠性高。
关键词:
51单片机;红外发射;直流电机;智能小车
1006-2394(2011)02-0054-03
中图分类号:TP273????????文献标识码:A????????文章编号:
TheDesignofIntelligentCarBasedon51
HUANGChun?ping,WANQi?ming,YELin
(ZhongshanPolytechnic,Zhongshan528404,China)
Abstract:ThechipSTC89S52isusedasthecontrolcenter,andsignalsarecollectedthroughtheinfraredtransmit?terandreceiver.Signalsareconvertedtodigitalsignalswhichcanbeidentifiedbythesinglechip.ThemicroprocessorcontrolsDCmotorrotationstatetoachievefunctionsofcargoingforward,backward,turningleftandturningrigh.tDif?ferentmotionstatesareindicatedthroughtheLED.Thesystemhassimplecircuitstructureandhighreliability.
Keywords:51?microcontroller;infraredtransmitting;DCmotor;intelligentcar
单片机是整个智能循迹小车的核心,控制所有模块。本系统采用STC89S52,它是一种低功耗、高性能
CMOS8位微控制器,具有8K字节在系统可编程FLASH存储器,使用STC公司高密度非易失性存储器技术制造,与工业80C51指令和引脚完全兼容。片上FLASH允许程序存储器在系统可编程,亦使用常规编程器。主控模块如图2所示,支持上电和按键复位。1.1?电源模块
电源模块采用了两种供电方式,在程序调试下载阶段采用了来自PC机的USB接口供电,在小车循迹行驶的时候采用4节1.5V的干电池供电。电源通过7805稳压块稳压,470?F和104电容进行滤波,如图3所示。1.2?红外检测模块
红外检测采用了TCRT5000,在车后部靠近后轮处安装两对TCRT5000红外对管,与路面距离控制在12mm左右。TCRT5000测试电路如图4所示。
黑线检测原理是红外发射管发射光线到路面,红外光遇到白底则被反射,接收管接收到反射光,经施密特触发器整形后输出低电平;当红外光遇到黑线时则被吸收,接收管没有接收到反射光,经施密特触发器整形后输出高电平。红外检测模块电路原理如图5所示。
图1?系统框图
??收稿日期:2010-09
?
,,,0?引言
智能小车在感知效应方面全面模拟人的机器系统,它是人工智能技术的试验场。智能小车具有识别、推理、学习和规划等智能机制,可以把感知和智能化结合起来,能在非特定环境下工作,在恶劣条件下探测、救生等方面具有广阔的应用前景。基于STC89S52单片机的智能循迹小车能沿黑色指引导线前进,通过红外发射接收,自动识别处理,发出声光信号指示运动状态。1?循迹小车硬件组成
循迹小车由机械和电控系统两部分组成。机械载体采用一种简单的车模装置,采用左右两轮分别驱动,前轮采用万向轮的车体设计,电机采用直流减速电机;电控系统主要由电源供应模块、红外检测模块、显示模块、电机驱动模块、蜂鸣器提示模块等五部分构成,如图1所示。
20xx年第2期??仪表技术?55?
1.3?直流电机驱动模块
两个后轮采用L293D驱动的直流电机带动。
L293D是驱动二相和四相直流电机的专用芯片,内含
两个H桥的高电压大电流双全桥式驱动器,接收标准TTL逻辑电平信号,可驱动36V、2A以下的电机。L293D可驱动两个电机,3、6和11、14脚之间分别接2个电机。2、7、10、15脚接输入控制电平,控制电机的正反转,EN1、EN2接控制使能端,控制电机的停转
,
图2?
主控模块
图3?
电源模块
图5?红外检测模块
L293D的逻辑功能如表1所示。单片机通过输出二组
PWM波来控制电机的正反转。控制方法与控制电路
都比较简单,2、7脚控制第一个电机的方向,输入的
EN1控制第一个电机的速度;10,15脚控制第二个电
机的方向,输入的EN2控制第二个电机的速度,直流
电机驱动电路如图6所示。
?
?56?
仪表技术??20xx年第2期
来控制小车的速度;红外对管光电传感器的有效应用;直流驱动芯片的可靠运用。参考文献:
[1]张拓,戴亚文.基于AT89S52单片机的智能循迹机器人设
计[J].机电工程技术,2009(1):13-15.
[2]孙涵芳.MCS51/96系列单片机原理与应用[M].北京:北
京航空航天大学出版社,1999.
图6?直流电机驱动电路表1?L293D逻辑功能
EN1(2)HHHH
IN1(IN3)HLHL
IN2(IN4)
HLLH
电机运转情况
前进后退左转右转
[3]王文华.基于80C51单片机的智能小车设计[J].山西电子
技术,2010(4):9-10.
[4]吴凌燕,唐金元,苏建元,等.基于AT89C52的实验室监控
系统设计[J].仪表技术,2009(2):3-5.
(丁云编发)
(上接第53页)
x
(3)
2
(k)=?[w21lix1i(k)+w2lix2i(k)]
(2)
(2)
i=1
3
(20)
2?软件设计
图7给出的是主程序流程图。程序启动后检测光电传感器1,2,如遇白线,则前进;如都遇黑线,则后退;如果光电传感器1遇黑线,传感器2遇白线,则左转;如果光电传感器1遇白线,传感器2遇黑线,则右转。程序主要采用switch,case语句,控制简单实用。
式中:l=1为输出层节点数,上角标(1)、(2)、(3)分别代表输入层、隐含层和输出层,w12li和w21li分别为第二个网络对第一个网络的作用权值及第一个网络对第二个网络的作用权值。相应的算法在文献[3]中有详细地介绍。3?结语
本文以中央空调系统为被控对象,研究了PID神经网络算法在中央空调温湿度控制中的应用。对单神经元PID控制器进行了SIMULINK仿真,仿真结果表明单神经元PID控制器控制效果显著,达到了系统的精度要求,但是对温湿度控制中存在的耦合问题解决效果不明显,因此在本文最后介绍了一种新的解耦控制器:三层前向PID神经网络解耦控制器。从理论上该种控制器考虑到了温度控制和湿度控制间的耦合问题,温度及湿度不再是单独控制,在三层神经网络的隐含层有相互的交叉,在学习时能有效考虑互相的影响。接下来控制器模型的建立及算法的改进还需进一步地研究。参考文献:
[1]曾军,方厚辉.神经网络PID控制及其Matlab仿真[J].现
图7?软件流程图
代电子技术,2004(169):51-52.
[2]张世韬,杨风,郝骞.单神经元PID控制器研究及仿真[J].
机械工程与自动化,2009(3):69-70.
[3]任建伟,黄宏丽.神经网络PID控制系统的研究[D].大
庆:大庆石油学院,2003.
[4]王铖,沙立民,高尚飞.基于多变量单神经元PID控制的温
湿度控制系统研究[D].上海:上海大学,2010.
3?结论
智能循迹小车采用了51单片机为控制核心,因为该单片机的稳定性较好,性价比较高。黑线的循迹采
用了红外发射对管TCRT5000,并通过施密特触发器,