Introduction: DIY Non Contact IR Thermometer V1.0
Currently, we are chasing an invisible monster named Corona Virus ( COVID-19 ) and we are going through the biggest health crisis in our time due to a sharp increase in infection cases. One of the main symptoms of the COVID-19 infected person is an increase in body temperature, in addition to other symptoms such as pain in the body, difficulty in breathing.
It is very essential to monitor continuously the body temperature to detect a corona patient at a very early stage so that proper medication may be taken for fast recovery.
The normal IR thermometer can measure the temperature of a covid patient and also may spread the virus. The main drawback of the handheld thermometer is its performance depends on the operator and the distance to the forehead. To address these problems, a device is made that can be mounted on the wall for fever screening in public areas without an operator. The hardware can measure human body temperature automatically when the distance between the sensor and forehead is adequate.
Support me On Patreon:
If you enjoy my work here on Instructables, consider joining my Patreon, it will be a great help for me to make more interesting projects in the future.
Patreon Link:https://www.patreon.com/opengreenenergy
Video Tutorial:
Credit :
The main source of inspiration for this project is from the project iThermowall, I will give full credit to the authors of this project.
I thought this project is very useful in this critical time and I can use my skill to write a DIY guide by including precise instruction and good pictures for illustration so that anyone can recreate it easily.
Supplies
Components Required
1. Arduino Nano ( Amazon )
2. GY-906 Temperature Sensor ( Amazon )
3. OLED Display ( Amazon )
4. Infrared Proximity Sensor ( Amazon )
5. TP4056 Charger Module ( Amazon )
6. 18650 Battery ( Banggood )
7. 18650 Battery Holder ( Amazon )
8. 5 V DC-DC Step-Up Converter ( Amazon )
9. Rocker Switch -15 × 21 mm ( Amazon)
10. 5 mm Green LED ( Amazon )
11. 5 mm RED LED ( Amazon )
12. 2 x 330 Ohm Resistors ( Amazon )
13. Piezo Buzzer ( Amazon )
14. Prototype Board ( Amazon )
15. Header Pins ( Amazon )
16. 22 AWG Wires ( Amazon )
17. Jumper Wires ( Amazon )
Tools Used:
1. Soldering Iron ( Amazon / Banggood )
2. Wire Cutter ( Amazon / Banggood )
3. Wire Stripper ( Amazon / Banggood )
4. 3D Printer ( Amazon / Banggood )
5. Hot Air Blower ( Amazon )
Step 1: How It Works ?
The working principle is very simple, the infrared thermometer sensor MLX90614 reads the human body temperature when the distance ( measured by IR sensor ) between the forehead and the sensor matches a set value. The sensor reading is sent to Arduino for processing and the processed value is displayed on a 0.96" OLED Display.
Apart from OLED display, two LED and one buzzer is used to indicate the output.
1. When the body temperature is normal, Green LED ( LED1 ) will turn on and the buzzer will beep.
2. When the body temperature is higher than 104 degF, Red LED ( LED2 ) will be ON and the buzzer will beep for a longer time.
Step 2: Power Supply
The power required for the entire circuit is provided by two 18650 batteries. The two batteries are connected in parallel for making a higher capacity battery pack to get a longer backup. The battery pack is charged by a TP4056 charger module.
The battery pack voltage is stepped up to 7V by using a boost converter module ( MT3608 ). Then the out from the boost converter is connected to Arduino's Vin pin.
A rocker switch is placed in between the charger module TP4056 output and the boost converter.
Step 3: Prepare the Arduino and Temperature Sensor Board
To keep costs down, the manufacturer often sends you the board and headers pin but expects you to solder them to the board. I have received the Arduino Nano and MLX 90614 sensor without soldering the header pins.
To solder pin headers to a board, first put the pin headers in a breadboard. That's optional, but it's a great way to make sure the pin headers will be perpendicular to the board and parallel to each other, making it easy to insert the board elsewhere. Place the board on top of the headers with the pins going through the holes in the board.
Use a soldering iron with a fine tip since you'll be working with small parts that are close together. The soldering result should be a cone-shaped bit of solder covering both the circular pad and the bottom part of the pin. There should not be any solder connecting two pins together.
Step 4: MLX90614 Infrared Temperature Sensor
The MLX90614 is an infrared thermometer for non-contact temperature measurements capable of measuring temperatures between -70 to 380°C. The sensor uses IR sensitive thermopile detector chip and the signal conditioning ASIC integrated into a single chip. It works based on Stefan-Boltzmann's law which states that all objects emit IR energy and the intensity of this energy will be directly proportional to the temperature of that object. The sensing unit in the sensor measures how much IR energy is emitted by a targeted object and the computational unit converts it into temperature value using a 17-bit in-built ADC and outputs the data through an I2C communication protocol.
The sensor measures both the object temperature and ambient temperature to calibrate the object temperature value. The MLX 90614 sensor can read the ambient temperature in the range of -40 to 125 ˚C (-40 to 257 °F) and object temperature in the range of -70 to 380 ˚C (-94 to 716 °F).
The connection of the infrared thermometer with Arduino is very simple since it uses the I2C communication interface like many other components.
The MLX90614 thermometer has 4 pins: VIN, GND, SCL, and SDA.
The connections should be as follows:
Arduino --> MLX 90614
5V ---> VIN
GND --> GND
A5 ----> SCL
A4 ----> SDA
Step 5: Prepare the Battery Pack
We have to connect the two 18650 batteries in parallel. The battery slot that I have used is a two slot holder with independent terminal for connection. To make the parallel connection, connect two terminals on each side together by using a piece of wire.
First apply small amount of flux to the terminals, then short them by using the wire.
Next solder red extension wire to the positive terminal and black wire to the negative terminal of the battery holder.
Step 6: Infrared Proximity Sensor
Currently, handheld thermometers are quite popular for screening the fever. However, the handheld thermometer performance depends on the operator and the distance to the forehead. To overcome these problems, an Infrared proximity sensor is used to measure the distance between the sensor and the forehead, when the distance is adequate, the temperature reading will be sensed and displayed. In this way, the accuracy of the measurement is improved.
You can set the detection distance from proximity sensor to object by adjusting the potentiometer on the sensor module. Rotating the potentiometer clockwise will increase detection distance and counter-clockwise will reduce the detection distance. I have set this distance to approximately 50 mm.
The connections should be as follows:
Arduino --> IR Sensor
3.3V ---> VCC
GND --> GND
D9 ----> OUT
Step 7: OLED Display
To display the body temperature, a 0.96" OLED display is used. It has 128x64 resolution and uses an I2C bus to communicate with the Arduino. Two pins SCL (A5), SDA (A4) in Arduino Nanno are used for communication.
I am using the Adafruit_SSD1306 library to display the parameters.
First, you have to download the Adafruit_SSD1306. Then install it.
The connections should be as follows:
Arduino --> OLED
5V --->VCC
GND -->GND
A4----> SDA
A5----> SCL
Step 8: LED Indication
Two LEDs are used to indicate whether the body temperature is normal or abnormal. The green LED indicate when the body temperature is normal and RED LED indicates the abnormal condition ( when the temperature is above 104 degF)
The green LED ( LED1 ) is connected to Arduino digital pin D3 and Red LED ( LED2 ) is connected to D5. To limit the current of the led, two 330 Ω resistors are used. Solder the resistor to the positive terminal of LEDs. The longer leg of the LED indicates the positive terminal.
Connect 4 jumper wires to the LEDs as shown above. Here I have to use female-female jumper wires for easier connection.
Step 9: Buzzer for Alert
To provide alerts during the screening of the human body, a piezo buzzer is used. The buzzer has two terminals, the longer one is positive and the shorter leg is negative. The sticker on the new buzzer has also " + " marked to indicate the positive terminal.
You can solder wires to the Buzzer pins or you may use female jumper wires as I have used here.
The connections should be as follows:
Arduino --> Buzzer
D7 --> Positive terminal
GND --> Negative terminal
Step 10: Prepare an Extension Board
Most of the modules and components are connected to Arduino pin 5V and GND. Unfortunately, the Arduino Nano has only one 5V pin and two GND pins, but in reality, we need more such pins for connecting the components. To overcome this challenge, I have prepared an extension board by using a small piece of the prototype board.
Apart from the 5V and GND pins we need two SDA and SCL pins for connecting the MLX 90614 sensor and OLED display.
Here I have use right angle and straight male header pins. You can easily make it by following the above picture. In each row, all the pins are shorted.
Step 11: Make the Circuit
Make the circuit by following the schematic diagram given in the above picture. I have already explained the connection details of each component and module. To make it simpler, I have prepared a breadboard circuit for you.
Step 12: PCB Design
After making the circuit, I realized that the wiring connection is really messy. To make the wiring cleaner and simpler, I have designed a custom PCB for this project. You are free to use my PCB Gerber files.
Thank You NextPCB:
This project is successfully completed because of the help and support from NextPCB. Guys if you have a PCB project, please visit their website and get exciting discounts and coupons.
Only 0$ for 5-10pcs PCB Prototypes:https://www.nextpcb.com/?code=greenenergy
Register and get $100 from NextPCB: https://www.nextpcb.com/register?code=greenenergy...
See more info about PCB Assembly Capabilities: https://www.nextpcb.com/register?code=greenenergy...
Step 13: Software and Libraries
First, download the Arduino sketch and installed all the libraries.
Download and Install the following Libraries:
1. Adafruit-MLX90614-Library: https://github.com/adafruit/Adafruit-MLX90614-Lib...
2. Adafruit_SSD1306 Library: https://github.com/adafruit/Adafruit_SSD1306
3. millisDelay: https://github.com/ansonhe97/millisDelay
Plugin the USB cable into the Arduino Nano with your laptop or desktop PC.
Set the correct board and COM Port number and upload the code into the Arduino.
Attachments
Step 14: 3D Printed Enclosure
The enclosure has two parts:
1. Front Case
2. Back Case.
You need a support structure for printing the front case. I have printed it in the wrong way. The correct way to print the enclosure is the reverse way as shown above.
I have used my Creality CR-10 printer and 1.75 mm PLA filaments to print the parts.
My settings are:
1. Print Speed: 60 mm/s
2. Layer Height: 0.2mm ( 0.3 also works well)
3. Fill Density: 30%
4. Extruder Temperature: 200 deg C
5. Bed Temp: 65 deg C
As I have printed the front case in the wrong way, most of the mounting standoffs got broken. So I have used hot glue or double-sided tape to mount the parts.
Step 15: Assembling
Now you can install all the components to their respective slots. All the parts are installed on the front case, but the battery holder will be installed in the back case.
I have used hot glue and double-sided tape to mount all the parts.
After installing the parts, close the back case and secure the 4 screws at the corner.
Now our device is ready to use.
Step 16: Mounting and Testing
Before first use, I will suggest charging the device with a micro USB cable. You can use any 5V / 1A charger, it will work for you. The red led on TP4056 indicates batteries are charging, and the blue led indicates fully charged.
Now, switch on the rocker switch, you will notice the OLED display will start with the message " initializing ".
You can test it by placing your hand in front of the sensor, when the distance is adequate, the body temperature will be displayed on the OLED display, LED will turn on and you will also hear a beep sound.
To simulate the high temperature, I have placed the soldering iron tip in front of the sensor, you will notice that the red LED will turn on and hear a long beep sound from the buzzer.
Once it is confirmed that the device is working as per our planning, you may install it in a suitable location. The height of the sensor shall be approximately equal to the height of your forehead from the ground.
If you enjoyed this article, don’t forget to pass it along!
Follow me for more DIY projects and ideas. Thank you !!!

