找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7885|回复: 3
打印 上一主题 下一主题
收起左侧

灭火机器人设计报告加源码

[复制链接]
跳转到指定楼层
楼主
ID:238474 发表于 2017-10-11 01:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

高校第五届机器人大赛

技术报告


关于技术报告和研究论文使用授权的说明

    本人完全了解山东省高校第五届机器人大赛关于保留、使用技术报告和研究论文的规定,即:参赛作品著作权归参赛者本人,比赛组委会可以在相关主页上收录并公开参赛作品的设计方案、技术报告以及参赛机器人的视频、图像资料,并将相关内容编纂收录在组委会出版论文集中。

参赛队员签名:

带队教师签名:


日期:

摘要

  小车以宏晶公司生产的IAP15F2K61S2芯片为核心,辅助必要的外围电:包括舵机控制、电机控制、红外接收、驱动、避障传感电路。具体由C15芯片 电源模块、298n电机驱动模块、火源寻找模块、灭火风扇等组成。用C语言编程,采用自制稳压模块进行稳压,实现了智能车依次寻找房间,自动躲避障碍,寻找火源(以下简称自动模式)。在自动模式下,小车能够自己在房间内寻找火源并主动向火源靠近,并对灭火结果进行检验,经测验,该智能灭火小车基本达到预期效果。

  本系统电源模块、电机驱动模块、舵机驱动模块、火源寻找模块、主控芯片组成。

  在备战比赛的过程中,学院、老师和同学都给予了我们很大的帮助和鼓励,在此谨表达对他们由衷的感谢。

关键词:智能车 IAP15F2K61S2  寻线  避障 消防 智能  火焰传感器

                目录
摘要            
关键词:            
目录
第一章 引言            
1.1 灭火机器人前景展望            
1.2 技术报告章节安排            
第二章 系统方案            
2.1 电源模块            
2.2 电机驱动的论证与选择            
2.3 主控芯片的论证与选择            
2.4 火源寻找模块的选择与论证            
第三章 电路设计            
3.1电路的设计            
(1)系统总体框图            
(2)电机驱动模块设计            
(3)电源模块设计            
(4)5V稳压电路原理图            
(5)可调稳压电路原理            
(6)电源模块PCB图            
第四章 程序设计            
4.1程序流程图            
4.2电机驱动程序设计            
4.3 火源检测程序设计            
第五章 调试与测试            
5.1电源:            
5.2单片机最小系统:            
5.3单片机(程序调试):            
5.4驱动电路:            
第六章 总结            
6.1不足以及改进:
6.2心得:            
参考文献            
附录            
附录1 部分程序源码            
附录2 电路板设计原理图            

第一章 引言 

1.1 灭火机器人前景展望

  一直以来,恶劣环境下的工作一直影响着人们的身心健康,很多人希望用机器来取代人类繁杂的体力劳动,这种迫切的需要促使机器人诞生。此后,机器人广泛应用于各领域。我国从八十年代末就开始研制消防机器人了。但是,我国消防机器人的研究还处在初级段,还有许多问题有待解决。通过机器人比赛,模拟火灾现场,研制出能够用于这些场合的灭火机器人,能够在恶劣的环境下工作,协助消防人员进行火灾的定位和灭火,不仅能提高灭火的准确性,还能保证消防人员的安全,将有极大的社会意义。

1.2 技术报告章节安排

本文将对灭火机器人的设计、实际工作原理、灭火流程进行详细介绍。

  • :进行系统方案介绍
  • :进行电路设计的介绍
  • :进行程序设计的介绍
  • :进行各个模块的测试与调试
第二章 系统方案

  本章将分别论证电源模块、电机驱动模块、火源寻找模块主控芯片组成模块的选择。

2.1 电源模块

   整个稳压模块是我们自己利用L7805稳压芯片及其他元件焊接而成的,将电池11V电压稳到5V供给单片机、避障传感器、火电传感器。

基于L7805芯片的稳压模块成本适中,并且减小了各个模块间的相互影响,增强系统稳定性。

