How to adjust emissivity in Adafruit MXL90614 IR-Sensor

Hi,
I am development a prototype for contactless temperature measurements on steels bodies. Emissivity is a factor I have to change for calibration of sensor, because bodies for my application are very shiny.
I am using Adafruit MXL90614 IR-sensors. As a standard, the MLX90614 is calibrated for an object emissivity of 1. Shiny steel has a very low emissivity value.
How can I change it?
Best regards

The data sheet for the MLX90614 has information on emissivity corrections.

The correction can be applied after you make the measurement – there is no need to update the sensor. For the record, you need to acquire both the ambient (chip) temperature Ta, and the object temperature Tom in Kelvin as measured by the sensor.

The corrected object temperature Toc is given by the following expression in C, where eps is the surface emissivity:

Toc = pow( ( ( (pow(Tom,4)-pow(Ta,4))/eps) + pow(Ta,4) ), 0.25);

For very shiny objects (emissivity < 0.1), correction is usually not possible and contactless temperature measurements become impractical or impossible.

Hi, thank you very much for your help.
If I understood well, I can "correct" the readings in my code.

What I have to do is to change the address of my sensors. I want to to use a I2C bus to use 4 sensors at the same time, but all sensors have the address 0x55. How can I read and write in sensors in order to change their addresses?

Many thanks in advance!

Using one of the popular search engines, I very quickly found this link:

Awsome, Thank you very much. It seems to be what I was looking for.
I will try it.
Best regards

Hi,
I am still having trouble trying to change the Slave Address of a MLX90614 .
I followed the link instruction you indicated and after a lot of problem with the i2cmaster library I got compiled and uploaded the scripts. But nothing happened.
I found an old post "I2CMaster Lib hangs my Arduino" addressing exactly my problem.

During compiling I get a lot of errors. Here only the first lines.
If I only erase I2cmaster.S I can compile without error but sketch hangs and Serial MOnitor shows nothing.
If I erase test_i2cmaster.c I got following errors:

What I am doing wrong?

C:\Users\ANC\AppData\Local\Temp\cccNKvcN.ltrans0.ltrans.o: In function ReadAddr': D:\ArduinoIDE\Portable\sketchbook\ChangeAddressMLX90614\remap_mlx90614/remap_mlx90614.ino:102: undefined reference to i2c_start_wait(unsigned char)'
D:\ArduinoIDE\Portable\sketchbook\ChangeAddressMLX90614\remap_mlx90614/remap_mlx90614.ino:103: undefined reference to i2c_write(unsigned char)' D:\ArduinoIDE\Portable\sketchbook\ChangeAddressMLX90614\remap_mlx90614/remap_mlx90614.ino:104: undefined reference to i2c_rep_start(unsigned char)'
D:\ArduinoIDE\Portable\sketchbook\ChangeAddressMLX90614\remap_mlx90614/remap_mlx90614.ino:106: undefined reference to i2c_readAck()' D:\ArduinoIDE\Portable\sketchbook\ChangeAddressMLX90614\remap_mlx90614/remap_mlx90614.ino:109: undefined reference to i2c_readAck()'
D:\ArduinoIDE\Portable\sketchbook\ChangeAddressMLX90614\remap_mlx90614/remap_mlx90614.ino:111: undefined reference to i2c_readNak()' D:\ArduinoIDE\Portable\sketchbook\ChangeAddressMLX90614\remap_mlx90614/remap_mlx90614.ino:112: undefined reference to i2c_stop()'
C:\Users\ANC\AppData\Local\Temp\cccNKvcN.ltrans0.ltrans.o: In function ReadTemp': D:\ArduinoIDE\Portable\sketchbook\ChangeAddressMLX90614\remap_mlx90614/read_temp.ino:23: undefined reference to i2c_start_wait(unsigned char)'
D:\ArduinoIDE\Portable\sketchbook\ChangeAddressMLX90614\remap_mlx90614/read_temp.ino:24: undefined reference to i2c_write(unsigned char)' D:\ArduinoIDE\Portable\sketchbook\ChangeAddressMLX90614\remap_mlx90614/read_temp.ino:25: undefined reference to i2c_rep_start(unsigned char)'
D:\ArduinoIDE\Portable\sketchbook\ChangeAddressMLX90614\remap_mlx90614/read_temp.ino:26: undefined reference to i2c_readAck()' D:\ArduinoIDE\Portable\sketchbook\ChangeAddressMLX90614\remap_mlx90614/read_temp.ino:27: undefined reference to i2c_readAck()'
D:\ArduinoIDE\Portable\sketchbook\ChangeAddressMLX90614\remap_mlx90614/read_temp.ino:28: undefined reference to i2c_readNak()' D:\ArduinoIDE\Portable\sketchbook\ChangeAddressMLX90614\remap_mlx90614/read_temp.ino:29: undefined reference to i2c_stop()'

jremington:
The data sheet for the MLX90614 has information on emissivity corrections.

The correction can be applied after you make the measurement – there is no need to update the sensor. For the record, you need to acquire both the ambient (chip) temperature Ta, and the object temperature Tom in Kelvin as measured by the sensor.

The corrected object temperature Toc is given by the following expression in C, where eps is the surface emissivity:

Toc = pow( ( ( (pow(Tom,4)-pow(Ta,4))/eps) + pow(Ta,4) ), 0.25);

For very shiny objects (emissivity < 0.1), correction is usually not possible and contactless temperature measurements become impractical or impossible.

I cannot find this in the data sheet. Do you have a link please

I derived that expression from the information in the data sheet. It is just algebra.

Also discussed here.

albnar:
Hi,
I am development a prototype for contactless temperature measurements on steels bodies. Emissivity is a factor I have to change for calibration of sensor, because bodies for my application are very shiny.
I am using Adafruit MXL90614 IR-sensors. As a standard, the MLX90614 is calibrated for an object emissivity of 1. Shiny steel has a very low emissivity value.
How can I change it?
Best regards

You cannot use far IR to measure the temperature of a bare metal surface at room temperature, its a mirror to IR, you end up measuring the temperature of whatever is reflected in that mirror.

Once metals get hot (red hot and above) the emissivity increases (they stop being reflective), and temperatures can be measured.

Most non-metaliic coatings can make bare metal measurable, anodizing, paint, cling-film. Most organic compounds are very emissive for far IR (polythene is a notable exception).