复习题1湖南工业大学交互式考试docWord文档格式.docx

上传人:b****4 文档编号:6377753 上传时间:2023-05-06 格式:DOCX 页数:17 大小:38.07KB
下载 相关 举报
复习题1湖南工业大学交互式考试docWord文档格式.docx_第1页
第1页 / 共17页
复习题1湖南工业大学交互式考试docWord文档格式.docx_第2页
第2页 / 共17页
复习题1湖南工业大学交互式考试docWord文档格式.docx_第3页
第3页 / 共17页
复习题1湖南工业大学交互式考试docWord文档格式.docx_第4页
第4页 / 共17页
复习题1湖南工业大学交互式考试docWord文档格式.docx_第5页
第5页 / 共17页
复习题1湖南工业大学交互式考试docWord文档格式.docx_第6页
第6页 / 共17页
复习题1湖南工业大学交互式考试docWord文档格式.docx_第7页
第7页 / 共17页
复习题1湖南工业大学交互式考试docWord文档格式.docx_第8页
第8页 / 共17页
复习题1湖南工业大学交互式考试docWord文档格式.docx_第9页
第9页 / 共17页
复习题1湖南工业大学交互式考试docWord文档格式.docx_第10页
第10页 / 共17页
复习题1湖南工业大学交互式考试docWord文档格式.docx_第11页
第11页 / 共17页
复习题1湖南工业大学交互式考试docWord文档格式.docx_第12页
第12页 / 共17页
复习题1湖南工业大学交互式考试docWord文档格式.docx_第13页
第13页 / 共17页
复习题1湖南工业大学交互式考试docWord文档格式.docx_第14页
第14页 / 共17页
复习题1湖南工业大学交互式考试docWord文档格式.docx_第15页
第15页 / 共17页
复习题1湖南工业大学交互式考试docWord文档格式.docx_第16页
第16页 / 共17页
复习题1湖南工业大学交互式考试docWord文档格式.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

复习题1湖南工业大学交互式考试docWord文档格式.docx

《复习题1湖南工业大学交互式考试docWord文档格式.docx》由会员分享,可在线阅读,更多相关《复习题1湖南工业大学交互式考试docWord文档格式.docx(17页珍藏版)》请在冰点文库上搜索。

复习题1湖南工业大学交互式考试docWord文档格式.docx

PORTE(100A):

模拟口。

光敏传感器利用PEO,PE1口采集光敏电阻上的电压值;

麦克风利用PE2口采集电压值;

碰撞传感器利用PE3口采集电压值;

红外传感器利用PE4口采集红外探测器的当前值。

7、什么是传感器?

它的作用和组成。

传感器就是自动测量系统中一个把待测量变换成某种电信号的装置。

传感器是能感觉规定的被测量,并按一定的规律性,转换成可用输出信号的器件或装置。

通常由敏感元件和转换元件组成。

8、能力风暴五种基本传感器,所对应的库函数有哪些,如何应用。

基本的结构和执行的过程。

红外传感器由发光二极管和光敏晶体管组成。

发光二极管发出的光经过反射被光敏晶体管接收。

接收到的光强和传感器与目标的距离有关,因此也叫接近觉传感器。

机器人的最远“可视距离”是80cm。

由红外发射管决定,调节主板上的调节电位器,在电位器的旁边分别标有“irleft"

"

irright"

顺时针旋转,机器人的“可视距离”增大,反之,减小。

红外传感器检测障碍的过程

1)左右发射管均关闭,红外探测器探测一次当前信号,并保存下来以跟后面采集的数据比较。

当程序中调用i七detector()时,启动红外发射探测系统。

首先,左红外发射管发射一次,延时1ms后红外探测器探测一次信号;

然后,右红外发射管发射一次,延时1ms后红外探测器探测一次信号,(红外探测器探测一次信号的时间为0.064ms)红外探测器通过PE4口采样当前值,并保存下来。

3)调用一次ir_dctector()函数,红外探测系统开启一•次。

完成后,左右发射管关闭。

只有在初始探测无反射而第二次探测有反射时,左反射管才是有反射的,这样系统才认为左方有障碍;

同理,初始探测无反射而第三次探测有反射时,右反射管才是有反射的,右方被认为有障碍。

而当左右两方向都检测到障碍时,就认为前方有障碍。

注意:

红外接收模块只是在接收到一定强度的红外光时才认为有障碍,所以,当障碍物太细时,会检测不到障碍;

当障碍物是黑色或深色时,由于只反射回一小部分红外光,会使接收模块接收到的红外光强度不够而被误认为无障碍。

