Home > Projects > LED Projects > An Arduino Thermometer with Digital Display

An Arduino Thermometer with Digital Display

Summary of An Arduino Thermometer with Digital Display


This article guides beginners in building an Arduino-based digital thermometer using a TMP36 sensor and an LOL shield. The project teaches voltage measurement, data conversion from millivolts to Celsius, and displaying numeric values on a LED matrix. It includes wiring instructions, library installation steps, and C code snippets for reading temperature and rendering digits on the display.

Parts used in the Arduino Thermometer with Digital Display:

  • Arduino UNO
  • LOL shield
  • TMP36 Temperature Sensing IC
  • Breadboard
  • Wires
4 min read

This is a project for Arduino to make a Thermometer with Digital Display, aimed at beginners.

Arduino measures the voltage on a TMP36 Temperature sensor, converts the Voltage to Degrees Celcius and Displays the value on an LOL shield display.
Thermometer with Digital Display
Objectives:
* Learn how to use the TMP36
* Learn how to perform numeric and string conversions in Arduino-C  (sketch)
* Learn how to display numbers on the LOL shield

Step 2: Wire it up

Wire the TMP36 as follows:
+5V
GND
SIG => A0

Note: The LOL shield does not come with Headers (as shown in the picture), attached to the topside.

I bought some here: http://www.amazon.co.uk/gp/product/B004RASBVY/ref=oh_details_o06_s00_i00

Step 3: Install the LOL Shield Libraries

Install the Arduino libraries for the LOL shield if you don’t have them already.You can get the link to them from this page:
http://jimmieprodgers.com/kits/lolshield/

Step 4: Let’s Start by Reading the Temperature

We’ll start by reading the temperature from the TMP36 and sending the value to the Serial Monitor (Tools -> Serial Monitor on the Arduino IDE).

The TMP36 outputs a voltage on the SIG pin proportional to temperature.

Zero degrees Celcius = 500mV   (0.5)

Each degree above that = 10mV   (1/100)

Here’s a code segment:

float temperature = getVoltage(A0);                        // Get the voltage reading
temperature = (temperature – .5) * 100;                  // Convert to Temperature (degrees C)

Step 5: Here’s the Full Temperature Reading Code

/*
* Displays Temperature from TMP36 numerically on an LOL shield
* Adapted from (and for more details on this circuit): http://tinyurl.com/c89tvd
*/
//TMP36 Pin Variables
int temperaturePin = 0;
//the analog pin the TMP36’s Vout (sense) pin is connected to
//the resolution is 10 mV / degree centigrade
//(500 mV offset) i.e. 0 degrees = 500mV

/*
* setup() – this function runs once when you turn your Arduino on
* We initialize the serial connection with the computer
*/
void setup()
{
Serial.begin(9600); 
//Start the serial connection with the computer
}

void loop()                     // run over and over again
{
float temperature = getVoltage(temperaturePin); 
// Get the Voltage reading from the tem

perature sensor
temperature = (temperature – .5) * 100;                 // Convert from 10 mv per degree with 500mV offsetSerial.println(temperature);                     // Print the result
delay(1000);                                             // Wait a second
}

/*
* getVoltage() – returns the voltage on the analog input defined by
* pin
*/
float getVoltage(int pin){
return (analogRead(pin) * 5.0/1024);
//converting from a 0 to 1023 digital range
// to 0 to 5 volts (each 1 reading equals ~ 5 mV)
}

Step 6: How to Use the Display

Once you’ve included the library:
#include “Myfont.h”You need to initialise the display in the Setup section:
void setup()
{
LedSign::Init();
}

and Draw the relevant digit in the Loop section:

Myfont::Draw(x_pos, ‘a’);                 // Send a character to the LOL shield

where x_pos is an int holding the x position where you want the number to be display (zero is the left hand edge).

In the final code you will need to convert the temperature reading (a float). To a char so that it can be displayed on the LOL shield using the Draw command.

To do this we use ltoa in C as follows:

temperature = (temperature – .5) * 100;        // Convert to Temperature (a float)

ltoa(long(temperature), buffer, 10);            // buffer is a 12 location char i.e. char buffer[12];
for (int i=0; i<2; i++) {                                   // Iterate through the buffer for 2 characters
   Myfont::Draw(1 + i*6,buffer[i]);                 // Send each character to the LOL shield
}

Notice the x position is:
1 + i*6
this means the first character (i=0) is at x position 1
and their spaced 6 apart (e.g. i=1, x position = 1 + 6 = 7

Also notice the buffer for ltoa() is 12 long. This is a detail related to the length of long in C and allocation of sufficient memory.

Major Components in Project
* Arduino UNO
* LOL shield   (http://jimmieprodgers.com/kits/lolshield/)
* TMP36 Temperature Sensing IC
* Breadboard for wiring up e.g. (http://www.oomlout.co.uk/prototyping-bundle-for-arduino-ardp-p-186.html)
* Some Wires

 

Quick Solutions to Questions related to Arduino Thermometer with Digital Display:

  • How does the TMP36 output voltage relate to temperature?
    Zero degrees Celsius equals 500mV, and each degree above that adds 10mV.
  • Can I read the temperature value before displaying it?
    Yes, you can send the raw temperature value to the Serial Monitor using Serial.println.
  • What function converts the analog reading to voltage?
    The getVoltage function calculates voltage by multiplying the analog read value by 5.0 divided by 1024.
  • How do you convert the float temperature to a character for display?
    You use the ltoa function to convert the long integer of the temperature into a character buffer.
  • Where should the SIG pin of the TMP36 be connected?
    The SIG pin connects to analog pin A0 on the Arduino.
  • Does the LOL shield come with headers attached?
    No, the LOL shield does not come with headers attached to the topside.
  • How are characters spaced on the LOL shield display?
    Characters are spaced 6 units apart, starting at x position 1.
  • What is the purpose of the delay function in the loop?
    The delay waits for one second between each temperature reading update.

About The Author

Avatar of Ibrar Ayyub

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
Use Arduino for Projects

Free Arduino projects, circuits, code and tutorials. Pick a board, pick a sensor, build something.

Scroll to Top