基于单片机的灭火机器人设计

目 录

摘 要 I
Abstract II
引 言 1
1 系统方案设计 4
1.1 方案论证 4
1.2 灭火机器人系统工作原理 4
2 系统硬件设计 6
2.1 单片机 6
2.2 火焰探测系统设计 8
2.3 灭火系统设计 8
2.4 循迹模块设计 9
2.5 电机驱动模块 10
3 系统软件设计 12
3.1 系统软件开发环境 12
3.2 系统总程序设计 12
3.3 各模块程序设计 13
4 项目调试 17
4.1 硬件调试 17
4.2 软件调试 17
4.3 实物调试 18
结 论 20
参考文献 21
附 录 23
致 谢 34

摘 要

由于火灾的频繁发生,人们不仅在物质上有巨大的损失,同时在精神上也饱受折磨,最让人痛心惋惜的还是那些为了国家无私奉献生命的消防人员。为了解决火灾给人们带来的巨大损害,本项目设计了一款基于单片机的灭火机器人。
本次设计利用STC89C52RC单片机为核心控制器;采用红外循迹传感器控制灭火机器人的行走轨迹,通过接收管接收到红外线的数量判定路况信息;采用火焰传感器探测火焰,通过检测的火焰判定其火焰的位置;采用L293D电机驱动芯片,通过一个芯片控制两个电机的转动;灭火主要是通过马达提供动力驱动四叶风扇旋转。
结果表明,本项目设计的成本较低、性能较好,整体设计较为合理且易于操作。同时对灭火机器人软件与硬件方面进行了调试,实现了全部预期的功能。人们可以使用灭火机器人来灭火,这样能够减少一些火灾带来的损失。灭火机器人还可以代替人员闯入火场进行灭火作业,灭火人员的人身安全得到更大保证,同时灭火也可达到预期效果。

关键词:机器人; 灭火模块; 单片机控制

Abstract

Because of the frequent occurrence of fire, people not only have huge losses in material, but also suffer from mental suffering. The most lamentable ones are the firefighters who sacrifice their lives selflessly for the country. In order to solve the great fire damage to people, the design of a fire-fighting robot based on single-chip microcomputer.
This design uses the STC89C52RC single-chip microcomputer as the core controller, infrared track sensor is used to control the walking track of the fire-fighting robot, and the number of infrared rays received by the receiving tube is used to judge the road information, and flame sensor is used to detect the flame, the position of the flame is determined by the detected flame, the L293d motor-driven chip is used to control the rotation of the two motors by one chip, and the motor-driven four-blade fan is used to put out the fire.
The results show that this project has low cost, good performance, reasonable overall design and easy operation. At the same time, the software and hardware of the fire-fighting robot are debugged, and all the expected functions are realized. People can use fire-fighting robots to put out fires, which can reduce some of the damage caused by fire. The fire-fighting robot can also replace the personnel to enter the fire site to carry out the fire-fighting operation, so that the personal safety of the fire-fighting personnel can be more guaranteed and the fire-fighting can achieve the expected effect.

Keywords: robot; fire-extinguishing module; single chip microcomputer control

引 言

火灾在我们现实生活中是经常发生的,而且不定期、不定因,是很难去估测的。每当火灾发生时,英勇的消防人员永远是第一个冲在火灾前线,与此同时他们的生命也会一直处于危险的边缘。在这种背景下,灭火机器人系统因此而诞生,该系统极大程度的降低了人员的危险系数[1]。在灭火系统中单片机充当于人脑进行判断,及时处理火灾,防止错失最好的灭火时机。
自1961年乔治•查尔斯•德沃尔申请工业机器人专利成功后,机器人行业一直处于全速发展的模式,世界各国越来越重视机器人相关的研究及应用。其中,美国研制的机器人具有全面性、精确性、适应性等特点,并且其语言研究水平较突出,超越了其他国家;日本研制的机器人以数量和密度著称;德国研制的机器人销量较高并以用途广泛而闻名。目前已有多种不同类型的消防机器人用于火灾现场。
灭火机器人的实用性强、利用价值高,世界各国都开始对灭火机器人进行研究。研究灭火机器人行业的先行者是美国和前苏联,之后英国、日本、德国也开始研究,现在世界各国都已经开始对灭火机器人进行研究了,有很多灭火机器人是可以应用在实际中,帮助人员闯入火场完成灭火作业的。
现如今灭火机器人一共有三代,第一代是程序控制,第二代是具有感觉功能,第三代则是智能化。现在机器人在我们生活中已经越来越常见并且较为流行,一个叫巨人的灭火机器人在巴黎圣母院的那场火灾中参与了灭火救援的工作[2]。国内的灭火机器人主要存在于消防部队,消防部队装备的灭火机器人已经达到了世界先进水平,但是很少有火灾现场应用此机器人。灭火机器人在中国还没有普遍的应用起来,但我们的技术已经达到先进的水平了,未来灭火机器人将被广泛的使用。
经过对相关火灾事故实际情况的分析,了解到大多数火灾是由于人们疏忽大意,错过了扑灭火灾的有利时机,没有能够在起火初期火势较小的时候,将火苗扑灭,从而导致火灾范围迅速扩大,造成了严重的生命财产损失。而且,在许多需要重点防范火灾的场合目前仍然使用的是人工巡检的方式。由于人员的精力有限,无法做到完全杜绝隐患,并且一些潜伏的火灾隐患通过人工巡检方式是发现不了的。因而,需要借助先进的科技手段,来面对日益增多的火灾隐患,避免人工巡检的弊端。
随着人工智能和传感器技术的不断发展与创新,智能机器人可代替人工实现24小时不间断的工作。采用多传感器融合技术,能够有效检测火灾隐患,提高了抵御火灾的能力。同时,可以因地制宜,针对不同的场合灭火机器人可以运用不同的工作模式,这样的工作方式会大大提高灭火效率[3]。
在仓库等封闭环境中应使用自动监测模式。在自动监测模式下,消防小车可以实现一定范围内根据所规定的路线行走[4],并实施自动火情监测功能,可以即时发现火源,并将其火源扑灭,防止火灾意外发生造成更大的损失。
在设计灭火机器人系统的过程中要充分考虑到系统的稳定性和抗干扰能力,在面对多种复杂的火情场景时,要能够承受强电磁的干扰以及适应一定的高温、高压、高污染的环境,保证灭火机器人按照预定的工作模式稳定的运行。不仅要适应不同复杂环境和功能多样化,而且还要考虑到系统的易用性,能够满足操作人员的需求和习惯,做到上手容易,操作使用时简单、方便。在满足实际需求的前提下,也要充分考虑系统的经济性,使其具有广泛的应用前景。
本文基于STC89C52RC单片机设计的自动化灭火系统,本篇论文共分为四章,主要内容如下:
第一章:项目方案设计。着重系统设计目标和设计原则,选择合适的处理器和各个模块所需的元件。
第二章:项目硬件设计。根据系统的总体方案设计,搭建焊接单片机模块、电机驱动模块、火焰探测模块、循迹模块和灭火模块,电源模块并对这六大模块进行原理的介绍。
第三章:项目软件设计。程序软件的设计原理及总体介绍。介绍了系统的设计原理以及系统流程图。
第四章:系统调试。编写程序以及系统硬件连接的调试。完成本系统所需要识别小车灭火程序的编写的准备工作,同时对程序进行调试并总结调试时遇到主要的问题。