红外传感器对应的库函数是ir_detector()□返回值:

ObOO:

没有障碍ObOl:

左方有障碍OblO:

右方有障碍:

OblOO:

前方有障碍。

碰撞传感器:

碰撞环上有四个碰撞开关:

右前、左前、右后、左后,它们和碰撞环一•起构成了碰撞传感器,用来感知碰撞环上的碰撞信息。

四个碰撞开关接在一个电阻网络里,当受到碰撞时,碰撞开关闭合,通过采集模拟口PE3上电压值的变化,来识别出哪个或哪些碰撞开关闭合,从而判断出哪些方向有碰撞。

碰撞传感器对应的库函数是bumper(),返回值0001左前、0010右前、0100左后、1000右后、0011前、1100后、0101左、1010右、0000无。

麦克风:

声音传感器内置一个对声音敏感的电容式驻极体话筒。

声波使话筒内的驻极体薄膜振动,导致电容的变化,而产生与之对应变化的微小电压。

这一电压随后被转化成0〜5V的电压,经过A/D转换被数据采集器接受,麦克风采集到的信号通过放大,输出信号至PE2口。

没有声音时,电压为2.5V左右,转换为8位二进制数后得到的十进制整数为127左右。

当有声音时,输出电压在2.5V±

下波动,PE2测得的电压和2.5V相减的绝对值越大,则声音越大。

麦克风对应的摩函数是microphone()omicrophone()对数据进行了处理,使返回值在0~255之间,声音越响数值越大。

intmicrophone()

{returnabs(analogport

(2)-127)*2;

}

光敏传感器:

两个光敏电阻分别与模拟输入口PEO,PE1相连,系统中采集的是光敏电阻上的电压值。

光暗时,电阻上的电压接近5V;

光强时,接近0V。

光敏电阻的阻值变化是连续的,因此PEO,PE1的电压变化也是连续的,电压信号经过模数转换变成8位二进制数,即十进制0-255o0表示光线最强;

255表示光线最弱。

/*读光敏,index二左1,右2,返回值0~255,光线越暗数值越大*/intphoto(intindex)

if(index=l)returnanalogport

(1);

if(index==2)returnanalogport(0);

return0;

光电编码器:

光电编码器是一种传递位置信息的传感器,试述它的组成及基本的工作原理,并讲述机器人如何通过光电编码器得到行驶的距离?

光电编码器的组成包括:

光电编码模块和码盘。

基本的工作原理:

光电编码模块集成了红外发射与接收功能,码盘是反射器,可以将光电编码模块发射的红外光反射回来,给光电编码模块接收。

检测左右编码器当前状态的库函数为:

encoder(l),它返回左编码器的当前状态;

encoder

(2)它返回右编码器的当前状态。

0为低电平,1为高电平库函数rotation(l),rotation

(2)nJ读出经过左右光电编码器的脉冲累计值。

