找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8725|回复: 1
收起左侧

单片机循迹寻光灭火小车设计原理图PCB+程序

[复制链接]
ID:444484 发表于 2018-12-11 21:51 | 显示全部楼层 |阅读模式
0.png



一、选题的背景与意义

最近几十年中,大量的高层、地下建筑与大型的石化企业不断涌现。由于这些建筑的特殊性,发生火灾时,不能快速高效的灭火。为了解决这一问题,尽快救助火灾中的受害者,最大限度的保证消防人员的安全,消防机器人研究被提到了议事日程。而机器人技术的发展也为这一要求的实现提供了技术上的保证,使得消防机器人应运而生。
从二十世纪八十年代开始,世界许多国家都进行了消防机器人的研究。美国和苏联最早进行消防机器人的研究,而后日本、英国、法国等国家都纷纷开展了消防机器人的研究,目前已有多种不同类型的消防机器人用于各种火灾场合。
从功能上划分,目前的消防机器人有下列几类:灭火机器人、侦察机器人、攀登营救机器人和救护机器人。从控制方式来分,消防机器人可分为遥控消防机器人和自主消防机器人。
我国从八十年代末期开始消防机器人的研究,公安部上海消防研究所等单位在消防机器人的研究中取得了大量的成果,"自行式消防炮"已经投入市场,"履带轮式消防灭火侦察机器人"也于2000年6月通过了国家验收。但是,我国消防机器人的研究还处在初级阶段,还有许多有待研究的问题。比如,高层建筑发生火灾时,消防人员不可能在短时间内到达高处的火灾发生地点,在地下建筑中,由于环境比较潮湿,烟气不易扩散,消防人员不容易快速的判定火源位置;而在石化企业发生火灾时,将产生大量的毒气,消防人员在灭火时极易中毒。研制能够用于这些场合的侦察灭火机器人,协助消防人员进行火灾的定位和灭火,将有极大的社会意义。

  • 研究内容与拟解决的主要问

机器人控制器是一个多任务并行执行的实时控制器。在软件实现上,灭火机器人除了要协调控制各个不同功用的电机,还需要对红外、光敏等多种传感器接收的数据进行传输、处理等。采用c语言可以方便快捷的编写程序。这里对灭火机器人的每种功能进行模块化处理。总体的思路是:在地面上贴一条随意的黑线(可用黑胶布),机器人(小车)可以沿着这条黑线行走,不会到处乱跑,在机器人行走的途中放置火源(发光的灯泡),机器人在行走到火源附近能够发现火源并能够行走到火源附近进行灭火(小车上的风扇开始转动),灭火后(风扇停止转动)机器人还能回到原本设定的路线继续往下行走。。。实现起来最基本的就是使机器人能够顺利沿着设定的路线进行直线行走和拐弯,这一模块称为寻迹(直行时四个轮子同时转动,左转时,左前左后轮子停止转动,右前右后轮子转动。右转时,右前右后轮子停止转动,左前左后轮子转动。来实行各种转弯)具体为:

  (1)若正前距离很大,同时右前的距离稍小时,右边的红外传感器快离开检测范围,执行左转微调;

  (2)若正前距离很大,同时右前的距离稍大时,右边的红外传感器快离开检测范围,执行右转微调;

  (3)若正前距离很大,右前距离适中,就直行;

  (4)若正前距离比较小,右前距离也比较小时,机器人左转;

  (5)右前距离很大时,机器人执行右转弯。

  其中:(1)~(3)保证了在走直线时可以走直,通过不断调整,使机器人始终运行在黑线上面(4)~(5)保证了机器人顺利拐弯。具体的参数必须在不断试验中反复调节。知道这个机器人可以顺利的完成所指定的动作。

  • 技术路线、研究方案与可行性分析

     3.1技术路线

制造一个自主控制的机器人,它可以按照你给定的路线行走,找到光源并尽快的行走到光源附近,启动风扇(相当于灭火),灭火后还可以按照以前的路线继续前进。这个工作受地面摩擦、机器人惯性、机器人电机的转数差、电压变化等多个因素影响,它模拟了现实机器人处理火警的过程,灯泡代表燃起的火源,机器人必须找到并熄灭它。下面为机器人灭火的一般特性以及系统的构成:

                 被控对象特性


3.2研究方案

本方案具有以下七个模块组成:控制模块、驱动模块、传感器模块、灭火模块、电源模块、循线模块、寻光模块。

  • 控制模块

采用STC89C52RC单片机作为本系统的核心控制芯片。能对其进行一系列处理,根据处理结果,驱动电机做相应的运动,并能控制风扇转动进行灭火操作。

  • 驱动模块

