机器人创新实验指导书_第1页
机器人创新实验指导书_第2页
机器人创新实验指导书_第3页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

1、机器人创新实验( 3)实验指导书机器人实验室实验一 熟悉机器人与 C51 单片机硬件软件一、实验目的1、掌握宝贝车机器人用C51教学板与计算机硬件连接和宝贝车基本结构;2、 熟悉及掌握C51系列单片机Keil uVision IDE (集成开发环境)软件、ISP下载 软件及串口调试终端的使用方法。二、实验设备及软件宝贝车机器人套件、 ISP 下载线、串行接口线、计算机、电源。Keil uVision2 IDE 集成开发环境、下载软件、串口调试软件。三、实验内容和步骤单片机控制的宝贝车机器人是通过串并口或 USB接口通信交互,由硬件系统与软件系统相互结合组成的一个完整的智能控制系统。单片机必须与

2、外围设备及软件组成一个 完整的应用系统(如图) 。1、熟悉宝贝车机器人的结构组成(如图) :小车底板、车轮、教学板、伺服电机、电池盒。这是宝贝车机器人的硬件系统,它的微控制器(MCU是由Atmel公司生产与51 系列兼容的8位AT89S52单片机。图单片机应用系统图图采用C51单片机的机器人2、教学板指方便单片机与电源、ISP下载线、串口线以及各种传感器和电机的连接制作的一个电路板(如图) 。将宝贝车机器人与计算机硬件连接,并连接到电源。连接单片机教学板 ISP 接口到计算机,以便程序下载;连接单片机教学板串行接口到计算机,以便调试和交互; 连接机器人到电池或者是供电电源。USBasp C版通

3、用编程器图 C51 单片机教学板3、运用C语言编程,运用编译器编译生成可执行文件并下载到单片机,用串口调试软件查看单片机输出信息。 建立用户文件夹,方便管理程序,拷入编译所需头文件(例如,将光盘“头文件” 文件夹中的文件拷贝到 C:Program FilesKeilC51INC 文件夹里)。 进入编程系统(Keil uVision2 IDE ):1)新建项目工程(*.uv2 ): Project NewProject,命名,保存在新建立的用户文 件夹内;选择单片机生产公司及类型: Atmel、AT89S52。2)新建C程序文件:File New编辑好程序,保存为*.c的文件。注意程序关键字 的

4、拼写、英文标点、字母的大小写等。3) 添加C程序到项目工程:Source Group 1右键单击AddFiles to Group Source。 Source Group 1前面出现+号,单击它出现刚才添加的C程序文件名,单击此C文件,Keil 会自动识别关键字,并以不同的颜色提示用户加以注意,这样会使用户少犯错误,有利 于提高编程效率。4)生成执行文件十六进制目标代码文件 (*.hex) : Target 1 右键单击 Option for target Target 1' Output 选中 “Create Hex Fi :”连接编译生成可执行文件 *hex。 编译要求没有错误产

