2022年电赛马上到了,笔者和队友这几天做了一下2020年的F题,简易温度测量和身份口罩学习的一个题目,总体完成情况还算可以,配合OpenMv,能够通过4个按键(上、下、确认、返回)进行八个页面之间的跳转,实现温度的测量、报警阈值上下限的修改、人脸的识别、现场人脸的学习以及口罩的识别和提醒。
在此过程中用到了GY-906的非接触式温度传感器,所用协议是英特尔公司参照I2C协议设计的SMBus,我们用的主控芯片是ti公司免费申请的MSP432 LaunchPad,为了方便大家的学习和交流,在此附上msp432的gy906的驱动程序供大家参考,有不足欢迎大家指正。
说明:基于TI公司提供的SDK软件开发包,通过官方库函数,使用keil_5编写,环境不同可能需要修改相关配置
(源代码来自厂家提供的stm32的驱动程序,在此基础上修改而来)
gy-906_get_temp.h文件
#ifndef __MLX90614_H
#define __MLX90614_H
/* Includes ------------------------------------------------------------------*/
#include "driverlib.h"
/* Exported types ------------------------------------------------------------*/
/* Exported variables --------------------------------------------------------*/
/* Exported constants --------------------------------------------------------*/
/* Exported macro ------------------------------------------------------------*/
#define u8 uint8_t
#define u16 uint16_t
/* Exported functions ------------------------------------------------------- */
void SMBus_StartBit(void);
void SMBus_StopBit(void);
void SMBus_SendBit(u8);
u8 SMBus_SendByte(u8);
u8 SMBus_ReceiveBit(void);
u8 SMBus_ReceiveByte(u8);
void SMBus_Delay(u16);
void SMBus_Init(void);
u16 SMBus_ReadMemory(u8, u8);
u8 PEC_Calculation(u8*);
float SMBus_ReadTemp(void); //读取温度
#endif
gy-906_get_temp.c文件
/*******************************************************************************
* 文件名 : mlx90614.c
* 作 者 :
* 版 本 :
* 日 期 : 2013-08-07
* 描 述 : mlx90614函数
PB6:SCL
PB7:SDA
在主函数中先初始化SMBus_Init();
需要读取温度就调用temp=SMBus_ReadTemp(); //读取温度,temp是浮点数,转整数:i=ceil(temp);
*******************************************************************************/
/* Includes ------------------------------------------------------------------*/
#include "gy-906_get_temp.h"
#include "stdio.h"
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
#define ACK 0 //应答
#define NACK 1 //无应答
#define SA 0x00 //Slave address 单个MLX90614时地址为0x00,多个时地址默认为0x5a
#define RAM_ACCESS 0x00 //RAM access command RAM存取命令
#define EEPROM_ACCESS 0x20 //EEPROM access command EEPROM存取命令
#define RAM_TOBJ1 0x07 //To1 address in the eeprom 目标1温度,检测到的红外温度 -70.01 ~ 382.19度
//P6.5->SCK
//P6.4->SDA
#define SMBUS_PORT GPIO_PORT_P6 //P4端口(端口和下面的两个针脚可自定义)
#define SMBUS_SCK GPIO_PIN5 //P6.5:SCK
#define SMBUS_SDA GPIO_PIN4 //P6.4:SDA
#define SMBUS_SCK_H() GPIO_setOutputHighOnPin(SMBUS_PORT,SMBUS_SCK)
#define SMBUS_SCK_L() GPIO_setOutputLowOnPin(SMBUS_PORT,SMBUS_SCK)
#define SMBUS_SDA_H() GPIO_setOutputHighOnP