2.2 电机驱动的论证与选择方案一:采用L298N驱动直流电动机,该芯片是利用TTL电平进行控制,对电机的操作方便,通过改变芯片控制端的输入电平,即可以对电机进行正反转操作,很方便单片机的操作,也能够满足直流减速电机要求。采用L298N少占用的空间不容易产生信号干扰。L298N可接受标准TTL逻辑电平信号VSS,VSS可接4.5~7 V电压。4脚VS接电源电压,VS电压范围VIH为+2.5~46 V。输出电流可达2.5 A,可驱动电感性负载。1脚和15脚下管的发射极分别单独引出以便接入电流采样电阻,形成电流传感信号。L298N可驱动2个电动机,OUT1,OUT2和OUT3,OUT4之间可分别接电动机,本实验装置我们选用驱动两台电动机。5,7,10,12脚接输入控制电平,控制电机的正反转。ENA,ENB接控制使能端,控制电机的停转。

方案二:采用分立元件组成平衡式驱动电路,这种电路可以由单片机直接对其进行操作,但因为分立元件占用的空间比较大,容易产生信号干扰,且还要配上两个继电器,考虑到小车运转的稳定性,此方案不够理想。

综上所述选择方案一。

2.3 主控芯片的论证与选择

方案一:采用宏晶公司最新STC15系列IAP15F2K61S2单片机作为系统的控制器。单片机算术运算功能强,软件编程灵活,可用软件较简单的实现各种算术和逻辑控制,并且由于其成本低,体积小和功耗低等优点,使其在各个领域应用广泛;另外,由于本设计中会用到较多的算术运算,所以对本系统来说非常适合利用单片机作为控制器。

方案二:采用Atmel公司的STC12C5A60S2单片机作为系统的控制器。该单片机也属于51单片机,51单片机的优点这款单片机都能达到,并且这款单片机有着比普通51单片机快12倍的运算速度。

综上所述,本系统所需处理的信息量比较大,采用方案一作为本系统控制芯片。

2.4 火源寻找模块的选择与论证

方案一:采用温度传感器作为火源寻找模块的主要传感器,利用火源外围温度比常温高这一特点寻找火源。此方案虽然易于理解但是温度传感器稳定性差,在不同室温下门限值要求不同,适应性差。并且火源外围温度变化范围窄,不适合远距离寻找火源。

方案二:在传感器检测的时候,火焰传感器起主要功能。单片机P1口的发光二极管发光个数分别来标志是否有障碍物和火源远近的程度。那火焰传感器来说,在这里就需要将采集到的模拟信号转化为数字信号,这样才能让单片机处理。在采集到模拟信号后将它转化为数字信号后,返回一个转换值(Temp)进行判断。当LED仅有小于四个亮时,表示没有火源;LED=1变化为LED=0的个数依次增加,当LED全部亮时说明灭火小车距离火源最近。

综上所述:考虑寻找火源的精确度,及外部因素选择方案二。


第3章   电路设计3.1电路的设计(1)系统总体框图

系统的总体框图如下图所示。

(2)电机驱动模块设计

              

(3)电源模块设计

              本系统的电源模块包含一个3.3V稳压电路,一个5V稳压电路和一个可调稳压电路。

  • 3.3V稳压电路原理图

(4)5V稳压电路原理图

(5)可调稳压电路原理图

(6)电源模块PCB图

第四章 程序设计

4.1程序流程图

本设计采用宏晶公司最新STC15系列IAP15F2K61S2单片机,作为控制芯片,接收火电传感器传来的信号,随后由单片机向风机发出灭火信号,从而消灭火焰。在寻找火源时,由避障传感器检测障碍情况,传给单片机,由单片机发出信号传给L298N驱动两轮实行避障功能。

4.2电机驱动程序设计

在电机驱动部分主要是通过单片机对传感器采集模拟信号反馈回的数字信号进行处理后,来发送指令控制灭火小车运动。主要在void

order(uchar a)函数中当接收到a=0时,小车停止转动;a=1时,小车向前转动;a=2时,车向后转动;a=3时,小车向左转动;a=4时,小车向右转动;a为其他值时- 17

时,小车停止转动。

4.3 火源检测程序设计

在小车经过4个房间,火焰传感器检测到火源的时候,由传感器向单片机发出检测到火源的信号,单片机检测到信号之后,向驱动风机的L298N输入转动风机的信号,风机转动,消灭火源。

第五章 调试与测试

5.1电源:通过万用表测试,电压全部在正常工作范围内,芯片与电机、风扇均可正常工作。同一个电路里面的所有接地端要共地(某些特殊要求不能共地的除外),否则会让两个接地端有压降。

5.2单片机最小系统:当给定某个I/O口的管脚赋高低电平后,用万用表测试,也能测试到的高低电平。

5.3单片机(程序调试):功能部分直接看输出结果。

5.4驱动电路:将驱动电路与单片机连接,用单片机发送指令,直流电机可以正、反转。