1 系统方案设计

1.1 方案论证
本设计对于实现灭火机器人循迹实现灭火的目的提出如下两套设计方案。
方案一:
灭火机器人处理器采用STC89C52RC芯片+按键启动小车+红外线循迹传感器+L293D的双H—桥驱动+火焰探测器+风扇灭火。此方案主要通过按键启动灭火机器人的运行,再由单片机控制整体运行,红外循迹传感器探测路径并将探测信息传出,L293D驱动根据红外传感器的信息控制灭火机器人轮子的转动,共同确定其行走路线,最后将启动风扇将火源扑灭。
方案二:
灭火机器人采用STM32处理器+声音启动小车+光敏探测器循迹+分立元件构成驱动+火焰探测器+水泵灭火。其方案主要是通过STM32控制灭火机器人的整体运行[5],通过一定频率的声音启动灭火机器人使其运行,光敏探测器和直流电机用分立元件构成驱动,确定其行走路线,探测到火焰,将开启风扇灭火。
两种方案的对比,方案一采用按键启动,而方案二采用声音控制,声音控制是不稳定的,容易被其他噪音干扰。处理器的选择,方案一选用52单片机,价格低廉,操作方便,方案二选用的是STM32,与比方案一相比较为复杂;循迹模块的选择,方案一选用红外线传感器循迹,方案二选用光敏探测器循迹,光照影响很大,不能够稳定的工作;驱动模块的选择,方案一选用L293D的双H-桥驱动,一个芯片控制两个直流电机,操作方便,稳定性好,性能优良,方案二选用分立元件构成驱动,价格便宜但性能不稳定。因此本项目采用方案一灭火机器人的设计方案,这种方案硬件简单,软件实现起来思路也比较清晰,符合我们的实际需求,易于操作、便于维护、实用性强。
1.2 灭火机器人系统工作原理
在灭火机器人开始运行,寻找并发现火源过程中,首先需要提前调节电位器,让火源与灭火机器人保持安全距离,然后单片机通过火焰探测模块发现火源,并快速、准确的识别火源的具体位置,为准确扑灭火源做好准备;单片机接收到火源信号反馈后,灭火模块控制风扇转动完成灭火处理,当检测到无火焰的时候风扇会继续转动一段时间,然后停下,并开始继续探测下处火焰位置。本系统大体上分为6个基本模块,分别为控制模、循迹模块、火焰探测模块、电源模块、小车驱动模块和灭火模块[6]。系统模块总设计如图1.1所示。

在这里插入图片描述

图1.1系统模块总设计图

2 系统硬件设计

2.1 单片机
单片机是一种微处理器,同时它也是一个系统的核心,有超大规模的集成电路技术,主要将中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能集成到一起构成一个完整的计算机系统[7]。
本项目选用的STC89C52RC单片机,该单片机价格低廉,易于操作,使用较为广泛,同时,它是STC89C51的增强型,综合考虑本设计的实际需求,选择STC89C52RC作为主控芯片。
STC89C52RC是双列直插式40管脚的芯片,其外部有32个端口可供用户使用,其引脚如图2.1所示。

在这里插入图片描述

图2.1 STC89C52RC引脚图
STC89C52RC单片机外部有32个端口可供用户使用,其端口主要作用分别是:
P0(P0.0P0.7)口与P1(P1.0P1.7)口为通用I/O口;P2(P2.0P2.7)口与比P1口多了一个功能,访问外部存储器时输出外部存储器的高八位地址。P3(P3.0P3.7)口与P0、P1和P2口功能相同,此外它还具有第二功能。P3口的特殊功能图如表2.1所示。

表2.1 P3口的特殊功能图

引脚 功能 符号 第二功能
P3.1 通用I/0口 TXD 串行通信接收口
P3.2 通用I/0口 INT0 外部中断0
P3.3 通用I/0口 INT1 外部中断1
P3.4 通用I/0口 T0 计数器0输入端口
P3.5 通用I/0口 T1 计数器1输入端口
P3.6 通用I/0口 WR 外部存储器写功能
P3.7 通用I/0口 RD 外部存储器读功能

单片机的最小系统就是最简单的系统。对52系列单片机来说,最小系统一般应该包括:电源电路、晶振电路、复位电路[8]。最小系统电路图如图2.2所示。

在这里插入图片描述

