华南理工大学广州学院
智能创新实践设计报告
题目:红外循迹小车
专业: 电子信息工程
班级: 自动化4班
姓名:林 明 渝 学号: 201038787149
日期:2013年11月
一、设计的目的
智能作为现代社会的新产物,是以后的发展方向,他可以按照预先设定的模式在一个特定的环境里自动的运作,无需人为管理,便可以完成预期所要达到的或是更高的目标。本设计主要体现多功能小车的智能模式,设计中的理论方案、分析方法及特色与创新点等可以为自动运输机器人、采矿勘探机器人、家用自动清洁机器人等自动半自动机器人的设计与普及有一定的参考意义。同时小车可以作为玩具的发展对象,为中国玩具市场技术含量的缺乏进行一定的弥补,实现经济收益,形成商业价值。
二、总体的设计
本课题设计主要是制作一款能进行智能判断并能做出正确反应的小车。小车具有以下几个功能:自动避障功能;寻迹功能(按路面的黑色轨道行驶);无线遥控功能。作品既可以对高端智能化进行剖析,也可以作为高级智能玩具发展对象,同时可成为大学生学习嵌入式控制系统的应用实例。
作品以两直流电动机为主驱动,通过各类传感器件来采集各类信息,送入主控单元AT89S52单片机,处理数据后完成相应动作,以达到自身控制。电机驱动电路采用高电压,高电流,四通道驱动集成芯片L293D;避障采用红外线收发来完成,自动寻迹采用红外线接收二极管完成;无线遥控则是采用带有PT2272解码的TDL-9915接收模块和带有PT2262编码的TDL9988-4发送模块完成最后由控制单元处理数据后通过汇编程序有序合理的将各模块信号整合在一起并完成相应动作,实现了智能控制,相当于简易机器人。
三、各模块分析选择
通过查阅资料,浏览范文,以及根据设计任务及扩展功能,确定此设计小车是以STC89C52单片机为检测和控制核心,由轨迹探测模块、后轮驱动兼转向模块及电源模块等四大模块组成。如下图所示:
3.1 采用AT89S51单片机来作为整机的控制单元。红外线探头采用市面上通用的发射管与及接收头,经过比较芯片调制处理后由控制系统接收。路线寻找采用红外线管对路面信号采集,送到单片机系统处理,同样包括无线遥控信号和语音控制信号。此系统比较灵活,采用软件方法来解决复杂的硬件电路部分,使系统硬件简洁化,各类功能易于实现,能很好地满足题目的要求
3.2 采用红外线避障,利用单片机来产生38KHz信号对红外线发射管进行调制发射,发射出去的红外线遇到避障物的时候反射回来,红外线接收管对反射回来信号进行解调,输出比较电平。外界对红外信号的干扰比较小,且易于实现,价格也比较便宜。 3.3 利用集成型红外对管作为寻迹单元的传感器,其中红外线发射管发射红外线,红外线二极管进行接收。采用红外线发射,外面可见光对接收信号的影响较小,再用射极输出器对信号进行隔离。本方案也易于实现,比较可靠.3.4 无线电遥控也由发射和接收两大部分组成,由于无线电遥控模块在市场上非常普及,加上无线电遥控有传输距离远、抗干扰能力强、无方向性等优点,对于小车的控制是一个不错的选择。
三、软件设计
小车程序:
//直流电机调速
#include #include
#define uchar unsigned char #define uint unsigned int #define SIGNAL P2 //L298带动两个电机M
1、M2
sbit IN1 = P1^0;
//M1_L sbit IN2 = P1^1;
//M1_R sbit IN3 = P1^2;
//M2_L sbit IN4 = P1^3;
//M2_R sbit ENA = P1^6;
//M1_E sbit ENB = P1^7;
//M2_E
sbit chuan1=P2^0; sbit chuan2=P2^1;
bit M1_L,M1_R,M2_L,M2_R ;//标志位L代表左转,R右转;M1_L代表电机1左转,就是我们说的正反转; uchar PWM[] = {0x00, 0x01, 0x11, 0x15, 0x55, 0x57, 0x77, 0x7f, 0xff}; uchar M1_PWM, M2_PWM; //将来取上面数组中数字, 实现PWM=0/8~8/8 uchar M1_n=2,M2_n=2;
//0~8, 代表0/8~8/8
//****************延时t毫秒********************** void delay(uint t) {
uint i;
while(t--) for (i = 0; i
TMOD = 0x01;
TH0 = (65536500) % 256;
TR0 = 1;
ET0 = 1;
EA = 1;
M1_n = 2;
//0~8, 代表0/8~8/8
M2_n = 2;
//0~8, 代表0/8~8/8
M1_PWM = PWM[M1_n];
M2_PWM = PWM[M2_n];
P0 = 0;
P1 = M1_PWM;
P2 = M2_PWM; }
uchar check(void) { uchar temp; temp=SIGNAL&0x0f; return temp; } void main() { uchar keep;
initiate();
while(1)
{
keep=check();
if(keep==0x00) {
M1_R=0;//代表左右转的控制的标志位写法
M2_R=0; } if(keep==0x01) {
M1_R=0;
M2_L=0; } if(keep==0x10) {
M1_R=0;
M2_R=0; } if(keep==0x11) {
M1_R=0;
M2_L=1; }
} } void T0_INT(void) interrupt 1 {
TL0 = (65536500) / 256; //1ms@12MHz //-
if (M1_L == 0 || M1_R == 0) {
ENA = 1;
if (M1_L == 0) {
IN1 = 0;
if (M1_PWM & 0x01) IN2 = 1;
IN2 = 0;
else
}
else if (M1_R == 0) {
IN2 = 0;
if (M1_PWM & 0x01) IN1 = 1;
else
IN1 = 0;
}
else ENA = 0;
// M1_PWM = _cror_(M1_PWM, 1);
}
else ENA = 0; //-
if (M2_L == 0 || M2_R == 0) {
ENB = 1;
if (M2_L == 0) {
IN4 = 0;
if (M2_PWM & 0x01) IN3 = 1;
else
IN3 = 0;
}
else if (M2_R == 0) {
IN3 = 0;
if (M2_PWM & 0x01) IN4 = 1;
else
IN4 = 0;
}
else ENB = 0;
//M2_PWM = _cror_(M2_PWM, 1);
}
else ENB = 0; //- } //---------------
四、仿真结果
下图为PROTUES仿真显示:
五. 总结
经过这次课程学习,感觉到自己的学习能力又有一次质的飞跃。。通过这门课程,我学到自动化专业的一些感兴趣的知识,学习到智能化在自动化行业的重压性,在社会发展占重要的地位。通过这次课程的作业,我亲自用仿真图感受到智能化的奥妙,以及学习理论知识以及实践操作相结合的神秘!