机电综合实验两轮智能移动机器人实验报告书(共27页)_第1页
机电综合实验两轮智能移动机器人实验报告书(共27页)_第2页
机电综合实验两轮智能移动机器人实验报告书(共27页)_第3页
机电综合实验两轮智能移动机器人实验报告书(共27页)_第4页
机电综合实验两轮智能移动机器人实验报告书(共27页)_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、机电综合实验 之机电一体化综合控制实验报告书 题 目:两轮智能移动机器人 实 验 者: 学 号: 班 级: 日 期:2013.12.29 目录1、 实验目的.3二、实验对象.3三、设计原理.3四、实验过程.7五、实验设备.7六、实验步骤及报告.7 1、实验前的安装调试.7 2、小车按预定路线行走.9 3、小车匀加速/减速运动.11 4、 小车触须避障.13 5、小车红外避障.22七、心得.25八、本实验对社会发展的影响.26一、实验目的 1、掌握机器人机械工作方式、触觉开关及红外导航工作原理,掌握机器人尾随行走所需的闭环控制算法 2、学会运用 C 语言初次编写少量的程序,运用编译器编译生成可执

2、行文件,然后下载到单片机上,通过串口观察机器人上的单片机教学板的执行结果 二、设计对象本项目是使用典型的机器人工程对象,采用STC8952单片机作为大脑,行走机构为两个车轮,采用伺服电机控制。触觉导航采用触觉开关,红外导航采用发射红外线遇障碍反射技术导航。三、设计原理 运用STC8952单片机,采用C语言对其进行编程,控制机器人伺服电机以不同速度运动是通过让单片机输入、输出接口输出不同的脉冲序列来实现的。如控制机器人伺服电机以不同速度运动是通过让单片机的输入/输出(I/O)口输出不同的脉冲序列来实现的。51 系列单片机是一种低功耗、高性能 CMOS8 位微控制器,具有 8K 在系统可编程 Fl

3、ash 存储器。使用 Atmel 公司高密度非 易失性存储器技术制造,与工业 80C51产品指令和引脚完 全兼容。片上 Flash 允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的 8 位 CPU 和在系统可编程 Flash.单片机各 I/O 接口的内部结构有关,而且每个 8 位并行 I/O 口的使用方式也不太一样。AT89S52 引脚如图所示,AT89S52 共有44 根引脚,其中 32 根是 I/O 端口引脚。在这 32 根引脚中,有29 根具备两种用途,既可作为I/O 端口,也可作为控制信号或地址及数据线。机器人伺服电机控制信号电机转速为零的控制信号时序图图 1所示是

4、高电平持续 1.5ms 低电平持续 20ms,然后不断重复的控制脉冲序列。该脉冲序列发给经过零点标定后的伺服电机,伺服电机不会旋转程序段: while(1)P1_0=1; /P1_0输出高电平delay_nus(1500); /延时1.5msP1_0=0; /P1_0输出低电平delay_nus(20000); /延时20ms图 2所示是高电平持续 1.3ms 低电平持续 20ms,然后不断重复的控制脉冲序列。该脉冲序列发给经过零点标定后的伺服电机,伺服电机顺时针全速旋转。程序段: while(1)P1_0=1; /P1_0输出高电平delay_nus(1300); /延时1.3msP1_0=

5、0; /P1_0输出低电平delay_nus(20000); /延时20ms图 3所示是高电平持续 1.7ms 低电平持续 20ms,然后不断重复的控制脉冲序列。该脉冲序列发给经过零点标定后的伺服电机,伺服电机逆时针全速旋转。程序段:While(1)P1_0=1; /P1_0输出高电平delay_nus(1700); /延时1.7msP1_0=0; /P1_0输出低电平delay_nus(20000); /延时20ms从图 1、2和3可知,控制电机运动转速的是高电平持续的时间,当高电平持续时间为 1.3ms 时,电机顺时针全速旋转,当高电平持续时间1.7ms 时,电机逆时针速旋转。四、实验内容

