【毕设级项目】基于AI技术的多功能消防机器人(完整工程资料源码)
基于AI技术的多功能消防机器人演示效果
竞赛-基于AI技术的多功能消防机器人视频演示
前言:
随着“自动化、智能化”成为数字时代发展的关键词,机器人逐步成为社会经济发展的重要主体之一,“机器换人”成为发展的全新趋势和时代潮流。在可预见的将来,消防机器人的功能将日益完善,在较多危险区域完全可以代替消防员,实现“机器换人”,减少甚至避免消防员的伤亡。消防机器人的出现无疑给消防行业带来了救赎。但同时也应该看到,我国对于消防机器人的研究相较国外同行已远远落后,存在技术上的差异和代沟。我国从八十年代末期才开始对消防机器人进行研究,相比于其他国家起步较晚。现行我国虽已有了消防机器人,但数据显示我国消防机器人的研究仍处在初级阶段,还有许多问题亟待解决。例如,现行消防机器人在市场上并没有得到实际的推广,且他的使用对象大多都是我们的消防部队,并且都是消防人员到达火灾现场后才开始使用的,但消防事故灾情复杂、消防机器人灭火救援难度极大,出于这些局限性,本团队进行了讨论,针对现行传统消防机器人所存在的问题,提出了新的看法和解决方案。火灾事故频发的一大要因便是缺少事前的预防措施,都是火灾发生后的事后救济。要想更好的解决火灾问题,最好的方法就是从火灾根源下手,从源头阻断火情的蔓延。因此,我们的项目主要针对室内领域使用,这能更好的防止火灾根源的蔓延和火势的扩大,进而执行巡逻灭火工作,阻断火情的发生,起到火灾预防的作用。
关键词: 消防机器人 室内 多功能 预防
目录:
基于AI技术的多功能消防机器人演示效果
前言
目录
一、绪论
二、系统方案
2.1项目简介:
2.2 实现路径:
三、功能特色
3.1 项目功能:
3.2 项目特色:
四、实现原理:
4.1 wifi模块
4.2 五路火焰传感器
4.3 K210摄像头
4.4 温湿度传感器
4.5 蜂鸣器模块
4.6 激光雷达模块
4.7 超声波模块
4.8 stm32单片机控制
4,9 微信小程序远程通信
五、项目框图
5.1 硬件框图
5.2 软件框图
六、源码展示:
6.1 K210摄像头源代码
6.2 微信小程序源码
6.3 一号单片机源代码(主要用于网络通信)
6.4 二号单片机源代码(主要用于外设控制)
七、实物展示
八、成本核算:
源码资料链接 :毕设&大创&立项&竞赛-基于AI技术的多功能消防机器人(完整工程资料源码).rar_MSPM0资源-CSDN文库
总结:
一、绪论
火灾是生活中最常见和最容易发生的灾害,火灾的发生对社会有很大的伤害,危害性是人类无法估计的。我国近年来频繁发生火灾等安全事故,截至2021年我国共接报火灾数量74.8万起,同比增长196.83%,造成直接经济损失67.5亿元,同比增长68.33%。因此消防机器人的出现,无疑保障了人们的人身安全和财产安全。且当前科技发展速度越来越快,智能机器人运用范围也越来越普及。近年来,我国消防机器人的研制工作得到了政府有关部门的支持,因此在消防事业发展过程中机器人的发展前景非常广阔。我国研制和开发消防机器人提高了我国消防现代化的水平,为减少日常生活中的细微细节酿成的大火造成的人身伤亡,但我国消防机器人在室内无线智能领域与技术发达国家还存在着差距,因此消防机器人的提升空间巨大
二、系统方案
2.1项目简介:
在人们的日常生活和工作中,由于人们消防意识淡薄、先进消防技术匮乏、人为制造火情等,导致安全事故频发,一次又一次的威胁着人们的生命健康安全,因此消防机器人的出现正是解决这一现状的利器。消防机器人在我国虽历经几十年的改革和进步,总体上已达到了世界先进水平,但是也存在一定的局限性。即适用于家庭内部使用的消防机器人少之又少,基本上处于空缺状态。现在的消防机器人的使用对象大多是消防部队,并且受时间限制,仅仅是在火灾已经发生之后消防部队赶到火灾现场才能够使用。为了克服现行消防机器人不适用室内内部使用这一局限性,我们项目在现行消防灭火机器人的基础上研发一种功能全面、使用领域针对于室内,针对问题的发生根源进一步进行预防工作的基于AI技术的多功能消防机器人。
2.2 实现路径:
基于AI技术的多功能消防机器人能够在火灾发生之前快速反应,机器人通过巡逻扫描环境空间与障碍物、定位导航、探测物体/环境进行建模/自动地图测绘、扫描火焰、获取温湿度大小、获取空气安全情况来判断当前环境地点是否安全,检测到温度过高或检测到易燃、烟雾、有毒气体或摄像头识别到火焰时能够通过高压水泵喷射器来实现火焰隔离工作,蜂鸣器进行现场鸣笛报警,同时将当前环境温湿度大小、空气情况、环境地图、是否安全信息,将各个传感器来接收获取到的信息,实时发送到用户手机中的微信小程序,实现与用户远程监视功能,用户同时也能通过手机与电脑远程下发命令来操控机器人来实现交互功能,硬件上主要采用了STM32单片机,WIFI模块,火焰传感器,烟雾传感器,温湿度传感器模块,K210摄像头,蜂鸣器报警模块,激光雷达模块,高压水泵,软件上主要采用微信小程序和阿里云服务器,MQTT通信协议,只要有安全隐患的存在机器人就会第一时间将危险信息发送到产品用户的微信小程序中以警醒产品用户有危险发生。
本项目的消防机器人主要应用于如家庭、工作场所等室内领域,是基于stm32单片机和物联网云平台阿里云实施的灭火报警助手项目,能够预防火灾发生,并提供安全保障进行火灾的定位和灭火,这体现了智能消防的效能,也是保障人类人身、财产权得以行稳致远行使的得力助手。
三、功能特色
3.1 项目功能:
机器人通过巡逻扫描环境空间与障碍物、定位导航、探测物体/环境进行建模/自动地图测绘、扫描火焰、获取温湿度大小、获取空气安全情况来判断当前环境地点是否安全,检测到温度过高或检测到易燃、烟雾、有毒气体或摄像头识别到火焰时能够通过高压水泵喷射器来实现火焰隔离工作,蜂鸣器进行现场鸣笛报警,同时将当前环境温湿度大小、空气情况、环境地图、是否安全信息,将各个传感器来接收获取到的信息,实时发送到用户手机和电脑中,实现与用户远程监视功能,同时用户也能通过手机与电脑远程下发命令来操控机器人来实现交互功能,硬件上主要采用了STM32单片机,WIFI模块,火焰传感器,烟雾传感器,温湿度传感器模块,K210摄像头,蜂鸣器报警模块,高压水泵,激光雷达定位系统,软件上主要采用微信小程序和阿里云服务器,web网页,MQTT通信协议。
机器人通过各个模块来判断当前环境是否有安全隐患的存在,使机器人能够检测到不良环境时将第一时间将危险信息发送到产品用户的微信小程序中以警醒产品用户有危险发生,轻松实现室内智能安防,使用户的财产与生命安全得到保障,达到财产损失预防、安全预防。
3.2 项目特色:
在功能上,本项目产品不同于市面上必须由人工在附近辅助控制的消防机器人,机器人通过超声波模块进行巡逻避障,通过k210摄像头AI识别等各个传感器模块来记录和识别该报警器位置附近是否有烟雾出现、火灾发生、有毒气体泄漏,来进行扬声器报警。检测到火焰和高温区域时,机器人停止移动,指向火焰源,开启灭火工作,直到火焰熄灭。并通过雷达扫描构造附件场景进行确定位置,从而获取到较为准确的火灾信息,在wifi模块中使用MQTT通信协议与OneNET互联网平台和TCP端口进行连接,将STM32单片机、微信小程序建立通信,可实现用户的实时监控,在距离上信息传输不受限制。同时用户还能获取到室内的温度、火焰信息、易燃气体与烟雾、各个模块接收到的安全情况等信息,也可通过微信小程序等来给机器人下达指令,从而进行实时操控。
在硬件上,基于STM32搭载UCOSIII实时操作系统,为各个模块的工作提供了有力的保障。使用防火涂层板搭建机器人,起到机器人自身防火作用。并且使用PCB板将各个模块电路集成在一起,不仅节省了机器人硬件使用空间,并且避免了线路连接繁杂的问题,起到机器人侦察小巧灵敏的作用。
四、实现原理:
AI技术的多功能消防智能机器人实现功能如下:
机器人通过巡逻扫描环境空间与障碍物、定位导航、探测物体/环境进行建模/自动地图测绘、扫描火焰、获取温湿度大小、获取空气安全情况来判断当前环境地点是否安全,检测到温度过高或检测到易燃、烟雾、有毒气体或摄像头识别到火焰时能够通过高压水泵喷射器来实现火焰隔离工作,蜂鸣器进行现场鸣笛报警,同时将当前环境温湿度大小、空气情况、环境地图、是否安全信息,将各个传感器来接收获取到的信息,实时发送到用户手机中的微信小程序,实现与用户远程监视功能,用户同时也能通过手机与电脑远程下发命令来操控机器人来实现交互功能,硬件上主要采用了STM32单片机,WIFI模块,火焰传感器,烟雾传感器,温湿度传感器模块,K210摄像头,蜂鸣器报警模块,激光雷达模块,高压水泵,软件上主要采用微信小程序和阿里云服务器,MQTT通信协议。
图1.基于AI技术的多功能消防机器人技术图
机器人通过各个模块来判断当前环境是否有安全隐患的存在,使机器人能够检测到不良环境时将第一时间将危险信息发送到产品用户的手机中以警醒产品用户有危险发生,轻松实现室内智能安防,使用户的财产与生命安全得到保障,达到财产损失预防、安全预防。
4.1 wifi模块
ATK-ESP8266WiFi模块是ALIENTEK 推出的一款高性能的 UART-WiFi(串口-无线 WIFI)模块,ATK-ESP8266 板载 ai-thinker 公司的 ESP8266 模块,该模块通过 FCC,CE 认证。ATK-ESP8266 模块采用串口(LVTTL)与 MCU(或其他串口设备)通信,内置 TCP/IP协议栈,能够实现串口与 WIFI 之间的转换。ATK-ESP8266 模块支持 LVTTL 串口,兼容 3.3V 和 5V 单片机系统,可以很方便的与产品进行连接。模块支持串口转 WIFI STA、串口转 AP 和 WIFI STA+WIFI AP 的模式,从而快速构建串口-WIFI 数据传输方案,方便设备使用互联网传输数据
4.2 五路火焰传感器
在机器人循迹打开摄像头的过程中,通过温湿度传感器感应温度与湿度的高低,让机器人进一步的往温度高的范围循迹,通过打开火焰传感器感应火焰,进一步确认火源方向,从而达到了辅助K210摄像头能够精确的识别到火焰图像的作用。
4.3 K210摄像头
KPU 是 K210 内部一个神经网络处理器,它可以在低功耗的情况下实现卷积神经网络计算, 实时获取被检测目标的大小、坐标和种类,对人脸或者物体进行检测和分类。
Yolov3算法已有开源的软件可以直接使用,即通过Mx-yolov3软件实现,大大方便了我们开发者的编写程序的过程,实现方便简单。
首先第一步需要将火焰图片上传到机器学习的目录中,第二步处理图片大小为224x244(减小图片像素以方便机器学习)
图2.火焰训练图片目录
图3.深度学习目标识别训练软件
图4.在训练软件中框选出训练目标为火焰
通过Mx-yolov3软件环境框选出我们要识别的目标(火焰),框选的图片越多机器学习程度就越高,火焰识别也会越精确。训练好之后会生成模型文件,最后将模型文件上传到K210摄像头的SD卡中,通过K210的MaixPy IDE编译环境通过Python编程语言对模型文件进行使用,将代码下载到K210摄像头中,从而实现K210摄像头对火焰进行高精度识别。
4.4 温湿度传感器
利用探头作为测温元件,将温度和湿度信号采集出来,经过稳压滤波、运算放大、非线性校正、V/I转换、恒流及反向保护等电路处理后,转换成与温度和
湿度成线性关系的电流信号或电压信号输出,也可以直接通过主控芯片进行485或232等接口输出。
4.5 蜂鸣器模块
1、蜂鸣器的发声原理由振动装置和谐振装置组成,而蜂鸣器又分为无源他激型与有源自激型。
2、无源他激型蜂鸣器的工作发声原理是:方波信号输入谐振装置转换为声音信号输出。
3、有源自激型蜂鸣器的工作发声原理是:直流电源输入经过振荡系统的放大取样电路在谐振装置作用下产生声音信号。
4.6 激光雷达模块
激光雷达定位系统模块RPLIDAR A1M8 360度激光扫描测距雷达是由SLAMTEC公司开发的低成本二维激光雷达(LIDAR)解决方案。它可以实现在二维平面的12米半径范围内进行360度全方位的激光测距扫描,并产生所在空间的平面点云地图信息。这些云地图信息可用于地图测绘、机器人定位导航、物体/环境建模等实际应用中。RPLIDAR采用由SLAMTEC研发的低成本的激光三角测距系统,在各种室内环境以及无日光直接照射的室外环境下均表现出色。在机器人的应用中通过RPLIDAR A1的通讯接口(串口/RX,TX)获取RPLIDAR的扫描测距数据。RPLIDAR A1采用了激光三角测距技术,配合SLAMTEC研发的高速的视觉采集处理机构,可进行每秒高达8000次以上的测距动作。每次测距过程中,RPLIDAR A1将发射经过调制的红外激光信号,该激光信号在照射到目标物体后产生的反光将被RPLIDAR A1的视觉采集系统接受。经过嵌入在RPLIDAR A1内部的DSP处理器实时解算,被照射到的目标物体与RPLIDAR A1的距离值以及当前的夹角信息将从通讯接口中输出。
图5.RPLIDAR A1工作原理示意图
在电机机构的驱动下RPLIDAR A1的测距核心将进行顺时针旋转,从而实现对360度全方位环境的扫描测距检测,来实现机器人的导航与定位、障碍物检测、环境扫描与地图测绘。
图6.为激光雷达定位系统RPLIDAR A1扫描所得环境示意图
4.7 超声波模块
TRIG引脚负责发送超声波脉冲串。此引脚应设置为高电平10μs,此时HC-SR04将以40 kHZ发出8个周期的声波脉冲。发出声波爆发后,ECHO引脚将变为高电平。 ECHO引脚是数据引脚 - 用于进行距离测量。发送超声波脉冲串后, ECHO引脚将变为高电平,它将保持高电平,直到检测到超声波脉冲串为止,此时它将变为低电平。就是TRIG引脚给一个持续10us的高电平,触发超声波模块自动发送8个40khz的方波,发出声波后,ECHO引脚会被拉高,待接收到之后,ECHO引脚拉低,我们只要测出ECHO引脚从拉高到拉低的时间就可以知道距离了。
4.8 stm32单片机控制
STM32系列单片机由ST公司生产的专为要求高性能、低成本、低功耗的嵌入式应用设计的ARMCortex-M3内核。本系统采用的STM32属于互联型产品,具有以下标准功能:72MHZ主频,56k字节Flash,64字节SRAM,2个看门狗,多个16位定时器,80%的引脚可以作为通用/O口,以及USART、SPI等通信外设。因此,本系统采用STM32F103作为总控制器。主要从各个模块中获取信息,对获取的信息进行编码,根据需要将编码的信息通过网络发送给服务器,再通过服务器将数据分发给客户端能够控制整个系统功能的正常运行。(本项目单片机主要使用STM32F103C8TC最小系统板,通过Keil5环境进行代码编译下载)
4,9 微信小程序远程通信
为实现机器人与用户的人机交互本项目主要采用微信小程序开发软件与前端web网页作为上位机下发控制机器人命令,微信小程序的编程主要使用的是js/vue编程语言,上位机与下位机的通信主要运用了阿里云服务器与MQTT网络协议和OneNET物联网平台。
首先需要在阿里云服务器中先部署好MQTT网络协议,下位机上发数据作为双向数据传输在32单片机中运用WIFI模块获取网络,通过OneNET物联网连接上MQTT网络协议中的IP地址\TCP端口和订阅设备的具体地址(这里地址指的是MQTT网络协议中的自定义的设备目录地址,订阅设备是作为stm32单片机与微信小程序接受数据与发送数据的中转站),32单片机通过已连接好的WIFI模块中的串口发送数据,从而发送到MQTT网络协议的订阅设备地址中,能够将下位机的温湿度、安全信息、空气质量、蜂鸣器报警信息发送到上位机(用户客户端/微信小程序/web网页)。上位机的双向数据传输,需要在微信小程序中安装好MQTT网络协议插件,同样也是通过访问MQTT网络协议中的IP地址与端口连接好下位机已连接的订阅设备地址来获取32单片机中WIFI向订阅设备地址发送的数据,同时通过用户界面控制向MQTT网络发送控制命令,实现用户与机器人的交互功能。
图7.微信小程序登录和控制与显示界面
五、项目框图
5.1 硬件框图
5.2 软件框图
六、源码展示:
6.1 K210摄像头源代码
##在导入新的模型时,仅需要增加kpu.load函数,anchor数据,kpu.init_yolo2函数,kpu.run_yolo2函数即可##
"""
需要修改的部分介绍
1,kpu.load函数:将模型进行导入
参数一:模型文件路径,模型地址默认加上/sd/,即sd卡根目录下的hhh.kmodel文件路径为/sd/hhh.kmodel2,anchor:anchor中的数据为模型训练物体识别生成的Anchors数据3,kpu.init_yolo3:初始化yolo3卷积网络
参数一kpu.load函数返回值。
参数二:当k210获取到的图片和模型相似度大于参数二时,则认为是该模型,取值0~1。
参数三:box_iou 门限, 为了防止同一个物体被框出多个框,当在同一个物体上框出了两个框,这两个框的交叉区域占两个框总占用面积的比例 如果小于这个值时, 就取其中概率最大的一个框
参数四:为anchor中数据长度/2。
参数五:anchor4,kpu.run_yolo3函数:用于对比模型和图片
参数一:kpu.load函数返回值
参数二:摄像头获取到的图片5,classess变量:当一个模型中存在多个种类时,该变量用于存储不同的种类名称,存储顺序要与在yolo3中获取种类名称的顺序相同
例:在yolo3中获取的种类名称为close,open所以classess变量为classes=['fire'],之后通过classess[i.classid()]输出对应的种类
"""
import sensor,image,lcd,time
import KPU as kpu
from machine import UART
from fpioa_manager import fmfm.register(9, fm.fpioa.UART1_TX, force=True)
fm.register(10, fm.fpioa.UART1_RX, force=True)uart_A = UART(UART.UART1, 115200, 8, 1, 0, timeout=1000, read_buf_len=4096)lcd.init(freq=15000000)
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)sensor.set_windowing((224, 224))
sensor.set_brightness(2)sensor.run(1)
clock = time.clock()
classes = ['fire']
task = kpu.load("/sd/fire.kmodel")
anchor = (1.048, 1.5335, 1.5987, 2.0913, 1.674, 2.8035, 2.2209, 2.6764, 2.2859, 3.2013)
a = kpu.init_yolo2(task, 0.5, 0.3, 5, anchor)
while(True):clock.tick()img = sensor.snapshot()code = kpu.run_yolo2(task, img)if code:for i in code:a=img.draw_rectangle(i.rect())a = lcd.display(img)for i in code:lcd.draw_string(i.x(), i.y(), classes[i.classid()], lcd.RED, lcd.WHITE)lcd.draw_string(i.x(), i.y()+12, '%f1.3'%i.value(), lcd.RED, lcd.WHITE)if(classes[i.classid()] == 'fire' and i.value()>=0.5):uart_A.write(b'4')time.sleep_ms(20)else:a = lcd.display(img)
a = kpu.deinit(task)
6.2 微信小程序源码
<template name="09f318ce"><view class="_div data-v-4e39f484"><view class="_div data-v-4e39f484 header"><view wx:if="{{isLogin}}" class="_div data-v-4e39f484"><view class="_div data-v-4e39f484 header-title">请登录</view><view class="_div data-v-4e39f484 header-info">Please Login Your Account</view></view><view wx:else class="_div data-v-4e39f484"><view class="_div data-v-4e39f484 header-title">请注册</view><view class="_div data-v-4e39f484 header-info">Please Register Your Account</view></view></view><view class="_div data-v-4e39f484 body"><view class="_div data-v-4e39f484 login-form"><van-field placeholder="请输入用户名" value="{{inputUserName}}" bindchange="handleProxy" data-eventid="{{'0'}}" data-comkey="{{$k}}" class="_van-field data-v-4e39f484"></van-field><van-field type="password" placeholder="请输入密码" value="{{inputPassWord}}" bindchange="handleProxy" data-eventid="{{'1'}}" data-comkey="{{$k}}" class="_van-field data-v-4e39f484"></van-field><view wx:if="{{!isLogin}}" class="_div data-v-4e39f484"><van-field placeholder="请输入找回密码绑定手机号" value="{{inputContect}}" bindchange="handleProxy" data-eventid="{{'2'}}" data-comkey="{{$k}}" class="_van-field data-v-4e39f484"></van-field></view></view><van-button slot="button" round block color="#1296db" bindtap="handleProxy" data-eventid="{{'3'}}" data-comkey="{{$k}}" class="_van-button data-v-4e39f484">{{isLogin?"登录":"注册"}}</van-button><view class="_div data-v-4e39f484 other-option"><view bindtap="handleProxy" data-eventid="{{'4'}}" data-comkey="{{$k}}" class="_div data-v-4e39f484"><label class="_span data-v-4e39f484">{{isLogin?"注册账户":"登录账户"}}</label></view> <label style="margin: 0 30px" class="_span data-v-4e39f484">|</label><view bindtap="handleProxy" data-eventid="{{'5'}}" data-comkey="{{$k}}" class="_div data-v-4e39f484"><label class="_span data-v-4e39f484">忘记密码</label></view></view><view class="_div data-v-4e39f484 copyright-wrapper"><label class="_span data-v-4e39f484 copyright">Power By XBMZDX-DZSJ</label></view><view class="_div data-v-4e39f484"><van-dialog use-slot title="找回密码校验" show="{{showFindPW}}" show-cancel-button transition="fade" bindconfirm="handleProxy" bindcancel="handleProxy" data-eventid="{{'7'}}" data-comkey="{{$k}}" class="_van-dialog data-v-4e39f484"><van-field label="手机号" title-width="60px" placeholder="请输入找回密码绑定手机号" value="{{inputContect}}" bindchange="handleProxy" data-eventid="{{'6'}}" data-comkey="{{$k}}" class="_van-field data-v-4e39f484"></van-field></van-dialog><van-dialog use-slot title="重置密码" show="{{showResetPW}}" show-cancel-button transition="fade" bindconfirm="handleProxy" bindcancel="handleProxy" data-eventid="{{'9'}}" data-comkey="{{$k}}" class="_van-dialog data-v-4e39f484"><van-field label="用户名" title-width="60px" value="{{inputUserName}}" readonly class="_van-field data-v-4e39f484"></van-field><van-field type="password" label="新密码" title-width="60px" placeholder="请输入新密码" value="{{inputPassWord}}" bindchange="handleProxy" data-eventid="{{'8'}}" data-comkey="{{$k}}" class="_van-field data-v-4e39f484"></van-field></van-dialog><van-toast id="van-toast" class="_van-toast data-v-4e39f484"></van-toast></view></view></view>
</template>
6.3 一号单片机源代码(主要用于网络通信)
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "timer.h"
#include "stdio.h"
#include "Beep.h"
//网络设备
#include "esp8266.h"
//网络协议层
#include "onenet.h"u8 Laji=9; //垃圾类型
u8 Ljtzt=1; //垃圾桶工作状态
u8 Yhljt_Status; //有害垃圾桶舵机状态
u8 Khsljt_Status; //可回收垃圾桶状态
u8 Ycljt_Status; //厨余垃圾桶状态
u8 BEE; //BEEP工作状态int main(void){ const char *topics[] = {"home/garden/sub2"};const char devPubTopic[] = {"home/garden/fountain2"};char PUB_BUF[256];unsigned short timeCount = 0; //发送间隔变量unsigned char *dataPtr = NULL;Usart1_Init(115200); //debug串口调试助手delay_init(); //延时函数初始化 LED_Init(); //初始化与LED连接的硬件接口UsartPrintf(USART1, " LED初始化成功\n");delay_ms(20);UsartPrintf(USART1, "串口1调试成功\n");Usart2_Init(115200); //esp8266串口调试UsartPrintf(USART1, "串口2调试成功\n");ESP8266_Init(); //初始化ESP8266UsartPrintf(USART1, "ESP8266初始化成功\n");while(OneNet_DevLink()) //接入OneNET/*********灯闪烁表示接入成功***********/UsartPrintf(USART1, "OneNet接入成功\n");GPIO_ResetBits(GPIOC,GPIO_Pin_13); delay_ms(500);GPIO_SetBits(GPIOC,GPIO_Pin_13);delay_ms(500);GPIO_ResetBits(GPIOC,GPIO_Pin_13); delay_ms(500); GPIO_SetBits(GPIOC,GPIO_Pin_13);//LED1输出低OneNet_Subscribe(topics, 1);while(1){ /************************************************************/if(++timeCount >=80) //发送间隔3s{UsartPrintf(USART_DEBUG, "OneNet_Publish\r\n");sprintf(PUB_BUF,"{\"Ljtzt\":%d,\"Beep_Status\":%d,\"Yhljt_Status\":%d,\"Khsljt_Status\":%d,\"Ycljt_Status\":%d,\"Laji\":%d}",Ljtzt,BEE,Yhljt_Status,Khsljt_Status,Ycljt_Status,Laji);OneNet_Publish(devPubTopic, PUB_BUF); //将PUB_BUF数据发送到MQTT服务器中timeCount = 0;ESP8266_Clear(); //清空ESP8266缓存}dataPtr = ESP8266_GetIPD(3);if(dataPtr != NULL)OneNet_RevPro(dataPtr);} }
6.4 二号单片机源代码(主要用于外设控制)
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "timer.h"
#include "oled.h"
#include "stdio.h"
#include "pwm_config.h"
#include "hc.h"
#include "obj_duo.h"
#include "fire.h"
u8 xunluo = 0;
float length;
float length1;
float length2;
float Length;
int time = 0;
int sb = 0;
u8 distan;//激光雷达测距int main(void){ float length; //超声波测距Usart1_Init(115200); //debug串口调试助手Usart2_Init(115200); //k210摄像头delay_init(); //延时函数初始化 LED_Init(); //初始化与LED连接的硬件接口pwm_config(); //PWM初始化UsartPrintf(USART1, " PWM初始化成功\n");Hcsr04Init(); //超声波初始化UsartPrintf(USART1, "超声波初始化成功\n");SB_Init();delay_ms(20);UsartPrintf(USART1, "串口1调试成功\n");
// TIM3_Int_Init(1999,7199); //中断定时器3初始化GENERAL_TIM_Init();UsartPrintf(USART1, "舵机初始化成功\n");
// fire1();
// fire2();
// fire3();
// fire4();
// fire5();UsartPrintf(USART1, "五路火焰传感器初始化成功\n");
// LED1=!LED1;
// delay_ms(500);
// LED1=!LED1;
// delay_ms(500);
// LED1=!LED1;
// delay_ms(500); GPIO_SetBits(GPIOC,GPIO_Pin_13);//LED1输出低UsartPrintf(USART1,"距离为:%.3fcm\n",length);LED1=!LED1;delay_ms(500);LED1=!LED1;delay_ms(500);LED1=!LED1; delay_ms(500); LED1=!LED1;delay_ms(500);LED1=!LED1;delay_ms(500);LED1=!LED1; delay_ms(500); TIM_SetCompare1(GENERAL_TIM , 15);delay_ms(500); xunluo = 0;while(1){LED1=1;Speed_control(0,0,0,0); if(FIRE1==1){LED1=0;delay_ms(100); xunluo = 0;pwm_left(200);delay_ms(80); UsartPrintf(USART1,"2");}if(FIRE2==1){LED1=0;delay_ms(100); xunluo = 0;pwm_left(200);delay_ms(30); UsartPrintf(USART1,"2");}if(FIRE3==1 ){LED1=0;delay_ms(100); xunluo = 0;UsartPrintf(USART1,"2");sb=1;}if(FIRE4==1 ){LED1=0;delay_ms(100); xunluo = 0;pwm_right(200);delay_ms(100); UsartPrintf(USART1,"2");}if(FIRE5==1 ){LED1=0;delay_ms(100); xunluo = 0;pwm_right(200);delay_ms(150); UsartPrintf(USART1,"2");}if(YAN6==0 ){LED1=0;delay_ms(100); xunluo = 0;UsartPrintf(USART1,"3");}if(sb){SB1 = 0;}while(xunluo){ time++;SB1 = 1;length = Hcsr04GetLength();// UsartPrintf(USART1,"距离为:%.3fcm\n",length);if(FIRE1==1||FIRE2==1||FIRE3==1||FIRE4==1||FIRE5==1||YAN6==0){xunluo = 0;break;}pwm_straight(200);if(time == 50){UsartPrintf(USART1,"1");time =0;}if(length<50||distan<50){Speed_control(0,0,0,0); delay_ms(200);pwm_back(200);delay_ms(300);Speed_control(0,0,0,0); delay_ms(200);TIM_SetCompare1(GENERAL_TIM , 25); //超声波转向左边delay_ms(100);delay_ms(100); delay_ms(100); delay_ms(300); length1 = Hcsr04GetLength(); delay_ms(20);length1 = Hcsr04GetLength(); //获取左边距离// UsartPrintf(USART1,"距离111为:%.3fcm\n",length1);TIM_SetCompare1(GENERAL_TIM , 5); //超声波转向右边delay_ms(100); delay_ms(100); delay_ms(100); delay_ms(300); length2 = Hcsr04GetLength();delay_ms(20);length2 = Hcsr04GetLength(); //获取右边距离// UsartPrintf(USART1,"距离222为:%.3fcm\n",length2);TIM_SetCompare1(GENERAL_TIM , 15); //转向原位delay_ms(100); delay_ms(100); delay_ms(300); length2 = Hcsr04GetLength(); if(length1>length2){pwm_right(200);delay_ms(1200);}else {pwm_left(200);delay_ms(1200);}length = 100;}} }
}
七、实物展示
八、成本核算:
名称 | 规格 | 数量 | 价格/元 | 总价/元 |
K210摄像头 | 个 | 1 | 380/个 | 380 |
稳压模块 | 个 | 2 | 26/个 | 52 |
温湿度传感器 | 个 | 1 | 12/个 | 12 |
超声波传感器 | 个 | 1 | 13/个 | 13 |
五路火焰传感器 | 个 | 1 | 32/个 | 32 |
烟雾传感器模块 | 个 | 1 | 40/个 | 40 |
车模 | 个 | 1 | 290/个 | 290 |
DHT11模块 | 个 | 1 | 10/个 | 10 |
STM32C8T6单片机 | 个 | 2 | 21/个 | 42 |
HC-SR04模块 | 个 | 1 | 12/个 | 12 |
OLED显示屏 | 个 | 1 | 20/个 | 20 |
水泵 | 个 | 1 | 23/个 | 23 |
激光雷达 | 个 | 1 | 600/个 | 600 |
源码资料链接 :
毕设&大创&立项&竞赛-基于AI技术的多功能消防机器人(完整工程资料源码).rar_MSPM0资源-CSDN文库
资源详情:
PCB原理图:
用户使用手册:
总结:
当前科技发展速度越来越快,智能机器人运用范围也越来越普及。且近年来,我国消防机器人的研制工作得到了政府有关部门的支持,因此在消防事业发展过程中机器人的发展前景非常广阔。我国研制和开发消防机器人提高了我国消防现代化的水平,为减少日常生活中的细微细节酿成的大火造成的人身伤亡,但我国消防机器人在室内无线智能领域与技术发达国家还存在着差距,因此消防机器人的提升空间巨大。
火灾是生活中最常见和最容易发生的灾害,火灾的发生对社会有很大的伤害,危害性是人类无法估计的。我国近年来频繁发生火灾等安全事故,截至2021年我国共接报火灾数量74.8万起,同比增长196.83%,造成直接经济损失67.5亿元,同比增长68.33%。因此消防机器人的出现,无疑保障了人们的人身安全和财产安全,因此未来消防机器人的市场需求前景广阔。
相关文章:

【毕设级项目】基于AI技术的多功能消防机器人(完整工程资料源码)
基于AI技术的多功能消防机器人演示效果 竞赛-基于AI技术的多功能消防机器人视频演示 前言: 随着“自动化、智能化”成为数字时代发展的关键词,机器人逐步成为社会经济发展的重要主体之一,“机器换人”成为发展的全新趋势和时代潮流。在可预见…...

【一】【设计模式】类关系UML图
1. 继承(Generalization) 继承是对象间的一种层次关系,允许子类继承并扩展父类的功能。 UML线:带有空心箭头的直线,箭头指向基类(父类)。 class Parent {public void parentMethod() {System.…...
【DevOps基础篇】容器化架构基础设施监控方案
【DevOps基础篇】容器化架构基础设施监控方案 目录 【DevOps基础篇】容器化架构基础设施监控方案要监视什么不同监控系统方案比较1. Datadog2. Prometheus3. ELK(Elasticsearch、Logstash、Kibana)4. Sysdig5. 自行打造!如何选择总结推荐超级课程: Docker快速入门到精通 当…...

【QT】文件流操作(QTextStream/QDataStream)
文本流/数据流(二级制格式) 文本流 (依赖平台,不同平台可能乱码)涉及文件编码 #include <QTextStream>操作的都是基础数据类型:int float string //Image Qpoint QRect就不可以操作 需要下面的 …...

CentOS 7 devtoolset编译addressSanitizer版本失败的问题解决
在我的一个Cent OS7开发环境中,按https://yeyongjin.blog.csdn.net/article/details/134178420的方法升级GCC版本到8.3.1。 这两天,要用Google的addressSanitizer检验内存问题,加上编译参数后,却发现编译不通过。configure时直接退…...

ubuntu2004桌面系统英伟达显卡驱动安装方法
#如何查看显卡型号 lspci | grep -i vga#----output------ 01:00.0 VGA compatible controller: NVIDIA Corporation Device 1f06 (rev a1)根据 Device 后的 值 进入网站查询 pci-ids.ucw.cz/mods/PC/10de?actionhelp?helppci #根据显卡型号,下载对应系统的驱动…...
Java通过Excel批量上传数据!!!
一、首先在前端写一个上传功能。 <template><!-- 文件上传 --><el-upload class"upload-demo" drag action"" :on-change"onChange" :auto-upload"false"><el-icon class"el-icon--upload"><up…...

【PyQT/Pysider】控件背景渐变
默认渐变配色说明 background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(255, 178, 102, 255), stop:0.55 rgba(235, 148, 61, 255), stop:0.98 rgba(0, 0, 0, 255), stop:1 rgba(0, 0, 0, 0));这段样式表使用了qlineargradient函数来创建…...
ChatGPT-4 VS 文心一言4.0
在线体验 地址(含 gpt 3.5 / 4.0,文心 3.5 / 4.0):https://chat.tool4j.com 点击访问 文心一言和ChatGPT-4都是非常强大的自然语言处理模型,它们都能够在对话系统和其他NLP应用中发挥巨大的作用。然而,它们…...
MYSQL------从概述到DQL
数据库(数据管理,数据存储的仓库) 数据库管理系统(操纵和管理数据库的大型软件) SQL是操作关系型的编程语言,是一套标准 MySQL下载安装完成以后,可以进行启动和停止操作,对于启动和停…...
MATLAB算法实战应用案例精讲-【图像处理】图像识别(基础篇)(二)
目录 数字图像处理基本知识 传统图像处理方法进行瑕疵检测 传统算法方向的选择...

Leetcode 3.12
leetcode hot 100 链表1.两两交换链表中的节点2.随机链表的复制3.排序链表 链表 1.两两交换链表中的节点 两两交换链表中的节点 1.必须要设置一个dummy (temp) 结点2.保存第二个节点3.先让第一个节点指向第三个节点4.再让第二个节点指向第一个节点5.最后让dummy指向第二个节点…...
【天池课堂】零基础入门数据挖掘-课程汇总
写在前面: 如果你现在很迷茫,但是又对数据挖掘感兴趣,建议先看看以下两个视频直播,两位大佬亲身讲述自己和数据挖掘的前世今生。 《如何入门数据挖掘竞赛》 鱼遇雨欲语与余。天池明星选手,武汉大学硕士,天…...

表单进阶(3)-上传文件和隐藏字段
上传文件:<input type"file"> 隐藏字段:<input type"hidden" name"" id"" value"带给后端的信息"> 禁用disabled:<button disabled"disabled">注册</bu…...
LLM(大语言模型)常用评测指标-MAP@R
MAPR (Mean Average Precision at R) 是一种用于评估信息检索系统或排序模型效果的评价指标。它特别适用于那些返回一组相关结果的情况,例如搜索引擎或推荐系统。这里的“R”代表返回的相关结果的数量。MAPR 考虑了结果的排名和相关性两个因素。 计算方法 计算平…...

腾讯面经学习笔记
💖 前言 👩🏫 参考地址 💖 操作系统 1. 进程和线程的区别 本质区别 进程是操作系统资源分配的基本单位线程是任务调度和执行的基本单位 开销方面 每个进程都有独立的代码和数据空间(程序上下文)&#…...
北京某中厂凉经
3月12号 大二想着找一份暑假面试,然后就海投。北京某上市公司给了面试,这也是我的第一个面试,听面试官最后的话大概是挂了。 大概回忆一下当时面试的部分内容吧,虽然已经过去一两小时的,而且我属于那种一面完就忘的差…...

离线数仓(五)【数据仓库建模】
前言 今天开始正式数据仓库的内容了, 前面我们把生产数据 , 数据上传到 HDFS , Kafka 的通道都已经搭建完毕了, 数据也就正式进入数据仓库了, 解下来的数仓建模是重中之重 , 是将来吃饭的家伙 ! 以及 Hive SQL 必须熟练到像喝水一样 ! 第1章 数据仓库概述 1.1 数据仓库概念 数…...
python | 类与对象
在 Python 中,我们用关键字 class 来定义类: class Player:pass Player 类中只有一条语句 pass,这是 Python 中的特殊语句,没有实际含义。 Python 在执行到它时也什么都不会做。不过它能够保证结构的完整性。例如,我…...

基于Qt 和python 的自动升级功能
需求: 公司内部的一个客户端工具,想加上一个自动升级功能。 服务端: 1,服务端使用python3.7 ,搭配 fastapi 和uvicorn 写一个简单的服务,开出一个get接口,用于客户端读取安装包的版本&#…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...

C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...

Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...

Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
leetcodeSQL解题:3564. 季节性销售分析
leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...