Qwiic IR Array - MLX90640 55° FOV

$ 59.95 $ 49.95

Added to your shopping cart

The MLX90640 contains a 32x24 array of thermopile sensors creating, in essence, a low resolution thermal imaging camera. As the images show you can detect surface temperatures from many feet away with an accuracy of ±1.5°C (best case). We’ve packaged the MLX90640 on an easy to use Qwiic board with mounting holes and a smattering of decoupling caps. We’ve written an example Arduino sketch and Processing app to get started with the sensor quickly!

The MLX90640 occupies a very interesting spot in the thermal imaging space. It is much higher resolution than the Panasonic Grid-EYE and much lower cost than the FLiR Lepton cameras. A very exciting advancement!

Not Uno Compatible: The MLX90640 requires complex calculations by the host platform. A regular Uno doesn't have enough RAM or flash to complete the complex computations required to turn the raw pixel data into temperature data. You will need a microcontroller with 20,000 bytes or more of RAM. We recommend a Teensy 3.1 or above.

This board is one of our many Qwiic compatible boards! Simply plug and go. No soldering, no figuring out which is SDA or SCL, and no voltage regulation or translation required!

We do not plan to regularly produce SparkX products so get them while they’re hot!

Experimental Product: SparkX products are rapidly produced to bring you the most cutting edge technology as it becomes available. These products are tested but come with no guarantees. Live technical support is not available for SparkX products. Head on over to our forum for support or to ask a question.
  • 32x24 pixel IR Array
  • Accuracy of ±1.5°C per pixel (best case)
  • Field of View: Part BAB is 55°x35°
  • Supply voltage: 3.3V
  • Current consumption: Less than 23mA
  • Operating Temperature: -40 to 85°C
  • Target Sensing Temperature: -40 to 300°C
  • Programmable refresh rate: 0.5Hz to 64Hz
  • I²C Interface

Qwiic IR Array - MLX90640 55° FOV Product Help and Resources

New!

Qwiic IR Array (MLX90640) Hookup Guide

September 20, 2018

The Melexis MLX90640 contains a 32x24 array of thermopile sensors creating, in essence, a low resolution thermal imaging camera. In this guide, we’ll go over how to connect your Qwiic Infrared Array with MLX90640 and get it communicating with Processing to produce a nice thermal image.