6、按时间顺序,实验主要有以下内容:1、安装软件并调试,电机调零2、基本巡航动作3、让小车行走一定的形状(本次实验设计路线是一个“口”字)4、完成简单触觉导航5、实现红外导航避障五、实验步骤及报告(一)软件和硬件的安装调试1、硬件连接机器人大脑需要连接电源以便运行,同时也需要连接到PC机(或笔记本电脑)以便编程和交互。以上接线完成后,就可以用编辑器软件来对系统进行测试。(1)串口的连接机器人教学板通过串口电缆连接到PC机(或笔记本电脑)上以便与用户交互。(2)下载线的连接机器人程序通过连接到PC机或者笔记本电脑的并口上的ISP下载线来下载到教学板上的单片机内。(3)电池的安装本实验机器人采用五号碱

7、性电池给机器人电机和教学板供电,先检查机器人底部电池盒内是否已经装好电池,并是否有正常的电压输出。2、软件部分在本实验学习中,反复用到三款软件:Keil uVision2 IDE集成开发环境、下载软件、串口调试软件等。(1)Keil uVision2 IDE集成开发环境该软件是德国 KEIL 公司出品的 51 系列单片机 C 语言集成开发系统。如果你已经学习过基础机器人制作与编程,并掌握了 PBASIC 语言编程思想和基本技能,你将会发现,C语言在语法结构上更加灵活,功能更加强大。(2)SL ISP软件下载工具使用该软件你可以将可执行文件下载到你的机器人单片机上。该软件的使用需要计算机有并行口

8、。(3)串口调试软件此软件是用来显示单片机与计算机的交互信息的。在硬件上,计算机至少要有串口或USB接口来与单片机教学板的串口连接。3、 电机调零启动Keil uVision IDE 程序,建立项目文件,选择正确的芯片类型,创建与编辑一个调零程序,编译后产生可执行文件,并下载可执行文件到STC8952单片机,然后观察电机是否转动,若转动,用螺丝起子手动调零。调零程序如下:#include<BoeBot.h>#include<uart.h>int main(void)int counter;uart_Init();printf("Program Running!

9、n");for(counter=0;counter<130;counter+)/运行3 秒P1_1=1;delay_nus(1500);P1_1=0;P1_0=1;delay_nus(1500);P1_0=0;delay_nms(20);while(1); 二、基本巡航动作下面的程序片段可以使其向前走:P1_1=1;delay_nus(1700);P1_1=0;P1_0=1;delay_nus(1300);P1_0=0;delay_nms(20);下面的程序片段可以使其向后走: P1_1=1;delay_nus(1300);P1_1=0;P1_0=1;delay_nus(170

10、0);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);实现一定形状行走: 实验设计路线是一个“口”字,类似电机调零的相关操作,把程序导入单片机内,实现调试。程序如下:#include<BoeBot.h>#include&l

11、t;uart.h>int main(void)int counter;uart_Init();printf("Program Running!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

12、_0=0;delay_nms(20);While(1);(2) 匀加速/减速运动匀加速运动程序:for(pulseCount=10;pulseCount<=200;pulseCount=pulseCount+1)P1_1=1;delay_nus(1500+pulseCount);P1_1=0;P1_0=1;delay_nus(1500-pulseCount);P1_0=0;delay_nms(20);匀减速运动程序:for(pulseCount=200;pulseCount>=0;pulseCount=pulseCount-1)P1_1=1;delay_nus(1500+pulse

13、Count);P1_1=0;P1_0=1;delay_nus(1500-pulseCount);P1_0=0;delay_nms(20);两轮机器人加速减速走程序:#include<BoeBot.h>#include<uart.h>int main(void)int pulseCount;uart_Init();printf("Program Running!n");for(pulseCount=10;pulseCount<=200;pulseCount=pulseCount+1)P1_1=1;delay_nus(1500+pulseCount

14、);P1_1=0;P1_0=1;delay_nus(1500-pulseCount);P1_0=0;delay_nms(20);for(pulseCount=1;pulseCount<=75;pulseCount+)P1_1=1;delay_nus(1700);P1_1=0;P1_0=1;delay_nus(1300);P1_0=0;delay_nms(20);for(pulseCount=200;pulseCount>=0;pulseCount=pulseCount-1)P1_1=1;delay_nus(1500+pulseCount);P1_1=0;P1_0=1;delay_n