5、生,允许出现警告。 进入下载系统():1)参数选择:勾选芯片擦除、编程 FLASH校验FLASH单片机型号:AT89S522)单击“调入 Flash ”按钮,找到要下载的 HEX 文件。3)单击“编程”区的“擦除”按钮,开始擦除芯片内部程序。芯片擦除成功后,点 击“自动”按键,完成写、校验 Flash 。等待下载完毕后,固件下载完成。拔掉 USBASP 下载器 ISP 接口排线。注意:要将ISP下载线连接计算机和机器人教学板,电源接好,开关拨到“1”档位置(PRO,给教学板通电,才能进行单片机程序下载。 从执行文件下载到单片机的那个时刻开始,程序就开始运行。单片机向计算机发送信息。可利用串口调

6、试软件查看单片机输出信息,“ Reset ”按钮可让下载到单片机内的程序重新运行一次。使用串口调试助手之前,首先使用串口线将单片机的串口与计算机的USB 口相连,然后通过计算机的设备管理器查看要使用的串口号,如图所示。记下该串口号,打开串口调试助手软件,选择正确的串口号,如图所示。4、做完实验断开电源,将开关拨到“ 0”档(OFF,系统在不使用时没有消耗电能, 电池可以用得更久。拆卸串口线还原。四、实验程序1 、程序。#include<>int main(void)uart_Init(); / 串口初始化printf("Hello,this is a message fr

7、om your Robotn");while(1);2、利用 while 循环与 delay_nms( ) 函数(毫秒级的延时)编程:每秒发送一个信息 (内容为英文自己定) ,通过串口显示在计算机上。 delay_nms( ) 函数在头文件中有定义。 即 #include<> ,编译时系统将根据头文件自动将延时函数插入到程序中。3、让竖线“ | ”在屏幕上顺时针或逆时针转动输出。 参考下面的程序代码:printf(" | ");delay_nms(500);printf(" / ");delay_nms(500);printf(&q

8、uot;-");delay_nms(500);printf(" ");delay_nms(500);printf(" | ");delay_nms(500);4、显示静态图形:五、实验报告要求1、按要求:每秒发送一个信息(内容为英文自己定) ,通过串口显示在计算机上, 进行程序设计。2、程序调试心得。3、观察到的程序运行效果并加以分析。六、思考题1、什么是单片机2、MCS51 8051、C51、AT89S52之间是什么关系3、宝贝车机器人采用的AT89S52单片机的特点是什么4、#include<> 头文件的作用是什么5、程序中 w

9、hile(1); 的作用是什么 注:实验操作现场检查。实验二 C51 接口与伺服电机控制一、实验目的1、理解和掌握C51单片机的输入 输出接口的特性;2、理解机器人伺服电机PW碉速原理,C语言编程输出脉冲序列控制机器人轮子运 动。二、实验设备及软件宝贝车机器人、 ISP 下载线、串行接口线、计算机、电源、螺丝刀、红色发光二极管 2个和470Q电阻2个。Keil uVision2 IDE 集成开发环境、下载软件、串口调试软件。三、实验内容和步骤1、用C51单片机的P1 口的位输出高低电平控制LED发光二极管的闪烁。看教材附 录C关于面包板及LED的介绍。面包板上共有18行插座,通过中间槽分为两列

10、。每一行 由 5 个插座组成,这 5 个插座在面包板上是电气相连的,如将两根导线分别插入五口插 座行的任意两个插座中,它们都是电气相连的。“ GND对应于教学板的接地端,“ Vcc”指校准的+5V电压。发光二极管(如图)是单向导电的电子管,长脚为正极,短脚为负极, 必须连接正确,否则不能正常工作。通过 5mA左右即可发光,电流越大,其亮度越强, 但若电流过大,会烧毁二极管。给发光二极管串联一个电阻的目的是限制通过发光二极 管的电流不要太大。图LED零件图图发光二极管与I/O脚P1_0的连接色环电阻为五色,用五条色环表示电阻的阻值大小。黑0 棕1 红2 橙3 黄4 绿5 蓝6 紫7 灰8 白9

11、金、银表示误差 具体如下:第一条色环:阻值的第一位数字; 第二条色环:阻值的第二位数字; 第三条色环:阻值的第三位数字; 第四条色环:阻值乘数的 10 的幂数; 第五条色环:误差(常见是棕色,误差为 1%)。由此,470Q电阻为黄紫黑黑棕。搭建一个发光二极管闪烁的LED电路(如图)并编写程序。注意,在教学底板上搭 建电路时要断开电源。修改程序让两个 LED同时闪烁,并修改程序让两个 LED交替亮或 者灭,也可以改变延时函数参数 n的值,改变LED闪烁频率。程序如下:#include<> #include<>int main(void)uart_Init(); / 初始化

12、串口printf("The LED connected to P1_0 is blinking!n");while(1)P1_0=1; / P1_0 输出高电平delay_nms(500); / 延时 500msP1_0=0; / P1_0 输出低电平delay_nms(500); / 延时 500ms【拓展训练】实现4个或更多LED流水灯控制,对应流水灯从全灭到一个一个亮或者对应流水灯从全亮到一个一个灭。编程方法与两个LED闪烁类似,接入的LED二极管继续接在面包板左侧其他的端口位上。注意,程序控制各引脚输出高低电平要与所接的 端口要一一对应起来。2、两伺服电机调零。 在

13、操作之前,先确认一下机器人两个伺服电机的电源控制线 (如 图)是否已经正确的连接到 C51单片机教学板的两个专用电机控制接口上。 P1_1引脚控 制左边电机,P1_0引脚控制右边电机,在电路板上我们分别采用 W R、B来表示信号线、 电源线和地,电机控制线颜色与教学板接口对应字母一致(白红黑对应 WR)B。图伺服电机实物图图 电压“占空比”与平均电压关系电机调速应用PWM脉宽调制)基本原理,通过控制固定电压的直流电源开关频率改 变负载两端的电压。在 PWM区动控制的调整系统中,按一个固定的频率来接通和断开电 源,并根据需要改变一个周期内“接通”和“断开”时间的长短。通过改变直流电机电 枢上电压

14、的“占空比”来改变平均电压的大小,从而控制电动机的转速。如图,在脉冲作用下,当电机通电时,速度增加;电机断电时,速度逐渐减少。只 要按一定规律,改变通、断电的时间,即可让电机转速得到控制。高电平持续的时间控 制电机转速,即脉冲宽度控制连续旋转电机速度和方向。将时间间隔为20ms脉宽为的一系列脉冲称为零点标定信号,电机转速为零,机器人轮子静止不动。如果电机没有进 行零点标定,机器人轮子会转动,如图所示,用螺丝刀轻轻调节马达上的电位器,直到 马达停止转动。如电机已经完成了零点调节,不会转动。但是损坏了或有缺陷的电机有时也不转动。 继续检测:当高电平持续时间为时,电机顺时针全速旋转; 当高电平持续时

15、间为时,电机逆时针全速旋转; 当高电平持续时间为 之间时,电机顺时针旋转; 当高电平持续时间为 之间时,电机逆时针旋转。3、测试电机,改变脉冲宽度控制机器人运动速度和方向。如图,定义机器人的前、 后、左、右四个方向。例程中使用 printf 函数是为了起提示作用,若觉得串口线影响机 器人的运动,可以不用此函数。将程序下载到单片机,关闭机器人电源开关,断开 ISP 下载线,将开关拨到“ 2”档(RUN,观察宝贝车运动情况。图 机器人及其前进方向的定义四、实验程序1、参考一个LED闪烁的程序(程序),编写程序让两个LED同时闪烁,并修改程序让两个LED交替闪烁,也可以改变延时函数参数n的值,改变L

16、ED闪烁频率。*编程实现4个或更多LED流水灯控制,对应流水灯从全灭到一个一个亮或者对应流 水灯从全亮到一个一个灭。2、编程实现 两伺服电机调零,可以分别调零,也可一起调零。实现右轮调零参考代 码如下,注意编程的完整性。while(1)P1_0=1; /P1_0 输出高电平delay_nus(1500); / 延时P1_0=0; /P1_0 输出低电平delay_nus(20000); / 延时 20ms3、 验证下列程序是否让宝贝车向前进3s,后退3s。并根据此程序按照实验报告要 求编程。#include<>#include<>int main(void)int co

17、unter;uart_Init();printf("Program Running!n");for(counter=1;counter<=130;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<=130;counter+)P1_1=1;delay_ nu s(1300);P1_1=0;P1_0=1;delay_ nu s(1700);P1_0=0;delay_ nm s(20);while(1);4、用

18、LED指示电机运动状态在实际应用中,LED往往起到状态提示作用,交通红绿灯就是一个典型的应用。你 可以修改程序来模拟交通灯过程:假设 A灯为交通灯,B灯为电机运行状态指示灯。模 拟过程如下:A灯闪烁,B灯灭,电机停止运行;A灯灭,B灯亮,电机开始运行;B灯闪烁,电机减速运行;B灯灭,A灯闪烁,电机停止运行;如此往复。五、实验报告要求1、实现两个LED交替闪烁的编程及电路原理图,观察到的运行效果并加以分析,程 序调试心得。有兴趣的同学还可以完成 4个或更多LED流水灯控制,对应流水灯从全灭到一个一 个亮或者对应流水灯从全亮到一个一个灭。要求编程及绘制电路原理图,观察到的运行 效果并加以分析,程序

19、调试心得。2、编程实现两伺服电机调零,可以分别调零,也可一起调零,观察到的运行效果并加以分析,程序调试心得。3、控制两个电机的delay_nus函数的参数n有不同的组合,各种组合的运动状况填 写下表。P1_1P1_0描述运动状况17001300全速,P1_1电机逆时针,P1_0电机顺时针1300170017001700130013001500170015001300130015001700150015001500两个电机都静止六、思考题1、LED闪烁的工作原理,即引脚输出高低电平信号,发光二极管会灭或者亮的原因是什么2、 LED闪烁的实验中,逐渐减小延时函数参数 n的值,还能看到LED闪烁吗为

20、什么3、 LED闪烁的实验中,分别将开关拨到“ 1”(PRO与“2”(RUN,看实验现象有什 么区别分析原因。4、 将电机调零的程序下载到单片机,开关拨到“2”,按“ Reset”按钮,轮子仍转 动,不能完全停下来,试分析有哪些原因造成的5 、编程给与P1_1连接的左轮发出脉宽为,与P1_0连接的右轮发出脉宽,观察到宝 贝车后退,分析是什么原因引起的注:实验操作现场检查。实验三 C 语言函数与机器人巡航控制一、实验目的1、掌握对单片机编程使机器人做基本的巡航动作:向前、向后、左转、右转和原地 旋转。通过测试机器人脉冲数与机器人运动距离的关系,实现机器人的精确动作。2、掌握编写程序时机器人由突然

21、启动或停止变为逐步加速或减速运动。3、写一些执行基本巡航动作的函数,每一个函数都能够被多次调用。4、将复杂巡航运动记录在数组中,编写程序执行这些巡航运动。二、实验设备及软件宝贝车机器人、 ISP 下载线、串行接口线、计算机、电源。Keil uVision2 IDE 集成开发环境、下载软件、串口调试软件。三、实验内容和步骤1、验证程序,看机器人是否向前、左转、右转及向后走。 如果宝贝车向前运动的过程轻微向左或右偏移,不是一条直线。结果就是左轮与右 轮程序上是以全速行驶,实际输出有速度差,要么左轮速度太慢,要么右轮速度太慢。 让轮子加速不太实际,但是减小轮子的速度就可以解决问题。电机速度是脉冲宽度

22、即程 序中延时函数 delay_nus 的参数 n 决定的。 n 越接近 1500,电机转速越慢。要重复试验 得到一个比较准确的输出。将确定好的沿直线运动的参数更新到程序中相应的值。利用 for 循环控制电机的运行时间,由小车运动形式决定输出距离或角度。例程中 for 循环的循环次数为 65,小车运行时间为,运行距离减半。 for 循环的循环次数为 26, 电机的运行时间决定小车旋转的角度。调整 for 循环的循环次数得到非常接近你想要的 旋转角度。由于每个小车的情况不一样,在向左转与右转中 for 循环的循环次数增加或 减少电机的转角,使宝贝车旋转期望的角度,例如旋转 90 度。如果发现一个

23、值使旋转超 过 90°,而另一个使旋转小于 90°,尝试选择一个使其旋转更多的值,然后稍微减小电 机速度。测试一下你的小车要循环多少次才能旋转 90 度。在转弯半径较大时,可以采用一个电机增速另一个电机减速的方法转弯。由于小车 结构的影响,这种方法转弯较慢,转弯半径较大,效果受运动速度的影响大。在需要转 弯半径较小时,可以采用一个电机转动,而另一个静止的方法。两个电机等速反向转动 可以实现原地转弯。测试宝贝车速度。将宝贝车放在尺子旁边,确保轮子接触的地面与尺子的 0 厘米对 齐在一条线上,按复位键重新运行程序,让宝贝车向前走 1 秒钟,测量从出发点到机器 人停下来所接触的地

24、面距离,测量结果就是以厘米 /s 为单位的。可以参考下列程序。 #include<> #include<> int main(void)int counter;uart_Init();printf("Program Running!n"); for(counter=0;counter<130;counter+)/ 运行 3 秒 P1_1=1; delay_nus(1700);P1_1=0;P1_0=1; delay_nus(1300);P1_0=0;delay_nms(20);while(1);2、将加速或减速与基本巡航动作结合起来,使机器人的

25、每一个动作都能够匀加速或 匀减速。参考教材程序及相似代码更改。3、教材程序、运行结果与产生的效果是相同的,用函数调用简化运动程序。修改使 机器人走一个正方形。4、验证程序是否走了一个矩形。使用数组或调用函数编写程序,使机器人按你的想 法运动,实现较为复杂的运动。【 拓展训练 】编程使履带坦克机器人、相扑机器人、爬虫机器人巡航控制。四、实验程序1、验证程序。#include<>#include<>int main(void)int counter;uart_Init();printf("Program Running!n"); for(counter=

26、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

27、_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);while(1);2、编程反复测试一下小车要循环多少次才能旋转精确的90 度。3、编程测试宝贝车速度,测量结果就是以厘米 /s 为单位的。4、参考以下程序及相似代码, 更改,使机器人的每一个动作都能够匀加速或匀减速。 #include<> #include<>

28、; 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);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_n

29、us(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_nus(1500-pulseCount);P1_0=0;delay_nms(20);while(1);5、修改使机器人走一个正方形。#include <>#include <>void Move(int counter,int

30、 PC1_pulseWide,int PC0_pulseWide)int i;for(i=1;i<=counter;i+)P1_1=1;delay_nus(PC1_pulseWide);P1_1=0;P1_0=1;delay_nus(PC0_pulseWide);P1_0=0;delay_nms(20);int main(void)uart_Init();printf("Program Running!n");Move(65,1700,1300);Move(26,1300,1300);Move(26,1700,1700);Move(65,1300,1700);whil

31、e(1);6、使用数组或调用函数编写程序, 使机器人按你的想法运动, 实现较为复杂的运动。五、实验报告要求1、程序设计小车要循环多少次才能旋转精确的 90 度,观察到的运行效果并加以分 析,程序调试心得。2、更改,使机器人的每一个动作都能够匀加速或匀减速。写出程序,观察到的运行 效果并加以分析,程序调试心得。3、修改,使机器人走一个正方形。写出程序,观察到的运行效果并加以分析,程序 调试心得。4、使用数组或调用函数编写程序, 使机器人按你的想法运动, 实现较为复杂的运动。 写出程序,观察到的运行效果并加以分析,程序调试心得。六、思考题1、在程序中, 向左转与右转的 for 循环的循环次数为 2

32、6,这是什么意思程序运行效 果是怎样的2、机器人完成各种巡航动作的过程中,每次启动和停止时,动作太快,几乎倾倒, 为什么会这样呢采用什么方法可以解决这种问题3、让小车实现转弯的方法有哪些 注:实验操作现场检查。实验四C51接口与触觉导航一、实验目的1、接触型传感器作为输入反馈与 C51单片机的编程实现。2、编程使机器人基于胡须导航,条件判断语句的嵌套与机器人的人工智能决策的编 程使机器人逃离进入墙角死区。二、实验设备及软件图胡须硬件宝贝车机器人、ISP下载线、串行接 口、USB接口、计算机、电源、安装机器 人胡须,所需硬件如图。元件清单:(1) 胡须状金属丝2根;(2) 平头M3x22盘头螺钉

33、2个;(3) 13mm圆形立柱2个;M3尼龙垫圈2个;(5) 3-pin 公-公接头2个;(6) 220 Q电阻2个;(7) 10k Q电阻2个。Keil uVisio n2 IDE集成开发环境、下载软件、串口调试软件。三、实验内容和步骤1、通过布置恰当的电路,在机器人前端安装并测试一个称为胡须的触觉开关,对C51单片机编程来监视触觉开关的状态。安装并测试机器人胡须见图。确定两条胡须比较靠近,但又不接触面包板上的3-pin 头,推荐保持3mm勺距离。参考接线图,搭建胡须电路。色环电阻你会读吗(提示:棕红橙黄绿,蓝紫灰白黑)220 Q电阻(红红黑黑棕),10k Q电阻(棕黑黑红棕)。注意:右边胡

34、须状态信息输入是通过 P1 口的第4引脚完成,左边胡须状态信息输入 是通过P2口的第3引脚完成。也可以接其他引脚,注意电路与程序要匹配。图 安装机器人胡须图 胡须电路示意图图是实际的参考接线图,安装好的触觉胡须的机器人如图。图胡须接线图图安装好触觉胡须的机器人单片机AT89S52的四个端口 P0 P1、P2和P3是可以按位来操作,从低到高依次为 第0 口、第1 口第7 口,书写分别为、(X取0到3)。P1 &0x10 取P10x1000010000P2&0x08 取。弄清哪条胡须是左胡须,哪条是右胡须。当胡须没有被碰到,使引脚电压为5V,胡须状态为1;当胡须被碰到时,使引脚电压

35、为 0V,胡须状态为0。2、通过胡须导航。机器人行走时,如果有胡须被触动,意味着碰到了什么。尝试让宝贝车向前行走,当在其路线上遇到障碍物时,它将后退、旋转并向另一个方向行走以 避开障碍物。具体程序。可以调整Left _Turn()和Right_Turn ()子程序中for循环的循环次数增加或减少电机的转角,使宝贝车旋转期望的角度。在空间比较狭小的地方, 可以调整程序Backward。中for循环的循环次数来减少后退的距离。3、基于人工智能决策的编程使机器人逃离进入墙角死区。编程使机器人逃离进入墙 角死区。当宝贝车进入墙角时,左胡须触墙,于是它倒退,右转。当小车再向前行走, 右胡须触墙,于是再倒

36、退,左转。然后它又前进又会碰到左墙,再次碰到右墙等,直 到有人把它从困境中解救出来。使用含ifelse嵌套语句用于探测连续的、交替出现的 胡须触动。编程使宝贝车在行走时,轮流触动它的胡须,胡须在经过四次触动之后,宝 贝车会进行后退、旋转180。离开墙角。具体程序。尝试增加或减小变量counter的数值, 观察机器人在正常行走过程中是否有任何不同。【拓展训练】触觉导航机器人走迷宫竞赛四、实验报告要求1、搭建触觉导航电路,测试胡须源程序。使用串口调试助手观察运行效果并加以分 析。程序调试心得。#in clude<>#in clude<>int P1_4state(void)

37、获取 P1_4 的状态return (P1 &0x10)1:0;int P2_3state(void)获取 P2_3 的状态return (P2&0x08)1:0;int main(void)uart_Init();printf("WHISKER STARTESn");while(1)printf(" 右边胡须的状态 :%d ",P1_4state();printf(" 左边胡须的状态 :%dn",P2_3state(); delay_nms(150);2、程序触觉导航的实现,胡须机器人怎样行走 #include<

38、;>#include<>int P1_4state(void)return (P1&0x10)1:0;int P2_3state(void)return (P2&0x08)1:0;void Forward(void)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<=26;i+)P1_1=1;delay_nus(1300);P1_1=0;P1_0=1;delay_nus(1300);P1

39、_0=0;delay_nms(20);void Right_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(1300);P1_1=0;P1_0=1; delay_nus(1700);P1_0=0;delay_nms(20);int main(void)uart_Init();printf("

40、Program Running!n");while(1)两胡须同时碰到if(P1_4state()=0)&&(P2_3state()=0) /Backward(); / 向后Left_Turn();/ 向左Left_Turn();/ 向左else if(P1_4state()=0) /右胡须碰到Backward();/ 向后Left_Turn();/ 向左左胡须碰到else if(P2_3state()=0) /Backward();/ 向后Right_Turn();/ 向右else / 胡须没有碰到Forward();/ 向前3、程序是如何工作的#include&l

41、t;>#include<>int P1_4state(void)return (P1&0x10)1:0;int P2_3state(void)return (P2&0x08)1:0;void Forward(void)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<=26;i+)P1_1=1;delay_nus(1300);P1_1=0;P1_0=1; delay_nus(1300

42、);P1_0=0;delay_nms(20);void Right_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(1300);P1_1=0;P1_0=1; delay_nus(1700);P1_0=0;delay_nms(20);int main(void)int counter=1; /胡须碰撞总次

43、数int old2=1; /右胡须旧状态int old3=0; /左胡须旧状态uart_Init();printf("Program Running!n"); while(1)if(P1_4state()!=P2_3state() if(old2!=P1_4state()&&(old3!=P2_3state() counter=counter+1; old2=P1_4state();old3=P2_3state();if(counter>4)counter=1;Backward();/ 向后Left_Turn();/ 向左Left_Turn();/ 向

44、左elsecounter=1;if(P1_4state()=0)&&(P2_3state()=0)Backward();/ 向后Left_Turn();/ 向左Left_Turn();/ 向左else if(P1_4state()=0)Backward();/ 向后Left_Turn();/ 向左else if(P2_3state()=0)Backward();/ 向后Right_Turn();/ 向右elseForward();/ 向前五、思考题1、触觉导航的原理是什么通过胡须导航时如何避开障碍物2、语句 Return(P1&0x10)1:0 的意义是什么试说明。3、

45、语句 if(P1_4state()=0)&&( P2_3state()=0) Backward();Left_Turn();Left_Turn(); 的含义是什么4、在胡须导航程序中函数 Forward() 有变动,只发送一个脉冲,然后返回,这样的 好处是什么5、是否有且只有一根胡须被触动,如何通过获取左、右胡须的状态作出判断写出具体的判断语句 注:实验操作现场检查。实验五 C51 接口与红外线导航一、实验目的1、 掌握红外传感器作为输入反馈与单片机的编程实现,让机器人的C51单片机可以 收发红外光信号。2、 使用红外线发射和接收器件探测道路,编程实现高性能的IR 导航和边沿探

46、测。二、实验设备及软件宝贝车机器人、ISP下载线、串行接口、 USB接口、计算机、电源。所需元件:(1) 两个红外检测器,如图;(2) 两个IR LED,如图;(3) 四个470Q电阻(黄紫黑黑棕);(4) 两个 9013三极管,如图。图红外检测器图红外线二极管LED发射器图 三极管 9013管脚图图 三极管 9013结构图及符号图Keil uVision2 IDE 集成开发环境、下载软件、串口调试软件。三、实验内容和步骤使用红外光来照射机器人前进的路线,确定何时有光线从被探测目标反射回来,通过检测反射回来的红外光可以确定前方是否有物体。机器人使用红外线二极管LED发射红外光线,红外检测器相当

47、于眼睛,检测到反射回来的红外光线,并发出信号来表明检 测到从物体反射回红外线,如图。红外线(IR)接收/检测器有内置的光滤波器,除了需 要检测980nm波长的红外线外,几乎不允许其他光通过。红外检测器还有一个电子滤波 器,只允许大约的电信号通过。图 用红外探测障碍物1、搭建并测试 IR 发射和探测器对,如图。注意断开主板和电机的电源。图左侧和右侧 IR 组电路原理图 图 左右 IR 组实物参考图 本任务中,发送持续1ms的 的红外光,如果红外光被小车路径上的物体反射回来, 红外检测器将给微控制器发送一个信号,让它知道已经检测到反射回的红外光。当没有 IR 信号返回时,探测器的输出状态为高电平。

48、当它探测到被物体反射的的红外信号时, 它的输出为低电平。放一个物体,比如手或一张纸,距离 IR 组大约 1 英寸。验证当你放一个物体在 IR 组前时,调试终端是否会显示 0,当你将物体移开时,它是否显示 1。注意:保持宝贝车机器人与串口电缆的连接,因为你将用串口调试助手来测试你的IR 组参考程序( ):#include<>#include<>int P1_2state(void)return (P1&0x04)1:0;int main(void)int counter;int irDetectLeft;uart_Init();printf("Progr

49、am 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、IR 检测器探测和避开障碍物IR 检测器的输出与触须的输出非常相象。没有检测到物体时,输出为高,检测到物体时,输出为低。故采取与胡须相同的导航策略。#include<>#include&l

50、t;>#include<>#define LeftIR P1_2 /左边红外接收连接到 P1_2#define RightIR P3_5 /右边红外接收连接到 P3_5#define LeftLaunch P1_3 /左边红外发射连接到 P1_3#define RightLaunch P3_6 /右边红外发射连接到 P3_6void IRLaunch(unsigned char IR)int counter;if(IR='L') / 左边发射for(counter=0;counter<38;counter+) / 发射时间比胡须长 LeftLaunch=

51、1;_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); LeftLaunch=0;_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();if(IR='R') / 右边发射 for(counter=0;counter<38;counter+)RightLaun

52、ch=1;_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); RightLaunch=0;_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();void Forward(void) / 向前行走子程序P1_1=1; delay_nus(1700);P1_1=0;P1_0=1; d

53、elay_nus(1300);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_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)

54、;void Backward(void) / 向后行走子程序 int i;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);int main(void)int irDetectLeft,irDetectRight; uart_Init();printf("Program Running!n"); while(1)IRLaunch('R'); / 右边发射 irDetectRight = RightIR;/右边接收两

55、边同时接收到红外线IRLaunch('L'); / 左边发射 irDetectLeft = LeftIR;/ 左边接收 if(irDetectLeft=0)&&(irDetectRight=0)/ Backward();Left_Turn();Left_Turn();只有左边接收到红外线else if(irDetectLeft=0)/Backward();Right_Turn();else if(irDetectRight=0)/ 只有右边接收到红外线Backward();Left_Turn();elseForward();3、高性能的 IR 导航,在每个脉冲之间采样以避免碰撞。在触须导航里使用的预编程机动动作很好,但是在

温馨提示

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

评论

0/150

提交评论