第2章 能力风暴机器人的结构_第1页
第2章 能力风暴机器人的结构_第2页
第2章 能力风暴机器人的结构_第3页
第2章 能力风暴机器人的结构_第4页
第2章 能力风暴机器人的结构_第5页
已阅读5页,还剩195页未读 继续免费阅读

下载本文档

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

文档简介

1、第二章 能力风暴机器人的结构(综述)n打开包装箱,里面有:能力风暴机器人一台,串口通信线一根,充电器一只。n小心地拿出机器人,放在桌子上。n机器人下部的碰撞环是柔性部件,拿的时候要小心,尽量不要接触碰撞环。n拿机器人的姿势如图 (a) 所示。图 (b) 的拿法要避免,否则会使碰撞传感器失灵。n 连接能力风暴n接线。接线。取出串口连接线,一头接在机器人的下载插口,另一头接PC机机箱后的9针串口。记住:不要带电插拔。n打开能力风暴的主开关。打开能力风暴的主开关。注意:能力风暴可能开机就运动,请把它托在手上,不要让它从高处摔下来。连接能力风暴n按下机器人的电源开关,您会听到“嘟”的一声,同时绿色电源

2、指示灯亮,说明电源开关已经打开,机器人的电源接通了。这时可看到机器人液晶显示屏上出现“ASOS2002 Grandar Ability Storms”的字样,并且液晶屏右下角有“太极图”在跳动。n如果看不到“太极图”跳动,则说明机器人里没有了操作系统ASOS,请您为机器人下载操作系统 检测是否连接成功检测是否连接成功n如果程序不能正常下载,可能有以下6个方面的原因:n1)能力风暴的主开关未打开。 2)电池电压不足。 3)机器人型号设置不正确。n4)该串口硬件有问题。n5)能力风暴操作系统被破坏。n6)串口线头过松,接触不好。 检测能力风暴n下载自检程序selftest.jc。n自检项目。给机器

3、人检查身体,共有九个项目,如下表所示:n 逐项检查 n按下机器人的运行键,机器人就开始自检了,LCD 液晶屏上显示“AS-UII Inteligent Robot Test”,紧接着就开始了第一个自检项目:n1)检查 LCD 液晶屏nLCD 液晶显示屏安装在机器人的外壳上,作用是显示各种信息,便于了解程序执行中的情况。显示屏可以显示 162 个字符(每行 16 个字符,共 2 行),机器人与我们之间的交流可以通过显示屏反映出来。显示屏可以告诉您机器人运行的信息,这一点在以后调试程序时尤其显得重要。自检开始后,LCD 显示屏标明的测试项目为“Now Test NO.1”,接着提示“LCD Tes

4、t”,然后就开始显示字符,如数字、符号、字母等。注意观察 LCD 显示屏有没有出现黑屏(出现整排兰色条纹)或无字符等现象,如果没有,说明机器人的 LCD显示屏是正常的。n2)喇叭检测n第二次按下“运行”键,机器人就开始了第二项检查工作,LCD显示屏标明的测试项目为“Now Test NO.2”,接着提示“Piezo Test”,请注意听机器人是否在为你“唱歌”,声音是否清晰响亮。机器人是用喇叭发声,喇叭是机器人的“嘴巴”,它装在主板上。显示屏上的数字会伴随着机器人的声音不断变化,显示的数字是机器人发出的声音频率。音调越高,显示的数字就越大。 n3)光敏检测n机器人的光敏传感器安装在外壳上,两只

5、光敏传感器一左一右,用来识别外界光线的强弱。再按一下“运行”键,机器人就开始了第三项检查工作,LCD标明的测试项目为“Now Test NO.3”,其后在 LCD 上有类似“Photo L242 R248”的提示,其中 L 表示“左光敏”,R 表示“右光敏”,字母后面的数字表示机器人检测到的光线强度值。随着光强的不同,光敏传感器的感应数值也不同,其变化范围为 0255。光强越弱,数值越大,光强越强,数值越小。在相同光强条件下,左右两边光敏传感器的数值偏差应当小于 10。 n4)红外检测 n红外传感系统也安装在机器人的外壳上,左右两侧一边一只红外发射管,中间一只红外接收模块。红外传感器的作用是检

