ARDUINO使用MLX90614红外温度传感器研究笔记

Arduino相关 专栏收录该内容
3 篇文章 0 订阅

(温馨提醒:玩之前,建议把电脑上的计算器模式调成“程序员”模式,因为后面可能会用到大量二进制和十六进制的转换。)

相关资料:下载

由于最近由于公司项目,需要一款红外温度传感器,于是在某宝买到了一款GY-906传感器产品(HW-691模块)。以下就是产品的图片:

其核心是使用了Melexis公司(https://www.melexis.com/)的MLX90614传感器。如下图所示:

MLX90614传感器是一个系列,有许多的的子型号,在性能和外观上略有差异。有兴趣的同学可以自己研究一下。详细的内容可以参考官网发布的datasheet和相关的使用手册。

对于GY-906,我只知道是MLX90614ESF,具体版本店家没有写,也没有技术支持(有点坑)。只说是3-5V,保险起见,实验中用的都是3V,证实可用。

选用这颗传感器除了是因为使用红外的非接触测温外,最重要的是它的通讯方式是I2C通信协议(也有写成IIC的)主要用到SDA和SCL两条线。不过说明里写的都是SMBus,两者其实还是有点差异的,具体可以查阅相关资料,使用的时候到没什么感觉。Arduino有专门支持I2C的接口,实验中使用的模拟A4、A5口,其中A4为SDA,A5为SCL。顺便放一张Arduino接口定义图,如下图所示:

这里先说一下MLX90614的EEPROM和RAM,这两个相当重要。前者主要是用来存放地址、发射频率等参数的,有部分是可以用户自己修改的。后者不能修改,但是可以读取温度。具体内容如下所示:

通常,如果只是接了一个MLX90614的话,可以通过地址0x00或者0x5A来访问。其中0x00是单个I2C设备连接时,默认都能访问的。0x5A是MLX90614出厂时默认设置的。可以通过修改EEPROM中的0E地址来改变里面的值。换句话说,你如果不小心改了MLX90614的地址,然后又忘记了,你只要把它单独接在Arduino上,然后访问EEPROM中的0E地址就可以读出来了。这里要提醒一下,访问EEPROM中的0E地址,实际中输入的应该是0x2E,很多人一开始都搞不明白,其实原厂说明书里有写的,可能大家都没看懂下面这段:

如果你的计算机基础很扎实或者已经把计算器模式调成了“程序员”模式,那就可以开始计算了。比如说我要访问RAM中的TA,而TA在RAM中的地址是0x06,那么换算成二进制就是0000 0110,然后把右边5位拿出来与Opcode组合起来成为0000 0110,转换成十六进制就是0x06,这个就是真正的命令。

同样道理,如果要访问EEPROM中的SMBus Address,也就是表格中的0x0E,那么与Opcode组合后的二进制就是0010 1110,转换成十六进制就是0x2E。

知道了如何正确表示命令,那么接下来就好办了。对于Arduino来说,要访问I2C设备需要调用wire.h库。然后基本上按照如下的流程来读和写操作:

对于读操作来说,相对简单一点。其中:

Slave Adress:就是传感器的地址。默认的是0x5A,单个接的时候也可以用0x00,这个值被存放在EEPROM中0E位置,读取的默认值是0xBE5A,可以被修改。但是,只有低8位有效。换句话说,我如果改成0xBE10,那么地址就会编程0x10。而且这个高八位只能输BE,否则数据无效,这个大概就是很多人改地址失败的原因之一。

Command:也就是寄存器地址与Opcode组合,像前面的0x2E,0x06这样的。表示你要访问的是EPPROM或者RAM中的某个寄存器位置。

Data Byte Low:低八位的值。

Data Byte High:高八位的值。

PEC:这个是一个CRC-1的循环冗余校验码,本来是用来校验数据有没有发成功的,但是很多人在发送命令时忘记加了这个(或者说根本不知道怎么计算),结果导致修改数值失败。就直接说了,这个必须有,不能缺。

这样其实就介绍了差不多了,网上的资料里也有现成的代码可以用,一般都是读取RAM中的环境温度TA,物体温度TOBJ1,某宝店家的网盘里一大堆,这里就多说了。

另外,再强调一下,如果是写数据,先要把寄存器数据清零的。比如命令为0x24,也就是修改发射频率,第一次先对高低八位分别写一遍0x00,第二次再重新用这个命令写入你要改的数据。之前我就是没注意,所以一直都没改成功,折腾了两个礼拜。

相关推荐
基于51单片机的MLX90614红外测温仪实验指导书(含源代码) MLX90614 MLX90615 红外测温 51单片机 SMBus 这是经过本人实验测试得到的成果,再次将之分享给大家,希望对搞温度测量及控制的人有所帮助!时钟线 数据线 温度显示第个数码管段选 温度显示第个数咼管段迮 温度显示第个数码管段选 矩阵键盘第列 矩阵键盘第列 矩阵键盘第列 矩阵键盘第行 矩阵键盘第行 矩阵键盘第行 数据定义 可位寻址数据 数码管码值定义 显示代码,共阳不带小数点的 显示代码,共阳带小数点的 仝局变量定义 定时标志位 定时毫秒数 向写入命令或数据 数据 清屏 光标返回原点 设置显示模式 显示开 显示关 显示光标 无光标 光标闪动 光标不闪动 设置输入模式 光标石移 默认光标左移 田面可半移 默认画面不移动 命令模式 对操作 操作 进入命令模式 退出命令模式 读标志 进入睡眠馍式 地址(只读) 周围温度 环境温度 单元 目标温度红外温度 单元 地址 测量范围上限设定 测量范围下限设定 设定 环境温度设定 频率修正系数 配置寄存器 器件地址设定 保留 保留 地址 地址 地址 地址 函数声明 发起始位子程序 发结東位子程序 接收字节子程序 发送位子程序 接收字节子程序 接收位子程序 延时程序 读温度数据 初始化子程序 判断忙子程序 写命令子程序 写数据子程序 显示子程序 字符串显示程序 主函数 温度变量 初始化 每 扫描一次键盘 按下键时,进行数码管显示 液品屏显示 读取温度 清屏 显示字符串 且换行 显示温度 显示摄氏度 延吋再读取温度显 字符串显示稈序 字符串显示程序 直到字符肀结束 转成码 指向下一个字符 输入转换并显示用于 温度为止 温度整数 温度小数 温度超过度 显示温度百位 显小温度十位 显示温度个位 温度超过度 显小温度十位 显示温度个位 温度不超过度 显示温度个位 显示小数点 温度小数点后第位数不等于 显示温度小数点后第位数 显示温度小数点后第位数 温度小数点斤第位数等于 显示温度小数点后第位数 显示温度小数点后第位数 温度为负
©️2020 CSDN 皮肤主题: 技术工厂 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值