MLX90614简介

迈来芯 MLX90614 是一款用于非接触式温度测量的红外温度计。IR 敏感型热电堆检测器芯片和信号调节 ASIC 都集成在同一 TO-39 罐封装中。MLX90614 集成有低噪声放大器、17 位 ADC 和强大的 DSP 单元,因此温度计兼具高精度和高分辨率。 该温度计出厂前已经过校准,可通过数字 SMBus 输出提供整个温度范围内的测量温度(分辨率为 0.02°C)。 用户可以将数字输出配置为脉宽调制 (PWM)。标准情况下,将 10 位 PWM 配置为以 0.14°C 的分辨率连续传输介于 -20 和 120°C 之间的测量温度。

使用STM32F1单片机操作MLX90614

  • MLX90614.c文件内容:
/*******************************************************************************
*   Filename:       bsp_mlx90614.c
*   Revised:        All copyrights reserved to Roger.
*   Date:           2020-10-17
*   Revision:       v1.0
*   Writer:         Roger-WY.
*
*   Description:    非接触式红外温度传感器模块驱动(数字式)
*
*
*   Notes:          https://www.melexis.com/zh/product/MLX90614/MLX90614
*   All copyrights reserved to Roger-WY
*******************************************************************************/
#include "bsp_mlx90614.h"//----------------------------------------------------------------------------//
#define MLX90614_I2C_SCL_RCC     RCC_APB2Periph_GPIOC
#define MLX90614_I2C_SCL_PIN     GPIO_Pin_4         /* 连接到SCL时钟线的GPIO */
#define MLX90614_I2C_SCL_PORT    GPIOC#define MLX90614_I2C_SDA_RCC     RCC_APB2Periph_GPIOC
#define MLX90614_I2C_SDA_PIN     GPIO_Pin_5         /* 连接到SDA数据线的GPIO */
#define MLX90614_I2C_SDA_PORT    GPIOC/* 定义读写SCL和SDA的宏 */
#define MLX90614_I2C_SCL_1()     MLX90614_I2C_SCL_PORT->BSRR = MLX90614_I2C_SCL_PIN         /* SCL = 1 */
#define MLX90614_I2C_SCL_0()     MLX90614_I2C_SCL_PORT->BRR  = MLX90614_I2C_SCL_PIN         /* SCL = 0 */#define MLX90614_I2C_SDA_1()     MLX90614_I2C_SDA_PORT->BSRR = MLX90614_I2C_SDA_PIN           /* SDA = 1 */
#define MLX90614_I2C_SDA_0()     MLX90614_I2C_SDA_PORT->BRR  = MLX90614_I2C_SDA_PIN         /* SDA = 0 */#define MLX90614_I2C_SDA_READ()  ((MLX90614_I2C_SDA_PORT->IDR & MLX90614_I2C_SDA_PIN) != 0)   /* 读SDA口线状态 */
#define MLX90614_I2C_SCL_READ()  ((MLX90614_I2C_SCL_PORT->IDR & MLX90614_I2C_SCL_PIN) != 0) /* 读SCL口线状态 *///----------------------------------------------------------------------------////============================================================================///*
********************************************************************************
*   函 数 名: Mlx90614_i2c_Delay
*   功能说明: I2C总线位延迟,最快400KHz
*   形    参:  无
*   返 回 值: 无
********************************************************************************
*/
static void Mlx90614_i2c_Delay(void)
{volatile uint8_t i;for (i = 0; i < 50; i++);
}static void Mlx90614_i2c_Start(void)
{/* 当SCL高电平时,SDA出现一个下跳沿表示I2C总线启动信号 */MLX90614_I2C_SDA_1();Mlx90614_i2c_Delay();MLX90614_I2C_SCL_1();Mlx90614_i2c_Delay();MLX90614_I2C_SDA_0();Mlx90614_i2c_Delay();MLX90614_I2C_SCL_0();
//  Mlx90614_i2c_Delay();
}/******************************************************************************** 名    称: i2c_Stop* 功    能: CPU发起I2C总线停止信号* 入口参数: 无* 出口参数: 无* 作  者: Roger-WY* 创建日期: 2018-05-20* 修    改:* 修改日期:* 备    注: 停止时序*            SCL _____/ˉˉˉˉˉˉˉ*            SDA _________/ˉˉˉˉˉ*                       |   |*                       STOP*******************************************************************************/
static void Mlx90614_i2c_Stop(void)
{/* 当SCL高电平时,SDA出现一个上跳沿表示I2C总线停止信号 */MLX90614_I2C_SCL_0();Mlx90614_i2c_Delay();MLX90614_I2C_SDA_0();Mlx90614_i2c_Delay();MLX90614_I2C_SCL_1();Mlx90614_i2c_Delay();MLX90614_I2C_SDA_1();
//  Mlx90614_i2c_Delay();
}/******************************************************************************** 名    称: i2c_WaitAck* 功    能: CPU产生一个时钟,并读取器件的ACK应答信号* 入口参数: 无* 出口参数: 返回0表示正确应答,1表示无器件响应* 作  者: Roger-WY* 创建日期: 2018-05-20* 修    改:* 修改日期:* 备    注:*******************************************************************************/
static uint8_t Mlx90614_i2c_WaitAck(void)
{uint8_t re;uint8_t TimeOutCnt = 20;  /* 超时计数器 */MLX90614_I2C_SDA_1(); /* CPU释放SDA总线 */Mlx90614_i2c_Delay();MLX90614_I2C_SCL_1();  /* CPU驱动SCL = 1, 此时器件会返回ACK应答 */Mlx90614_i2c_Delay();while(TimeOutCnt -- ) {if (MLX90614_I2C_SDA_READ())   {/* CPU读取SDA口线状态 */re = 1;} else {re = 0;}}MLX90614_I2C_SCL_0();Mlx90614_i2c_Delay();return re;
}/******************************************************************************** 名    称: i2c_Ack* 功    能: CPU产生一个ACK信号* 入口参数: 无* 出口参数: 无* 作  者: Roger-WY* 创建日期: 2018-05-20* 修    改:* 修改日期:* 备    注:*******************************************************************************/
static void Mlx90614_i2c_Ack(void)
{MLX90614_I2C_SDA_0();  /* CPU驱动SDA = 0 */Mlx90614_i2c_Delay();MLX90614_I2C_SCL_1();   /* CPU产生1个时钟 */Mlx90614_i2c_Delay();MLX90614_I2C_SCL_0();Mlx90614_i2c_Delay();MLX90614_I2C_SDA_1(); /* CPU释放SDA总线 */
}/******************************************************************************** 名    称: i2c_NAck* 功    能: CPU产生1个NACK信号* 入口参数: 无* 出口参数: 无* 作  者: Roger-WY* 创建日期: 2018-05-20* 修    改:* 修改日期:* 备    注:*******************************************************************************/
static void Mlx90614_i2c_NAck(void)
{MLX90614_I2C_SDA_1();  /* CPU驱动SDA = 1 */Mlx90614_i2c_Delay();MLX90614_I2C_SCL_1();   /* CPU产生1个时钟 */Mlx90614_i2c_Delay();MLX90614_I2C_SCL_0();Mlx90614_i2c_Delay();
}/*******************************************************************************
* 名    称: bsp_InitI2C
* 功    能: 配置I2C总线的GPIO,采用模拟IO的方式实现
* 入口参数: 无
* 出口参数: 无
* 作  者: Roger-WY
* 创建日期: 2018-06-29
* 修    改:
* 修改日期:
* 备    注:
*******************************************************************************/
static void Mlx90614_InitI2C(void)
{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(MLX90614_I2C_SCL_RCC | MLX90614_I2C_SDA_RCC, ENABLE);   /* 打开GPIO时钟 */GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_OD;          /* 开漏输出模式 */GPIO_InitStructure.GPIO_Pin = MLX90614_I2C_SCL_PIN;GPIO_Init(MLX90614_I2C_SCL_PORT, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = MLX90614_I2C_SDA_PIN;GPIO_Init(MLX90614_I2C_SDA_PORT, &GPIO_InitStructure);/* 给一个停止信号, 复位I2C总线上的所有设备到待机模式 */Mlx90614_i2c_Stop();
}/******************************************************************************** 名    称: i2c_SendByte* 功    能: CPU向I2C总线设备发送8bit数据* 入口参数: _ucByte : 等待发送的字节* 出口参数: 无* 作  者: Roger-WY* 创建日期: 2018-05-20* 修    改:* 修改日期:* 备    注:*******************************************************************************/
static void Mlx90614_i2c_SendByte(uint8_t _ucByte)
{uint8_t i;/* 先发送字节的高位bit7 */for (i = 0; i < 8; i++) {MLX90614_I2C_SCL_0();Mlx90614_i2c_Delay();if (_ucByte & 0x80) {MLX90614_I2C_SDA_1();} else {MLX90614_I2C_SDA_0();}_ucByte <<= 1; /* 左移一个bit */Mlx90614_i2c_Delay();MLX90614_I2C_SCL_1();Mlx90614_i2c_Delay();}MLX90614_I2C_SCL_0();Mlx90614_i2c_Delay();}/******************************************************************************** 名    称: Mlx90614_i2c_ReadByte* 功    能: CPU从I2C总线设备读取8bit数据* 入口参数: 无* 出口参数: 读到的数据* 作  者: Roger-WY* 创建日期: 2018-05-20* 修    改:* 修改日期:* 备    注:*******************************************************************************/
static uint8_t Mlx90614_i2c_ReadByte(void)
{uint8_t i;uint8_t value;/* 读到第1个bit为数据的bit7 */value = 0;for (i = 0; i < 8; i++) {value <<= 1;MLX90614_I2C_SCL_0();Mlx90614_i2c_Delay();MLX90614_I2C_SCL_1();Mlx90614_i2c_Delay();if (MLX90614_I2C_SDA_READ()) {value++;}}MLX90614_I2C_SCL_0();Mlx90614_i2c_Delay();return value;
}/******************************************************************************** 名    称: bsp_Mlx90614ScanDevice* 功    能: 检测I2C总线设备,CPU向发送设备地址,然后读取设备应答来判断该设备是否存在* 入口参数:  _Address:设备的I2C总线地址* 出口参数: 返回值 0 表示正确, 返回1表示未探测到* 作  者: Roger-WY* 创建日期: 2018-05-20* 修    改:* 修改日期:* 备    注:*******************************************************************************/
int8_t bsp_Mlx90614ScanDevice(uint8_t *pSlaveAddr)
{uint8_t ucAck;Mlx90614_InitI2C();if (MLX90614_I2C_SDA_READ() && MLX90614_I2C_SCL_READ()) {for(uint8_t i = 0; i < 128; i++){Mlx90614_i2c_Start();     /* 发送启动信号 */Mlx90614_i2c_SendByte(i << 1);ucAck = Mlx90614_i2c_WaitAck();    /* 检测设备的ACK应答 */Mlx90614_i2c_Stop();            /* 发送停止信号 */if(ucAck == 0){*pSlaveAddr = i;    //找到设备并获取从机地址return 0;}}return -1;          //没有找到设备}return -2;               /* I2C总线异常 */
}//============================================================================//
static const uint8_t crc_table[] = {0x00, 0x07, 0x0e, 0x09, 0x1c, 0x1b, 0x12, 0x15, 0x38, 0x3f, 0x36, 0x31,0x24, 0x23, 0x2a, 0x2d, 0x70, 0x77, 0x7e, 0x79, 0x6c, 0x6b, 0x62, 0x65,0x48, 0x4f, 0x46, 0x41, 0x54, 0x53, 0x5a, 0x5d, 0xe0, 0xe7, 0xee, 0xe9,0xfc, 0xfb, 0xf2, 0xf5, 0xd8, 0xdf, 0xd6, 0xd1, 0xc4, 0xc3, 0xca, 0xcd,0x90, 0x97, 0x9e, 0x99, 0x8c, 0x8b, 0x82, 0x85, 0xa8, 0xaf, 0xa6, 0xa1,0xb4, 0xb3, 0xba, 0xbd, 0xc7, 0xc0, 0xc9, 0xce, 0xdb, 0xdc, 0xd5, 0xd2,0xff, 0xf8, 0xf1, 0xf6, 0xe3, 0xe4, 0xed, 0xea, 0xb7, 0xb0, 0xb9, 0xbe,0xab, 0xac, 0xa5, 0xa2, 0x8f, 0x88, 0x81, 0x86, 0x93, 0x94, 0x9d, 0x9a,0x27, 0x20, 0x29, 0x2e, 0x3b, 0x3c, 0x35, 0x32, 0x1f, 0x18, 0x11, 0x16,0x03, 0x04, 0x0d, 0x0a, 0x57, 0x50, 0x59, 0x5e, 0x4b, 0x4c, 0x45, 0x42,0x6f, 0x68, 0x61, 0x66, 0x73, 0x74, 0x7d, 0x7a, 0x89, 0x8e, 0x87, 0x80,0x95, 0x92, 0x9b, 0x9c, 0xb1, 0xb6, 0xbf, 0xb8, 0xad, 0xaa, 0xa3, 0xa4,0xf9, 0xfe, 0xf7, 0xf0, 0xe5, 0xe2, 0xeb, 0xec, 0xc1, 0xc6, 0xcf, 0xc8,0xdd, 0xda, 0xd3, 0xd4, 0x69, 0x6e, 0x67, 0x60, 0x75, 0x72, 0x7b, 0x7c,0x51, 0x56, 0x5f, 0x58, 0x4d, 0x4a, 0x43, 0x44, 0x19, 0x1e, 0x17, 0x10,0x05, 0x02, 0x0b, 0x0c, 0x21, 0x26, 0x2f, 0x28, 0x3d, 0x3a, 0x33, 0x34,0x4e, 0x49, 0x40, 0x47, 0x52, 0x55, 0x5c, 0x5b, 0x76, 0x71, 0x78, 0x7f,0x6a, 0x6d, 0x64, 0x63, 0x3e, 0x39, 0x30, 0x37, 0x22, 0x25, 0x2c, 0x2b,0x06, 0x01, 0x08, 0x0f, 0x1a, 0x1d, 0x14, 0x13, 0xae, 0xa9, 0xa0, 0xa7,0xb2, 0xb5, 0xbc, 0xbb, 0x96, 0x91, 0x98, 0x9f, 0x8a, 0x8d, 0x84, 0x83,0xde, 0xd9, 0xd0, 0xd7, 0xc2, 0xc5, 0xcc, 0xcb, 0xe6, 0xe1, 0xe8, 0xef,0xfa, 0xfd, 0xf4, 0xf3
};uint8_t CRC8_Calc (uint8_t *p, uint8_t len)
{uint16_t i;uint16_t crc = 0x0;while (len--) {i = (crc ^ *p++) & 0xFF;crc = (crc_table[i] ^ (crc << 8)) & 0xFF;}return (crc & 0xFF);
}/*******************************************************************************
* 名    称: bsp_Mlx90614Init
* 功    能: Mlx90614传感器的初始化
* 入口参数: 无
* 出口参数: 无
* 作  者: Roger-WY.
* 创建日期: 2018-08-08
* 修    改:
* 修改日期:
* 备    注:
*******************************************************************************/
int8_t bsp_Mlx90614Init(void)
{int8_t ucError      = 0;Mlx90614_InitI2C();return (ucError);}int8_t bsp_Mlx90614WriteReg(uint8_t devAddr, uint8_t regAddr, uint16_t data)
{uint8_t ucAck = 0;uint8_t crcSendBuffer[5] = {0x00,0x00,0x00,0x00,0x00}; //used to save the data to sendcrcSendBuffer[0] = devAddr << 1;crcSendBuffer[1] = regAddr;crcSendBuffer[2] =  (uint8_t)data;crcSendBuffer[3] =  (uint8_t)(data >> 8);crcSendBuffer[4] = CRC8_Calc(crcSendBuffer,4);Mlx90614_i2c_Start();Mlx90614_i2c_SendByte(crcSendBuffer[0]);ucAck = Mlx90614_i2c_WaitAck();if(ucAck) {         /* 如果Mlx90614,没有应答 */goto cmd_fail; /* 器件无应答 */}Mlx90614_i2c_SendByte(crcSendBuffer[1]);ucAck = Mlx90614_i2c_WaitAck();if(ucAck) {         /* 如果Mlx90614,没有应答 */goto cmd_fail;  /* 器件无应答 */}Mlx90614_i2c_SendByte(crcSendBuffer[2]);    //先发送低字节ucAck = Mlx90614_i2c_WaitAck();if(ucAck) {         /* 如果Mlx90614,没有应答 */goto cmd_fail;  /* 器件无应答 */}Mlx90614_i2c_SendByte(crcSendBuffer[3]);    //再发送高字节ucAck = Mlx90614_i2c_WaitAck();if(ucAck) {         /* 如果Mlx90614,没有应答 */goto cmd_fail;  /* 器件无应答 */}Mlx90614_i2c_SendByte(crcSendBuffer[4]);    //再发送PEC ucAck = Mlx90614_i2c_WaitAck();if(ucAck) {         /* 如果Mlx90614,没有应答 */goto cmd_fail; /* 器件无应答 */}/* 发送I2C总线停止信号 */Mlx90614_i2c_Stop();return 0;  /* 执行成功 */cmd_fail: /* 命令执行失败后,切记发送停止信号,避免影响I2C总线上其他设备 *//* 发送I2C总线停止信号 */Mlx90614_i2c_Stop();return -1;}int8_t bsp_Mlx90614ReadReg(uint8_t devAddr, uint8_t regAddr,uint16_t *pReadData)
{uint8_t ucAck = 0;uint8_t ValBuf[6] = {0};uint8_t prcRegVal = 0;ValBuf[0] = devAddr << 1;ValBuf[1] = regAddr;ValBuf[2] = (devAddr << 1) | 0x01;Mlx90614_i2c_Start();Mlx90614_i2c_SendByte(ValBuf[0]);ucAck = Mlx90614_i2c_WaitAck();if(ucAck) {         /* 如果LM75X,没有应答 */goto cmd_fail; /* 器件无应答 */}Mlx90614_i2c_SendByte(ValBuf[1]);ucAck = Mlx90614_i2c_WaitAck();if(ucAck) {         /* 如果LM75X,没有应答 */goto cmd_fail;    /* 器件无应答 */}    //------------------------------------------------------------------------//Mlx90614_i2c_Start();Mlx90614_i2c_SendByte(ValBuf[2]);ucAck = Mlx90614_i2c_WaitAck();if(ucAck) {         /* 如果LM75X,没有应答 */goto cmd_fail;   /* 器件无应答 */}ValBuf[3] = Mlx90614_i2c_ReadByte();Mlx90614_i2c_Ack();ValBuf[4] = Mlx90614_i2c_ReadByte();Mlx90614_i2c_Ack();ValBuf[5] = Mlx90614_i2c_ReadByte();Mlx90614_i2c_Ack();/* 发送I2C总线停止信号 */Mlx90614_i2c_Stop();prcRegVal = CRC8_Calc(ValBuf,5);if(prcRegVal == ValBuf[5]){*pReadData = (ValBuf[4] << 8) + ValBuf[3];return 0;  /* 执行成功 */}else{return -2;  //校验不正确}cmd_fail: /* 命令执行失败后,切记发送停止信号,避免影响I2C总线上其他设备 *//* 发送I2C总线停止信号 */Mlx90614_i2c_Stop();return -1;
}float bsp_Mlx90614ReadTemp(uint8_t devAddr)
{float temp;uint16_t data;if( 0 == bsp_Mlx90614ReadReg(devAddr,MLX90614_TOBJ1,&data)){temp = (data * 0.02) - 273.15;}else{temp = MLX90614_TEMP_READ_ERR_CODE;}return temp;
}/***************************** (END OF FILE) **********************************/
  • MLX90614.h文件内容:
/*******************************************************************************
*   Filename:       bsp_mlx90614.h
*   Revised:        All copyrights reserved to Roger.
*   Date:           2020-10-17
*   Revision:       v1.0
*   Writer:         Roger-WY.
*
*   Description:    非接触式红外温度传感器模块驱动(数字式)  头文件
*******************************************************************************/
#ifndef __BSP_MLX90614_H__
#define __BSP_MLX90614_H__#include "stm32f10x.h"
#include "bsp_timer.h"#define MLX90614_TEMP_READ_ERR_CODE -99/* MLX90614 内部寄存器地址定义 */
/* Private defines -----------------------------------------------------------*/
/* DEFAULT SLAVE ADDRESS */
#define MLX90614_ADDR       0x5A
#define MLX90614_ADDR_WR   (MLX90614_ADDR << 1)/* OPCODE DEFINES */
#define MLX90614_OP_RAM     0x00
#define MLX90614_OP_EEPROM  0x20
#define MLX90614_OP_SLEEP   0xFF/* RAM offsets with 16-bit data, MSB first */
#define MLX90614_RAW1       (MLX90614_OP_RAM | 0x04) /* raw data IR channel 1 */
#define MLX90614_RAW2       (MLX90614_OP_RAM | 0x05) /* raw data IR channel 2 */
#define MLX90614_TAMB       (MLX90614_OP_RAM | 0x06) /* ambient temperature */
#define MLX90614_TOBJ1      (MLX90614_OP_RAM | 0x07) /* object 1 temperature */
#define MLX90614_TOBJ2      (MLX90614_OP_RAM | 0x08) /* object 2 temperature */
/* EEPROM offsets with 16-bit data, MSB first */
#define MLX90614_TOMIN      (MLX90614_OP_EEPROM | 0x00) /* object temperature min register */
#define MLX90614_TOMAX      (MLX90614_OP_EEPROM | 0x01) /* object temperature max register */
#define MLX90614_PWMCTRL    (MLX90614_OP_EEPROM | 0x02) /* pwm configuration register */
#define MLX90614_TARANGE    (MLX90614_OP_EEPROM | 0x03) /* ambient temperature register */
#define MLX90614_EMISSIVITY (MLX90614_OP_EEPROM | 0x04) /* emissivity correction register */
#define MLX90614_CFG1       (MLX90614_OP_EEPROM | 0x05) /* configuration register */
#define MLX90614_SA         (MLX90614_OP_EEPROM | 0x0E) /* slave address register */
#define MLX90614_ID1        (MLX90614_OP_EEPROM | 0x1C) /*[read-only] 1 ID register */
#define MLX90614_ID2        (MLX90614_OP_EEPROM | 0x1D) /*[read-only] 2 ID register */
#define MLX90614_ID3        (MLX90614_OP_EEPROM | 0x1E) /*[read-only] 3 ID register */
#define MLX90614_ID4        (MLX90614_OP_EEPROM | 0x1F) /*[read-only] 4 ID register */#define MLX90614_DBG_OFF    0
#define MLX90614_DBG_ON     1
#define MLX90614_DBG_MSG_W  0
#define MLX90614_DBG_MSG_R  1/* MLX90614 供外部调用函数 */
int8_t bsp_Mlx90614Init(void);
int8_t bsp_Mlx90614ScanDevice(uint8_t *pSlaveAddr);
float bsp_Mlx90614ReadTemp(uint8_t devAddr);#endif
/***************************** (END OF FILE) **********************************/

完整的工程

STM32F1 使用标准库函数读取MLX90614ESF非接触式温度传感器的完整工程可点击此处下载(有积分或者是会员的小伙伴可以支持一下!)

PS:鉴于积分实在有点糟心,后面我把工程上传到 gitee 上了,没有积分的小伙伴可以直接去 gitee 上下载

结束语

如果觉得文章对您有帮助,请关注、点赞,谢谢!

STM32F1读取MLX90614ESF非接触式温度传感器相关推荐

  1. STM32F1读取MLX90615非接触式红外温度传感器

    MLX90615 简介 MLX90615是一种红外温度计,用于非接触式温度测量.红外敏感热电堆探测器芯片和信号调节芯片集成在同一个TO-46 CAN封装中.由于采用了低噪声放大器.16位模数转换器和强 ...

  2. STM32F1读取MLX90632非接触式红外温度传感器

    MLX90632 简介 MLX90632是一个小型SMD SFN封装中的非接触式红外温度传感器,可实现高精度非接触式温度测量,.该装置在出厂时使用存储在EEPROM存储器中的校准常数进行校准.环境温度 ...

  3. 使用红外温度传感器制作非接触式红外测温仪

    在调试电子电路或测试新硬件设计时,我常会通过触摸来检查电路板上的器件是否异常发热.如果某些东西搞砸了(通常是在第一次尝试中),这些器件可能会达到80°C或更高温度,不仅会烧毁器件,还会烫伤手指.我都不 ...

  4. TI MSP432P401R GY-906非接触式温度传感驱动程序

    2022年电赛马上到了,笔者和队友这几天做了一下2020年的F题,简易温度测量和身份口罩学习的一个题目,总体完成情况还算可以,配合OpenMv,能够通过4个按键(上.下.确认.返回)进行八个页面之间的 ...

  5. 使用Arduino和Android制作一款非接触式智能红外测温仪

    当前形势下的COVID-19新冠肺炎依然严峻.每个人都尽最大努力保护自身的同时,重要的是采取负责任的行动并集体解决这个问题.如今,在许多公共场所和其他聚会中,对每个人进行体温检测作为检查发烧的预防措施 ...

  6. STM32和MLx90614非接触红外温度传感器

    MLx90614介绍: MLx90614非接触红外温度传感器是一款性能和精度都较高的温度测量产品,在医疗,工业等领域应用较多:有四个引脚,使用SMBus协议,通过控制SCL引脚进行数据读取.现在给出一 ...

  7. 浅谈非接触式母线槽测温系统的应用及产品选型

    安科瑞王丹丹acrel2021 摘 要:针对小区内密集型母线槽与插接箱相连接的触点位置容易发生老化而导致老化部位异常升温的问题,设计了一种非接触式密集型母线槽测温系统.通过非接触式红外测温模块进行母线 ...

  8. 利用反射计芯片进行非接触式液位测量

    利用反射计芯片进行非接触式液位测量 Contactless fluid-level measurement using a reflectometer chip 通过将空气介质传输线靠在非金属罐的侧面 ...

  9. 金融IC卡非接触式快速支付的先天缺陷与补救措施

    金融IC卡非接触式快速支付的先天缺陷与补救措施 1. 什么是脱机扣款失败交易 从客观现象来简单定义,脱机扣款失败交易是指持卡人在消费场所执行了一笔脱机消费交易,交易因某种原因未能成功,但持卡人所持卡片 ...

  10. 非接触式通信技术之RFID

    什么是RFID技术? RFID射频识别是一种非接触式的自动识别技术,它通过射频信号自动识别目标对象并获取相关数据,识别工作无须人工干预,可工作于各种恶劣环境.RFID技术可识别高速运动物体并可同时识别 ...

最新文章

  1. SQL Server-聚焦SNAPSHOT基于行版本隔离级别详解(三十)
  2. HTML areamap标签及在实际开发中的应用
  3. pycharm如何改为中文显示?
  4. 遍历某个文件夹下的所有文件并格式化显示出来
  5. python新手入门总结_初学python的操作难点总结(新手必看篇)
  6. Java命令行界面(第22部分):argparser
  7. 【DevCloud·敏捷智库】如何利用用户故事了解需求
  8. 昇腾AI处理器软件栈--流程编排器(Matrix)
  9. c# gerber文件读取_必须收藏的一篇关于:AD18生成gerber文件及用CAM350读取gerber教程...
  10. 告别公告_我告别freeCodeCamp
  11. 如何利用福禄克OFP2-100-Q CH测试光纤的熔接损耗
  12. django form关于clean及cleaned_data的说明 以及4种初始化
  13. libnids中TCP/IP栈实现细节分析——TCP会话重组
  14. 【BZOJ1818】内部白点
  15. 一张图说明softmax layer是什么
  16. 4大Excel文本合并技巧,这几个公式轻松帮你搞定
  17. C++头文件---algorithm
  18. 看了多篇2019年的面经后的个人总结
  19. 樱花FRP内网穿透登录群晖相册ds photo
  20. gwr模型用什么做_虎钳的三维模型制作你会吗?用UG软件来做这个轻松搞定

热门文章

  1. 基于微信小程序的高校课堂教学管理系统#毕业设计
  2. 迄今为止最完整的DDD实践
  3. OpenStack Queen 版本变更概述
  4. 高通apq8096连接外网
  5. 使用LibreOffice将office文档转pdf(java实现)
  6. html5怎么把表格边框设为0,css表格边框怎么设置
  7. 矩阵直接分解法matlab,矩阵直接三角分解法
  8. 如何把pdf转换成word文档
  9. KVM磁盘格式转换,raw转qcow2
  10. 制作半透明的毛玻璃效果教程