15、us(1500-pulseCount);P1_0=0;delay_nms(20);while(1);(3) 触须避障编程让机器人通过触觉胡须导航之前,首先必须安装并测试胡须,安装机器人触觉胡须所需的硬件元件清单,包括: (1)金属丝2根 (2)平头M3×22盘头螺钉2个 (3)13mm圆形立柱2个 (4)M3尼龙垫圈2个 (5)3-pin公-公接头2个 (6)220电阻2个 (7)10k电阻2个 安装胡须:1 拆掉连接主板到前支架的两颗螺钉2 参考图4-2,进行下面操作3 螺钉依次穿过M3尼龙垫圈、13mm圆形立柱4 螺钉穿过主板上的圆孔之后,拧进主板下面的支架中,但不要拧紧5 把须

16、状金属丝的其中一个钩在尼龙垫圈之上,另一个钩在尼龙垫圈之下,调整它们的位置使它们横向交叉但又不接触6 拧紧螺钉到支架上 图4-2 安装机器人胡须7 参考接线图4-3,搭建胡须电路。注意:右边胡须状态信息输入是通过P1口的第4脚完成,而左边胡须状态信息输入是通过P2口的第3脚完成8 确定两条胡须比较靠近,但又不接触面包板上的3-pin头。推荐保持3mm的距离。9图4-4所示是实际的参考接线图。10 安装好触觉胡须的机器人如图4-5所示 观察一下图4-3所示的胡须电路示意图,显然每条胡须都是一个机械式的、接地常开的开关。胡须接地(GND)是因为教学板外围的镀金孔都连接到GND。金属支架和螺丝钉提供

17、电气连接给胡须。通过编程让单片机探测什么时候胡须被触动。由图4-3可知,连接到每个胡须电路的I/O引脚监视着10K上拉电阻上的电压变化。当胡须没有被触动,连接胡须的I/O管脚的电压是5V;当胡须被触动时,I/O短接到地,所以I/O管脚的电压是0V。 胡须测试程序:#include<BoeBot.h>#include<uart.h>int P1_4state(void)return (P1&0x10)?1:0;int P1_7state(void)return (P1&0x80)?1:0;int main(void)uart_Init();printf(&

18、quot;WHISKER STARTESn");while(1)printf("右边胡须的状态:%d ",P1_4state();printf("左边胡须的状态:%dn",P1_7state();delay_nms(150);2、 通过胡须导航程序如下:#include<BoeBot.h>#include<uart.h>int P1_4state(void)return (P1&0x10)?1:0;int P1_7state(void)return (P2&0x80)?1:0;void Forward(v

19、oid)P1_1=1;delay_nus(1700);P1_1=0;P1_0=1;delay_nus(1300);P1_0=0;delay_nms(20);void Left_Turn(void)int i;for(i=1;i<=19;i+)P1_1=1;delay_nus(1300);P1_1=0;P1_0=1;delay_nus(1300);P1_0=0;delay_nms(20);void Right_Turn(void)int i;for(i=1;i<=19;i+)P1_1=1;delay_nus(1700);P1_1=0;P1_0=1;delay_nus(1700);P1

