Introduction: Simplest Thermometer With Arduino and LCD Display

About: Hi, I'm an electronics and Arduino amateur, I try to share with you my experience and little projects, hope you like it. visit my youtube channel for more projects

Welcome to you all, in this instructable, I will show the simplest Arduino based thermometer for beginners

Step 1: Components and Wiring

This is what you will need to do this project:

1- Arduino board, I used here an Arduino Uno.

2- 16*2 LCD display with I²C Bus soldred on it.

3- Temperature sensor I used here an LM35DZ.

4- Jump wires.

5- Breadboard.


-Temperature sensor have 3 pins from left to right (Vcc, Vout, GND)

-LCD I2C display have 4 pins (names are written on them)

Both Vcc and GND are connected to 5v and GND from arduino

Vout from sensor is connected to Analog input A0

SDA and SCL are connected respectively to Analog inputs A4 and A5

Step 2: Arduino Code

This is the code I used


//Arduino Thermometer using LM35DZ sensor with a LCD display<br>

//SurtrTech Youtube channel (LEBOUIHA)
#include <wire.h> //Libraries for I2C and LCD
#include <lcd.h>
#include <liquidcrystal_i2c.h>

float temp;   //Variable where we will stock the temperature value
int tempPin = 0; //Pin used with the sensor output here it's A0
#define I2C_ADDR 0x27 //I2C Adress
#define BACKLIGHT_PIN 3 //LCD Stuffs :D
#define En_pin 2
#define Rw_pin 1
#define Rs_pin 0
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
#define D7_pin 7
LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);
void setup() {
  lcd.begin (16,2);
  lcd.home ();
void loop()
  temp = analogRead(tempPin); //Reading the value from the analog input
  temp = temp * 0.48828125; //Sensor calibration to get the real value
    lcd.setCursor (0,0); //Start writing on 0.0 on lcd screen
    lcd.setCursor (0,1);
    lcd.print(temp); //Temperature value
    lcd.print(" C"); //Celsius of course :D
     delay(1000); //Refresh every 1s

Step 3: Probable I2C Address Problem

If you encounter an I2C LCD address problem, so if you have it, I suggest to use the I2C address scanner code, first connect your LCD I2C like before and upload this code, after uploading open the serial monitor to know what's the bus address


#include <wire.h>
void setup() { Wire.begin(); Serial.begin(9600); while (!Serial); //wait for serial monitor Serial.println("\nI2C Scanner"); } void loop() { byte error, address; int nDevices; Serial.println("Scanning..."); nDevices = 0; for(address = 1; address < 127; address++ ) { // The i2c_scanner uses the return value of // the Write.endTransmisstion to see if // a device did acknowledge to the address. Wire.beginTransmission(address); error = Wire.endTransmission(); if (error == 0) { Serial.print("I2C device found at address 0x"); if (address<16) Serial.print("0"); Serial.print(address,HEX); Serial.println(" !"); nDevices++; } else if (error==4) { Serial.print("Unknow error at address 0x"); if (address<16) Serial.print("0"); Serial.println(address,HEX); } } if (nDevices == 0) Serial.println("No I2C devices found\n"); else Serial.println("done\n"); delay(5000); // wait 5 seconds for next scan }