6、测机器人前方、左前方、右前方是否有障碍物。再按下“运行”键,机器人就开始了第四项检查工作,LCD标明的测试项目为“Now Test NO.4”,其后在 LCD 出现“IR Test”提示。刚出厂时,红外检测的距离设置在 30cm 左右。将 A4 纸大小的障碍物分别放在机器人的正前方、左侧、右侧时,观察 LCD 的变化。n5)话筒检测 n再按一下“运行”键,机器人就开始了第五项检查工作,LCD标明的测试项目为“Now Test NO.5”,其后出现“Microphone Test”提示。对着 AS-U的话筒槽孔(蜂窝状小孔)说话,看 LCD 上的“”号是否增加。 n6)检测碰撞传感器 n机器人的

7、碰撞传感器,相当于我们人类的触觉。它虽然只用了四只碰撞传感器,却能感知全身碰撞的方位。再按一下“运行”键,机器人就开始了第六项检查工作,LCD标明的测试项目为“Now Test NO.6”,其后出现“Bumper Test”字样。当你用手从不同方向触动碰撞环时,LCD 就会相应地显示出机器人受到碰撞的方向: n用手从正前方挤压碰撞环,LCD 显示屏上显示“Front”; n用手从正后方挤压碰撞环,LCD 显示屏上显示“Back”; n你也可以试试其他方向,如左、右、左前、右前、左后、右后n方等。 7)检测运动系统 n再把机器人放到开阔的平地上(有 2 米2 米大小即可),按一下“运行”键,n机

8、器人就开始第七项检查工作。液晶屏标明的测试项目为“Now Test NO.7”,接着提示“Motor Test”,其后机器人将会移动、转弯,同时在 LCD 上显示机器人移动的累计“距离”和瞬时电机转速。如: nMotor 30 L 100 nTest 31 R 100 n表示左电机速度 100,右电机速度 100,左轮转过 30 个单位,右轮转过 31 个单位。n 可能碰到的问题: n 1) 机器人运动突然停止,可能是机器人电量不足,请给机 器人充电。 n 2) 另外,注意不要让机器人运动时顶住障碍物,否则会造 成电机堵转,容易损坏驱动芯片。 n8)检测光电编码器 n第七项检测完成后,把机器人

9、从地上拿起来,再按一下“运行”n键,机器人就开始了第八项检查工作,LCD 标明的测试项目为“Now Test NO.8”,接着提示“Encoders Test”。机器人的轮子每转动 1 圈,码盘也随着转动 1 圈,LCD 上显示的光电编码器的计数值约等于 33。即轮子转动 1 周,光电计数为 33。我们可以用手分别转动左、右两侧的轮子,观察显示屏上的数字变化情况。n9)检测扩展电机 n再按一下运行键,显示屏标明的测试项目为“Test No.9”,接着提示“DC Motor 3”,这时就开始检测扩展电机了。扩展电机通常接在机器人主板的 MDCA3 接口上。此项检测在此不多介绍,我们只要知道有这项

10、功能就行了。n自检程序全部完成后,按一下复位键,机器人就会停止运行。最后关闭电源开关。也可以不按复位键,直接关闭电源开关。 自检程序selftest.jcn/* Definitions of the registers in the MC68HC11E1 */nint porta = 0 x1000;nint pioc = 0 x1002;nint portc = 0 x1003;nint portb = 0 x1004;nint portcl = 0 x1005;nint ddrc = 0 x1007;nint portd = 0 x1008;nint ddrd = 0 x1009;nint

11、 porte = 0 x100A;nint cforce = 0 x100B;nint oc1m = 0 x100C;nint oc1d = 0 x100D;nint tcnt = 0 x100E;nint tic1 = 0 x1010;nint tic2 = 0 x1012;nint tic3 = 0 x1014;nint toc1 = 0 x1016;nint toc2 = 0 x1018;nint toc3 = 0 x101A;nint toc4 = 0 x101C;nint toc5 = 0 x101E;nint tctl1 = 0 x1020;nint tctl2 = 0 x1021

12、;nint tmsk1 = 0 x1022;nint tflg1 = 0 x1023;nint tmsk2 = 0 x1024;nint tflg2 = 0 x1025;nint pactl = 0 x1026;nint pacnt = 0 x1027;nint spcr = 0 x1028;nint spsr = 0 x1029;nint spdr = 0 x102A;nint baud = 0 x102B;nint sccr1 = 0 x102C;nint sccr2 = 0 x102D;nint scsr = 0 x102E;nint scdr = 0 x102F;nint adctl