图2.2 STC89C52RC最小系统
供电电路:40引脚接+5V电源,20脚接地,这样便于完成单片机的供电。
复位电路:复位电路是由电阻和电容共同组成。复位电路主要是将系统进行电路初始化。在单片机还没有运行前将全部数据都要复位到初始化默认值的状态。
时钟电路:时钟电路由C22、C23和12MHz晶振组成。电路中晶振用于输出振荡频率,2个负载电容在电路中起到了微调频率的作用,它们可以确保晶振输出的频率更接近真实频率。时钟电路的作用是给单片机提供时钟脉冲,只有给单片机提供时钟脉冲单片机才会执行程序。
2.2 火焰探测系统设计
火焰探测模块主要是找到火源。根据所规定的路径去探索火源,发现火源并探测火源的具体位置,再将其火源信息传递出去。本项目的火焰传感器连接单片机P1.7口,以便于单片机火焰获取信息。
红紫外复合火焰探测器采用一个对太阳光不敏感的紫外线传感器和一个高信噪比的窄频带的红外线传感器,它视角范围紫外视角120°,红外视角90°,与红外传感器相比受外界光影响较小,减少了错误信息的传达,实际使用较为稳妥;同时红紫外复合型火焰探测器的探测距离在30-40米,三波段红外火焰探测器的最远探测距离可以达到50-70米,距离较远,可确保提前发现火源,及时将火扑灭,而红外传感器探测距离只有1-60厘米,无法快速发现火源位置;红紫外复合型火焰探测器还可探测碳氢化合物燃烧火焰,根据燃烧物火源大小来决定探测距离,如酒精0.3m×0.3m检测距离为35米,纸张0.3m×0.3m检测距离为25米,氢气0.3米的火焰检测距离为20米,而红外传感器并无此功能。红紫外复合型火焰探测器主要应用于火灾的探测中,在火灾刚刚发生时,它可以引发报警,给人类提供及时有效的信息,同时它还可探测到火源的位置,并将其火源扑灭[9]。同时探测器能够在一些恶劣的环境下工作,拓展了小车的工作的更多可能性。
2.3 灭火系统设计
本人曾考虑了各种灭火方式,有放置小型灭火器、使用喷水装置灭火等,但都比较复杂,且灭火装置对智能灭火机器人的稳定性要求很高,所以最后选择用风扇灭火的方式。
用风扇能达到要求,并且各方面的实现都比较容易,工作也比较稳定,便于调试,其工作电压为5V,可轻松吹动20cm之内的火源。灭火模块与单片机的P1.6口相连,当灭火小车检测到火源的位置并且其位置在可吹的范围内时,单片机通过P1.6口将指令发送给控制其风扇转动的电机,使风扇转动将火源扑灭,灭火完成后风扇会继续转动一阵,确保安全。风扇电路控制原理图如图2.3所示。
在这里插入图片描述

图2.3 风扇电路控制原理图
2.4 循迹模块设计
本项目设计采用巡线监测模式来实现自主灭火巡检,预设的路线上来回巡检,发现火源并及时灭火。因此,本系统采用红外循迹模块来实现消防小车的自主巡检功能[11]。
本项目的循迹模块采用的是红外传感器来根据已规定的路径行走。但与地面检测距离为23cm较为适用,同时其工作电压为3.3V5V,不可超过其范围否则不能运行。红外循迹主要是根据黑、白色对红外线吸收能力的不同,设计黑色路径为灭火机器人的行走路线。传感器的左侧为红外光发射管,右侧部分是红外光接收管。在使用前要将接收管用黑色胶带包裹起来,只留接收管底部的探头,主要防止外界光和发射光带来的干扰。发射管通电后,它能产生人眼不可见的红外光,又因为黑色能够吸收红光线,所以反射回来红外线的数量较少,接收管接收到的红外线较少,致使电阻的阻值就会较大。同理白色对红外线吸收能力较弱,接收管电阻比较小。两个红外循迹传感器分别与单片机的P3.5和P3.6口相连,单片机就可根据接收端电平变化来判断小车是否偏离预设的路线[10]。红外循迹原理图如图2.4所示。

在这里插入图片描述

图2.4 红外循迹原理图
红外循迹传感器主要就是针对一些固定区域,并设计固定路线来巡逻的一个传感器[12]。本项目主要针对那些固定区域需要巡查并缺乏人手的企业,为其提供灭火机器人来代替人力,完成巡逻工作。同时在火灾来临时可快速帮助人们进行灭火作业,即可省去多余的劳动力,又可提高火灾发生处理速度。
2.5 电机驱动模块
电机驱动模块主要是用于控制机器人的运动,本系统主要是控制灭火机器人车轮的转动。同时此系统没有传感器的控制,其位置主要依据软件来实现,这就要求电机的控制精度必须要高。
L293D采用16引脚DIP封装,半桥式驱动,电压4.5-36V,单通道输出电流,但高峰输出的电流可达到1.2A,其内部集成了双极型H-桥电路。它的工作电压为4.5~36V,L293D具有很多优点,例如价格与其他驱动器相比较为便宜、易于控制、无需保护电路和二极管和电机停止时微振电流可消除正反向时的静摩擦等[13]。本项目主要需要控制两个电机的转动,所以本设计使用2个H-桥电路集成到1片芯片上,由一个芯片同时可控制2个电机的转动。本项目电机控制是当IN1=0,IN2=1时,左电机向前走,反之IN1=1,IN2=0时左边电机向后转,要想让左边电机停转则EN2=0;同理当IN3=0,IN4=1时右边电机向前走,IN3=1,IN4=0右边电机向后走,EN1=0右边电机停转。电机驱动模块原理图如图2.5所示。

在这里插入图片描述

图2.5 电机驱动模块原理图

3 系统软件设计

