《灭火机器人的设计实验报告》由会员分享,可在线阅读,更多相关《灭火机器人的设计实验报告(11页珍藏版)》请在金锄头文库上搜索。
1、灭火机器人的设计一、项目任务在能力风暴机器人AS-UII的基础上,组装一个灭火机器人,并编写程序,让其能完成灭火任务。(任务的详细内容请参见国际灭火比赛规则2010)二、项目要求 设计的机器人能在5分钟内把灭火场地中的蜡烛熄灭。每次运行时,蜡烛被任意放置在不同的房间内。其它详细要求请参见国际灭火比赛规则2010三、使用到的硬件设备机器人的硬件:(1)传感器:碰撞传感器、红外传感器、火焰传感器、(2)控制单元:微控制器、外部存储器、复位系统和电源(3)驱动器:直流电动机、LCD(4)灭火风扇四、程序的思路在机器人灭火实验中,要求机器人实现在实验场地里迅速找到蜡烛将其熄灭,在寻找过程中要避免碰撞墙
2、壁与蜡烛,如果发现火源,启动灭火程序,灭火,没有发现火源,走迷宫,寻找火源,所以机器人必须实现以下功能:(1)由于在实验场地中,实验规定的房间内都有可能摆放蜡烛,所以机器人必须能够实现搜索所有的房间,在行走过程中不允许碰撞墙壁,而且尽可能快的搜索所有房间,不走重复的路程。在此过程中,本人采用了迷宫法则里的左手法则(左手法则:看到墙壁往右转,没看不到墙壁往左转)。(2)机器人在行走过程中要不断的判断是否有火源;如有还要判断火源在机器人的哪个方位、离机器人的距离等。在此过程中,需要设计一个亮度检测来寻找火源。(3)找到火源后,机器人自动启动灭火装置(风扇)迅速将火熄灭,火源熄灭后,风扇停止转动。根
3、据以上的思路设计,在VJC编程环境下,编辑机器人行为控制程序,下载并反复调试控制程序,实现机器人灭火实验。程序流程图如下(主模块):程序的代码如下:int ir_1=0;int photo_1=0;int bmp_1=0;float tim_1=0.0;int gi_1=0;int gi_2=0;int gi_3=0;void main() gi_1 = 1 ; gi_2 = 1 ; gi_3 = 1 ; while(gi_3 = 1) if(gi_1 = 1) SubRoutine_4 (); photo_1 =(photo(1)+photo(2)/2; if(photo_1 < 20
4、) if(photo_1 < 30) && (photo_1 > -30) SubRoutine_2 (); SubRoutine_5 (); if(gi_1 = 2) void SubRoutine_1( ) if(gi_1 = 1) ir_1 =ir_detector(); if( ir_1 = 1) motor( 1 , 80 ); motor( 2 , 30 ); else if(ir_1 = 4) motor( 1 , 80 ); motor( 2 , 50 ); else motor( 1 , 40 ); motor( 2 , 80 ); bmp_1 =
5、 bumper(); if( bmp_1 != 0) drive( -40 ,0); wait( 0.200000 ); stop(); drive( 0 , 100); wait( 0.250000 ); stop(); tim_1 =seconds(); if( tim_1 > 60.000000) gi_1 = 2 ; else if(gi_1 = 2) drive( 0 , 80); wait( 0.600000 ); stop(); gi_1 = 3 ; else if(gi_1 = 3) ir_1 =ir_detector(); if( ir_1 = 1) drive( 0
6、, 100); wait( 0.250000 ); stop(); else if(ir_1 = 4) drive( 0 , 100); wait( 0.250000 ); stop(); else motor( 1 , 20 ); motor( 2 , 80 ); bmp_1 = bumper(); if( bmp_1 != 0) drive( -40 ,0); wait( 0.500000 ); stop(); drive( 0 , 100); wait( 0.250000 ); stop(); void SubRoutine_2( ) photo_1 =photo(1)-photo(2)
7、; if(photo_1 < 20) if(photo_1 < 20) drive( 0 , -20); wait( 0.100000 ); stop(); else if(photo_1 < 20) drive( 0 , 20); wait( 0.100000 ); stop(); else drive( 100 ,0); wait( 0.090000 ); stop(); motor( 1 , 0 ); motor( 2 , 0 ); motor( 3 , 100 ); gi_3 = 0 ; return;void SubRoutine_3( ) if(gi_1 = 1)
8、 ir_1 =ir_detector(); if( ir_1 = 2) printf( "ir_1 =%dn" ,ir_1); motor( 1 , 30 ); motor( 2 , 20 ); else printf( "ir_1 =%dn" ,ir_1); motor( 1 , 20 ); motor( 2 , 30 ); tim_1 =seconds(); if( tim_1 > 60.000000) gi_2 = 2 ; else ir_1 =ir_detector(); if( ir_1 = 1) printf( "ir_1 =%dn" ,ir_1); motor( 1 , 30 ); motor( 2 , 20 ); else printf( "ir_1 =%dn" ,ir_1); motor( 1 , 20 ); motor( 2 , 30 ); void SubRoutine_4( ) if(gi_2 = 1) ir_1=ir_detector(); printf( "ir_1 =%dn" ,ir_1); if(ir_1 = 0) drive( 0 , -100); wait( 0.050000 ); stop();