驱动模块采用L298芯片与两个直流电机,该芯片能够接收单片机发出的控制信号,同时驱动两个直流电机运动。

3.  传感器模块

传感器模块采用红外传感器(st188)和光敏电阻(光敏二级管)传感器两种传感器,红外传感器探测行进路面,光敏电阻传感器探测前方的光源(火焰),并将探测到的数据传到STC89C52RC进行模数转换。

  •   灭火模块

灭火模块采用12V直流风扇,用5V电磁继电器作为控制开关控制风扇的停转。

5.    电源模块

2200毫安的锂电池,使机器人动作的正常运行。

  •    循线模块

它是指小车在白色地板上循黑线行走,通常采取的方法是红外探测法。红外探测法,即利用红外线在不同颜色的物体表面具有不同的反射性质的特点,在小车行驶过程中不断地向地面发射红外光,当红外光遇到白色纸质地板时发生漫反射,反射光被装在小车上的接收管接收;如果遇到黑线则红外光被吸收,小车上的接收管接收不到红外光。单片机就是否收到反射回来的红外光为依据来确定黑线的位置和小车的行走路线。

7.寻光模块
寻光模块是根据电阻阻值的大小变化引起电压的变化,与给定值作比较,发送给单片机,当大于给定值则为1(高),当小于给定值则为0(低)。然后由单片机来控制机器人的各种动作。

3.3可行性分析:

     本设计的控制芯片是采用STC89C52RC,另外还采用了L298芯片,以及红外传感器(例如ST188)和光敏二级管(或者光敏三级管)。灭火模块采用的是12V的直流风扇。

    智能灭火机器人是以STC89C52RC单片机为核心的,STC89C52RC是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM)。采用L298芯片的驱动模块可以控制电机的正反转,初始方案中使用玩具四驱车上附带的电机。利用L298 及其外部辅助电路构成驱动电路。其优点是可实现控制电路和驱动电路双电源供电, 可提高系统的稳定性。缺点是电机驱动模块中独立电源的增加将会使车体变重,从而影响小车运行效果。最终方案决定采用双直流减速电机。直流减速电机转动力矩大, 体积小,重量轻, 装配简单,使用方便, 价格比步进电机要便宜。。而红外传感器则是内部发射特殊红外线光波,相当数据流,也就是数字信号转成红外信号---红外信号转成数字信号(达到控制,信号传输的效果),也就是在白色的地面上贴上的黑胶布,红外传感器对于白色和黑色是具有一定的分辨能力来控制小车应该往哪走的。光敏二级管则是用于探测我们给定的光源的(也就相当于火源),光敏二级管在无光照时,有很小的饱和反向漏电流,即暗电流,此时光敏二极管截止。当受到光照时,饱和反向漏电流大大增加,形成光电流,它随入射光强度的变化而变化。因此可以利用光照强弱来改变电路中的电流。因此,该系统设计方案可行。

     当然,还存在很多不可预测的问题,例如环境的因素,数据的调试,光照强度的因素等等。但是,在具体设计过程中遇到问题后通过分析最后将问题解决或者获得实践的经验也都是有益的。