3.1 系统软件开发环境
本项目软件方面设计主要是使用Keil μVision4实现的,其系统是由C语言来进行编程的,最后生成.hex文件。项目下载到单片机前编译要显示成功,才可以进行软件和单片机串口连接将所编写的程序下载到单片机里。Keil C51软件可提供丰富的库函数和功能强大的集成开发调试工具。使用C语言编程时,Keil是最实用的软件[14],程序编译界面如图3.1所示。
在这里插入图片描述

图3.1 Keil的程序编译界面
3.2 系统总程序设计
主程序为一个系统的设计主干,它可决定灭火机器人的主要工作内容。每个功能的实现还需要调用具体的子程序来运行[15]。智能灭火机器人主要工作过程为:电源给电系统初始化,灭火机器人开始根据黑色轨迹线路进行行走,火焰传感器感应到火焰的位置,一定距离开始后,风扇开始旋转,直到将火焰扑灭,火焰扑灭后,风扇将持续一段时间转动后再停止,然后小车再开始继续前进寻找下一处火焰。系统主程序流程图如图3.2所示。
在这里插入图片描述

图3.2 系统主程序流程图
3.3 各模块程序设计
(1)火焰探测模块
主要是通过火焰传感器来探索火焰的位置。当火焰传感器感测到有火焰后,它会继续让小车运行,运行到一定的距离后再开始进行风扇转动[16]。火焰消失后,火焰传感器会继续寻找下一个火焰的位置。火焰探测模块流程图如图3.3所示。
在这里插入图片描述

图3.3 火焰探测模块流程图
(2)循迹程序流程图
本设计灭火机器人在行走的过程中,两个传感器规划路线,若是向左偏就向右调整方向,向右偏就向左调整方向,循环运行使小车在规定的轨迹行走[17]。其寻迹模块程序流程图如图3.4所示。
在这里插入图片描述

图3.4 循迹程序流程图
(3)驱动电机模块程序流程图
在开启程序运行前,首先单片机初始化,P1口全部置0。当传感器检测到与地面距离为2~3cm后,电机开始启动,然后就循环判断循迹系统送来的信号,电机进行相应的功能驱动。具体如下图3.5和表3.1所示。

在这里插入图片描述

图3.5 驱动电机模块程序流程图

表3.1 驱动电机模块程序功能对照表

接收真值表(前左,后右) 对应功能
1-1 前进
0-0 停车
1-0 左转
0-1 右转

4 项目调试

4.1 硬件调试
硬件调试前我们需要焊接电路板,按照硬件高矮进行统一焊接,焊接时尽量使用焊锡进行连线,为了避免焊接错误,要对每一条焊接线路进行检查,最后进行接线处理,注意正负极接线。硬件调试主要分为五部分,分别为电路的检查、通电观察、静态调试、动态调试和指标测试[18]。
在动手操作过程中有很多问题一直阻碍小车正常的灭火运行,主要遇到的问题是:
1.传感器不工作,或者时好时坏,主要是传感器正负极连线问题,接反则不会转动,还有连接线是否接触正常,还有传感器内部是否发生短路、断路等问题,导致不导通;
2.单片机下载程序时,一定要进行冷启动,否则程序下载不成功,冷启动后,如果软件一直显示正在检测单片机,主要原因是没有选择对应的COM口或者电量不充足;
3.传感器灵敏度的调节,主要调节传感器电位器,或者调节电阻,反复实验根据LED灯的亮度来找到传感器最合适的状态,便于小车更好的运行。
4.2 软件调试
本项目使用的单片机型号为STC89C52RC系列,这个系列的单片机应用非常广泛,编译语言以C语言为主。Keil μVision4软件如图4.1所示。
在这里插入图片描述

图4.1 Keil μVision4
Keil μVision4使用的基本步骤,首先建立一个新的项目,选择使用的单片机类型(STC89C52RC),可以编写一个新的文件,编写完程序后进行编译,编译就是检测程序是否有错误和警告,警告不会影响程序的运行。在编译程序之后,生成.hex文件[19]。
STC-ISP是将程序下载到单片机的软件,首先选择单片机信号为STC98C52RC,同时将单片机按照方向置于烧写器中,安装好驱动程序连接好计算机,启动软件前,需要选择对应的COM口。选中事先编辑好的.hex文件,确定后点击下载,然后进行冷启动先断电再上电,单片机进行重启,最后会显示下载成果[20]。这样单片机程序就烧写成功了。STC-ISP软件如图4.2所示。

在这里插入图片描述

图4.2 STC-ISP
4.3 实物调试
本项目主要通过硬件与软件的结合,实现小车循迹灭火。首先我们要测试小车循迹行走,在无火焰时,小车可一直按照所设定轨迹行走,如图4.3所示。其次还要测试灭火小车的主要功能——灭火,在火焰出现时小车停下,风扇转动,扑灭火源,如图4.4所示。
在这里插入图片描述

图4.3 循迹运动

在这里插入图片描述

图4.4 风扇灭火

结 论

本次项目设计为“基于单片机的灭火机器人”,根据应实现的功能设计了所需的硬件电路,以STC89C52RC为主控中心、L293D驱动芯片等共同组成了本系统的硬件电路。其硬件电路主要有单片机模块提供的核心电路、电机驱动模块的双H—桥电路和多个传感器的检测模块。并根据硬件电路的需求和设计者的理念编写出相应的软件程序。
首先,可利用按键控制灭火机器人的工作状态,按键可控制电源的开启,或者将灭火机器人与地面保持一定的距离,灭火机器人检测不到路面,这两种方法都可以控制灭火机器人的运行。灭火机器人运动时可根据设置的路径行走,要是偏离了路线,红外循迹传感器会发射出灭火机器人偏离轨道的信息,并将此信息直接传给单片机,单片机会根据所设定的程序,对控制灭火机器人两个车轮的电机发出指令,调整两个轮子的转速,以达到灭火机器人向左偏移路线要向右移动,向右偏移路线要向左移动的效果,使灭火机器人可以在所规定的路线进行行走,检测火源是否存在。若火源存在灭火机器人火焰传感器的指示灯会发出亮光,火焰传感器会将有火焰的信息发送给单片机,单片机会立刻给风扇发出指令,电动机给风扇提供动力将火焰扑灭,火焰消失,火焰传感器的指示灯会熄灭,但风扇会继续转动,转动一阵后,风扇就会停止转动,灭火机器人又会开始运行沿着路径行走。
本设计经过了硬件以及软件的测试,各部分均实现预期功能。实现了小车循迹功能,可根据规定的路线,进行一步步沿线行走;实现了小车探索火焰的功能,发现火焰,LED指示灯就会发出亮光;实现了灭火的功能,根据单片机接收到有火焰的信息后,风扇开始转动,实现灭火的功能。该灭火系统操作简单,可靠性高,抗干扰能力较强,适用范围广。应用本设计产品,可以减少不必要的损害,降低不必要的风险,同时还可以促进社会科技的进一步发展。