20、_0=0;delay_nms(20);void Backward(void)int i;for(i=1;i<=38;i+)P1_1=1;delay_nus(1300);P1_1=0;P1_0=1;delay_nus(1700);P1_0=0;delay_nms(20);int main(void)int counter=1; int old2=1;int old3=0; uart_Init();printf("Program Running!n");while(1)if(P1_4state()!=P1_7state()if(old2!=P1_4state()&

21、&(old3!=P1_7state()counter=counter+1;old2=P1_4state();old3=P1_7state();if(counter>4)counter=1;Backward();/向后Left_Turn();/向左Left_Turn();/向左elsecounter=1;if(P1_4state()=0)&&(P1_7state()=0) /两胡须同时碰到Backward(); /向后Left_Turn();/向左Left_Turn();/向左else if(P1_4state()=0) /右胡须碰到Backward();/向后Le

22、ft_Turn();/向左else if(P1_7state()=0) /左胡须碰到Backward();/向后Right_Turn();/向右else /胡须没有碰到Forward();/向前 带着胡须机器人怎样行走?主程序中的语句首先检查胡须的状态。如果两个胡须都触动了即P1_4state()和P2_3state()都为0,调用Backward(),紧接着调用Left_Turn ()两次;如果只是右胡须被触动即只有P1_4state()=0,程序调用Backward(),然后再调用Left_Turn ();如果左胡须被触动即只有P2_3state()=0,程序调用Backward(),然后

23、再调用Right _Turn();如果两个胡须都没有触动,在这种情况下,在else中调用Forward()语句。函数Left_Turn(),Right_Turn()以及Backward()看起来应该相当熟悉,但是函数Forward()有一个变动。它只发送一个脉冲,然后返回。这点相当重要,因为机器人可以在向前行走中的每两个脉冲之间检查胡须的状态。意味着,机器人在向前行走的过程中,每秒检查触须状态大概43次(1000ms/23ms =43)。因为每个全速前进的脉冲都使得机器人前进大约半厘米。只发送一个脉冲,然后回去检查胡须的状态是一个好主意。每次程序从Forward()返回后,程序再次从while

24、循环的开始处执行,此时ifelse 语句会再次检查胡须的状态。(五)红外避障1、实验器材:(1) 两个红外检测器(2) 两个IR LED(3) 四个470电阻(4) 两个9013三极管2、搭建红外线前灯􀁺 (1)断开主板和伺服系统的电源􀁺 (2)建立下图所示的电路,2、测试程序 (1)测试左边程序:#include<BoeBot.h> #include<uart.h> int P1_2state(void) return (P1&0x04)?1:0; int main(void) int counter; int irDete

25、ctLeft; uart_Init(); printf("Program Running!n"); while(1) for(counter=0;counter<38;counter+) P1_3=1; delay_nus(13); P1_3=0; delay_nus(13); irDetectLeft=P1_2state(); printf("irDetectLeft=%dn",irDetectLeft); delay_nms(100); (2)测试右边程序:#include<BoeBot.h> #include<uart.h&

26、gt; int P1_7state(void) return (P1&0x04)?1:0; int main(void) int counter; int irDetectRight; uart_Init(); printf("Program Running!n"); while(1) for(counter=0;counter<38;counter+) P1_6=1; delay_nus(13); P1_6=0; delay_nus(13); irDetectRight=P1_7state(); printf("irDetectRight=%dn&

27、quot;,irDetectRight); delay_nms(100); (3) 步骤:² 打开教学板的电源² 输入、保存并运行测试程序² 保持机器人与串口电缆的连接,因为你需用调试终端来测试你的IR组² 放一个物体,比如手或一张纸,距离左侧IR组大约2到3厘米,² 验证当你放一个物体在IR组前时,调试终端是否会显示“0”;当你将物体移开时,它是否显示“1”² 如果调试终端显示的是预料的值,没发现物体显示1,发现物体显示0,说明测试完成,红外发射探测器安装成功² 如果调试终端显示的不是预料的值,试试排错部分里的步骤进行排错

28、排错,并检查电路和输入的程序,或者调整红外发射器角度,直到测试正常²3、 红外避障程序#include<BoeBot.h> #include<uart.h> #include<intrins.h> #define LeftIR P1_2 /左边红外接收连接到P1_2 #define RightIR P1_7 /右边红外接收连接到P3_2 #define LeftLaunch P1_3 /左边红外发射连接到P1_3 #define RightLaunch P1_6 /右边红外发射连接到P3_3 void IRLaunch(unsigned char

29、IR) int counter; if(IR='L') /左边发射 for(counter=0;counter<38;counter+) /发射时间比胡须长 LeftLaunch=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); LeftLaunch=0; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _n

30、op_(); _nop_(); _nop_(); _nop_(); if(IR='R') /右边发射 for(counter=0;counter<38;counter+) RightLaunch=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); RightLaunch=0; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _n

31、op_(); _nop_(); _nop_(); _nop_(); _nop_(); void Forward(void) /向前行走子程序 P1_1=1; delay_nus(1300); P1_1=0; P1_0=1; delay_nus(1700); P1_0=0; delay_nms(20); void Left_Turn(void) /左转子程序 int i; 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); void Right

32、_Turn(void) /右转子程序 int i; 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); void Backward(void) /向后行走子程序 int i; for( i=1;i<=65;i+) P1_1=1; delay_nus(1700); P1_1=0; P1_0=1; delay_nus(1300); P1_0=0; delay_nms(20); int main(void) int irDetectLeft,irDetectRight; uart_Init(); printf("Program Running!n"); while(1) IRLaunch('R'); /右边发射 irDetectRight = RightIR;/右边接收 I

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论