13、= 0 x1030;nint adr1 = 0 x1031;nint adr2 = 0 x1032;nint adr3 = 0 x1033;nint adr4 = 0 x1034;nint option = 0 x1039;nint coprst = 0 x103A;nint pprog = 0 x103B;nint hprio = 0 x103C;nint init = 0 x103D;nint test1 = 0 x103E;nint config = 0 x103F;n/* Fundamental freq of this octave. Ohters: 220, 440, 880, 1

14、760 */nfloat octave = 440.0;nfloat a0 = octave * 1.000;nfloat b0 = (octave * 1.143);nfloat c = (octave * 1.218);nfloat d = (octave * 1.375);nfloat e = (octave * 1.542);nfloat f = (octave * 1.628);nfloat g = (octave * 1.810);nfloat a = (octave * 2.000);nfloat b = (octave * 2.0 * 1.143);nfloat c2 = (o

15、ctave * 2.0 * 1.218);n/* Note times: q - quarter, h - half, w - whole */nfloat tempo = 0.25;/* Duration of a quarter note */nfloat q = tempo;/* Quarter note */nfloat h = (2.0 * tempo);/* Half note */nfloat dh = (3.0 * tempo);/* Dotted half */nint note_display = 0;/* Global chooses whether to display

16、 note or not */nvoid note(float freq, float dur)n if (note_display)n printf(Piezo Test freq%fn, freq);n tone(freq,dur);n nvoid speaker()n note(c,q);n note(f,h); n note(g,q); n note(a,h);n note(g,dh);n note(e,5.0 * q);nn/* Piezo test */nvoid piezo_test()n int ctr = 0;n while (1)n printf( n);n ctr+;n