参考文献

[1] 程丽娜, 陈杨阳. 基于C51单片机的智能灭火机器人的设计与研究[J].机器人技术与应用, 2012(03) :38-41
[2] 常松. 巴黎圣母院火灾扑救的装备作战效能评估[N]. 中国应急管理报, 2019-05-04(003)
[3] 倪银堂, 吕迪洋, 王振豪. 消防机器人的研究现状综述与展望[J]. 自动化应用, 2017(02) :28-29
[4] 肖明俊, 祝玲, 刘雨, 李继超. 基于51单片机居家智能灭火机器人循迹系统的设计[J]. 电子世界, 2013(13) :156-157
[5] 姚蕴. 基于STM32的灭火机器人设计[J]. 中国新通信, 2017,19(17) :43-44
[6] 志勇. 智能巡检灭火机器人的设计[D]. 大连工业大学, 2017
[7] 王哲, 孙洪超, 张皖军. 基于单片机灭火机器人的设计[J]. 农机使用与维修, 2017(10) :7
[8] 冯世鑫, 郑闯. 基于单片机的轮式灭火机器人设计[J]. 中国设备工程, 2018(06) :160-162
[9] 冯国文, 王彬, 王籽涵, 刘世运, 黄健俊, 徐天如, 郭海港. 基于STC15W4K32S4灭火智能车的设计[J]. 信息记录材料, 2018,19(10) :83-84
[10] 陈帅华, 汤勇. 可控自动灭火机器人设计[J]. 伺服控制, 2015(07) :54-56+45
[11] 温卫敏. 一种最优路径规划的灭火机器人系统设计[J]. 四川理工学院学报(自然科学版), 2018,31(03) :21-28
[12] 卢彪, 陈宇, 邱慧丽. 基于多传感器信息采集技术的灭火机器人系统设计[J]. 廊坊师范学院学报(自然科学版), 2019,19(03) :36-38+41
[13] 孟祥荔. 基于智能灭火机器人硬件电路的设计探讨[J]. 科技经济导刊, 2018,26(14) :11-12+15
[14] 孙宁, 裴文良, 闵桂元, 王永军. 消防灭火机器人设计及应用[J]. 消防科学与技术, 2018,37(07) :942-944
[15] 胡传平. 消防机器人的开发与应用[J]. 机器人技术与应用, 2003(05) :37-41
[16] 刘锴圣, 黄民. 基于STM32的消防灭火机器人控制系统设计与研究[J].轻工科技, 2018,34(01) :70-71+109
[17] 崔清宇, 时泽宇. 基于单片机AT89S52的智能灭火小车设计[J]. 科技展望, 2016,26(04) :148
[18] 张佐权. 竞赛用灭火机器人智能优化技术的研究与实现[D]. 电子科技大学, 2012
[19] 俞凡. 基于单片机的厂区智能循迹灭火车模型的设计和实现[D]. 安徽农业大学, 2016
[20] 吴冉, 黄奇瑞. 基于单片机的智能灭火小车设计与实现[J]. 南阳理工学院学报, 2017,9(06) :61-64

附 录

#include<AT89X52.H> //包含51单片机头文件,内部有各种寄存器定义
#include<HJ-2WD_PWM_FK.H> //HJ-2WD智能车专用头文件

#define uchar unsigned char
#define uint unsigned int

unsigned char n,count,angle;//距离标志位,0.5ms次数,角度标识

uchar i;
void DelayUs2x(uchar t)
{
while(–t);
}
void DelayMs(uchar t)
{
while(t–)
{
//大致延时1mS
DelayUs2x(245);
DelayUs2x(245);
}
}

/------------------------------------------------
定时器01初始化
//定时器1工作方式1 (舵机 ),定时器0 电机PWM调速控制信号
------------------------------------------------
/
void Time1_Int() interrupt 3//舵机
{
TH1=0xff;
TL1=0xa3;
if(count<angle)//判断0.5ms次数是否小于角度标识
pwm=1;//确实小于,pwm输出高电平
else
pwm=0;//大于则输出低电平
count=(count+1);//0.5ms次数加1
count=count%40;//次数始终保持为40即保持周期为20ms
}

//主函数
void main(void)
{

count=0;
P0=0XF0;   //关电机	

	 	TMOD=0X11;
    	TH0= 0XFc;		  //1ms定时
     	TL0= 0X18;
       	TR0= 1;
    	ET0= 1;
        EA = 1;			   //开总中断

		TH1=0xff;
        TL1=0xa3;
		ET1=1;
		TR1= 1;
		

while(1)	//无限循环
{ 
 
		 //有火焰信号S=0   没有火焰信号S=1 

          if(S==0)	 //检测到有火焰时

		  {
			    stop();		//调用电机停止函数
				F=0;	   //打开风扇灭火
				delay(200);		//
				F=1;	   //关掉灭火风扇
			    stop();		//调用电机停止函数
			    delay(100);		//??毫秒

		  }


           //巡黑线 有信号为0 白线  没有信号为1 黑线

          if(Left_1_led==0&&Right_1_led==0&&S==1)

		  {
		  F=1;   //关风扇
		  run();   //调用前进函数
		  }

			  if(Left_1_led==1&&Right_1_led==1)

		  {
		  stop();   //调用停止函数
		  }
		 			  
		  if(Left_1_led==1&&Right_1_led==0)	    //左边检测到黑线
		 	 
		  {	 	 
		 	  leftrun();		  //调用小车左转  函数
		   }
		   
		   if(Right_1_led==1&&Left_1_led==0)		//右边检测到黑线
			  
		  {	        
			rightrun();		   //调用小车右转	函数
		   }			 			  
			 
 }

}
//循迹
#ifndef LED_H
#define LED_H