第六章 总结6.1不足以及改进:本作品已完全达到系统设计目标,可以很好的完成上述火源的实时检测并自动进行灭火操作。灭火小车可以在对于人类来说,危险的火灾现场区域进行实时避障检测火灾着火点,并进行自主灭火。但现在还一些不足的地方。比如:在实时检测过程中,由于程序反复循环次数过多,内存积攒到一定程度,有可能导致程序跑偏,使得灭火小车不能正常工作。想增加内容但对程序要求很高,不易实现,因为要求是实时检测,如果程序太过复杂,会让单片机读取传感器信号的时间加长,影响实时检测。

6.2心得:通过这次工程技术综合实践,我们了解了一件产品从设计到出厂所经历的所有过程,对产品的制作过程与制作工艺都有了进一步的了解,现在我才

知道原来一件产品的试产成功真的是一件不容易的事,需要我们具有很强的能力。这次工程技术综合实践对我们来说意义重大,不仅增长了我们的见识,丰富了我们的经验,扩充了我们的知识,提高了我们的动手能力,锻炼了我们的耐力,培养了我们独立思考的能力,增强了我们的自信,也更让我们明白了团结合作的力量,团队能力的强大。有了这些宝贵的经验,在以后的工作中相信我们将少走很多弯路,也将更好更快的完成自己的任务。

    刚开始做时,我们什么也不知道,甚至不知从何入手,但通过查阅资料,和老师同学探讨,逐渐的脑子里有了雏形,不再那么迷茫了,也就越来越有信心了。虽然在制作过程中,我们也遇到了非常多的阻碍,但大家都有信心把它做好,所以都坚持到了最后,终于完成了我们的目标。现在想想,真的非常兴奋,看着自己做好的东西,我们心里真有种骄傲和自豪的感觉,因为我们成功了,现在就是想着我们怎样才能做得更好,因为我们现在有足够的信心,可以一起团结合作,共同努力。

这次工程技术综合实践的时间挺长的,在这段时间我们都感觉真的很忙碌,因为在制作过程中有非常多的不可预见的因素,这主要是因为我们没完整的做过一件产品,经验不足所致。在一次一次的调试过程中,我们体会到了作为一个技术人员的艰辛,没有充足且完备的知识,没有丰富的经验,要完成一件产品是一件多么不容易的事啊!

这次工程技术综合实践我们最大的感受就是:最难的不是设计电路和编写程序,而是设计电路时对元器件的选择,这耗费了我们很多的精力,但效果却不是最好的,因为走了非常多的弯路。而且我们也知道了,现成的资料不一定是最好的,资料的原理不一定就可以用,很多东西还是得靠自己亲身实践,只有自己实践出来的才是最好的、可行的。

    虽然这次工程技术综合实践真的让我们感觉有点累,但我们的汗水得到了回报。现在我们对科技制作也越来越感兴趣了。以后我们也会抓住一切自己所能抓住的机会,参加各种实践活动,提升自己的能力使自己越来越优秀。

十分感谢我们学校工训的老师们,老师们都非常的平易近人,对我们非常好,给予了我们非常大的帮助,让我们学到了很多东西,真的非常感谢你们!

学校对我们工科类学生开设工程技术综合实践这门课程真的非常好,不仅让我们提前了解了真正的产品的实现流程,也让我们的综合素质得到了提高,真是一举多得。非常感谢学校给我提供了我们这样一次锻炼自己、提升自己、挑战自己的机会。





参考文献

[1] 卓晴,黄开胜,邵贝贝等.学做智能汽车[M].北京:北京航空航天大学出版              社,2007.

[2] 竞赛秘书处,电磁组竞赛车模路径检测设计参考方案(版本1.0).2010.1.

[3] 王威等,HCS12 微控制器原理及应用.北京:北京航空航天大学出版              社,2007.10.

[4]张景川,刘立阳,傅家祥.新型灭火机器人的设计与实现[J].电脑知识与技术, 2008,4(35):2246-2248..

[5]李彬,陈帝伊,马孝义.智能灭火机器人系统的设计与实现[J].机械与电子,2010,(1):57-61.

[6]张睿,赵艳华,刘志刚.精通Protel DXP 2004电路设计[M].北京:电子工业出版社,2006.

[7]杨欣,莱·诺克斯,王玉凤刘湘黔.电子设计从零开始[M].北京:清华大学出版社,2010.

[8]张义和等.例说51[M],北京:人民邮电出版社,2008.

