Learn how to build a digital temperature monitoring system using the LM35 sensor and Arduino. Includes circuit diagram, Arduino code, real-world applications, and troubleshooting tips.
Introduction
Monitoring environmental temperature in real-time is a fundamental requirement across many applications. These range from home automation systems to industrial processes and agricultural setups. In this project, you will learn how to build a Digital Temperature Monitor using LM35 and Arduino UNO.
The LM35 is a precision temperature sensor that offers a linear output directly proportional to the temperature in Celsius. Itβs reliable, inexpensive, and extremely easy to useβmaking it ideal for educational and prototyping purposes.
What the Project Does
This Arduino-based system reads the analog voltage from the LM35 temperature sensor. It converts it into Celsius. Then, it displays the temperature data on the Serial Monitor or an optional LCD screen.
Real-World Use Cases
- Smart Thermostats
- Greenhouse Temperature Control
- Server Room Monitoring
- Weather Stations
- Appliance Overheating Alerts
Skill Level
Beginner to Intermediate
Expected Outcome
By the end of this tutorial, youβll understand:
- How to wire and interface the LM35 sensor with Arduino
- Analog-to-digital conversion (ADC) in Arduino
- How to calculate accurate temperature from the sensorβs output
- Displaying real-time data on the Serial Monitor or LCD
Components Required
Quantity | Component | Description | Buy Link |
---|---|---|---|
1 | Arduino UNO with cable | Main microcontroller board | Buy on Elecsynergy |
1 | LM35 Temperature Sensor | Analog temperature sensor, output in millivolts/Β°C | Buy on Elecsynergy |
1 | Breadboard | For creating the prototype circuit | Buy on Elecsynergy |
3 | Jumper Wires (M-M) | Male-to-male wires for circuit connection | Buy on Elecsynergy |
Optional | 16×2 LCD Display | To display temperature in real-time | Buy on Elecsynergy |
Circuit Diagram + Explanation
Basic Connection (Serial Monitor Only)
- LM35 VCC β 5V on Arduino
- LM35 GND β GND on Arduino
- LM35 OUT β A0 (Analog pin) on Arduino UNO
Optional LCD Wiring (16×2 LCD)
- LCD RS β Pin 12
- LCD EN β Pin 11
- LCD D4-D7 β Pins 5-2 respectively
- Contrast pin via 10K pot
β οΈ Note: For accurate readings, keep sensor wires short and avoid electrical noise.
Visual Schematic
A Fritzing-based diagram will be inserted here showing both LCD and non-LCD versions.
Arduino Code β Line-by-Line Explanation
Basic Code for Serial Monitor Display:
const int sensor = A0; // Assigning analog pin A5 to variable 'sensor'
float tempc; //variable to store temperature in degree Celsius
float tempf; //variable to store temperature in Fahreinheit
float vout; //temporary variable to hold sensor reading
void setup() {
pinMode(sensor, INPUT); // Configuring sensor pin as input
Serial.begin(9600);
}
void loop() {
vout = analogRead(sensor); //Reading the value from sensor
vout = (vout * 500) / 1023;
tempc = vout; // Storing value in Degree Celsius
tempf = (vout * 1.8) + 32; // Converting to Fahrenheit
Serial.print("in DegreeC=");
Serial.print("\t");
Serial.print(tempc);
Serial.print(" ");
Serial.print("in Fahrenheit=");
Serial.print("\t");
Serial.print(tempf);
Serial.println();
delay(500); //Delay of 1 second for ease of viewing
}
Explanation:
analogRead(A0)
reads the analog voltage (0β1023).(value * 5.0/1024)
converts ADC to voltage.- Multiplying by 100 converts millivolts to Celsius (10mV per Β°C).
Code to Display Temperature on 16×2 lCD
#include <LiquidCrystal.h>
// Define LCD pins in 4-bit mode
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
const int tempSensorPin = A0;
float tempc; //variable to store temperature in degree Celsius
float tempf; //variable to store temperature in Fahreinheit
float vout; //temporary variable to hold sensor reading
void setup() {
lcd.begin(16, 2);
lcd.print("Temp:");
}
void loop() {
vout = analogRead(tempSensorPin); //Reading the value from sensor
vout = (vout * 500) / 1023;
tempc = vout; // Storing value in Degree Celsius
tempf = (vout * 1.8) + 32; // Converting to Fahrenheit
lcd.setCursor(0, 1);
lcd.print("Temp:");
lcd.print(tempc);
lcd.println(" C");
delay(1000);
lcd.clear();
}
Working Explanation
How the Process Operates:
- The LM35 outputs 10 mV per degree Celsius.
- Arduino reads this analog voltage through pin A0.
- The value is converted to Celsius using the given formula.
- The temperature is printed on the Serial Monitor or LCD.
The sensor works best in the range of 2Β°C to 150Β°C with an accuracy of Β±0.5Β°C at room temperature.
Optional LCD Version: You can include the LiquidCrystal library and update the temperature data on a 16×2 character LCD.
Demo / Output Preview
πΈ What Youβll See:
- Temperature readings updating every second.
- Optional: Live reading on 16×2 LCD.
Troubleshooting & Tips
- Wrong or fluctuating values?
- Ensure tight wiring.
- Use shielded cables or twist the data line if needed.
- Incorrect readings?
- Check if sensor is connected correctly.
- Use a multimeter to verify voltage at OUT pin.
- Sensor heating up?
- Disconnect immediately β double-check VCC/GND pins.
- Using with LCD?
- Make sure to include
LiquidCrystal
library. - Adjust potentiometer to improve LCD contrast.
- Make sure to include
Project Expansion Ideas
1. High Temperature Alert System
Add a buzzer or LED to alert when temperature exceeds a threshold.
2. Temperature Logging
Interface with SD Card Module to log real-time data.
3. Remote Temperature Monitoring
Send temperature data wirelessly using ESP8266/ESP32.
4. IoT Dashboard Integration
Push real-time data to platforms like ThingSpeak, Blynk, or Adafruit IO.
5. Fan or Relay Control
Automatically control cooling devices or fans based on temperature thresholds.
Conclusion
Congratulations! Youβve successfully built a Digital Temperature Monitor using Arduino and LM35. This is a highly practical project with immense real-world utility. It teaches you how to read analog sensors. You also learn how to process, display, and act upon environmental data.
β Challenge: Try integrating this system into a weather station or home automation hub. Can you make it Wi-Fi enabled?
Keep learning, keep innovating β and donβt forget to share your project with the community!