//定义小车驱动模块输入IO口 
sbit IN1=P1^0;
sbit IN2=P1^1;
sbit IN3=P1^2;
sbit IN4=P1^3;
sbit EN1=P1^4;
sbit EN2=P1^5;

#define Left_1_led        P3_6	 // 左传感器 
#define M_0_led           P1_7	 // 火焰传感器       
#define Right_1_led       P3_5	 //右传感器 

 
#define Left_moto_pwm	  P1_5	 //PWM信号端
#define Right_moto_pwm	  P1_4	  //PWM信号端


#define Left_moto_go      {IN1=0,IN2=1;}  //左电机向前走
#define Left_moto_back    {IN1=1,IN2=0;} 	//左边电机向后转
#define Left_moto_Stop    {EN2=0;}  //左边电机停转                     
#define Right_moto_go     {IN3=0,IN4=1;}	//右边电机向前走
#define Right_moto_back   {IN3=1,IN4=0;}	//右边电机向后走
#define Right_moto_Stop   {EN1=0;}	//右边电机停转  

unsigned char pwm_val_left  =0;//变量定义
unsigned char push_val_left =0;// 左电机占空比N/20
unsigned char pwm_val_right =0;
unsigned char push_val_right=0;// 右电机占空比N/20
bit Right_moto_stop=1;
bit Left_moto_stop =1;
unsigned  int  time=0;

//
//延时函数
void delay(unsigned int k)
{
unsigned int x,y;
for(x=0;x<k;x++)
for(y=0;y<2000;y++);
}
/
/
//前速前进
void run(void)
{
push_val_left=5; //速度调节变量 0-20。。。0最小,20最大
push_val_right=5;
Left_moto_go ; //左电机往前走
Right_moto_go ; //右电机往前走
}

//后退函数

 void  backrun(void)

{
push_val_left=5; //速度调节变量 0-20。。。0最小,20最大
push_val_right=5;
Left_moto_back; //左电机往前走
Right_moto_back; //右电机往前走
}

//左转函数
void leftrun(void)
{
push_val_left=8;
push_val_right=8;
Right_moto_go ; //右电机往前走
Left_moto_back ; //左电机后走
}

//右转函数
void rightrun(void)
{
push_val_left=8;
push_val_right=8;
Left_moto_go ; //左电机往前走
Right_moto_back ; //右电机往后走
}

//停止函数
void stop(void)
{
push_val_left=0;
push_val_right=0;
Right_moto_Stop ; //右电机
Left_moto_Stop ; //左电机停止
}

//
/
PWM调制电机转速 /
/
/
/* 左电机调速 /
/调节push_val_left的值改变电机转速,占空比 /
void pwm_out_left_moto(void)
{
if(Left_moto_stop)
{
if(pwm_val_left<=push_val_left)
{
Left_moto_pwm=1;
// Left_moto_pwm1=1;
}
else
{
Left_moto_pwm=0;
// Left_moto_pwm1=0;
}
if(pwm_val_left>=20)
pwm_val_left=0;
}
else
{
Left_moto_pwm=0;
// Left_moto_pwm1=0;
}
}
/
**************************************************************/
/
右电机调速 */
void pwm_out_right_moto(void)
{
if(Right_moto_stop)
{
if(pwm_val_right<=push_val_right)
{
Right_moto_pwm=1;
// Right_moto_pwm1=1;
}
else
{
Right_moto_pwm=0;
// Right_moto_pwm1=0;
}
if(pwm_val_right>=20)
pwm_val_right=0;
}
else
{
Right_moto_pwm=0;
// Right_moto_pwm1=0;
}
}

/***************************************************/
///TIMER0中断服务子函数产生PWM信号/
void timer0()interrupt 1 using 2
{
TH0=0XFc; //1Ms定时
TL0=0X18;
time++;
pwm_val_left++;
pwm_val_right++;
pwm_out_left_moto();
pwm_out_right_moto();
}

/*********************************************************************/

#endif
//灭火
#ifndef LED_H
#define LED_H

//定义小车驱动模块输入IO口 
sbit IN1=P1^0;
sbit IN2=P1^1;
sbit IN3=P1^2;
sbit IN4=P1^3;
sbit EN1=P1^4;
sbit EN2=P1^5;

//定义火焰传感器IO口
sbit S=P1^7;
//定义风扇驱动IO口
sbit F=P1^6;
//定义转向舵机IO口
sbit pwm=P2^7;//PWM信号输出口  舵机信号输出口

sbit TRIG=P2^5;
sbit ECHO=P2^4;  

#define Left_1_led        P3_6	 // 左传感器       
#define Right_1_led       P3_5	 //右传感器  

#define PWMSD            10	 速度调节变量 0-20。。。0最小,20最大  如果小于8电机可能不动
 
#define Left_moto_pwm	  P1_4	 //PWM信号端
#define Right_moto_pwm	  P1_5	  //PWM信号端


#define Left_moto_go      {P1_0=0,P1_1=1;}  //左电机向前走
#define Left_moto_back    {P1_0=1,P1_1=0;} 	//左边电机向后转
#define Left_moto_Stop    {P1_4=0;}  //左边电机停转  
               
