嵌入式测温装置
一、产品简介
MLX90614 是一款红外非接触式温度计,TO-39 金属封装里同时集成了红外感应热电堆探测器芯片和信号处理专用集成芯片,可以同时测得目标温度和环境温度,测温精度高达 0.02℃。MLX90614 有 IIC 和 PWM 两种通信方式,模块上电默认为 IIC 通信模式,仅需两根线与 Arduino连接即可使用,提供 Arduino 库文件,编程简单。
二、设备组成
测温设备主要由5部分组成,1.杜邦线用来连接各个模块;2.一块面包板用来放置各硬件设备3.Arduino nano 开发板,作为主控驱动显示屏和传感器,是整个测温设备的核心部件;4.OLED 屏,用来显示传感器获得的温度数据;5. MLX90614 传感器模块,采集温度数据。
三、设备的性能指标
该嵌入式设备的工作电压为3.3v-5v之间,可以直接接入 3.3V 或者 5V 的电源,支持与 3.3V 和 5V 的单片机直接通讯,不需要加装电平转换。其测温范围为-70℃-380℃,由于传感器的使用温度范围为-40℃~+125℃,超过这个温度范围,传感器会受到损伤。该传感器对环境温度的分辨率为0.02℃,而测量物体温度的误差在±0.02℃范围内波动,此装置还提供了IIC 和 PWM 两种通信方式,模块上电默认为 IIC 通信模式,对于测温距离的把控,尽量保持在5cm-10cm之间,超过此范围会导致误差过大,数据不具有参考性。
四、模块连接
MLX90614传感器模块有四个引脚,分别是 VIN、GND、SCL、SDA,VIN 为电源的正极,可以接Arduino Nano 上的3.3V或5V电源接口 ,GND为电源负极,接Arduino Nano上的GND。SCL 为 IIC 总线的时钟线,接 Arduino 上的 A5 接口,SDA 为 IIC 总线的数据线,接 Arduino 上的A4 接口。
OLED 显示屏通信方式和 MLX90614 相同,也有四个引脚,分别是 VIN、GND、SCL、SDA,VIN 为电源的正极,可以接 Arduino Nano 上的 3.3V 或 5V 电源接口 ,GND 为电源负极,接 Arduino Nano 上的 GND。SCL 为 IIC 总线的时钟线,接 Arduino 上的 A5 接口,SDA 为 IIC总线的数据线,接 Arduino 上的 A4 接口。
五、PC端准备
如何安装Arduino IDE
安装CH340驱动
(如果之前使用过 Arduino IDE,可忽略这2步)
注:库文件安装:
📎Adafruit_GFX_Library.zip
📎Adafruit_SSD1306.zip
📎MLX90614-Library.zip
将上面3个下载好的库文件解压出来,全部添加到 Arduino IDE 的库文件夹libraries中。
六、代码测试
① 串口输出传感器数据(不使用 OLED 屏)
引脚接线
MLX90614 Arduino
SDA -------> A4
SCL -------> A5
VCC -------> 3.3V/5V
GND -------> GND
#include <Wire.h>
#include <Adafruit_MLX90614.h>
Adafruit_MLX90614 mlx = Adafruit_MLX90614();
void setup() {
Serial.begin(9600);
mlx.begin();
}
void loop() {
Serial.println("Temperature from MLX90614:");
Serial.print("Ambient: ");
Serial.print(mlx.readAmbientTempC());
Serial.println(" °C");
Serial.print("Contactless: ");
Serial.print(mlx.readObjectTempC());
Serial.println(" °C");
Serial.println();
delay(1000);
}
注意:打开Arduino软件,将上面的测试代码复制粘贴到Arduino软件中,进行代码烧录;
如何烧录代码
注意:
• 在“开发板”一栏选择“Arduino Nano”,在“处理器”一栏选择“328P”,“端口”一栏根据实际显示的端口选择即可。
• 代码里面设置的串口通信波特率为 9600,所以在串口监视器里面同样也要设置为 9600 才能正常显示数据。
② 使用 OLED 屏显示传感器数据
OLED Arduino
SDA -------> A4
SCL -------> A5
VCC -------> 3.3V/5V
GND -------> GND
使用下面的OLED显示测试代码,按照上面①串口输出传感器数据的测试步骤,继续进行验证。
注意:这套代码没有通过串口输出数据,数据直接显示在屏幕上,所以不用打开串口监视器,直接看OLED屏显示即可。
/*
* 测量距离和目标的大小有关系,建议不要小于1CM,否则数据误差过大。
* MLX90614使用IIC通信,IIC地址为0x5A
* OLED12864屏幕驱动芯片为SSD1306,使用IIC通信,通信地址为0x3C
*/
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <stdint.h>
#include <Adafruit_MLX90614.h>
#define SCREEN_WIDTH 128 // OLED屏的宽,128个像素点
#define SCREEN_HEIGHT 64 // OLED屏的高,64个像素点
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
Adafruit_MLX90614 mlx = Adafruit_MLX90614();
void setup()
{
Serial.begin(9600);
Serial.println("Adafruit MLX90614 test");
mlx.begin();
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); //屏幕的IIC地址为0X3C
}
void loop()
{
display.clearDisplay(); //清屏
display.setTextSize(1); //设置字体大小
display.setTextColor(WHITE); //设置颜色
display.setCursor(0,0);
display.print("Ambient: ");
display.print(mlx.readAmbientTempC()); //显示环境温度
display.print(" c");
display.setCursor(0,10);
display.print("Object: ");
display.print(mlx.readObjectTempC()); //显示目标温度
display.print(" c");
display.display();
delay(1000);
}
注意:
红外线测温由于受很多因素影响,准确度较低误差大,一般用于现场有强烈电磁干扰,接触式温度计无法工作的场合。此款红外温度计内部没有环境温度补偿和线性校准算法,无法和市面上成熟的商业温度红外温度计相比,仅适合电子爱好者研究学习,不可用作商业用途。