Customer Comments

  • No luck with this on a Arduino Due. Ordered both this and the 110 degree variant, and with both I am getting the error “Parameter extraction failed”, specifically -4, or outlierPixCnt >4. The values returned for both frames are 0 or NaN, with Vdd = inf

    I tried adding delays, reducing I2C clock speed. Can anyone suggest help?

    eeMLX90640 when output gives the following 8 167 35227 0 8289 5 800 992 1062 41525 389 1165 0 264 0 0 8 167 35227 0 8289 5 800 992 1062 41525 389 1165 0 264 0 0 8 167 35227 0 8289 5 800 992 1062 41525 389 1165 0 264 0 0 8 167 35227 0 8289 5 800 992 1062 41525 389 1165 0 264 0 0 8 167 35227 0 8289 5 800 992 1062 41525 389 1165 0 264 0 0 8 167 35227 0 8289 5 800 992 1062 41525 389 1165 0 264 0 0 8 167 35227 0 8289 5 800 992 1062 41525 389 1165 0 264 0 0 8 167 35227 0 8289 5 800 992 1062 41525 389 1165 0 264 0 0 8 167 35227 0 8289 5 800 992 1062 41525 389 1165 0 264 0 0 8 167 35227 0 8289 5 800 992 1062 41525 389 1165 0 264 0 0 8 167 35227 0 8289 5 800 992 1062 41525 389 1165 0 264 0 0 8 167 35227 0 8289 5 800 992 1062 41525 389 1165 0 264 0 0 8 167 35227 0 8289 5 800 992 1062 41525 389 1165 0 264 0 0 8 167 35227 0 8289 5 800 992 1062 41525 389 1165 0 264 0 0 8 167 35227 0 8289 5 800 992 1062 41525 389 1165 0 264 0 0 8 167 35227 0 8289 5 800 992 1062 41525 389 1165 0 264 0 0 8 167 35227 0 8289 5 800 992 1062 41525 389 1165 0 264 0 0 8 167 35227 0 8289 5 800 992 1062 41525 389 1165 0 264 0 0 8 167 35227 0 8289 5 800 992 1062 41525 389 1165 0 264 0 0 8 167 35227 0 8289 5 800 992 1062 41525 389 1165 0 264 0 0 8 167 35227 0 8289 5 800 992 1062 41525 389 1165 0 264 0 0 8 167 35227 0 8289 5 800 992 1062 41525 389 1165 0 264 0 0 8 167 35227 0 8289 5 800 992 1062 41525 389 1165 0 264 0 0 8 167 35227 0 8289 5 800 992 1062 41525 389 1165 0 264 0 0 8 167 35227 0 8289 5 800 992 1062 41525 389 1165 0 264 0 0 8 167 35227 0 8289 5 800 992 1062 41525 389 1165 0 264 0 0 8 167 35227 0 8289 5 800 992 1062 41525 389 1165 0 264 0 0 8 167 35227 0 8289 5 800 992 1062 41525 389 1165 0 264 0 0 8 167 35227 0 8289 5 800 992 1062 41525 389 1165 0 264 0 0 8 167 35227 0 8289 5 800 992 1062 41525 389 1165 0 264 0 0 8 167 35227 0 8289 5 800 992 1062 41525 389 1165 0 264 0 0 8 167 35227 0 8289 5 800 992 1062 41525 389 1165 0 264 0 0 8 167 35227 0 8289 5 800 992 1062 41525 389 1165 0 264 0 0 8 167 35227 0 8289 5 800 992 1062 41525 389 1165 0 264 0 0 8 167 35227 0 8289 5 800 992 1062 41525 389 1165 0 264 0 0 8 167 35227 0 8289 5 800 992 1062 41525 389 1165 0 264 0 0 8 167 35227 0 8289 5 800 992 1062 41525 389 1165 0 264 0 0 8 167 35227 0 8289 5 800 992 1062 41525 389 1165 0 264 0 0 8 167 35227 0 8289 5 800 992 1062 41525 389 1165 0 264 0 0 8 167 35227 0 8289 5 800 992 1062 41525 389 1165 0 264 0 0 8 167 35227 0 8289 5 800 992 1062 41525 389 1165 0 264 0 0 8 167 35227 0 8289 5 800 992 1062 41525 389 1165 0 264 0 0 8 167 35227 0 8289 5 800 992 1062 41525 389 1165 0 264 0 0 8 167 35227 0 8289 5 800 992 1062 41525 389 1165 0 264 0 0 8 167 35227 0 8289 5 800 992 1062 41525 389 1165 0 264 0 0 8 167 35227 0 8289 5 800 992 1062 41525 389 1165 0 264 0 0 8 167 35227 0 8289 5 800 992 1062 41525 389 1165 0 264 0 0 8 167 35227 0 8289 5 800 992 1062 41525 389 1165 0 264 0 0 8 167 35227 0 8289 5 800 992 1062 41525 389 1165 0 264 0 0 8 167 35227 0 8289 5 800 992 1062 41525 389 1165 0 264 0 0 8 167 35227 0 8289 5 800 992 1062 41525 389 1165 0 264 0 0 8 167 35227 0 8289 5 800 992 1062 41525 389 1165 0 264 0 0

    • The MLX90640 I2C can only read the EEProm at <400K, otherwise you get errors or crazy values and parameter extraction failed. It also needs 80+ ms to power on before you can read it.

      The MLX90640 needs 1M on the i2C to read the device at 32i Hz (chessboard interlace mode), and probably requires TV interlace mode and improved reading code to run at 64i Hz. Otherwise it complains about error counts.

      It should be noted by Melexis if they happen to read this, that their readout from memory in chessboard board mode is idiotic, as it wastes half the i2c bandwidth, making 64i Hz mode almost impossible to achieve.

      It should be noted that the small arduino type micros cannot process the floating point temperature calculations while running at any kind of framerate, neither can they transmit the data back over RS232 while running at any reasonable framerate. My ESP8266 running at 160 MHz takes 30ms to read an interlace half-frame at 1M on the I2C, and and takes 60ms to process a frame, so it is unable to operate at a framerate higher than 1000 / 90 => 8i Hz.

      In the end I wrote code to send the short data over UDP, and did the temp calculations on PC, allowing me to get 32i Hz, although then I found that the ESP8266 was injecting huge amounts of noise into the image.

      I believe that the MLX90640 is quite sensitive to low voltage, I have seen it apparently latch-up and require a full power cycle to recover (switched off for several seconds).

      In the end I gave up and used an RPI to read it instead, in which case it worked much better (although there are still issues with i2c speed).

    • Had the same problem. Will be great if you (Nathan seidle) can help updating the the examples to work with Due. Would like to use it very much :) Thanks.

    • I am trying to use this on a Arduino Due as well and I get the exact same error “Parameter extraction failed” and I get NaN and 0, my Vdd is inf as well.

      Would really like to know whats going on here

  • Anyone manage to get the examples to function with Teensy 3.6? I’ve tried the basic example on 110 degree chip and get “Parameter Extraction” error, but array temperature readings change with target and mostly reasonable. Tried Max Refresh Rate example and same result except temp data all the same and strange numbers. Notice 3.6 micro not defined in header files, perhaps should be different I2C buffer length, clock speeds etc? Don’t see obvious hardware changes with new Qwiic models, only color?

  • Has anyone had any luck with gettting this to work with the Arduino/Genuino Intel 101 board?

  • Hi ! Can i use ESP32 OR ESP8266 to do the same?. I need read temp and send to web server. I use IBM Watson to process the data. Thermal image will be the next step but for now only need to see values of array with ESPxxx.

    Thank you!

  • What’s that going on in the GIF video? It almost looks like you’re shining a flashlight at the camera, then shining the light on yourself? Is it an IR flashlight or regular?

    If you did do this with a flashlight, it’s not at all representative of how you’d use the thing in real life. Can we get a real demo, please?

    Maybe you in a hoody, blink eyes, make faces and talk.

    Another cool demo is to rub your hands together until quite warm, then video one hand as it cools back to your normal skin temp.

    • As best as I can figure, he’s drinking a cup of coffee (or some warm liquid). You can tell because when the cup is on the screen, it is the brightest (hottest) point. And then he puts it down and he becomes the hottest point on the screen.

  • Moved

  • I need to know the latency, for tracking applications. There are videos around the place of the sensor in action but with monitors etc in the mix. What’s the expected latency, post-teensy for example?

  • I requested a breakout board for this component only a month ago and its already available for purchase!?! I’m amazed at SparkX’s ability to go from idea to production so quiicly! I don’t know whether this product was inspired by my comment or if it was already in development at that time, but this will certainly find its way into some of my upcoming projects. Thanks!

  • Can you provide a cad model for this?

  • Continued (see next)… Example 2 with warm monitor at top with ice cream container at bottom:

    40 40 39 39 38 38 38 39 38 38 38 38 38 38 37 38 37 37 37 37 37 37 37 37 37 37 37 37 36 37 37 35
    39 39 39 39 38 37 39 38 37 37 38 38 37 37 38 38 36 37 37 37 36 36 37 37 37 36 36 36 36 36 37 35
    40 38 38 38 38 37 37 38 37 37 36 37 37 36 37 37 36 36 36 36 35 36 36 36 36 36 36 36 35 35 35 35
    38 38 38 38 37 37 37 37 36 36 36 36 36 36 36 36 36 36 35 36 35 35 35 34 35 35 35 35 35 35 35 34
    37 37 37 37 35 35 34 34 33 32 32 32 31 31 31 31 30 30 30 30 30 30 30 31 31 31 31 31 31 31 31 31
    35 34 34 33 32 31 31 31 30 30 30 30 29 30 29 29 29 29 30 29 29 29 30 29 29 30 30 29 30 29 30 30
    31 30 30 31 31 30 30 31 30 29 27 27 25 25 23 23 22 21 21 22 21 22 24 26 30 31 29 30 29 29 29 29
    30 30 32 32 32 33 33 32 29 28 23 21 19 18 18 17 15 14 14 13 13 13 15 18 29 30 29 29 29 29 29 29
    29 29 32 33 32 32 32 30 27 24 15 14 13 13 12 12 10 9 7 7 7 8 8 11 27 29 29 29 29 28 29 29
    28 29 30 31 30 30 31 30 27 23 13 12 11 11 10 10 8 8 7 7 6 6 8 11 26 28 29 29 29 28 30 29
    28 29 29 29 29 29 29 29 28 25 9 6 6 6 5 5 5 4 3 3 2 3 3 10 27 28 29 29 29 29 29 30
    28 29 30 30 30 29 29 29 28 26 5 2 1 2 1 1 0 0 -0 -1 -0 -1 1 9 27 29 29 29 29 29 29 29
    29 29 30 30 29 29 29 30 28 27 5 -1 -3 -4 -3 -3 -4 -3 -3 -3 -3 -4 -0 9 27 28 29 29 29 29 29 29
    29 28 30 30 29 29 29 29 29 27 6 -2 -4 -4 -3 -3 -4 -4 -3 -4 -4 -4 -0 9 27 28 29 29 29 29 29 29
    29 29 29 30 29 29 29 29 29 27 8 -0 -4 -4 -4 -4 -4 -4 -4 -4 -4 -4 -0 10 27 28 29 30 29 29 30 30
    29 29 30 30 30 30 30 30 28 27 9 -0 -4 -4 -4 -4 -5 -4 -5 -4 -4 -4 -0 9 27 27 30 29 29 29 29 29
    29 29 30 31 30 30 28 29 27 26 10 1 -5 -4 -5 -4 -4 -4 -5 -4 -4 -4 -1 9 26 27 29 29 29 28 29 29
    29 30 30 31 30 29 28 28 26 24 11 1 -3 -4 -4 -4 -5 -4 -4 -4 -4 -4 -0 8 25 27 29 28 29 29 30 29
    29 30 31 31 30 29 28 28 27 25 14 4 -4 -4 -4 -3 -4 -4 -4 -4 -4 -4 -1 8 24 25 27 28 27 27 28 29
    30 29 31 31 30 29 28 29 27 26 16 5 -4 -4 -3 -4 -4 -4 -4 -3 -4 -4 -1 8 24 25 27 27 27 27 28 28
    30 31 31 32 30 28 27 27 26 25 16 6 -4 -4 -4 -3 -4 -4 -4 -4 -5 -4 -1 7 20 24 27 27 27 27 28 28
    30 31 31 31 29 29 28 28 25 24 15 6 -3 -3 -4 -4 -4 -4 -4 -4 -4 -4 -0 7 19 22 26 27 27 28 29 29
    32 31 30 31 30 29 27 27 23 21 14 9 -2 -4 -3 -4 -4 -5 -4 -4 -3 -3 5 11 20 22 25 26 28 27 28 30
    31 32 31 31 29 29 27 26 24 23 18 14 1 -1 -2 -3 -3 -3 -3 -2 -2 0 11 15 21 23 26 25 27 28 30 29
    
  • Example 2 works well with Teensy 3.5 – my third try. I made the following changes to more clearly see what’s going on:

      for (int x = 0 ; x < 768 ; x++)
      {
            if(x % 32 == 0) Serial.println();  //32 values wide
            Serial.print(mlx90640To[x], 0);  //no fractions
            Serial.print(" ");  //space instead of comma
      }
    
      Serial.println("");
      Serial.println("");  //extra line
      delay(3000);
    

    This gives a view of the long edge of the field of view horizontal when the reference tab is down and drops the noise of the temperature fractions.

    If more boards are made, it would be nice if the reference tab were perpendicular to an edge. Currently, it’s at an odd angle,

    • Can you share what changes you made to get this to work with your Teensy?

      • My first try of Example 2 was on an Adafruit Metro M4. Second try was on a Teensy 3.2. Third try was on a Teensy 3.5 which worked with no changes. Changes above were just for readability.

  • Would it be possible to run processing for example 2 on a teensy 3.5 at the same time as measurements are being taken. Just skipping the serial communications and use SPI instead to send the data to a ILI9341 LCD Display. Would this be too much for the Teensy to handle? I haven’t even tried to do this yet. Just looking for an opinion on whether it would be feasible to do. The other option I was looking at was to send the data to an Android device for processing. I want to make this sensor for portable use.

Customer Reviews

No reviews yet.