#define Right_moto_go     {P1_2=1,P1_3=0;}	//右边电机向前走
#define Right_moto_back   {P1_2=0,P1_3=1;}	//右边电机向后走
#define Right_moto_Stop   {P1_5=0;}	//右边电机停转  

unsigned char pwm_val_left  =0;//变量定义
unsigned char push_val_left =0;// 左电机占空比N/20
unsigned char pwm_val_right =0;
unsigned char push_val_right=0;// 右电机占空比N/20

bit Right_moto_stop=1;
bit Left_moto_stop =1;
unsigned  int  time=0;

//
//延时函数
void delay(unsigned int k)
{
unsigned int x,y;
for(x=0;x<k;x++)
for(y=0;y<2000;y++);
}
/
/

//前速前进
void run(void)
{
push_val_left=8; //速度调节变量 0-20。。。0最小,20最大
push_val_right=8;

 Left_moto_go ;   //左电机往前走
 Right_moto_go ;  //右电机往前走

}

//后退
 void  Rearrun(void)

{
push_val_left=PWMSD;
push_val_right=PWMSD;

 Left_moto_back  ;   //左电机后退
 Right_moto_back    ;  //右电机后退	

}

//左转函数
void leftrun(void)
{
push_val_left=8;
push_val_right=8;

 Right_moto_go ;  //右电机往前走
 Left_moto_back   ;  //左电机后走

}

//右转函数
void rightrun(void)
{
push_val_left=8;
push_val_right=8;

 Left_moto_go  ;   //左电机往前走
 Right_moto_back    ;  //右电机往后走	

}

//停止函数
void stop(void)
{
push_val_left=0;
push_val_right=0;

 Left_moto_Stop  ;   //
 Right_moto_Stop    ;  //	

}

//
/
PWM调制电机转速 /
/
/
/* 左电机调速 */
/*调节push_val_left的值改变电机转速,占空比 */
void pwm_out_left_moto(void)
{
if(Left_moto_stop)
{
if(pwm_val_left<=push_val_left)
{
Left_moto_pwm=1;

	   }
else 
       {
         Left_moto_pwm=0;

	   }
if(pwm_val_left>=20)
       pwm_val_left=0;

}
else
{
Left_moto_pwm=0;

	  }

}
/*****************************************************************/
/
右电机调速 */
void pwm_out_right_moto(void)
{

if(Right_moto_stop)
{

if(pwm_val_right<=push_val_right)
      {

       Right_moto_pwm=1; 

	   }
else 
      {
	   Right_moto_pwm=0;

	  }
if(pwm_val_right>=20)
       pwm_val_right=0;

}
else
{
Right_moto_pwm=0;

      }

}

/***************************************************/
///TIMER0中断服务子函数产生PWM信号/
void timer0()interrupt 1 using 2
{
TH0=0XFc; //1Ms定时
TL0=0X18;
time++;
pwm_val_left++;
pwm_val_right++;
pwm_out_left_moto();
pwm_out_right_moto();
}

/*********************************************************************/

#endif

致 谢

时间悄无声息的带我走完了在沈阳城市学院的四年大学时光,迎来了最后的时刻,完成最终的考核。我经过几个月坚持不懈的努力,完成了这个基于单片机的灭火机器人设计,非常感谢胡海龙老师和于宏波老师对我细心的指导,同时感谢在校期间各位授课老师的教导,以及给我的很多实践的机会。在设计中遇到过很多的问题,但在老师的帮助下都得到了解决,最困难的不是问题有多难,而是你是否能拼尽全力解决它。
在学校所学单片机、电路及相关传感器等知识都可应用到实践中,帮助解决生活中的诸多相关问题。它主要采用STC89C52RC单片机为核心控制,多个传感器共同组成硬件电路,最后将硬件电路与软件相结合,达到灭火效果,并且可应用到实践中。人员无法进入的高温、有毒和浓烟等危害环境中,可以利用灭火机器人代替人员进入火灾现场完成灭火作业。它的应用将提高扑灭恶性火灾的实战能力,同时可以减少国家财产损失和灭火救援人员的伤亡。
这个设计不仅仅是为了毕业而完成的一个作品,它真正价值在于给我们生活带来益处。再次感谢胡海龙老师和于宏波老师对我提供的指导,感谢这个阶段每个对我提供帮助的人。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/465797.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据库事务中“锁”的分类

数据库事务中的锁可以按照不同的维度进行分类。以下是一些常见的分类方式&#xff1a; 1、按锁的粒度分类&#xff1a; 行锁&#xff08;Row-level lock&#xff09;&#xff1a;锁定单个或少量的数据行。这种锁粒度小&#xff0c;允许高度的并发&#xff0c;但管理开销大。页…

【每日一题】303. 区域和检索 - 数组不可变-2024.3.18

题目&#xff1a; 303. 区域和检索 - 数组不可变 给定一个整数数组 nums&#xff0c;处理以下类型的多个查询: 计算索引 left 和 right &#xff08;包含 left 和 right&#xff09;之间的 nums 元素的 和 &#xff0c;其中 left < right 实现 NumArray 类&#xff1a;…

JS拖曳盒子案例

让我为大家带来一个小案例吧&#xff01; <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>* {margin: 0;padding: 0;}.box1 {width: 100px;height: 100px;background-color: black;margin-bot…

MyBatisPlus 之一:Spring 整合 MyBatisPlus 及雪花算法

1. Mybatis-Plus简介 Mybatis-Plus&#xff08;简称MP&#xff09;是一个 Mybatis 的增强工具&#xff0c;在 Mybatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。这是官方给的定义&#xff0c;关于mybatis-plus的更多介绍及特性&#xff0c;可以参考http…

力扣203. 移除链表元素

