IR Thermometer, Stopwatch, Cooking Timer, Inactivity Tracker

Hardware components:
A000066 iso both
Arduino UNO & Genuino UNO
× 1
Adafruit MLX90614
× 1
Atmel AVR for Arduino
328P/168P/8A
× 1
11441 01
SparkFun 7-Segment Serial Display – Red
3 digit display used
× 1
12002 04
Breadboard (generic)
8×2 cm
× 2
160 20
16 MHz Crystal
× 1
E switch eg1218 image 75px
Slide Switch
× 1
30 mm Red Push Switch
any big red push switch
× 1
22 mm White Push Switch
× 1
Adafruit industries ada1536 image
Buzzer
× 1
Colored pin header (generic)
× 1
MLX90614 IR Temperature Sensor
× 1
LED Dot Laser (generic)
× 1
USB A Connector
× 1
AMS1117 3.3V Voltage Regulator
× 1
150 mAH 3.7V LiPo battery
cylindrical
× 1
Software apps and online services:
Ide web
Arduino IDE

 

IR Thermometer, Stopwatch, Cooking Timer, Inactivity Tracker

STORY

Idea

This is a story about making an pocket carry-able USB stick like IR Thermometer made using Arduino programming and some other stuff. The device will also have stopwatch function, kitchen timer and inactivity tracker function.

IR Thermometer is an IR radiation-based temperature sensing device which allows for the measurement of the average temperature of a surface it’s facing – most probably with Wien’s displacement law or Stefan–Boltzmann law from highs school physics.

A stopwatch is a basic time measurement device used in sports, scientific experiment, etc. to measure lapsed time. Today, hardware stopwatches (the analog type) are kind of extinct and replaced by a so-called smartphone app. A kitchen timer is a device that alerts cook by buzzing an alarm set such that something being cooked needs checking.

An inactivity tracker is a periodic timer that alerts a person to move after every X amount of time. This helps one to get a minute break from idle state and practice healthy life.

Making The Thing!

Step 1: Gather all the ingredients, imagine and make a mental map of what goes where!

Take measurements, make necessary holes, place components and solder.

Step 2: Use heat shrink tube and 0 Ohm resistors to interconnect things, 1k resistors on display segment pins, and solder according to the schematic.

Step 3: Interconnect both layers.

Step 4: Upload test code and check if everything operates. If so, align top and bottom layer with toothpicks and warp on both ends with thin tape.

Now, fill the gap with the hot glue and wait 5 minutes. Now, your sturdy device is ready to roll.

Writing the Software

Here, we will use our good old friend, Arduino IDE, to write the program.

Before we get into code, let’s get an idea how the hardware connections affect the code. The small white momentary push button is the menu selector switch which is interrupt driven; the same goes for the big red push button – connected for falling edge INT 0 and INT 1 on Digital Pin 2 and 3.

Digital pin 4 is the buzzer driver pin and A0 is the laser driver pin. A1, A2, A3 are display digit pins; pins 5-12 are segment pins. A4, A5 Digital Pins are for I2C communication with the IR sensor.

Finally, thanks to Dean Reading for the Arduino 7-Segment Library and Limor Fridge for the Arduino MXL90614 Library – life made easy! Based on their library example, the basic code is developed – right now only Ambient and Object Temperature detection function is enables.

I will add the other functions soon! So, stay tuned.

Circuit of IR Thermometer, Stopwatch, Cooking Timer, Inactivity Tracker

Circuit of IR Thermometer, Stopwatch, Cooking Timer, Inactivity Tracker

CODE

Test Code Ver 0.1C/C++
Beta
// Thanks to Lady Ada and Read for MLX90614 and Sevseg library !

#include "SevSeg.h"
#include <Wire.h>
#include <Adafruit_MLX90614.h>


#define PIN_PWR_SENESOR 13
#define PIN_PWR_LASER A0
#define PIN_PRESS_SWITCH1 2
#define PIN_PRESS_SWITCH2 3
#define PIN_BUZZER_ALERM 4

Adafruit_MLX90614 mlx = Adafruit_MLX90614();
SevSeg sevseg; //Instantiate a seven segment controller object


volatile int test =0;
volatile int test2 = 0;
float T_amb;
float T_obj;



void setup() {
   pinMode(PIN_PRESS_SWITCH1, INPUT_PULLUP);
  attachInterrupt(0, SW1, FALLING);// Interrupt for Swithc 1

  pinMode(PIN_PRESS_SWITCH2, INPUT_PULLUP);
  attachInterrupt(1, SW2, FALLING);// Interrupt for Swithc 2
  pinMode(PIN_PWR_SENESOR, OUTPUT);
    pinMode(PIN_PWR_LASER, OUTPUT);
       pinMode(PIN_BUZZER_ALERM, OUTPUT);
    digitalWrite(PIN_PWR_SENESOR,HIGH); // powers the regulator + IR sensor
    digitalWrite(PIN_PWR_LASER,LOW);
       digitalWrite(PIN_BUZZER_ALERM,LOW);
  
  byte numDigits = 3;   
  byte digitPins[] = {A1, A2, A3};
  byte segmentPins[] = {11, 9, 7, 6, 5, 10, 8, 12};
  bool resistorsOnSegments = false; // Use 'true' if on digit pins
  byte hardwareConfig = COMMON_ANODE; // See README.md for options
     
  sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments);
  sevseg.setBrightness(100);
   mlx.begin();
}

void loop() {
  static unsigned long timer = millis();
  static int seconds = 0;
  
  if (millis() >= timer) {
    seconds++; // 100 milliSeconds is equal to 1 deciSecond
    timer += 1000; 
    if (seconds == 100000) { // Reset to 0 after counting for 1000 seconds.
      seconds=0;
      
    }
    sevseg.setNumber(T_obj, 1);
  }
  if(test==0)
  {
// T_amb = mlx.readAmbientTempC();
 T_obj = mlx.readObjectTempC(); 
sevseg.setNumber(T_obj, 0);
  sevseg.refreshDisplay(); 
   sevseg.refreshDisplay(); 
    sevseg.refreshDisplay(); 
     sevseg.refreshDisplay(); // Must run repeatedly
  }
if (test==1)
{
  T_amb = mlx.readAmbientTempC();
//  T_amb=T_amb*10;
  sevseg.setNumber(T_amb, 1);
  sevseg.refreshDisplay(); 
   sevseg.refreshDisplay();
    sevseg.refreshDisplay(); 
     sevseg.refreshDisplay(); // Must run repeatedly
     
}
}

void SW1()
{
  
  test=1;
  digitalWrite(PIN_PWR_Laser,HIGH);
}
void SW2()
{
  test=0;
  digitalWrite(PIN_PWR_Laser,HIGH);}

Read More: IR Thermometer, Stopwatch, Cooking Timer, Inactivity Tracker

 


About The Author

Ibrar Ayyub

I am an experienced technical writer holding a Master's degree in computer science from BZU Multan, Pakistan University. With a background spanning various industries, particularly in home automation and engineering, I have honed my skills in crafting clear and concise content. Proficient in leveraging infographics and diagrams, I strive to simplify complex concepts for readers. My strength lies in thorough research and presenting information in a structured and logical format.

Follow Us:
LinkedinTwitter

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top