17、note_display = 1;/* Enable note frequency display */n speaker();n note_display = 0;/* Disable display */n n/* LCD test - should exercise all characters at all positions (but dosent for now) */nvoid lcd_test()n int j;n int chr = 32;n printf(nLCD Testn);n sleep (1.5);n while(1)n for (j = 1; j 4) + (1

18、& (val 3);/* Divide with round off */n for (j = 1; j);n for (j = blks; j 16; j+)n printf(-);nn/* Microphone test */nvoid mic_test()n int sum, i;n while (1)n sum = 0; /* Collect some samples */n for (i = 0; i 5 );/* Divide by 64 to average samples and multiply by */n printf(Microphone Testn); /*

19、2 to convert therm() range from 128 to 256 */n nn/* IR Test */nvoid ir_test()n int ir_val;n while (1)n ir_val = ir_detector();n if (ir_val = 0)nprintf( );/* Clear */n else if (ir_val = 4)nprintf( );/* Both */n else if (ir_val = 1)n printf( ); /* Right */n printf(IR Testn);n sleep(0.35);n n/* Print a

20、 3 digit 8-bit integer that takes up exactly 3 characters */nvoid p_byte(int val)n if (val 10) printf( %d, val); /* .n */n else if (val : 4 */n/* : -6 */n/* therm_diff is for displaying the difference between two quantities */nvoid therm_diff (int val)n if (val = 0)n printf( );/* Zero */n else if (v

21、al -8)n printf(%c ,127);/* Less than -8 */n else if (val 0)n repeat_char(32,8 + val);/* 32 = space */n repeat_char(60,abs(val);/* 60 = 8)n printf( %c,126);/* More than +8 */n elsen printf( );n repeat_char(62,val);n repeat_char(32,8 - val);n n/*photo test*/nvoid photo_test()n int pc_left, pc_right;n

22、while(1)n pc_left = photo(1);n pc_right = photo(2);n therm_diff(pc_left - pc_right);/* Diff thermometer points toward brighter light */n printf(Photo L); p_byte(pc_left);n printf( R); p_byte(pc_right); printf( n);n sleep(0.25);n nn/* Motor Test n 0123456789ABCDEFn Motor cc L vvvv Where cc is the num

23、ber of clicks during the past intervaln Test cc R vvvv* and vvvv is the commanded velocity (as a percentage of max)n*/n/* Count the number of digits in an integer (negative numbers add 1 for - sign) */nint digits(int signed_val)n int digs, val;n val = abs(signed_val);n if (val 100)n if (val 10)ndigs

24、 = 1;n else digs = 2; n else if (val 10000)n if (val = 0)n return digs;n else return (digs + 1);nn/* Print character ch, rep times */nvoid repeat_char(int ch, int rep)n int j = 0;n for (j = 0; j = cols)n printf(%d, val);/* May not be possible to print in required number of cols */n elsen repeat_char

25、(32,cols - digs);n printf(%d,val); nnvoid display_mot_test(int lvel, int rvel)n printf(Motor ); printn(rotation(1),2); printf( L ); printn(lvel,4); printf( );n printf(Test ); printn(rotation(2),2); printf( R ); printn(rvel,4); printf( );n printf( n);nnvoid set_show_motors(int left, int right)n motor

26、(1, left);n motor(2, right);n display_mot_test(left, right);nnvoid motor_test()n int i;n float interval = 0.4;n init_motors();n rotation(1);n rotation(2);n while(1)n n for (i = 0; i = 200; i = i + 10)/* Reverse direction while spinning */n set_show_motors(100 - i), (100 - i); wait(0.05); n stop();wa

27、it(0.5);n for (i = 0; i 9) | (test_number 1) test_number = 1;n printf(AS-UII Intelligent Robot Testn);n wait(1.5);n printf(Push RUN to nexttestn);n wait(1.5);n printf(n);n printf(Now test No.%d ,test_number);n for( i = 0; i ); n printf(n);nwhile(1)n nif(!run_keyflag) run_keyflag = runbutton();nwait(

28、0.2);nif(run_keyflag & !runbutton() run_keyflag = 2;nif(run_keyflag = 2)n run_keyflag = 0; nif(pid)n kill_process(pid); test_number +;n if (test_number 9) | (test_number 1) test_number = 1;n bit_clear(0 x1000, 8);bit_clear(0 x1020, 0b00000001); bit_clear(0 x100c,0 x60);n printf(n);n printf(Now t

29、est No.%d ,test_number);n for( i = 0; i ); n printf(n);n nif(test_number = 1)n pid=start_process(lcd_test();n else if (test_number = 2)n pid=start_process(piezo_test(); nelse if (test_number = 3)n pid=start_process(photo_test();nelse if (test_number = 4)n pid=start_process(ir_test();nelse if (test_n

30、umber = 5)n pid=start_process(mic_test();nelse if (test_number = 6)n pid=start_process(bumper_test();nelse if (test_number = 7)n pid=start_process(motor_test();nelse if (test_number = 8)n pid=start_process(encoder_test();nelse if (test_number = 9)n pid=start_process(dcmotor3_test();n nn几种常用的操作n如何更新操

31、作系统 n如何为机器人配置型号 n如何给机器人充电 n如何下载自检程序 n如何下载当前程序 n如何正确使用“复位/ASOS”按钮 n如何让机器人走的直线更好 机器人的构成的三大要素能力风暴机器人对信息的处理过程:五种传感器,使它能象人一样,有了视觉、听觉、触觉等感觉器官;然后这些 “感觉器官”将感觉到的外界信号送给机器人的大脑微控制器;微控制器根据装载的JC程序进行思维,最后由执行器来执行相应的动作。 机器人的身体结构n控制部分:机器人的核心组成部分,包括主板和控制按键1.主板:由很多电子元器件组成,跟人的大脑一样,主要完成接收信息、处理信息、和发出指令等。2.控制按键:机器人的运行控制部件。

32、包括开关按钮、电源指示灯、充电指示灯、充电口、下载口、复位/ASOS按钮、运行键、通信指示灯n传感器部分:包括五种基本的传感器(P10)n执行部分:扬声器、LCD、主动轮及其驱动机构、从动轮、直流电机前后后前4只碰撞传感器2只红外传感器2只光敏传感器2只光电编码器1只麦克风外部存储器单片机稳压与低电压复位系统2只直流电机LCD喇叭1只直流电机或伺服电机电机驱动喇叭驱动直流驱动BUS各种外部扩展卡ASBUS总线串口通讯PC微控制器n拥有8个模拟口,5个输入捕捉,3个输出, 16位地址,8位数据总线,串口,以及4个通用I/O。n68HC11具有自下载功能,既可用于开发高层应用软件,又便于开发底层驱

33、动,还能交互调试n微控制器68HC11由CPU、片内存储器、定时器系统、串行口、A/D、并行I/O口、中断和复位系统组成。(原理结构图参见P34)PORT A:PA0-PA2输入捕捉通道(input capture IC) PA3-PA6输出比较通道(output compare OC) PA7通用的I/O口能力风暴机器人中:光电编码器利用PA0,PA7口捕 捉计码盘信号; 直流电机驱动采用PA5,PA6发出 PWM信号; 喇叭由PA3控制。PORT B:端口功能受68HC11E的工作模式的影响,单独工作模式下,提供普通的8条输出信号通道,扩展工作模式下,提供8位地址通道。能力风暴机器人中:P

34、ORT B与PORT C提供16条地址线, PORT B做为地址的高8位。PORT C:单独工作模式下,提供普通的8条输入/输出信号通道,扩展工作模式下,提供8位地址/数据复合通道。能力风暴机器人中:PORT B与PORT C提供16条地址线,8条数据线(PORT C做为地址的低8位,地址/数据时分多用) PORT D:PD0-PD1作为串行通信口(SCI),PD2-PD5 串行外设接口(SPI); 能力风暴机器人中:用PD0,PD1 与PC机进行通信; PD0(RXD)接收数据; PD1(TXD)发送数据。红外传感器:利用PD2,PD3设置发光二极管的状态;直流电机:利用PD4,PD5给驱动

35、电机芯片提供输入脉冲。 PORT E:A/D口 能力风暴机器人中:光敏传感器利用PE0,PE1口采集光敏电阻上的电压值; 麦克风利用PE2口采集电压值; 碰撞传感器利用PE3口采集电压值; 红外传感器利用PE4口采集红外探测器的当前值; 外部存储器外部存储器n机器人扩展了32KB的低功耗静态RAM,其优点是既有静态RAM的速度和方便(70 ns),又有E2PROM或Flash ROM的掉电不丢失性,从而能令程序和数据合用一个芯片。AS62256写入的数据可保存10年以上,同时具有可靠的上电、掉电、强静电等数据保护功能。(1)存储体(2)地址译码器(3)数据缓冲器(4)控制逻辑电路62256引脚

36、图选址和并行口扩展n32KRAM用了A0-A14共15根地址线,构成32K的地址空间,A15为高电平时,和E、RESET等信号复合片选32KRAM;n32KRAM的地址空间为0X8000-0XFFFF。另一根地址线A15和其余地址线及读/写 线复合扩展4个输入控制线,4个输出控制线。nOX4000-0X4FFF:OS0(写操作) 、ISO(读操作)n0X5000-0X5FFF:OS1(写操作) 、IS1(读操作)n0X6000-0X6FFF:0S2(写操作) 、IS2(读操作)n0X7000-0X7FFF:OS3(写操作) 、IS3(读操作)复位系统和电源复位系统和电源n计算机有多种复位方式:

37、上电自动复位、外部RE-SET复位、看门狗复位(软件工作不正常时)、时钟监视复位。机器人采用前两种复位方式。n电源:机器人底盘下安装有电池。满电压8.4V,额定工作电压7.2V,最低工作电压5V。采用的是锂电池,没有记忆和充爆问题。机器人的传动机构n齿轮传动机构:将齿轮作为主要传动件的传动机构。工作时,首先有一只主动轮先动起来,转动过程中与另一个从动轮的齿一个一个的咬和下去,这个与它咬和的齿轮也会跟着旋转,这样运动主动轮传递到从动轮。n传动类型示意图参见P13齿轮箱n齿轮箱里的传动系统采用多级传动。如果采用一级传动,为了改变速度,就必须一个齿轮很小,一个齿轮很大,这样不仅会造成空间上的浪费,并

38、且对小齿轮性能指标的要求也很高,所以,为了达到一定的传动比,节省空间,采用多级传动,一级一级的改变速度,直到将输出轴的速度调整到所需要的指标。齿轮箱结构图P14机器人的动力n电动机:电动机是以电为原动力产生机械旋转动力的装置。机器人的动力来源于位于机器人底盘内的电池,电池提供电能,电动机则将电能转化为动能。n直流电机:电动机依靠直流电源工作,称为直流电机。直流电机将轴的旋转运动输入到齿轮箱,然后齿轮箱的输出轴控制轮子转动,从而驱动机器人运动。机器人的驱动方式n差动驱动方式:是指将两个有差异的或独立的运动合成为一个运动。当我们把两个电机的运动合成为一个运动时,这就成了差动运动。(参见P16-17

39、) n问题:为什么要采用差动驱动方式?如何进行差动驱动方式?执行器n直流电机n液晶显示器n喇叭n可扩展其它执行器。例如再扩展一个直流电机,驱动灭火风扇装置;安装伺服电机来驱动机械手,让机器人取东西等等。基本的执行器(一)直流电机:由直流电机驱动芯片SN754410来驱动,这里采用改变电机电压的方式来改变电机的转速。(直流电机的TN图P15)脉宽调制 :直流电机驱动芯片提供给电机的信号是方波,不同的方波它的平均电压不同。这样采用不同的脉宽调节平均电压的高低,进而调节电机的转速。n调节好的电机的转速,经过减速器传给主动轮,将高速转化为低速,以满足所需的运行速度。 机器人速度的调节n直流电机上电压的

40、大小影响主动轮的转速和转矩(见P40图3.34)n脉宽调制PWM:PA5、PA6分别给SN754410发脉宽调制信号,通过改变脉冲宽度来调节输入到电机的平均电压。(参见P41图3.35)基本的执行器(一) drive()同时设定两个电机的速度 ,控制能力风暴的平移和旋转。trans_vel为平移速度,rot_vel为旋转速度,其中,左轮速度设为trans_vel+rot_vel,右轮速度设为trans_vel-rot_vel,也就是说,rot_vel 0,机器人顺时针旋转,rot_vel 0,机器人逆时针旋转。nvoid drive(int trans_vel, int rot_vel)n m

41、otor(1,trans_vel + rot_vel);n motor(2,trans_vel - rot_vel);n基本的执行器(二)喇叭:喇叭是能力风暴的嘴,可发出多种声音,对应的库函数为 beep() 和 tone() 等。(参见P93)nvoid beep()nn tone(1000., .3);nLCD:用于显示能力风暴的实时运行信息,在状态检测和故障诊断时特别有用 例题:perform/dance.jc nvoid tone(float frequency, float length)nn if(frequency 3) | (val1 & val3) 4); n msl

42、eep(2L); /* 等待 2毫秒 */n if(result=3) result=4;n return result;n二进制表示二进制表示n返回值: 0b00:没有障碍 0b01:左方有障碍 0b10:右方有障碍 0b100:前方有障碍。即当左右两方向都有障碍时就认为前方有障碍。红外传感器对应的库函数是ir_detector()。 自编简短程序:n请用红外传感器检测障碍,并用液晶显示器显示,无障碍,显示0,左边有障碍显示1,右边有障碍显示2,前方有障碍显示4nvoid main()nint ir;nwhile(1)nir=ir_detector();n printf(“ir=%dn”,i

43、r);n wait(0.5);n专题项目专题项目 n红外避障。机器人前进,发现障碍物就转向。(相关模块:红外测障、条件判断、永远循环、直行、转向)拓展项目:跟人走。n自己制作硬件,并进行软件编程。n撰写论文。内容包括:相关的研究资料;硬件设计、制作详细说明,并画出硬件电路图;详细的软件驱动程序,附加必要的软件说明;测试运行效果图,或者运行的录象;工作总结与展望。参考的硬件电路及程序参考程序(main.h)n#includereg52.hn#includen#define uchar unsigned charn#define uint unsigned intn#define left_inf

44、rare 0n#define right_infrare 1nuchar flage =0 x00;nuchar display_flage=0 x00;n#define state1 0X5F /前进n#define state2 0X4F /右转n#define state3 0X1F /左转n#define state4 0X0F /后退n#define state5 0XfF /停车n#define light_off 0 x0f /关转向灯n#define left_light 0X1F /左转向灯n#define right_light 0X2F /右转向灯n#define bac

45、k_light 0XcF /刹车灯n#define front_light 0 x3f /前灯n#define light_on 0 xff /开所有灯n#define true 1 n#define false 0nuchar code Product = Create-RBcar ; nuchar code webcom = www.create.cc; nuchar code talk1=Mastor: please;/14 charactersnuchar code talk2=touch my head; /12 charactersnuchar code talk3=thank y

46、ou!; /10 charactersnuchar code talk4=Im running; /11 charactersnextern void LCMInit(void);nextern void WriteCommandLCM(unsigned char WCLCM,BuysC); /BuysC为0时忽略忙检测nextern void DisplayListChar(uchar X, uchar Y,uchar ListLength, uchar *DData,uchar n);n/*nsbit ledcs=P12; /74H573的片选信号nsbit left_led=P02; /

47、左红外发射管nsbit right_led=P03; /右红外发射管n*/ main.c文件n/*n程序名称:小车避障程序n程序说明:硬件原理,小车左右两个红外二极管发射38KHz载波的信号(P02,P03),n 一个一体化的红外接收头接收载波信号(p32)。n*/n n/*n 红外线接收子程序 n*/n#include main.hnvoid infrared_ray()interrupt 0using 3nn flage=0 x01;n display_flage=1;n IE &= 0Xfe; /EX0 =0; nn/ 延时子程序nvoid delay(uint n)nnwhil

48、e(-n);nnvoid Init0(void)nn IE |=0X80; /EA=1;n TCON |=0 x01; /IT0=1;nnvoid seng_wave(uchar timer,bit n)/timer -通过载波发射信号的时间,n-左右发射管的选择nn uchar i;n P1 |= 0X04; /ledcs=1; n IE |= 0X01; /EX0 =1;n P0 |=0 x04;nfor(i=timer;i0;i-)n n if(n) P0 =0 x08; / 右发射管通过载波发射信号n else P0 =0 x04; / 左发射管通过载波发射信号n delay(1000

49、0);n n P1 &= 0Xfb; /ledcs=0;n IE &= 0Xfe; /EX0 =0; n nvoid light_control(uchar op)/转向灯控制子程序nn P1 |=0X04; /ledcs=1; n P0 =op;n P1 &=0XFB; /ledcs=0;nnvoid control(uchar n,uchar state,uchar light)nn uchar i;n light_control(light);/转向指示灯n P2 =state; /行使方向改变n for(i=n;i0;i-)n delay(5000);n P2=

50、state5;n delay(2000);n light_control(light_off);/关闭n P2=state1;nnvoid move_car(void)nn uchar temp =0 x00;n /*检测程序段*/ n seng_wave(2,left_infrare); /左边红外管发射n if(flage=0 x01)temp |=0 x01;flage=0 x00;nseng_wave(2,right_infrare); /右边红外管发射n if(flage=0 x01)temp |=0 x02;flage=0 x00;n /*控制程序段*/n /左边有障碍物,右转n

51、if(temp=0 x01) control(5,state2, right_light);n /右边有障碍物,左转n else if(temp=0 x02) control(5,state3,left_light ); n /两个方向都有障碍物,后退,右转n else if(temp=0 x03) control(10,state4,back_light );control(5,state2,right_light );n temp =0 x00;nnvoid main(void)nn uchar dis_flage=0 x00;n Init0();n P1 |= 0X04; /ledcs=

52、1; n P0 = 0 xFf;n P1 &=0XFB; /ledcs=0;n LCMInit(); /LCM初始化 n n DisplayListChar(0,0,14,Product,true);n DisplayListChar(0,1,15,webcom,false);n delay(50000);n WriteCommandLCM(0 x01,1); /显示清屏n delay(100);n DisplayListChar(0,0,14,talk1,false);n DisplayListChar(0,1,13,talk2,false);nwhile(1)n n move_ca

53、r();n if(display_flage=0 x01 )&(dis_flage =0 x00)n n P1 |= 0X04; /ledcs=1; n P0 = 0 x0f;n P1&=0XFB;n dis_flage=0 x01;n WriteCommandLCM(0 x01,1); /显示清屏n delay(100);n DisplayListChar(0,0,10,talk3,false);n DisplayListChar(0,1,11,talk4,false);n n delay(20000);n n能力风暴机器人 声音传感器声音传感器 问题n麦克风如何采集声音信息

54、,并如何将采集到的信息传递给微控制器的?麦克风n它是能够识别声音声强大小的声音传感器。n麦克风采集到的信号通过放大,输出信号至PE2口。没有声音时,电压为2.5V左右,转换为8位二进制数后得到的十进制整数为127左右。当有声音时,输出电压在2.5V上下波动,PE2测得的电压和2.5V相减的绝对值越大,则声音越大。n麦克风对应的库函数是 microphone()。n在JC窗口中输入如下程序块:while(1) printf(“mic=%dn”, analogport(2); wait(0.1); 当周围环境很安静时,LCD上显示mic=127,对着麦克风发出声音,可以看到显示的值不断变化,其变化

55、范围为0255。n如MIC=100=(127-27)与MIC=154=(127+27)表示两次采集的瞬时声强是相同的,只是波动的方向不同。nMicrophone()对数据进行了处理,使返回值在 0255 之间。n/*读麦克风,返回值0255,声音越响数值越大*/nint microphone()nn return abs(analogport(2)-127)*2;n工作原理分析n通常声音传感器内置一个对声音敏感的电容式驻极体话筒。声波使话筒内的驻极体薄膜振动,导致电容的变化,而产生与之对应变化的微小电压。这一电压随后被转化成05V的电压,经过A/D转换被数据采集器接受,并传送给单片机。 n能力

56、风暴机器人麦克风采集到的信号通过LM386(IC5)进行放大,放大倍数为200(由C25确定)。n音讯放大器LM386是专为低损耗电源所设计的功率放大器。它的内建增益为20,透过pin1和pin8脚位间的电容的搭配,增益最高可达200。 LM386特别适用于电池供电的场合。nLM386输出信号接至PE2。没有声音时,电压为25V左右,转换为8位二进制数后得到的十进制整数为127左右 n具体硬件电路图如下:自编简短程序:n请用麦克风检测声音,让机器人第一次听到声音时,全速前进;第二次听到声音时,停下来;如此循环。(有效声音标志microphone()返回值大于180) nVoid main()n

57、n int I=0;n int mic;n while(1)n n mic=microphone();n if (mic180) I+=1;n if (I=1) drive(100,0);n else n stop(); I=0;n 自编简短程序:n把几个机器人放在一起,编写程序并下载运行,试一试机器人你叫我应的场面是不是很有趣。n一部分机器人先发音,一部分机器人先侦听。发音的机器人发音完毕后转入侦听,听到声音的机器人回应(发音)。n/*初始化b=1时,设置该机器人先侦听;初始化b= -1时,设置该机器人先发出声音。*/nvoid main()nint b=1;nint mic;nwhile(

58、1)nmic=microphone();nprintf(mic=%dn,mic);nwait (0.5);nif(b=1&mic140)nb=b*(-1);nbeep ( );nwait (2.0);nif(b=-1)nnbeep();nwait (1.0);nb=b*(-1);n 声音检测n用机器人检测自己的声音,并显示数值(相关模块:声音检测、显示、延时等待、永远循环)。n拓展项目 1:百米赛跑。 n拓展项目 2:宠物。 讨 论 课n通过前段时间的课程的学习,大家有什么收获?n大家对这门课的感受如何?n对这门课的学习,有什么想法?n有些什么实验心得?有些什么体会?n通过软件编程,来

59、对实物进行控制,与以前学过的纯理论上的编程,有些什么不一样的地方?n如何理解“实践是检验真理的唯一标准”这句话?n设计制作机器人的想法呢? 光敏传感器光敏传感器 n1、楼梯声控灯n2、自动调光台灯n3、自动控制路灯n4、楼道应急灯n光敏传感器(光敏电阻)其实是一个可调电阻器,只是它的阻值因照射在它上面的光线强弱的变化而变化。n功能:检测周围环境光线的强弱。n在光传感器中,感应光强度不同,光敏电阻值就会有变化。它只对可见光有效,光敏电阻值近似与光强度成反比。光线越强,返回值越小。使用时应取其多次平均值,因为返回值具有随机性。n平常用的最多的有受光照后阻值急剧下降的CDS(硫化镉)光敏电阻、受光照

60、射后能够产生光电流的光敏二极管、以及用光电流替代基极电流制成的光敏三极管。n还可以采用光敏三极管作为光敏传感器的感光电路。如果光敏传感器受到光照,电路的输出电压就会降低。 光敏电阻在强光下阻值只有几十;在很暗的环境下阻值可达几百K。有的光敏电阻的特性刚好相反,它的阻值随光线的加强而增大 。能力风暴机器人上的光敏电阻属于前者。 两个光敏电阻分别与模拟输入口PE0,PE1相连,系统中采集的是光敏电阻上的电压值。光暗时,电阻上的电压接近5V;光强时,接近0V。光敏电阻的阻值变化是连续的,因此PE0,PE1的电压变化也是连续的,电压信号经过模数转换变成8位二进制数,即十进制0-255。0表示光线最强;255表示光线最弱。n在JC中,光敏传感器的库函数是:n 左光敏:photo (1); 右光敏: photo (2)n 在程

温馨提示

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

评论

0/150

提交评论