高寿斌《智能控制与程序设计》课程报告.docx
《高寿斌《智能控制与程序设计》课程报告.docx》由会员分享,可在线阅读,更多相关《高寿斌《智能控制与程序设计》课程报告.docx(29页珍藏版)》请在冰豆网上搜索。
高寿斌《智能控制与程序设计》课程报告
《机器人小车的设计制作与控制》
课题名称:
智能控制与程序设计
――机器人小车的设计制作与控制
班级:
2012高职国培电子信息技术班
完成人:
高寿斌
小组成员:
高祖彦尹玉梅芦娅云
学习时间:
2012.6.25-6.29
电子信息工程学院
2012年6月29日
目录
智能控制与程序设计0
1.硬件设计与制作2
1.1元器件组成2
1.2硬件设计与制作2
2.软件环境与机器人智能4
2.1单片机介绍4
2.2软件环境4
3.智能机器人控制项目7
3.1单片机输出接口与电机伺服控制7
3.2C语言函数与机器人巡航控制11
3.3C51输入输出接口与红外线导航15
3.4单片机输入接口与机器人触觉导航18
4.小结及体会21
4.1关于课程建设21
4.2该课程对学生团队精神的培养21
4.3关于C51单片机与智能机器人21
1.硬件设计与制作
1.1元器件组成
本作品采用AT89S52作为主控制器,其它电子元器件清单如下表1所示:
表1硬件设计电子元器件及工具列表
序号
产品名称
型号规格
数量
备注
1
AT89S52芯片
1块
2
C51实验主板
1块
3
ISP线路板
1块
4
机器人运动底盘
1个
5
电池盒
1只
6
驱动轮
2只
7
伺服电机
PARALLAX
2只
8
防滑皮套
2只
9
电路板联接柱子
25mm
4
10
盘头螺钉
∮3*8
22
11
螺母
∮3
20
12
沉头螺钉
∮3*8
4
13
十字槽盘头螺钉
M3*5
1
14
螺钉
∮3*20
4
15
电池
5#
4节
16
包装箱子
1只
17
铜柱
M3*20+M3*6
1
18
红外发射管
EL-1L1
2只
19
红外接收管
1938
2只
20
电阻
470Ω
4只
21
三极管
9013
2只
22
LPT1口
1条
23
串线口
9PIN
1条
辅助工具
24
螺丝刀
1把
工具
25
尖嘴钳
1把
工具
1.2硬件设计与制作
制作流程如图1所示。
图1硬件安装示意图
制作安装完成后,小车样品如图2所示。
图2小车样品图
2.软件环境与机器人智能
2.1单片机介绍
计算机一般由CPU(CentralProcessingUnit:
进行运算、控制)、RAM(RandomAccessMemory:
数据存储)、ROM(ReadOnlyMemory:
程序存储)、输入/输出设备(串行口、并行口等)组成,而单片机是将上述部分全部做在一块芯片上。
本智能小车用AT89S52芯片控制,该芯片是高性能、低功耗的8位单片机,内含8k字节ISP(In-systemProgrammable)的可反复擦写1000次的FLASH只读程序存储器,采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS51指令系统及其引脚结构。
2.2软件环境
设计开发所需要的软件环境条件如下:
(1)WindowsXP(32位)操作系统
(2)KeiluVision2IDE
开发环境,生成可执行文件。
其操作界面如图3所示。
图3KeiluVision2操作界面
(3)SLISP
其作用是将可执行文件下载到单片机。
其操作界面如图4所示。
图4SLISP操作界面
(4)串口调试终端
其作用是显示单片机与PC机交互信息。
2.3软件开发调试示例
该示例项目让智能机器人通过串口向电脑发送反馈信息,如在屏幕上显示“Hello,thisisamessagefromyourRobot”。
(1)硬件连接
将智能机器人用数据线同时通过COM1与LPT1口与电脑连接。
(2)程序开发
在KeiluVision2IDE中开发代码,源代码如下:
#include
intmain(void)
{
uart_Init();//串口初始化
printf("Hello,thisisamessagefromyourRobot\n");
while
(1);
}
(3)生成可执行文件
代码编写完毕,在KeiluVision2IDE中生成可执行文件,生成文件的类型为.hex类型,如“HelloRobot.hex”。
(4)将执行文件输入单片机
在SLISP中可执行文件HelloRobot.hex输入到单片机。
(5)在串口调试终端查看信息结果
打开串口调试终端,可以查看由机器人反馈的信息,如图5所示。
图5串口测试终端信息反馈
3.智能机器人控制项目
本作品具有丰富的兼容接口,连接相应硬件设备,通过软件开发,可以使该智能机器人具备丰富的智能功能。
C51单片机的输入/输出接口定义如图6所示。
图6AT89S52引脚I/O定义图
3.1单片机输出接口与电机伺服控制
3.1.1单灯闪烁控制
(1)硬件连接
LED电路连接:
将其短针脚(阴极、负极)通过电阻与P1_0相连,同时将其长针脚(阳极、正极)插入“VCC”接口,电路图如图7所示。
图7LED电路图
硬件连接后如图8所示。
图8LED灯连接效果图
(2)软件代码
程序代码:
#include
#include
intmain(void)
{
uart_Init();//初始化串口
printf("TheLEDconnectedtoP1_0isblinking!
\n");
while
(1)
{
P1_0=1;//P1_0输出高电平
delay_nms(500);//延时500ms
P1_0=0;//P1_0输出低电平
delay_nms(500);//延时500ms
}
}
(3)控制效果(功能)
将上述代码在KeiluVision2IDE生成可执行文件,输入智能小车后,灯可闪烁。
其闪烁效果如图9所示。
图9时序图——反应高、低电压信号与时间的关系图
3.1.2机器人伺服电机控制信号
(1)功能
实现机器人伺服电机的控制。
(2)伺服电机的安装
图10伺服电机实物图
伺服电机的电路安装如图11所示。
图11伺服电机与教学底板的连线原理图和实际接线示意图
(3)程序控制伺服电机基本原理
零点标定信号。
操作如图12所示。
图12标定零点信号
测试伺服电机。
下列程序代码可让电机顺时针全速旋转:
while
(1)
{
P1_0=1;
delay_nus(1300);
P1_0=0;
delay_nus(20000);
}
效果如图13所示。
图131.3ms的控制脉冲序列使电机顺时针全速旋转
电机逆时针全速旋转:
while
(1)
{
P1_0=1;
delay_nus(1700);
P1_0=0;
delay_nus(20000);
}
图141.7ms的连续脉冲序列使电机逆时针全速旋转
(4)程序源代码
下列程序代码可以实现电机伺服控制:
#include
#include
intmain(void)
{
intCounter;
intPulseNumber,PulseDuration;
uart_Init();
printf("ProgramRunning!
\n");
printf("Pleaseinputpulsenumber:
\n");
scanf("%d",&PulseNumber);
printf("Pleaseinputpulseduration:
\n");
scanf("%d",&PulseDuration);
for(Counter=1;Counter<=PulseNumber;Counter++)
{
P1_1=1;
delay_nus(PulseDuration);
P1_1=0;
delay_nms(20);
}
for(Counter=1;Counter<=PulseNumber;Counter++)
{
P1_0=1;
delay_nus(PulseDuration);
P1_0=0;
delay_nms(20);
}
while
(1);
}
3.2C语言函数与机器人巡航控制
3.2.1功能
通过程序控制,让机器人前后左右运动。
3.2.2基本原理
(1)机器人方向定义
机器人方向定义如图15所示。
图15机器人方向定义
(2)方向控制的基本方法
将delay_nus函数的参数n以不同的值组合就可以使机器人以其它的方式运行,从而达到方向制作的目的。
向后行走:
P1_1=1;delay_nus(1300);P1_1=0;//左轮顺时针
P1_0=1;delay_nus(1700);P1_0=0;//右轮逆时针
delay_nms(20);
原地左转
P1_1=1;delay_nus(1300);P1_1=0;//左轮顺时针
P1_0=1;delay_nus(1300);P1_0=0;//右轮顺时针
delay_nms(20);
原地右转
P1_1=1;delay_nus(1700);P1_1=0;//左轮逆时针
P1_0=1;delay_nus(1700);P1_0=0;//右轮逆时针
delay_nms(20);
从前面向左旋转
P1_1=1;delay_nus(1500);P1_1=0;//左轮静止
P1_0=1;delay_nus(1300);P1_0=0;//右轮顺时针
delay_nms(20);
从前面向右旋转
P1_1=1;delay_nus(1700);P1_1=0;//左轮逆时针
P1_0=1;delay_nus(1500);P1_0=0;//右轮静止
delay_nms(20);
从后面向左旋转
P1_1=1;delay_nus(1500);P1_1=0;//左轮静止
P1_0=1;delay_nus(1700);P1_0=0;//右轮逆时针
delay_nms(20);
从后面向右旋转
P1_1=1;delay_nus(1300);P1_1=0;//左轮顺时针
P1_0=1;delay_nus(1500);P1_0=0;//右轮静止
delay_nms(20);
3.2.3程序源代码
(1)循环控制
下列程序代码可以控制机器人前进、左转、右转、后退。
#include
#include
intmain(void)
{uart_Init();
intcounter;
printf("ProgramRunning!
\n");
for(counter=1;counter<=65;counter++)//前进
{
P1_1=1;delay_nus(1700);P1_1=0;
P1_0=1;delay_nus(1300);P1_0=0;
delay_nms(20);
}
for(counter=1;counter<=26;counter++)//左转
{
P1_1=1;delay_nus(1300);P1_1=0;
P1_0=1;delay_nus(1300);P1_0=0;
delay_nms(20);
}
for(counter=1;counter<=26;counter++)//右转
{
P1_1=1;delay_nus(1700);P1_1=0;
P1_0=1;delay_nus(1700);P1_0=0;
delay_nms(20);
}
for(counter=1;counter<=65;counter++)//后退
{
P1_1=1;delay_nus(1300);P1_1=0;
P1_0=1;delay_nus(1700);P1_0=0;
delay_nms(20);
}
}
(2)函数调用简化运动程序
下列程序代码,通过函数调用,可以简化运动程序:
#include
#include
voidForward(intPulseCount,intVelocity)//0{
inti;
for(i=1;i<=PulseCount;i++)
{
P1_1=1;delay_nus(1500+Velocity);P1_1=0;
P1_0=1;delay_nus(1500-Velocity);P1_0=0;
delay_nms(20);
}
}
voidLeft(intPulseCount,intVelocity)
{
inti;
for(i=1;i<=PulseCount;i++)
{
P1_1=1;delay_nus(1500-Velocity);P1_1=0;
P1_0=1;delay_nus(1500-Velocity);P1_0=0;
delay_nms(20);
}
}
voidRight(intPulseCount,intVelocity)
{
inti;
for(i=1;i<=PulseCount;i++)
{
P1_1=1;delay_nus(1500+Velocity);P1_1=0;
P1_0=1;delay_nus(1500+Velocity);P1_0=0;
delay_nms(20);
}
}
voidBackward(intPulseCount,intVelocity)
{
inti;
for(i=1;i<=PulseCount;i++)
{
P1_1=1;delay_nus(1500-Velocity);P1_1=0;
P1_0=1;delay_nus(1500+Velocity);P1_0=0;
delay_nms(20);
}
}
intmain(void)
{
uart_Init();
printf("ProgramRunning!
\n");
Forward(65,200);
Left(26,200);
Right(26,200);
Backward(65,200);
}
3.3C51输入输出接口与红外线导航
3.3.1实现功能
本作品采用AT89S52作为主控制器与红外传感器来探测障碍,组合构架出机器人红外避障的功能。
(1)主要组成单元
单片机系统单元,电机单元,红外传感器单元。
其结构与原理如图16、17所示。
图16硬件示意图
图17红外电路图
(2)系统工作原理
红外发射管发射一定频率的红外脉冲信号,当此信号遇到障碍物时,该特定频率的信号会反射到红外接收管被接收到,然后主控制器控制机器人作出相应的避开动作,如图18所示。
这样就产生机器人红外避障的功能。
图18红外工作原理示意图
硬件组装完成后,实物如图19所示。
图19实物图
3.3.2程序流程
(1)搭建与测试IR发射和探测器对
(2)探测和避开障碍物
(3)高性能IR导航探测
3.3.3软件改造说明
#include"BoeBot.h"
#include"uart.h"
#include"intrins.h"
#defineLeftIRP1_3//左边接收
#defineRightIRP3_3//右边接收
#defineLeftLaunchP1_6//左边发射
#defineRightLaunchP3_6//右边发射
intIRLaunch(unsignedcharIR)//红外发射
{
intcounter;
if(IR=='L')
for(counter=0;counter<1000;counter++)
{
LeftLaunch=1;
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
LeftLaunch=0;
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
}
if(IR=='R')
for(counter=0;counter<1000;counter++)
{
RightLaunch=1;
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
RightLaunch=0;
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
}
}
intmain(void)
{
bitirDetectLeft,irDetectRight;
unsignedintpulseCount,pulseLeft,pulseRight;
inti;
do
{
IRLaunch('R');
irDetectRight=RightIR;
IRLaunch('L');
irDetectLeft=LeftIR;
if((irDetectLeft==1)&&(irDetectRight==0))
{pulseCount=10;pulseLeft=1300;pulseRight=1700;}
elseif((irDetectLeft==0)&&(irDetectRight==1))
{pulseCount=10;pulseLeft=1700;pulseRight=1700;}
elseif((irDetectLeft==1)&&(irDetectRight==0))
{pulseCount=10;pulseLeft=1300;pulseRight=1300;}
else
{pulseCount=15;pulseLeft=1500;pulseRight=1500;}
for(i=0;i{
P1_1=1;delay_nus(pulseLeft);P1_1=0;
P1_0=1;delay_nus(pulseRight);P1_0=0;
delay_nms(20);
}
}
while
(1);
}
3.4单片机输入接口与机器人触觉导航
3.4.1实现功能
安装机器人“胡须”,胡须在接触障碍时智能后退。
3.4.2硬件安装
(1)硬件安装
所需硬件如图20所示。
图20所需硬件
安装方法如图21所示。
图21胡须安装示意图
(2)搭建胡须电路
图22胡须电路图图23电路搭建实物图
3.4.3程序代码
#include
#include
intP1_4state(void)//获取P1_4的状态,右胡须
{
return(P1&0x10)?
1:
0;
}
intP2_3state(void)//获取P2_3的状态,左胡须
{
return(P2&0x08)?
1:
0;
}
voidForward(void)
{
P1_1=1;
delay_nus(1700);
P1_1=0;
P1_0=1;
delay_nus(1300);
P1_0=0;
delay_nms(20);
}
voidLeft_Turn(void)
{
inti;
for(i=1;i<=26;i++)
{
P1_1=1;
delay_nus(1300);
P1_1=0;
P1_0=1;
delay_nus(1300);
P1_0=0;
delay_nms(20);
}
}
voidRight_Turn(void)
{
inti;
for(i=1;i<=26;i++)
{
P1_1=1;
delay_nus(1700);
P1_1=0;
P1_0=1;
delay_nus(1700);
P1_0=0;
delay_nms(20);
}
}
voidBackward(void)
{
inti;
for(i=1;i<=65;i++)
{
P1_1=1;
delay_nus(1300);
P1_1=0;
P1_0=1;
delay_nus(1700);
P1_0=0;
delay_nms(20);
}
}
intmain(void)
{
uart_Init();
printf("ProgramRunning!
\n");
while
(1)
{
if((P1_4state()==0)&&(P2_3state()==0))
{
Backward();//向后
Left_Turn();//向左
Left_Turn();//向左
}
elseif(P1_4state()==0)
{
Backward();//向后
Left_Turn();//向左
}
elseif(P2_3state()==0)
{
Backward();//向后
Right_Turn();//向右
}
else
Forward();//向前
}
}
4.小结及体会
本人一直从事计算机基础和MAYA三维动画方面的教学,5年前曾有C语言程序设计课程的教学经验,本次有幸参加武汉职业技术学院组织实施的电子信息专业高职院校骨干教师培训课程的学习,在本课程的学习中,感触良多。
4.1关于课程建设
本课程名称为《智能控制与程序设计》,在夏光蔚老师的长期精心策划和组织下,我们通