基于单片机的煤气泄漏检测报警装置设计
一、项目介绍
煤气泄漏是一种常见的危险情况,可能导致火灾、爆炸和人员伤亡。为了及时发现煤气泄漏并采取相应的安全措施,设计了一种基于单片机的煤气泄漏检测报警装置。
主控芯片采用STM32F103C8T6作为主控芯片,具有强大的计算和控制能力。煤气检测传感器选择了MQ-5,它能够检测到环境中的煤气浓度,并将其转换为电信号输出。装置通过读取传感器输出的模拟信号,并经过ADC转换获得相应的数字值,实时监测煤气浓度。
当检测到煤气浓度超过设定的安全阈值时,装置会触发报警机制。通过控制蜂鸣器发出高频报警声,吸引人的注意并提醒危险情况。同时,装置会控制LED灯光闪烁,以视觉方式提醒用户。这样的多重报警方式可以在不同环境中有效地引起人们的警觉。
为了进一步提高报警的及时性和可靠性,还集成了SIM800C模块,用于发送报警短信给指定的联系人。当煤气浓度超标时,装置会通过SIM800C模块发送预先设定的报警短信,通知相关人员及时采取措施。
通过以上设计,基于单片机的煤气泄漏检测报警装置能够实时监测环境中的煤气浓度,并在检测到异常情况时通过声光报警和短信通知提醒用户。这样的装置可以广泛应用于家庭、工业和商业环境中,为人们的生命财产安全提供有效的保障。
二、硬件选型
在这个设计中,选择了下面的硬件来实现煤气泄漏检测报警装置。
【1】主控芯片:STM32F103C8T6。该芯片是一款强大的低功耗微控制器,具有丰富的外设和良好的性能。它集成了多个通用输入输出引脚、模数转换器 (ADC)、定时器和串行接口等功能,适合用于各种嵌入式应用。
【2】煤气检测传感器:MQ-5。MQ-5是一种常见的煤气传感器,可检测到液化石油气(LPG)、天然气和甲烷等可燃气体。它基于半导体气敏材料,当检测到目标气体浓度超过设定阈值时,其电阻值发生变化。通过测量电阻值的变化,可以判断煤气的浓度是否超标。
【3】蜂鸣器:用于发出报警声音,提醒人们注意。选择合适的蜂鸣器需要考虑其音量大小、工作电压和驱动方式等因素。
【4】LED灯:用于提醒人们注意并指示报警状态。选择合适的LED需要考虑其亮度、工作电压和颜色等因素。
【5】SIM800C模块:用于发送报警短信。SIM800C是一款支持GSM/GPRS通信的模块,可以通过AT指令与主控芯片进行通信。它具有较小的体积、低功耗和稳定的性能,适合物联网应用中的短信通信需求。
三、系统设计思路
软件设计思路:
【1】初始化:对STM32F103C8T6单片机和外设进行初始化设置,包括引脚配置、时钟设置等。
【2】煤气检测:使用ADC模块读取MQ-5传感器的模拟信号,并转换为相应的数字值。
【3】煤气浓度判断:根据传感器的特性曲线,将读取到的数字值转换为实际的煤气浓度。
【4】报警判断:判断煤气浓度是否超过设定的安全阈值。
【5】报警处理:
- 控制蜂鸣器发出报警声。
- 控制LED灯光闪烁。
- 使用SIM800C模块发送报警短信给指定的联系人。
【6】主循环:在主循环中不断进行煤气检测和报警判断,保持系统的实时监测和报警功能。
伪代码示例:
初始化:初始化STM32F103C8T6单片机和外设设置主循环:while (true) {煤气检测();煤气浓度判断();报警判断();延时一段时间;}煤气检测:读取MQ-5传感器的模拟信号;将模拟信号转换为数字值;煤气浓度判断:根据传感器的特性曲线,将数字值转换为实际的煤气浓度;报警判断:if (煤气浓度超过安全阈值) {报警处理();}报警处理:控制蜂鸣器发出报警声;控制LED灯光闪烁;使用SIM800C模块发送报警短信给指定的联系人;
四、代码实现
4.1 主程序
#include "stm32f10x.h"// 定义蜂鸣器控制引脚和LED控制引脚
#define BUZZER_PIN GPIO_Pin_0
#define BUZZER_PORT GPIOA#define LED_PIN GPIO_Pin_1
#define LED_PORT GPIOA// 定义煤气传感器控制引脚
#define GAS_SENSOR_PIN GPIO_Pin_2
#define GAS_SENSOR_PORT GPIOA// 定义SIM800C模块的发送引脚
#define SIM800C_SEND_PIN GPIO_Pin_3
#define SIM800C_SEND_PORT GPIOA// 定义报警阈值
#define THRESHOLD 1000// 声明函数原型
void GPIO_Init(void);
void ADC_Init(void);
void Buzzer_Alarm(void);
void LED_Flash(void);
void Send_SMS(void);int main(void)
{// 初始化GPIO和ADCGPIO_Init();ADC_Init();while (1){// 进行煤气浓度检测u16 gasValue = ADC_GetConversionValue(ADC1);// 如果煤气浓度超过阈值,则触发报警if (gasValue > THRESHOLD){Buzzer_Alarm();LED_Flash();Send_SMS();}}
}// GPIO初始化函数
void GPIO_Init(void)
{// 打开GPIO时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitTypeDef gpioInitStruct;// 配置蜂鸣器引脚为推挽输出gpioInitStruct.GPIO_Pin = BUZZER_PIN;gpioInitStruct.GPIO_Mode = GPIO_Mode_Out_PP;gpioInitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(BUZZER_PORT, &gpioInitStruct);// 配置LED引脚为推挽输出gpioInitStruct.GPIO_Pin = LED_PIN;gpioInitStruct.GPIO_Mode = GPIO_Mode_Out_PP;gpioInitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(LED_PORT, &gpioInitStruct);// 配置煤气传感器引脚为模拟输入gpioInitStruct.GPIO_Pin = GAS_SENSOR_PIN;gpioInitStruct.GPIO_Mode = GPIO_Mode_AIN;gpioInitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GAS_SENSOR_PORT, &gpioInitStruct);// 配置SIM800C模块的发送引脚为推挽输出gpioInitStruct.GPIO_Pin = SIM800C_SEND_PIN;gpioInitStruct.GPIO_Mode = GPIO_Mode_Out_PP;gpioInitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(SIM800C_SEND_PORT, &gpioInitStruct);
}// ADC初始化函数
void ADC_Init(void)
{// 打开ADC时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);ADC_InitTypeDef adcInitStruct;// ADC配置adcInitStruct.ADC_Mode = ADC_Mode_Independent;adcInitStruct.ADC_ScanConvMode = DISABLE;adcInitStruct.ADC_ContinuousConvMode = ENABLE;adcInitStruct.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;adcInitStruct.ADC_DataAlign = ADC_DataAlign_Right;adcInitStruct.ADC_NbrOfChannel = 1;ADC_Init(ADC1, &adcInitStruct);// 配置ADC通道ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 1, ADC_SampleTime_55Cycles5);// 打开ADCADC_Cmd(ADC1, ENABLE);// 开始ADC转换ADC_SoftwareStartConvCmd(ADC1, ENABLE);
}// 触发蜂鸣器报警
void Buzzer_Alarm(void)
{GPIO_SetBits(BUZZER_PORT, BUZZER_PIN); // 打开蜂鸣器Delay(1000); // 延时一段时间GPIO_ResetBits(BUZZER_PORT, BUZZER_PIN); // 关闭蜂鸣器
}// LED闪烁提醒
void LED_Flash(void)
{for (int i = 0; i < 10; i++){GPIO_SetBits(LED_PORT, LED_PIN); // 打开LEDDelay(500); // 延时一段时间GPIO_ResetBits(LED_PORT, LED_PIN); // 关闭LEDDelay(500); // 延时一段时间}
}// 发送报警短信
void Send_SMS(void)
{// 这里编写与SIM800C模块通信的代码,发送报警短信
}
4.2 SIM800C代码
#include "stm32f10x.h"
#include <stdio.h>
#include <string.h>// 定义SIM800C模块的串口引脚
#define SIM800C_USART USART2
#define SIM800C_USART_GPIO GPIOA
#define SIM800C_USART_TX_PIN GPIO_Pin_2
#define SIM800C_USART_RX_PIN GPIO_Pin_3// 定义发送缓冲区和接收缓冲区的大小
#define TX_BUFFER_SIZE 128
#define RX_BUFFER_SIZE 128// 声明全局变量
char tx_buffer[TX_BUFFER_SIZE]; // 发送缓冲区
char rx_buffer[RX_BUFFER_SIZE]; // 接收缓冲区
uint8_t rx_index = 0; // 接收缓冲区索引// 函数原型
void USART2_Init(void);
void USART2_SendString(const char* string);
void USART2_IRQHandler(void);
void Send_AT_Command(const char* at_command);
void Send_SMS(void);int main(void)
{USART2_Init();while (1){// 在主循环中调用Send_SMS函数即可触发发送短信}
}// 初始化USART2
void USART2_Init(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE); // 打开GPIOA和AFIO时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); // 打开USART2时钟GPIO_InitTypeDef gpioInitStruct;USART_InitTypeDef usartInitStruct;NVIC_InitTypeDef nvicInitStruct;// 配置USART2的GPIO引脚gpioInitStruct.GPIO_Pin = SIM800C_USART_TX_PIN;gpioInitStruct.GPIO_Mode = GPIO_Mode_AF_PP;gpioInitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(SIM800C_USART_GPIO, &gpioInitStruct);gpioInitStruct.GPIO_Pin = SIM800C_USART_RX_PIN;gpioInitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(SIM800C_USART_GPIO, &gpioInitStruct);// 配置USART2usartInitStruct.USART_BaudRate = 115200;usartInitStruct.USART_WordLength = USART_WordLength_8b;usartInitStruct.USART_StopBits = USART_StopBits_1;usartInitStruct.USART_Parity = USART_Parity_No;usartInitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;usartInitStruct.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;USART_Init(SIM800C_USART, &usartInitStruct);// 配置USART2中断nvicInitStruct.NVIC_IRQChannel = USART2_IRQn;nvicInitStruct.NVIC_IRQChannelPreemptionPriority = 0;nvicInitStruct.NVIC_IRQChannelSubPriority = 0;nvicInitStruct.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&nvicInitStruct);// 启动USART2接收中断USART_ITConfig(SIM800C_USART, USART_IT_RXNE, ENABLE);// 启动USART2USART_Cmd(SIM800C_USART, ENABLE);
}// 发送字符串到USART2
void USART2_SendString(const char* string)
{uint16_t length = strlen(string);for (uint16_t i = 0; i < length; i++){USART_SendData(SIM800C_USART, string[i]);while (USART_GetFlagStatus(SIM800C_USART, USART_FLAG_TXE) == RESET);}
}// USART2中断处理函数
void USART2_IRQHandler(void)
{if (USART_GetITStatus(SIM800C_USART, USART_IT_RXNE) != RESET){char receivedData = USART_ReceiveData(SIM800C_USART);rx_buffer[rx_index++] = receivedData;// 处理接收到的数据// ...USART_ClearITPendingBit(SIM800C_USART, USART_IT_RXNE);}
}// 发送AT指令
void Send_AT_Command(const char* at_command)
{memset(rx_buffer, 0, RX_BUFFER_SIZE); // 清空接收缓冲区rx_index = 0;USART2_SendString(at_command);// 等待模块返回数据while (strncmp(rx_buffer, "OK", 2) != 0 && strncmp(rx_buffer, "ERROR", 5) != 0){// 延时一段时间Delay(10);}// 处理模块返回的数据// ...
}// 发送短信
void Send_SMS(void)
{// 发送AT指令设置短信模式Send_AT_Command("AT+CMGF=1\r\n");// 发送AT指令设置短信收件人和内容Send_AT_Command("AT+CMGS=\"+861**********\"\r\n");Send_AT_Command("Hello, this is a test message.\r\n");// 发送短信结束标志(Ctrl+Z)USART2_SendString("\x1A");
}
五、总结
本项目设计了一个基于单片机的煤气泄漏检测报警装置,通过使用STM32F103C8T6作为主控芯片和MQ-5煤气传感器进行煤气检测,有效地提醒用户煤气泄漏的危险。通过控制蜂鸣器和LED灯的报警机制,以及使用SIM800C模块发送报警短信,用户可以及时采取措施来避免潜在的危险。这个项目结合了硬件设计和嵌入式软件开发的知识,为用户提供了一个可靠的煤气泄漏检测报警解决方案。
相关文章:
基于单片机的煤气泄漏检测报警装置设计
一、项目介绍 煤气泄漏是一种常见的危险情况,可能导致火灾、爆炸和人员伤亡。为了及时发现煤气泄漏并采取相应的安全措施,设计了一种基于单片机的煤气泄漏检测报警装置。 主控芯片采用STM32F103C8T6作为主控芯片,具有强大的计算和控制能力。…...
[导弹打飞机H5动画制作] 导弹每次飞行的随机路线制作
技术核心提示: 第一步:检测引导层插件是否具备,如果没有手工添加: createjs.MotionGuidePlugin.install(); 第二步:增加全局变量: var fValue=0; var iOddEven =0; var missileObj=null; 第三步:填写 第一帧 代码: if (missileObj)stage.removeChild(missileObj);missile…...
OpenCV实现FAST算法角点检测 、ORB算法特征点检测
目录 1 Fast算法 1.1 Fast算法原理 1.2 实现办法 1.2.1 机器学习的角点检测器 1.2.2 非极大值抑制 1.3 代码实现 1.4 结果展示 2 ,ORB算法 2.1代码实现 2.2 结果展示 1 Fast算法 1.1 Fast算法原理 1.2 实现办法 1.2.1 机器学习的角点检测器 1.2.2 …...
【Unity的 Built-in 渲染管线下实现好用的GUI模糊效果_Blur_案例分享(内附源码)】
CGPROGRAM实现好用的GUI模糊效果 实现Blur模糊方式1C#代码如下方式1_Shader代码如下实现Blur模糊方式2方式2_Shader如下实现Blur模糊方式1 其他的模糊效果,在这一篇。 效果如图: 新建一个C#文件,命名为"CommandBlur",打开C#,删除内容,复制粘贴下面的代码:…...
AR智能眼镜:提升现场服务技能、效率与盈利能力的利器(一)
随着技术的不断进步,现场服务组织正朝着远程支持转变,用以解决技能差距和生产力问题,提高员工培训和操作效率,同时为企业提高利润率,创造竞争优势。 本文将探讨增强现实(AR)、辅助现实…...
ChatGPT 在机器学习中的应用
办公室里一个机器人坐在人类旁边,Artstation 上的流行趋势,美丽的色彩,4k,充满活力,蓝色和黄色, DreamStudio出品 一、介绍 大家都知道ChatGPT。它在解释机器学习和深度学习概念方面也非常高效,…...
【JavaEE】锁策略
文章目录 前言1. 乐观锁和悲观锁2. 重量级锁和轻量级锁3. 自旋锁和挂起等待锁4. 公平锁和非公平锁5. 可重入锁和非可重入锁6. 读写锁Java synchronized 分别对应哪些锁策略1. 乐观锁和悲观锁2. 重量级锁和轻量级锁3. 自旋锁和挂起等待锁4. 公平锁和非公平锁5. 可重入锁和非可重…...
在 SDXL 上用 T2I-Adapter 实现高效可控的文生图
T2I-Adapter 是一种高效的即插即用模型,其能对冻结的预训练大型文生图模型提供额外引导。T2I-Adapter 将 T2I 模型中的内部知识与外部控制信号结合起来。我们可以根据不同的情况训练各种适配器,实现丰富的控制和编辑效果。 同期的 ControlNet 也有类似的…...
Python分支结构和循环结构
嗨喽~大家好呀,这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 一.分支结构 分支结构是根据判断条件结果而选择不同向前路径的运行方式,分支结构分为:单分支,二分支和多分支。 1࿰…...
Unity调用API函数对系统桌面和窗口截图
Unity3D调用WINAPI函数对系统窗口截图 引入WINAPI函数调用WINAPI函数进行截图使用例子 引入WINAPI函数 using System; using System.Collections; using System.Runtime.InteropServices; using System.Drawing;[DllImport("user32.dll")]private static extern Int…...
【问题思考总结】CPU怎么访问磁盘?CPU只有32位,最多只能访问4GB的空间吗?
问题 在学习操作系统的时候发现了这样一个问题,32位的CPU寻址空间只有4GB,难道只有4GB的空间可以使用吗?以此为始,我开始了一些思考。 思考 Q1:首先,我似乎混淆了一个概念,内存和外存&#x…...
UG NX二次开发(C++)-CAM-根据刀具对程序组进行重新分组
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1、前言2、在UG NX中创建一个三维模型3、在UG NX/CAM中创建多个加工程序4、采用UG NX二次开发(NXOpen)实现按照刀具分组程序组4.2 创建UI Styler4.1 实现逻辑4.2 生成的代码如下:4.3 测试效果4.…...
Unity如何实现TreeView
前言 最近有一个需求,需要实现一个TreeView的试图显示,开始我一直觉得这么通用的结构,肯定有现成的UI组件或者插件可以使用,结果,找了好久,都没有找到合适的插件,有两个效果差强人意。 最后在回家的路上突然灵光一闪,想到了一种简单的实现方式,什么插件都不用,仅使用…...
Android widget 小部件使用指南强化版
Android widget 小部件使用指南强化版 一、简单UI的小部件二、含集合的小部件三、可配置的小部件四、可控制的小部件五、Android 12 Widget 更新 小部件是主屏幕定制的一个重要方面。您可以将它们视为应用程序最重要的数据和功能的“概览”视图,这些数据和功能可以直…...
Linux下C语言操作网卡的几个代码实例?特别实用
前面写了一篇关于网络相关的文章:如何获取当前可用网口。 《简简单单教你如何用C语言列举当前所有网口!》 那么如何使用C语言直接操作网口? 比如读写IP地址、读写MAC地址等。 一、原理 主要通过系统用socket()、ioctl()、实现 int sock…...
noip2011选择旅馆
1.审题:第一个人与第二个人入住的旅馆要求是同色的; 两个人去消费的旅馆并没有要求与入住的旅馆是同色的(这点要小心) 2.要求记录以下数据: 1)a[color]表示当前同为颜色color的旅馆数 2)b[co…...
vue造轮子完整指南--npm组件包开发步骤
一、项目包文件的创建和初始化。 1. 新建项目包。 vue create <Project Name> //用于发布npm包的项目文件名 ps:一般选择自定义,然后不需要Vuex和Router,其他选项按自己实际情况选择安装即可。 2.修改原始src文件名、新增组件项目存放文件和修改…...
28 drf-Vue个人向总结-1
文章目录 前后端分离开发展示项目项补充知识开发问题浏览器解决跨域问题 drf 小tips设置资源root目录使用自定义的user表设置资源路径media数据库补充删除表中数据单页面与多页面模式过滤多层自关联后端提交的数据到底是什么jwt token登录设置普通的 token 原理使用流程解析 jw…...
线性代数(七) 矩阵分析
前言 从性线变换我们得出,矩阵和函数是密不可分的。如何用函数的思维来分析矩阵。 矩阵的序列 通过这个定义我们就定义了矩阵序列的收敛性。 研究矩阵序列收敛性的常用方法,是用《常见向量范数和矩阵范数》来研究矩阵序列的极限。 长度是范数的一个特…...
myArm 全新七轴桌面型机械臂
引言 在不断演进的科技世界中,我们始终追求创新和卓越,以满足客户的需求并超越他们的期望。今天,我们很高兴地宣布我们的最新产品——myArm 300 Pi,一款七轴的桌面型机械臂。这款产品的独特之处在于其灵活性和可编程性,…...
tomcat乱码解决
解决乱码 1、修改bin\catalina.bat配置文件 修改tomcat的配置文件,找到tomcat路径下的\bin目录下的catalina.bat文件,修改 set “JAVA_OPTS%JAVA_OPTS% %JSSE_OPTS% -Dfile.encodingUTF-8 -Dsun.jnu.encodingUTF-8 ” 2、修改conf\logging.properties配置…...
【Linux】详解线程第三篇——线程同步和生产消费者模型
线程同步和生消模型 前言正式开始再次用黄牛抢票来讲解线程同步的思想通过条件变量来实现线程同步条件变量接口介绍初始化和销毁pthread_cond_waitsignal和broadcast 生产消费者模型三种关系用基本工程师思维再次理解基于生产消费者模型的阻塞队列版本一版本二多生多消 利用RAI…...
k8s 安装
文章目录 k8s 客户端安装k8s集群minikubekindkubeadm 验证 k8s 客户端 用于连接k8s集群,建议下载1.23.x的版本,其他的版本本地运行可能会有莫名其妙的报错 https://dl.k8s.io/release/v1.23.16/bin/linux/amd64/kubectl 安装k8s集群 minikube Minik…...
红队打靶:THE PLANETS: MERCURY打靶思路详解(vulnhub)
目录 写在开头 第一步:主机发现和端口扫描 第二步:Web渗透 第三步:获取初步立足点并搜集信息 第四步:软连接劫持sudo提权 总结与思考 写在开头 本篇博客在自己的理解之上根据大佬红队笔记的视频进行打靶,详述了…...
【网络协议】IP
当连接多个异构的局域网形成强烈需求时,用户不满足于仅在一个局域网内进行通信,他们希望通过更高一层协议最终实现异构网络之间的连接。既然需要通过更高一层的协议将多个局域网进行互联,那么这个协议就必须为不同的局域网环境定义统一的寻址…...
Python 布尔类型
布尔值表示两个值之一:True(真)或False(假)。 布尔值 在编程中,您经常需要知道一个表达式是否为True或False。 您可以在Python中评估任何表达式,并获得两个答案之一:True或False。…...
iOS设备管理器iMazing比iTunes好用吗?有哪些优势
虽然 iTunes 是 Apple 官方指定的 iPhone 数据备份和管理工具,但是一直以来 iTunes 卡顿的使用体验和过慢的备份过程为不少人诟病。如果大家也被 iTunes 体验不佳的备份和管理功能所困扰,那么简单易用、功能强大的iMazing 能为你解决这个问题。 iMazing…...
Opengl之深度测试
在坐标系统小节中,我们渲染了一个3D箱子,并且运用了深度缓冲(Depth Buffer)来防止被阻挡的面渲染到其它面的前面。在这一节中,我们将会更加深入地讨论这些储存在深度缓冲(或z缓冲(z-buffer))中的深度值(Depth Value),以及它们是如何确定一个片段是处于其它片段后方的。 …...
利用ICG-NH2/Amine进行DNA标记1686147-55-6星戈瑞
ICG-NH2(吲哚菁绿胺)可以用于DNA标记,这种标记方法通常涉及到DNA上的胺基反应基团和ICG-NH2之间的化学反应。以下是一种常见的方法,用于利用ICG-NH2标记DNA分子: 步骤: 1.准备目标DNA:你需要准…...
Pyecharts数据可视化
Pyecharts数据可视化 1、Pyecharts模块2、柱状图3、折线图4、饼图5、散点图6、图表合并7、词云8、地图 1、Pyecharts模块 ECharts是百度提供的基于JavaScript的开源可视化库,主要用于Web端数据可视化 Echarts是通过JS实现的,Pyecharts则可以使用Python来…...
做电影网站视频放在那里/互动网站建设
论文地址 和之前一篇笔记思路比较像,也是考虑用多任务来做Re-ID来学到相对鲁棒的特征(多个损失),本文方法中根据不同loss的特点在不同层使用不同的loss来优化感觉很有意思,简单总结下本文的方法部分 Motivation rank loss与binary classif…...
阿里巴巴武汉网站建设/适合奖励自己的网站免费
一直对时间函数有点兴趣,今天打开time.h看了一下.发现内容也不是太多.于是看了看.这是c库里的.C的,改日再看.一边看一边写了总结,呵呵,效果不错. 在 time.h 文件中。首先我们可以看到 typedef long time_t; 这就可以明确地知道 time_t是一个long型 而为什么要这样做呢ÿ…...
上海品牌网站建设公司/软文标题
在Oracle中判断一个用户自定义对象是否存在,可以通过如下Sql语句来实现:select * from user_objects where object_name YOUROBJECT;这样可以取得对象的所有信息. 需要注意的是:1.查询条件中的对象名要大写2.对象名有可能重复,所以需要再指定一个OBJECT_TYPE条件,才能更精确的判…...
网站建设维护课件ppt/广州seo网站排名
有n个灯,k个人,第一个人把所有灯都打开,第二个人按下所有编号为2的倍数的开关(这些灯将被关掉),第三个人按下编号是3的倍数的开关(其中关掉的灯将2被打开,开着的灯将关闭)…...
东莞网站开发技术公司电话/百度快照手机版
1.散列表 散列表(Hash table,也叫哈希表),是根据键(Key)而直接访问在内存存储位置的数据结构。也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记…...
b2b免费发布信息网站/如何免费自己创建网站
随着互联网的深入发展,前端开发工程师已成为市场上极具竞争力的人才。许多学生,包括以前的UI,java,或完全零基础,想学习的前端。那么话不多说,直接上干货,希望能帮助到大家。 前端开发受欢迎程度…...