Runner Up in the
Arduino Contest
63 Comments
1 year ago
This is a great design for an IR thermometer, well documented and easy to follow. But PLEASE do not perpetuate the myth that covid19 can reliably be detected by measuring skin temperature. Not only is skin temperature *not* an accurate indication of the patient's core temperature, covid19 does not always cause a fever. So, it is entirely possible for the patient to be covid-positive and infectious, but to still have a normal temperature.
Question 2 years ago
Why do you step the voltage up to 7V?
The arduino needs only 5V, which the TP4056 already provides (with over discharge protection) with a stable value, if I'm not mistaken?
Answer 2 years ago
Arduino Nano specs call out 7-12 Vdc on the Vin pin, although I have seen other 3rd party specs say anywhere from 6-20Vdc will work. Personally, I would stay on the low end of the Arduino published range (7 Vdc) simply because the linear regulator on the board will dissipate excess voltage as heat. Excess heat is to be avoided IMO and anyway, applying more power than is needed is simply a waste.
Reply 2 years ago
That is your mistake! Don't use the Vin pin, the Arduino has a 5V pin that is made to take 5V in, no current wasted through the regulator... the TP4056 provides a steady stable 5V (until the safe battery cutoff when it is empty), so no need to do some step-up shenanigans.
Reply 2 years ago
I would not call it so much a mistake, but more a matter of choice, taki2007.
You can certainly do as you suggest, but bypassing the voltage regulator and the protection it provides to the Arduino board is not best practice. I always power my board via either the Vin pin, the USB connector or the power jack.
Answer 2 years ago
(Moreover, the Arduino steps it down to 5V through a linear regulator so it is wasted anyway?)
Question 2 years ago
I have one question. If i want the code display the temperature in Celcius degree, which parts of the code i should change?
Answer 2 years ago
For Celcius, you can simply use the iThermowall code on which this project is based.
https://www.sciencedirect.com/science/article/pii/...
Comparing the F and C versions will show what was changed.
2 years ago on Step 16
Hi, one question. If I want to change the temperature to celsius, how can I modify the program. Excellent project. Thanks
Why are you using a calibrating formula, is the same to be used for °C reading...
Reply 2 years ago
For Celcius, you can simply use the iThermowall code on which this project is based.
https://www.sciencedirect.com/science/article/pii/...
Question 2 years ago
Question :
Is this normal: when i place my hand in front of the temp-sensor around 50mm away from it......it says 37;5 ° C . When i go closer then it goes to 38° C and more...when i go backwards it shows 39° C or more....The reading is not stable....Is this normal or how can i stabilise this please?
2 years ago
Here is the script (code or sketch ) with the changes for viewing Celsius instead of Fahrenheit in your display.
Guido
Tip 2 years ago
Hi,
i did a search in the arduino-forum and i did ask a question.
Directly there was an answer from UkHeliBob
To change from F to C it is in the script ( code or sketch ) that it must be changing :
So , i place the line number 105 not commented
105 temptot += mlx.readObjectTempC(); //add the reading to the total
and line number 106 commented :
106 // temptot += mlx.readObjectTempF();
Then at line 168 , i place it in not commented :
168 display.print("C ");
and line 175 commented :
175 // display.print("F ");
And at last ( i think) i place line 176 not commented :
176 display.print("C ");
I did not yet try this out, because i am building the machine for now.
I let you know...if it is working in Celsius....lol......
Thanks to UKIHELIBOB (Arduino-forum)
Selcius and Fahrenheit with "Adafruit-MLX90614-Library in an Arduino-scrypt - Using Arduino / Programming Questions - Arduino Forum
Guido
Question 2 years ago
Hi, what a beautiful project. I will make it also when i know it is possible for reading the temparature in ° Celsius instead of Fahrenheit......
Is it possible please? Must i change the code in the Arduino-script (code or sketch) please?
Say it is possible..... :-)
thank you
Guido from Belgium the Flanders
2 years ago
Cool project! One concern: where did you get 104°F as a threshold temperature for Covid-19 infection? I'm no medical expert but the general advice I've heard is that a body temperature of 103°F is serious and over 104°F is heading into convulsions and death territory - definitely time to be in a hospital. The go/no go casual Covid-19 temperature screening threshold for most businesses seems to be around 100°F.
2 years ago
Awesome follow through and design (as always), thanks so much for sharing all your creations!
Bob D
2 years ago on Step 13
While this is a good project there is a flaw that will produce false positives.
The MLX90614 is set to a emissivity of one at the factory. The emissivity of human skin is .95 to .98. If the emissivity of the object tested is lower than the set point of the sensor the temperature reading will be higher. There is a register on the MLX90614 (0x04) which can be used to set the emissivity to the correct value. If the emissivity is set to one (1) than all the readings will be too high. The result could be a serious problem for those individuals. They would waste time and money testing for something that did not exist.
The other point is the temperature of the human is not a reliable method to detect if someone has Covid. Multiple studies thorough out last year conducted by NIH and others have shown that out of 5000 people that were positive for Covid less than 20% presented a temperature increase.
Paul M PHD, MD
2 years ago
If i don’t use the PCB. Can i made This project following your circuit?thanks
2 years ago
If you could post total cost of this project, it would be helpfull.
Reply 2 years ago
The cost mostly depends on where are you sourcing components from.
My local DIY store charges twice (at least) the Amazon price and the Amazon is often twice as expensive as aliexpress.com
Plus 3d printed shell and PCB can vary in price widely.
The electronics for this project can be obtained for under 20 bucks easily if you are ready to wait for shipment coming from overseas.