[9] 杜刚,电路设计与制板:Protel应用教程[M].北京:清华大学出版社,2006.

[10] 聂荣等,实例解析PCB设计技巧[M].北京:机械工业出版社,2006.

[11] 陈伯时,电力拖动自动控制系统——运动控制系统[M].北京:机械工业出版              社,2008.

[12] 梅晓榕,自动控制原理(第二版).北京:科学出版社,2007.2


附录2 电路板设计原理图

(1).L298N原理图

l7805组成的5v稳压原理图



附录附录1 部分程序源码
单片机源程序如下:
  1. #include <STC15F2K60S2.H>
  2. #define uchar unsigned char
  3. #define uint unsigned int


  4. sbit down_L=P2^0; //循迹
  5. sbit down_R=P2^1;
  6. sbit down=P0^0;

  7.                                                                                                                                                                                         sbit f0=P2^2;              //火焰传感器 右至左
  8.                                                                                                                                                                                        sbit f1=P2^3;
  9. sbit f2=P2^4;
  10. sbit f3=P2^5;
  11. sbit f4=P2^6;
  12. uchar try;
  13. uint ax,bx;
  14. bit f=0;
  15. bit try_cg=0;


  16. sbit left=P0^2;                 //左炮
  17. sbit middle=P0^3;  //中间大炮
  18. sbit right=P0^4;   //右炮
  19. sbit left_1=P0^1;   //左手
  20. sbit right_1=P0^5;  //右手
  21. sbit right_you=P0^6;
  22. sbit left_zuo=P0^0;

  23. sbit feng_1=P1^6;//风扇
  24. sbit feng_2=P1^7;
  25.                                                                                                                                  //风机控制
  26. sbit feng=P3^7;

  27. sbit L_f=P1^1;              //电机A
  28. sbit L_b=P1^2;                             
  29. sbit R_f=P1^3;              //B
  30. sbit R_b=P1^4;
  31. sbit L_pwm=P1^0;//A
  32. sbit R_pwm=P1^5;//B
  33. uchar pwm_val_left=0;  //变量定义
  34. uchar push_val_left=0; // 左电机占空比N/10
  35. uchar pwm_val_right=0;
  36. uchar push_val_right=0;// 右电机占空比N/10
  37. bit Right_moto_stop=1;
  38. bit Left_moto_stop=1;
  39. void main()
  40. {
  41.             
  42.               for(;;)
  43.               {
  44.                             if(sound==0)
  45.                                           delayms(5);
  46.                                           if(sound==0)
  47.                                                         break;
  48.               }               
  49.               go(10,10);              //记住走出白线圈
  50.               delayms(5000);                                                           //原来为4500
  51.               for(;down_L==1&&down_R==1;) run_right(10,9);                                                      
  52.                             go(10,8);                                                                        //房 加                                          10,8
  53.                             delayms(2000);                                           //  2000
  54.                             turn_right_90(7,7);
  55.                   delayms(1000);                                 //右旋,测墙角火焰              1000

  56. for(;down_L==1&&down_R==1;)
  57.               {
  58.               run_right(10,10);
  59.               if(fire())
  60.               {  
  61.                             huo();
  62.                             miehuo();
  63.                             feng_2=0;//开电机灭火2秒钟                                                                                          //修改
  64.         delayms(17000);                                                                                                
  65.                             feng_2=1;                                                                                                                              //修改
  66.                             if(try_cg==1)                                                                                                                //灭火成功
  67.                             {
  68.                                           stop(0,0);
  69.                      delayms(5000);
  70.                                              if(fire())                                                                                                                 //二次检测有问题
  71.                                           {  
  72.                                           huo1();
  73.                                           miehuo();            
  74.                                           }                                                                                                                                            //如何进miehuo
  75.                             }
  76.                            
  77.                             go_home_1();
  78.               }                                                                                                                                                                                                                                                                          
  79.               }
  80.               stop(0,0);
  81.               delayms(5);


  82.           /**********two************/
  83.                 go(10,9);
  84.               delayms(2000);                                                                                                                 //冲出1门口白线
  85.               for(;down_L==1&&down_R==1;) run_right(10,9);
  86.                             go(10,7);                                                                                                                //自己加,检测到白线后,往前走一段,防止撞墙角
  87.                             delayms(5500);                                                                                                   //2000ZUIHAO
  88.                                                                                                                                                           //右旋,测墙角火焰
  89.               for(;down_L==1&&down_R==1;)
  90.               {
  91.               run_right(10,10);
  92.               if(fire())
  93.               {  
  94.                             huo();
  95.                             miehuo();
  96.                             feng_2=0;//开电机灭火2秒钟                 //修改
  97.         delayms(17000);
  98.                             feng_2=1;                                                                                      //修改
  99.                             if(try_cg==1) go_home_2();
  100.               }
  101.               if(fire())
  102.               {  
  103.               for(bx=10000;bx>0;bx--){huo1();delayms(2);}
  104.                             miehuo();
  105.                             if(try_cg==1) go_home_2();
  106.               }
  107.               }
  108.               stop(0,0);
  109.               delayms(5);
  110. /*******************three*********/
  111.                 go(10,9);
  112.               delayms(2000);                                                         //冲出2门口白线            

  113.               for(;down_L==1&&down_R==1;) run_right(10,10);                                            
  114.               stop(0,0);
  115.               delayms(5);
  116.               go(10,9);                                                                                                                                //冲进白线
  117.               delayms(2150);
  118.               for(;down_L==1&&down_R==1;)
  119.               {
  120.               run_right(10,10);
  121.               if(fire())
  122.               {  
  123.                             huo();
  124.                             miehuo();
  125.                             feng_2=0;//开电机灭火2秒钟                                                                                       //修改
  126.         delayms(17000);
  127.                             feng_2=1;                                                                                                                                                            //修改
  128.                             if(try_cg==1) go_home_3();
  129.               }
  130.                                           if(fire())
  131.               {  
  132.               for(bx=10000;bx>0;bx--){huo1();delayms(2);}
  133.                             miehuo();
  134.                             if(try_cg==1) go_home_3();
  135.               }
  136.               }
  137.               stop(0,0);
  138.               delayms(5);

  139.               /*************four*************/
  140.               go(10,6);                                                                                                                              //冲出3房间白线
  141.                  delayms(2000);                                                                                                                                                         
  142.               for(;down_L==1&&down_R==1;) run_right(10,10);              //回到起点
  143.               stop(0,0);
  144.               delayms(5);
  145.               turn_left_90(7,7);                                                                                                                              //转180度
  146.               delayms(4550);                //2250
  147.               go(10,10);
  148.               delayms(1550);
  149.               stop(0,0);
  150.               delayms(5);
  151.               for(;down_L==1&&down_R==1;) run_right(10,10);              //进入房间
  152.                             go(10,8);                                                                                                                   //房 加              10,10
  153.       delayms(2000);                                                                                                      //3000
  154.                   stop(0,0);
  155.                    delayms(100);
  156.                             turn_right_90(7,7);
  157.                   delayms(500);                                                                                          //右旋,测墙角火焰 1500

  158. for(;down_L==1&&down_R==1;)  
  159.               {
  160.               run_right(10,10);
  161.               if(fire())
  162.               {  
  163.                             huo();
  164.                             miehuo();
  165.                             feng_2=0;//开电机灭火2秒钟                                                                      //修改
  166.         delayms(17000);
  167.                             feng_2=1;                                                                                                                                 //修改
  168.                             if(try_cg==1)                                                                                                                   //灭火成功
  169.                             {
  170.                                           stop(0,0);
  171.                      delayms(5000);
  172.                                              if(fire())                                                                                                                               //二次检测有问题
  173.                                           {
  174.                                           huo1();
  175.                                           miehuo();            
  176.                                           }                                                                                                                                            //如何进miehuo
  177.                             }            
  178.                             go_home_4();
  179.               }
  180.               stop(0,0);
  181.               delayms(5);
  182.               }
  183. }

  184. ///**************home**********************/
  185. void go_home_1()
  186. {
  187.               stop(0,0);
  188.               delayms(5);
  189.               back(10,10);
  190.               delayms(1250);                                                                                    //改小,防止靠右走时拐不过来
  191.               stop(0,0);
  192.               delayms(5);
  193.               turn_right_90(7,7);
  194. ……………………

  195. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
灭火机器人技术报告(1).doc (415 KB, 下载次数: 95)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:109943 发表于 2017-10-11 08:18 | 只看该作者
STC12怎么一下子成了Atmel公司的了
回复

使用道具 举报

板凳
ID:302278 发表于 2018-7-3 18:26 | 只看该作者
学习一下
回复

使用道具 举报

地板
ID:349169 发表于 2018-7-26 16:21 | 只看该作者
改一下头文件,就一个报错了,再看看,是想要的,很不错
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表