/*光电编码器当前状态,index二左1,右2*/intencoder(intindex){

if(index==l)returndigitalport(0);

elsereturndigitalport(7);

编写程序:

把儿个机器人放在一起,编写程序并下载运行,试一试机器人你叫我应的场面是不是很有趣。

一部分机器人先发音,一部分机器人先侦听。

发音的机器人发音完毕后转入侦听,听到声音的机器人回应(发音)。

/*初始化b二1时,设置该机器人先侦听;

初始化b二-1时,设置该机器人先发出声音。

*/

■voidmain()

■(intb=l;

■intmic;

■while

(1)

■{mic二microphone();

■printf("

mic=%d\n”,mic);

■wait(0.5);

■if(b=l&

&

niic>

140)

■{b=b*(-l);

■beep();

■wait(2.0);

if(b==-l)

■beepO;

■wait(1.0);

■b二b*(T);

机器人放在离光源有一段距离的地方,此时,让机器人向光源靠近,足够接近

}}

请用光敏传感器让机器人追光。

但光敏传感器能探测到光源的位置,光源时停下来。

■Voidmain()

intright,left,diff,even;

while

(1)

right二photo

(2));

left二photo⑴;

diff二rightTeft;

even=(right+left)/2;

if(even<

100)

stopO;

elseif(diff>

20)

drive(60,10);

elseif(diff<

-20)

drive(60,TO);

elsedrive(60,0)

wait(0.1);

请让机器人以最大速度前进10秒,然后计算机器人行走的距离和速度(每

个脉冲周长方面的分辨率为6.2mm)

voidmain()

ints,v;

intnumber=0;

drive(100,0);

wait(lO.O);

number=rotation

(1);

s=(int)(number*6.2);

v=(int)(distant/10);

请用麦克风检测声音,让机器人第一次听到声音时,全速前进;

第二次听到声音时,停下来;

如此循环。

(有效声音标志microphone0返回值大于180)

■Voidmain()

■(

■int1=0;

■mic=microphone();

■if(mic>

180)1+二1;

■if(I==l)drive(100,0);

■else

■(stopO:

1=0;

■}

■}

红外避障库函数:

/*红外测障,返回值:

无0,左1,右2,前4。

左发射PD2,右发射PD3,接收PE4*/

■intir_detector()

■(intvail,val2,val3,result;

■vail=read(OxlOOA)&

OblOOOO;

/*检测接收到的背景红外信号*/

■bit_set(0x1008,0b0100);

■msleep(2L);

/*

/*打开左红外发射传感器,PD2口*/等待2毫秒*/

val3=read(OxlOOA)&

/*检测接收到的红外信号*/

 

■bitclear(0x1008,ObOlOO);

■bitset(0x1008,OblOOO);

/*关闭左红外发射传感器*/

/*打开右红外发射传感器,PD3口*/

msleep(2L);

/*等待2毫秒*/

val2=read(0x100A)&

0b10000;

■bit_clear(0x1008,Obi100);

/*关闭所有红外发射传感器*/

result=((val1&

~val2)»

3)|((val1&

~v&

13)»

4);

■msleep(2L);

■if(result=3)result=4;

■returnresult;

/*等待2毫秒*/

请用能力风暴机器人做一•个简易电子琴,碰撞碰撞环,发出8个不同方位的声音,并且在液晶显示器上,分别将8个不同方位的碰撞信息显示出来。

左前(247Hz)/<

、右的(294Hz)

3

右(330Hz)

右后(350Hz)

1(262Hz)

7

左(495Hz)64

左后(441Hz)5

后(393Hz)

■voidmain()

■intbump;

■{

■bump=bumper();

■if(bump==0b0011){printf("

font\n”);

tone(262.0,0.5);

■elseif(bump==0b0001){printf("

rightand

font\n”);

tone(294.0,0.5);

■elseif(bump==0b0101)(printf("

right"

'

);

tone(330.0,0.5);

■elseif(bump二二ObOlOO){printf("

ba.ck\n”);

tone(350.0,0.5);

■elseif(bump==0bll00)(printf(uback\nv);

tone(393.0,0.5);

■elseif(bump=0bl000){printf("

leftand

back\n"

);

tone(441.0,0.5);

■elseif(bump=0bl010){printf("

left\n”);

tone(495.0,0.5);

■elseif(bump==0b0010)(printf("

leftandfont\n”);

tone(247.0,0.5);

■wait(0.5);

读取系统时间,此时的系统时间单位是“秒”,然后通过程序处理后,变为“分:

秒:

毫秒”的显示方式,也就是将系统读出的时间变为具体的分、秒、毫秒值来显示。

.(floatfscc;

■intsec,msec,min;

■while(bumper()=0)

■{fsec=seconds();

■sec=(int)fsec;

/*主函数,作为程序入口*/

/*定义浮点数型变量*/

/*定义整型变量*/

/*当没有碰撞时*/

/*读取时间值,单位为“秒”*/

/*得到所有时间的整数“秒”值

■msec=(int)((fsec-(float)sec)*100.0);

/*得到“毫秒”的整数值*/

■min=sec/60;

/*得到“分”的值*/

■sec=sec-min*60;

/*得到"

秒”的值*/

■if(min<

10)printf(〃0%d〃,min);

/*如果"

分”小于10,前面加0显示*/

■elseprintf(〃%d〃,min);

/*否则,直接显示“分”

■if(sec<

10)printf(〃:

0%d”,sec);

/*如果“秒”小于10,前面

加0显示*/

■elseprintf(〃:

%d〃,sec);

/*否则,直接显示“秒”

■if(msec<

10)printf(z,:

0%d\nz/,msec);

/*如果“毫秒”小于10,

前面加0显示*/

■elseprintf(〃:

%d\n〃,msec);

/*否则,直接显示“毫秒”

■wait(0.1);

/*等待0.1秒*/

机器人直走校准程序及调试方法。

■intdrivebias=0;

■voiddriveb(inttrans,introt)

■(introt_bias=(drive_bias*trans)/100;

■motor(0,trans-(rot+rot_bias));

■motor(1,trans+(rot+rotbias));

■}—

飞蛾扑火程序:

voidmain()

{

intr,1;

/*定义变量r左光敏1右光敏*/

intal,a2,a3;

/*定义标志位al找光源方向a2靠近光源a3围绕光源转*/

intdl,d2;

/*定义参数dl靠近光源左右方向参数d2旋转参数*/

al=l;

a2=0;

a3=0;

/*标志位设初值,al设1则先执行找光源方向*/

while

(1)

I

while(al)/*执行al找光源*/

r二photo

(2);

1二photo(l);

printf(z,al:

r=%d,1二%d\n〃,r,1);

if(r<

240||l<

240)/*发现光源方向的条件*/

(al=0;

a2=l;

}/*转到a2执行,靠近光源*/

r=photo

(2);

l=photo(l);

/*设置dl参数*/

,r,1,dl);

dl=(l-r)*2;

printf(z,a2:

r=%d,l=%d,d=%d\n,/

150||l<

150)/*到达光源附近的条件*/

(a2=0;

a3=l;

}/*转到a3执行,围绕光源转圈*/

elseif(r>

240&

!

>

240)/*远离光源的条件*/

/*转到al执行,寻找光源方向*/

/*靠近光源移动*/

(al=l;

drive(80,dl);

/*设置d2参数*/

d2二(r-150)*2;

printf(,za3:

r=%d,d=%d\n,r,d2〃);

drive(80,d2);

/*围绕光源转动,先调整轨道,停留在r=150

的圆圈轨道上运动*/

wait(0.01);

1

跟人走

■voidmain()

■{intir=0;

/*红外检测变量*/

■intbmp=0;

/*碰撞检测变量*/

■intold_bmp=0;

/*前一次的碰撞检测结果*/

■intfoltransdef=80;

/*预设的前进速度*/

■intfolrotdef二40;

/*预设的转弯速度*/

■printf(〃Follow\n"

);

/*显示在LCD屏幕上*/

■{ir=ir_dctector();

/*取红外系统检测结果*/

■bmp=bumper()&

ObOOll;

/*检测前左、前右方向上的碰撞*/

■if(oldbmp&

(!

bmp))/*连续两次碰撞*/

■wait(0.5);

■elseif(bmp)/*如果前方有碰撞*/

■stopO;

/*停止运动*/

■elseif(ir==0)/*前方没有物体*/

■StopO;

■elseif(ir==4)/*前方有物体*/

■drive(foltransdef,0);

/*往前追*/

■elseif(ir―1)/*物体在左侧*/

■drive(foltransdef,(-folrotdef));

/*转向左*/

■elseif(ir==2)/*物体在右侧*/

■drive(fol_trans_def,fol_rot_def);

/*转向右*/

■wait(0.1);

/*让运动持续一会*/

■oldbmp=bmp;

■)"

多进程同步:

intbilltrans=0;

intbillrot=0;

intbmpr=0;

intforward=0;

intrunning=0;

/*能力风暴初始值处于静止状态*/

voidbilliards()

while

(1)/*无限循环检测*/

bmpr=bumper();

/*检测碰撞传感器*/

if(bmpr!

=0)

(if(bmpr==0b0011)/*正前方发生碰撞*/

{forward=0;

bill_trans=-80;

/*后退*/

billrot=0;

elseif(bmpr==0bll00)/*正后方发生碰撞*/

{forward二1;

bi1l_trans=80;

/*前进*/

bill_rot=0;

elseif(bmpr&

ObOlOl)/*左侧发生碰撞*/

{bill_trans=0;

bill_rot=-80;

wait(0.5);

/*顺时针转一个角度*/

forward二1;

bill_trans=80;

}"

OblOlO)/*右侧发生碰撞*/

bill_rot二80;

/*逆时针转一个角度*/forward=l;

/*前进*/bill_rot=0;

voidbilliardsir(){—intir;

if(running)/*能力风暴没有开始运动,不检测障碍*/

(ir=ir_detector();

/*检测红外传感器*/

if(bmpr==0&

forward)/*后退或发生碰撞时,不避障*/{

if(ir==2)/*右侧有障碍,向左绕*/

(bill_trans=20;

bill_rot=80;

/*逆时针转*/

elseif(ir==l)/*左侧有障碍,向右绕*/

/*顺时针转*/

}一

elseif(ir==0)/*前方没有障碍,恢复直行*/

{billtrans=80;

}}wait(0.1);

})

voidbilliardsdrive()

{~

(running=bill_trans;

/*能力风暴正在运动*/drive(bill_trans,bill_rot);

/*驱动电机*/

voidmain()start_proccss(billiards_drivc());

/*创建电机驱动进程*/start_process(billiards_ir());

/*创建避障进程*/

start_process(bil1iards());

/*创建碰撞处理进程*/

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2