写法1、头节点 和 后面的节点 删除规则不一致 class Solution {public ListNode removeElements(ListNode head, int val) {//如果不建虚拟头节点&#xff0c;那删头节点和删后面的节点&#xff0c;逻辑是不一样的//头节点可能连续多个命中val,所以有while&#xff0c;不是ifwh…

Python从0到100(六):Python分支和循环结构的应用

分支和循环结构的重要性不言而喻&#xff0c;它是构造程序逻辑的基础。 一、程序的结构控制 单分支结构&#xff1a; 单分支结构是分支结构中最简单的一种方式&#xff0c;单分支结构只需要判断一个条件&#xff0c;根据这个条件是否成立来决定是否执行一段语句。 二分支结…

基于Spring Boot的煤矿信息管理系统

摘 要 系统根据现有的管理模块进行开发和扩展&#xff0c;采用面向对象的开发的思想和结构化的开发方法对煤矿信息管理的现状进行系统调查。采用结构化的分析设计&#xff0c;该方法要求结合一定的图表&#xff0c;在模块化的基础上进行系统的开发工作。在设计中采用“自下而上…

亮点抢先看!4月16-17日,百度Create大会开设“AI公开课”,大咖带你打造赚钱工具

3月16日&#xff0c;2024百度Create AI开发者大会正式开放售票&#xff0c;嘉宾套票定价399元。据悉&#xff0c;本次大会以“创造未来&#xff08;Create the Future&#xff09;”为主题&#xff0c;设有20深度论坛、超30节AI公开课、3000平AI互动体验区和AI音乐节等精彩环节…

【Linux】基础 IO(文件系统 inode 软硬链接)-- 详解

一、理解文件系统 1、前言 我们一直都在说打开的文件&#xff0c;磁盘中包含了上百万个文件&#xff0c;肯定不可能都是以打开的方式存在。其实文件包含打开的文件和普通的未打开的文件&#xff0c;下面重点谈谈未打开的文件。 我们知道打开的文件是通过操作系统被进程打开&am…

每日五道java面试题之mybatis篇(四)

目录&#xff1a; 第一题. 映射器#{}和${}的区别第二题. 模糊查询like语句该怎么写?第三题. 在mapper中如何传递多个参数?第四题. Mybatis如何执行批量操作第五题 MyBatis框架适用场景 第一题. 映射器#{}和${}的区别 #{}是占位符&#xff0c;预编译处理&#xff1b;${}是拼接…

3.程序语言基础知识

主要议题&#xff1a; 掌握高级语言、低级语言的特点和应用场景&#xff1b; 程序编译&#xff0c;记词法、文法规则&#xff1b; 表达式主要考察中缀表达式和后缀表达式之间的相互转换&#xff1b; 传值与传址&#xff0c;分清特点&#xff0c;结合程序代码求值&#xff1b; …

python知识点总结(二)

这里写目录标题 1、什么是解释性语言&#xff0c;什么是编译性语言&#xff1f;2、说说中作用域是怎么划分的3、type和isinstance方法的区别4、浅拷贝和深拷贝5、python中变量在内存中存储方式6、python中的封装、继承、多态7、python中内存管理机制是怎么样的&#xff1f;8、简…

S32DS 中编译生成bin文件

1、按下图执行 按下图勾选 Create flash image 再次打开Properties 选择 Raw Binary 选择Debug_Flash进行编译后&#xff0c;在Debug_Flasg文件夹下就会出现bin文件 若没有出现 右键选择refresh 刷新一下即可

Python Web开发记录 Day13:Django part7 Ajax入门与案例(任务管理)

名人说&#xff1a;莫道桑榆晚&#xff0c;为霞尚满天。——刘禹锡&#xff08;刘梦得&#xff0c;诗豪&#xff09; 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 1、Ajax入门①简介②工作原理③优点④缺点⑤使用…

明远创意生活引领经典家纺品牌“大朴”走向新生

十二年前,有一个初创的国产家纺品牌,大胆地向消费者喊出领先于行业的标准——“无甲醛、无荧光增白剂、无致癌物”。凭借这样极致的健康承诺,“大朴”国内销售规模迅速超过一亿人民币,成功引领行业风气,收获了众多忠实粉丝。 2023年,因资金链断裂,“大朴”原公司破产清算,这个…

图书管理系统

一.book包 1.书的类 一本书的基本内容&#xff1a; 成员变量是private那么我们就需要set和get方法&#xff0c;也需要一个构造方法&#xff1a; Tostring的方法也需要加上&#xff1a; 2.书的增加是i在书架上操作的&#xff0c;创建一个BookList类 首先我们需要让书和书…

nginx 基本使用、借助 nginx 和 mkcert 实现本地 https://localhost 测试。

CSDN 如何将资源设置为免费&#xff1f; 安装和基本使用 进入 nginx 官网 下载 Mainline version 版本 解压到一个你喜欢的位置&#xff0c;比如解压到 C: 目录 不管配不配置环境变量&#xff0c;对 nginx 的所有操作都应该在对应文件夹中 基本命令的使用&#xff1a; cd …

初级爬虫实战——哥伦比亚大学新闻

文章目录 发现宝藏一、 目标二、简单分析网页1. 寻找所有新闻2. 分析模块、版面和文章 三、爬取新闻1. 爬取模块2. 爬取版面3. 爬取文章 四、完整代码五、效果展示 发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不…

手写微前端micro-app-页面渲染

我们可以使用循环递归的方式提取上面字符串资源中所有遍历到的link、style、script标签&#xff0c;提取静态资源地址并格式化标签。 在source.js文件中&#xff0c;添加extraSourceDom函数&#xff0c;用来提取link&#xff0c;script这种特殊标签 // 提取link的css链接 fun…

一些 AI 工具

AI 搜索&#xff1a;Phind&#xff0c;perplexity AI聊天大模型&#xff1a;chatgpt&#xff0c; kimi&#xff08;国内可用&#xff0c;支持上传文件&#xff09; AI 机器人&#xff1a;https://www.coze.com/ AI工具集&#xff1b;https://ai-bot.cn/#term-2 agent GPT&a…
最新文章