Introduction: Cheap Digital Thermostat Display

Picture of Cheap Digital Thermostat Display

This is a cheap but effective temperature monitor which displays the current temperature indoors onto a screen. It uses a TMP36 chip which read the temperature and a 16x2 LCD to display it. Overall it only costs about $18, depending on where you supply these items.

For this project, my goal is to monitor the temperature of my room, so I know when to properly ventilate it, especially with a few computers running full-time in the background, along with the stinking hot summer weather. I normally, have a high heat tolerance and don't notice the gradual changes even if it's around 28 degrees, so this device gives me an objective perspective.

In the future, I plan on mounting the IC outdoors, so I can monitor the weather and figure out what appropriate clothing to wear, especially helpful in hot summer days and cold winter days!

Step 1: Bill of Materials (BoM)

Picture of Bill of Materials (BoM)
  • Arduino Uno - $7
  • Temperature Sensor - TMP36 - $2
  • 16x2 LCD Screen - $7
  • Jumper Cables - $1
  • Potentiometer - $1

Step 2: LCD Screen Hookup

Picture of LCD Screen Hookup

Distribute power in parallel using the breadboard's longest rails.

  • Red Rail: Connect 3.3V pin of the Arduino to this rail.
  • Black Rail: Connect any GND pin of the Arduino to this rail.

Connect the LCD to power

  • Black, white, and brown wires: Connect pin 1, 5, and 16 of the LCD screen to the blue rail on the breadboard
  • Yellow wires: connect pin 2 and 15 of the LCD screen to the red rail on the breadboard

Connect the LCD signals to the Arduino

  • Purple, White (x2), Grey wires: Connect pins 14, 13, 12, and 11 on the LCD to pins 2, 3, 4, and 5 on the Arduino, respectively.
  • Blue and Green wires: Connect pins 4 and 6 on the LCD to pins 11 and 12 on the Arduino.

Step 3: Wiring the Temperature Sensor

Picture of Wiring the Temperature Sensor

Be careful about the polarity of the temperature sensor when plugging it in, because reversing it will cause ti to overheat and may burn you.

I find it easiest to hold it with the flat edge facing my right, then I know the order is ground, signal, then VCC, all in order from top to bottom.

  • Green wire: This is the ground pin, connect it to GND on the Arduino.
  • Orange middle wire: This is the signal pin, connect it to pin A0 on the Arduino
  • Orange outer wire: This is the VCC pin, connect it to 3.3V on the Arduino.

Potentiometer hookup (from picture)

  • Brown wire: Connect pin 3 on the LCD to the potentiometer's middle signal pin. Then connect the outer pins of this potentiometer to the power rail, in any order, there is no polarity requirements.

Step 4: Coding

Picture of Coding
// Load the LiquidCrystal library
#include  <LiquidCrystal.h>
<liquidcrystal.h>// Initialize the library with the pins we're using.
LiquidCrystal lcd(12,11,5,4,3,2);
//temperature analog input pin constant </liquidcrystal.h>
const int tempPin = 0;
//raw reading variable
int tempVal;
//voltage variable
float volts;
//final temperature variables
float tempC;
void setup()
{
  // begin lcd of this particular size
  lcd.begin(16, 2);
  // Data sent to the display will stay there until it's
  // overwritten or power is removed. 
  lcd.clear();
  // Now we'll display a message on the LCD!
  lcd.print("Current Temp:  ");
}  
void loop()
{
  //read the temp sensor and store it in tempVal
  tempVal = analogRead(tempPin);
  //converting that reading to voltage by multiplying the reading by 3.3V (voltage of       //the 101 board)
  volts = tempVal * 5.0;
  volts /= 1023.0;
  tempC = (volts - 0.5) * 100 ;
  lcd.setCursor(0,1);
  lcd.print(tempC);
  //wait a bit before taking another reading
  delay(1000);
}

Comments