Skip to content
  • MySensors
  • OpenHardware.io
  • Categories
  • Recent
  • Tags
  • Popular
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Brand Logo
  1. Home
  2. Hardware
  3. MLX90614 contactless temperature sensor

MLX90614 contactless temperature sensor

Scheduled Pinned Locked Moved Hardware
6 Posts 4 Posters 2.8k Views 5 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • U Offline
    U Offline
    user2684
    Contest Winner
    wrote on last edited by
    #1

    In case somebody can be interested (I've not seen any old posts talking about it), I've just tested this contactless temperature sensor from aliexpress (https://www.aliexpress.com/item/Free-Shipping-GY-906-MLX90614ESF-New-MLX90614-Contactless-Temperature-Sensor-Module-For-Arduino-Compatible/32465332978.html?spm=2114.13010608.0.0.gJhz6T) which is pretty cool.

    It reports BOTH the ambient temperature and the object temperature (the latter ranging from -70 to +380 C), has a standard i2c interface and works great with this library: https://github.com/adafruit/Adafruit-MLX90614-Library.

    The price is also pretty interesting, being around 3.5$.

    It can be used in many applications to e.g. measure the temperature of a body, the temperature of an oven, the temperature of a board, or whatever object could make sense in your project.

    YveauxY 1 Reply Last reply
    2
    • U user2684

      In case somebody can be interested (I've not seen any old posts talking about it), I've just tested this contactless temperature sensor from aliexpress (https://www.aliexpress.com/item/Free-Shipping-GY-906-MLX90614ESF-New-MLX90614-Contactless-Temperature-Sensor-Module-For-Arduino-Compatible/32465332978.html?spm=2114.13010608.0.0.gJhz6T) which is pretty cool.

      It reports BOTH the ambient temperature and the object temperature (the latter ranging from -70 to +380 C), has a standard i2c interface and works great with this library: https://github.com/adafruit/Adafruit-MLX90614-Library.

      The price is also pretty interesting, being around 3.5$.

      It can be used in many applications to e.g. measure the temperature of a body, the temperature of an oven, the temperature of a board, or whatever object could make sense in your project.

      YveauxY Offline
      YveauxY Offline
      Yveaux
      Mod
      wrote on last edited by
      #2

      @user2684 What's your experience on the measurement distance?
      Posts on the internet suggest it is only a few cm's without using a lense, which would make practical use very limited IMHO.

      http://yveaux.blogspot.nl

      1 Reply Last reply
      0
      • U Offline
        U Offline
        user2684
        Contest Winner
        wrote on last edited by
        #3

        It starts "sensing" e.g. the human body when around 50cm away but the real measurement happens only when less than 10 cm away. Agree this is not the best scenario but could be still probably useful for something line on-demand body temperature measurement or when the absolute value has a relative importance (e.g. when a significant variation has to be detected).

        1 Reply Last reply
        0
        • ? Offline
          ? Offline
          A Former User
          wrote on last edited by
          #4

          Hi guys,

          I made a battery powered sensor with MLX90614 to check my furnace's temp. It needs Adafruit's MLX90614 library. I'm using RFM69 radios, so please make sure you chose the right one.

          /**
           * The MySensors Arduino library handles the wireless radio link and protocol
           * between your home built sensors/actuators and HA controller of choice.
           * The sensors forms a self healing radio network with optional repeaters. Each
           * repeater and gateway builds a routing tables in EEPROM which keeps track of the
           * network topology allowing messages to be routed to nodes.
           *
           * Created by Henrik Ekblad <henrik.ekblad@mysensors.org>
           * Copyright (C) 2013-2015 Sensnology AB
           * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors
           *
           * Documentation: http://www.mysensors.org
           * Support Forum: http://forum.mysensors.org
           *
           * This program is free software; you can redistribute it and/or
           * modify it under the terms of the GNU General Public License
           * version 2 as published by the Free Software Foundation.
           *
           *******************************
           *
           * REVISION HISTORY
           * Version 1.0 - Henrik Ekblad
           * 
           * DESCRIPTION
           * Pressure sensor example using BMP085 module  
           * http://www.mysensors.org/build/pressure
           *
           */
          
          // Enable debug prints to serial monitor
          #define MY_DEBUG 
          
          // Enable and select radio type attached
          //#define MY_RADIO_NRF24
          #define MY_RADIO_RFM69
          
          #include <SPI.h>
          #include <MySensors.h>  
          #include <Wire.h>
          
          //MLX90614 library from Adafruit
          #include <Adafruit_MLX90614.h>
          
          Adafruit_MLX90614 mlx = Adafruit_MLX90614();
          
          #define MY_PARENT_NODE_ID 0
          #define TEMP_CHILD 0
          #define TEMP2_CHILD 1
          #define BAT_CHILD 2
          int BATTERY_SENSE_PIN = A0;  // select the input pin for the battery sense point
          int oldBatteryPcnt = 0;
          
          // Sleep time between reads (in ms). Do not change this value as the forecast algorithm needs a sample every minute.
          const unsigned long SLEEP_TIME = 60000; 
          
          float lastTemp=-1;
          float lastTemp2=-1;
          float lastBat=-1;
          
          boolean metric;
          MyMessage tempMsg(TEMP_CHILD, V_TEMP);
          MyMessage temp2Msg(TEMP2_CHILD, V_TEMP);
          MyMessage batMsg(BAT_CHILD, V_VOLTAGE);
          
          void setup() {
          //  metric = getConfig().isMetric;
            mlx.begin();  
                // use the 1.1 V internal reference
           //       pinMode(5, OUTPUT);
          #if defined(__AVR_ATmega2560__)
              analogReference(INTERNAL1V1);
          #else
              analogReference(INTERNAL);
          #endif
          }
          
          void presentation()  {
            // Send the sketch version information to the gateway and Controller
            sendSketchInfo("MLX90614", "1.0");
          
            // Register sensors to gw (they will be created as child devices)
            present(TEMP_CHILD, S_TEMP);
            present(TEMP2_CHILD, S_TEMP);
            present(BAT_CHILD, S_MULTIMETER);
          }
          
          // Loop
          void loop() {
          
            Serial.print("Ambient = "); Serial.print(mlx.readAmbientTempC()); 
            Serial.print("*C\tObject = "); Serial.print(mlx.readObjectTempC()); Serial.println("*C");
              int sensorValue = analogRead(BATTERY_SENSE_PIN);
                int batteryPcnt = sensorValue / 10.23;
                float batteryV  = sensorValue * 0.003363075;
            #ifdef MY_DEBUG
              Serial.print("Battery Voltage: ");
              Serial.print(batteryV);
              Serial.println(" V");
          
              Serial.print("Battery percent: ");
              Serial.print(batteryPcnt);
              Serial.println(" %");
          #endif
              if (oldBatteryPcnt != batteryPcnt) {
                  // Power up radio after sleep
                  sendBatteryLevel(batteryPcnt);
                  oldBatteryPcnt = batteryPcnt;
              }
          
              send(tempMsg.set(mlx.readAmbientTempC(), 2));
              lastTemp = mlx.readAmbientTempC();
          
              send(temp2Msg.set(mlx.readObjectTempC(), 2));
              lastTemp2 = mlx.readObjectTempC();
          
              send(batMsg.set(batteryV, 2));
              lastBat = batteryV;
          
            sleep(SLEEP_TIME);
            
          }
          
          
          1 Reply Last reply
          0
          • U Offline
            U Offline
            user2684
            Contest Winner
            wrote on last edited by
            #5

            Hi, in case can be useful, this sensor is also available through NodeManager (https://github.com/mysensors/NodeManager) as SENSOR_MLX90614.
            Thanks

            1 Reply Last reply
            1
            • wallyllamaW Offline
              wallyllamaW Offline
              wallyllama
              wrote on last edited by
              #6

              Positioning would be critical, but these sensors always make me think of a sort of automated health diagnostic system. It checks your temperature and reports if you have a fever.

              1 Reply Last reply
              0
              Reply
              • Reply as topic
              Log in to reply
              • Oldest to Newest
              • Newest to Oldest
              • Most Votes


              18

              Online

              11.7k

              Users

              11.2k

              Topics

              113.1k

              Posts


              Copyright 2025 TBD   |   Forum Guidelines   |   Privacy Policy   |   Terms of Service
              • Login

              • Don't have an account? Register

              • Login or register to search.
              • First post
                Last post
              0
              • MySensors
              • OpenHardware.io
              • Categories
              • Recent
              • Tags
              • Popular