单片机源程序如下:
  1. #include<reg52.h>
  2. #include <intrins.h>

  3. /********IO引脚定义***********************************************************/
  4. sbit SPK=P3^7;                        //蜂鸣器驱动引脚

  5. sbit LED1=P0^0;                        //LED
  6. sbit LED2=P0^1;                        //

  7. sbit gy=P1^2;                        //光敏电阻 右
  8. sbit g0=P1^3;                        //         中
  9. sbit gz=P1^4;                        //         左

  10. sbit d1=P1^0;                        //对管 右  黑线高电平(==1)
  11. sbit d2=P1^1;                        //     左

  12. sbit a1=P2^0;                        //电机驱动
  13. sbit a2=P2^1;
  14. sbit b1=P2^2;
  15. sbit b2=P2^3;

  16. sbit f1=P2^4;                        //风扇驱动
  17. sbit f2=P2^5;                        //

  18. /************************************************
  19.              延时函数
  20. ************************************************/
  21. void DelayMs(unsigned int timer)   //参数 整型timer 大小范围 0-65536,决定延时时间长短
  22. {
  23.         int x,y;
  24.         for(x=timer;x>0;x--)
  25.                 for(y=120;y>0;y--);
  26. }

  27. /************************************************
  28. 电机转动函数定义
  29. ************************************************/

  30. /*** 前进 ***/
  31. void QianJin()
  32. {
  33.          a1=0;
  34.          a2=1;
  35.          b1=0;
  36.          b2=1;
  37. }
  38. /*** 后退***/
  39. void HaoDu()
  40. {
  41.          a1=1;
  42.          a2=0;
  43.          b1=1;
  44.          b2=0;
  45. }
  46. /*** 左转 ***/
  47. void ZuoZhuan()
  48. {         
  49.          a1=1;
  50.          a2=0;
  51.          b1=0;
  52.          b2=1;
  53. }
  54. /*** 右转 ***/  
  55. void YouZhuan()
  56. {
  57.         a1=0;
  58.         a2=1;
  59.         b1=1;
  60.         b2=0;  
  61. }
  62. /*** 停止 ***/
  63. void Stop()
  64. {  
  65.          a1=1;
  66.          a2=1;
  67.          b1=1;
  68.          b2=1;
  69. }

  70. /************************************************
  71.             风扇函数定义
  72. ************************************************/
  73. void Feng()
  74. {
  75.         f1=1;f2=0;
  76.         DelayMs(3000);//风扇转3秒
  77.         f1=1;f2=1;
  78.         SPK=0;
  79.         DelayMs(1000);
  80.         SPK=1;
  81. }
  82. /************************************************
  83.            循迹子程序
  84. ************************************************/
  85. void xunjin()
  86. {
  87.                  Stop();
  88.                   LED1=1;LED2=1;
  89.                         while(d1==0&&d2==0)
  90.                         {
  91.                                         LED1=1;LED2=1;
  92.                                   QianJin();
  93.                         }
  94.                        
  95.                   while(d1==1&&d2==0)
  96.                         {   LED1=0;
  97.                                         YouZhuan();DelayMs(200);
  98.                         }
  99.                        
  100.                         while(d1==0&&d2==1)
  101.                         {   LED2=0;
  102.                                         ZuoZhuan();DelayMs(200);
  103.                         }       
  104.                        
  105.                         while(d1==1&&d2==1)
  106.                         {
  107.                                         Stop();LED1=1;LED2=1;
  108.                         }       
  109. }

  110. /*
  111. ******************************************************************************************
  112. ** 函数名称: main
  113. ** 函数功能: 主函数
  114. ** 入口参数: 无
  115. ** 出口参数: 无
  116. ******************************************************************************************
  117. */
  118. void main()
  119. {       

  120.   while(1)
  121.         {  
  122.                
  123.                   Stop();
  124.                   LED1=1;LED2=1;
  125.                         while(d1==0&&d2==0)//两个对管检测到白纸前进
  126.                         {
  127.                                         LED1=1;LED2=1;
  128.                                   QianJin();
  129.                                  
  130.                                          /*如果右边光敏检测到光源右转对准光源则前往光源执行灭火程序 */                                 
  131.                                         if(gy==0){
  132.                                                                                         while(g0==1)YouZhuan();DelayMs(50);
  133.                                                                                         QianJin();DelayMs(2000);//前进距离
  134.                                                                                         Stop();
  135.                                                           Feng();//如果灭灯模拟灭火则用while(g0==0){f1=1;f2=0;}f1=1;f2=1;SPK=0;DelayMs(1000);SPK=1;
  136.                                                                                         while(d1==0&&d2==0)HaoDu();
  137.                                                                                         QianJin();DelayMs(500);
  138.                                                                                         while(d1==0)ZuoZhuan();
  139.                                                                 while(1)xunjin();
  140.                                                                                  }
  141.                                          /*如果左边光敏检测到光源右转对准光源则前往光源执行灭火程序 */                                 
  142.                                         if(gz==0){
  143.                                                                                         while(g0==1)ZuoZhuan();DelayMs(50);
  144.                                                                                         QianJin();DelayMs(2000);//前进距离
  145.                                                                                         Stop();
  146.                                                           Feng();//如果灭灯模拟灭火则用while(g0==0){f1=1;f2=0;}f1=1;f2=1;SPK=0;DelayMs(1000);SPK=1;
  147.                                                                                         while(d1==0&&d2==0)HaoDu();
  148.                                                                                         QianJin();DelayMs(500);
  149.                                                                                         while(d2==0)YouZhuan();
  150.                                                                 while(1)xunjin();
  151.                                                                                  }                                         
  152.                                                
  153.                                                                                                          
  154.                         }
  155. ……………………

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

所有资料51hei提供下载:
循迹寻光灭火小车.rar (218.66 KB, 下载次数: 245)
回复

使用道具 举报

ID:296551 发表于 2019-5-3 17:45 来自手机 | 显示全部楼层
你好!请问可以帮忙画一下总的电路图吗?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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