Introduction: ARDUINO TEMPERATURE SENSOR LM35
Now make your own temperature sensor by Arduino and LM35 Sensor
You required following parts
1-ARDUINO BOARD ANY VERSION
2-LM35 TEMPERATURE SENSOR
3-USB CABLE
4-COMPUTER WITH ARDUINO SOFTWERE
MAKE THE CONNECTION AS SHOWN IN IMAGE AND UPLOAD THE FOLLOWING CODE ON ARDUINO BOARD.
int val;
int tempPin = 1;
void setup()
{
Serial.begin(9600);
}
void loop()
{
val = analogRead(tempPin);
float mv = ( val/1024.0)*5000;
float cel = mv/10;
float farh = (cel*9)/5 + 32;
Serial.print("TEMPRATURE = ");
Serial.print(cel);
Serial.print("*C");
Serial.println();
delay(1000);
/* uncomment this to get temperature in farenhite
Serial.print("TEMPRATURE = ");
Serial.print(farh);
Serial.print("*F");
Serial.println();
*/
}
NOW SEE THE SERIAL MONITOR IN THE ARDUINO SOFTWERE ,
ITS DONE.
VISIT https://www.facebook.com/SparkingElectronics FOR MORE PROJECTS
;)
:)

Participated in the
Weekend Projects Contest
115 Comments
9 years ago on Introduction
We can get value magic number 0.48828125 from following expression:
(SUPPLY_VOLTAGE x 1000 / 1024) / 10 where SUPPLY_VOLTAGE is 5.0V (the voltage used to power LM35)
1024 is 2^10, value where the analog value can be represented by ATmega (cmiiw) or the maximum value it can be represented is 1023. The actual voltage obtained by VOLTAGE_GET / 1024.
1000 is used to change the unit from V to mV
10 is constant. Each 10 mV is directly proportional to 1 Celcius.
By doing simple math: (5.0 * 1000 / 1024) / 10 = 0.48828125
Reply 8 years ago
Sorry for asking this but what is the magic number you refer to about? What is the importance of it
Reply 7 years ago
I think he meant the calibration value. instead of doing all the computation , just get the value from the sensor and multiply it with that value
Reply 8 years ago on Introduction
Hi Please can you tell me if I was to run this program through a Attiny85 on 4.5 volts what formula would I need to use to get the correct results?
Reply 8 years ago on Introduction
you can substitute the SUPPLY_VOLTAGE part which result in
(SUPPLY_VOLTAGE x 1000 / 1024) / 10 = (4.5 x 1000 / 1024) / 10 =
0.439453125
Reply 8 years ago on Introduction
the supply voltage doesn't really matter , i think the analog to digital converter matters though, coz see we can even power the LM35 with a 20 v power supply, if we do that and still read the analog value from arduino, your equation will not hold,
Reply 8 years ago on Introduction
Indeed the supply voltage can ranging from +35V to -0.2V. Well, I got the equation from the LM35 datasheet and never done things outside the datasheet.
Question 1 year ago
Please help and advice if the 2-LM35 TEMPERATURE SENSOR be able to measure temperature up to 100 degree Celsius and have the tip that can poke into cooked fish? If cannot, what would be the replacement sensor?
2 years ago
How to set up two, three, four, ... sensors to the same arduino?
2 years ago on Introduction
Merry Christmas! Nice work but your line of calculation assumes that you are measuring only positive temperatures with 0 degrees Celsius corresponding to 0 voltage. Is that the case for the LM35 you are using? Are you using LM35Dz?
2 years ago on Introduction
For more on this subject, see https://medium.com/@cdreimer/lm35-a-not-so-simple-temperature-sensor-for-the-arduino-a62caf0c2cfd
3 years ago
While I was measuring ambient temperatuure in planet Earth.. I got a reading of 430-something-degree. I put the sensor on fire and its still showing about 430-something. Surely global warming hasn't reach that temperature yet (the year was 2020)
Turned out I got my pins (data and ground) reversed. Now it shows earthly temperature of 30-something degree. The sensor respond well to trial-by-fire as well.
Note to self:
Please double check your connection.
VCC - Signal - Ground
3 years ago
People who are getting 433 degrees C check the pins. i just switched it and got the correct temperature
(remember to only switch the positive and grond pin only)
5 years ago
#include "DHT.h"
#define DHTPIN 2 // what digital pin we're connected to
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
int val;
int tempPin = 1;
void setup() {
Serial.begin(9600);
Serial.println("Reading DHT11 data! ");
dht.begin();
pinMode(12, OUTPUT); // Green
pinMode(11, OUTPUT); // Red
}
void loop() {
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
float hum1 = dht.readHumidity();
// Read temperature as Celsius
float temp1 = dht.readTemperature();
// Check if any reads failed and exit early (to try again).
if (isnan(hum1) || isnan(temp1)) {
digitalWrite(11, HIGH);
digitalWrite(12, LOW);
Serial.println("Error in reading sensor data!");
while (isnan(hum1) || isnan(temp1)) {
hum1 = dht.readHumidity();
temp1 = dht.readTemperature();
}
}
else {
digitalWrite(11, LOW);
digitalWrite(12, HIGH);
}
// Wait a few seconds between measurements.
delay(1000);
float hum2 = dht.readHumidity();
float temp2 = dht.readTemperature();
// Compute heat index in Celsius (isFahreheit = false)
float hic = dht.computeHeatIndex(temp1, hum1, false);
Serial.print("Humidity: ");
Serial.print(round((hum1 + hum2) / 2));
Serial.print(" %,");
Serial.print("Temperature: ");
Serial.print((temp1 + temp2) / 2);
Serial.print(" *C ");
//Serial.print("Heat index: ");
//Serial.print(round(hic));
//Serial.println(" *C ");
//lm35 code
val = analogRead(tempPin);
float mv = ( val/1024.0)*5000;
float cel = mv/10;
float farh = (cel*9)/5 + 32;
Serial.println("");
Serial.println("Analog sensor Reading !");
Serial.print("TEMPRATURE = ");
Serial.print(cel);
Serial.print("*C");
Serial.println();
Serial.print("Error = ");
Serial.print( ((((temp1 + temp2) / 2)-(cel))/ (cel))*100);
Serial.println(" % ");
Serial.print("Corrected output:");
// Serial.print(( (temp1 + temp2) / 2)+(( (temp1 + temp2) / 2)-(cel)));
Serial.print(cel);
Serial.print("*c");
Serial.println("");
Serial.print("-------------");
Serial.println("");
delay(1000);
if ((round((hum1 + hum2) / 2))>40)
{
//Serial.println("NEW VALUES");
digitalWrite(9, HIGH); // if high humidity on indication
digitalWrite(8, LOW);
}
else //if ((dht.readHumidity()) < 1050)
{
digitalWrite(8, HIGH); // if low humidity another indication i.e. motor on
digitalWrite(9, LOW);
}
}
Reply 4 years ago
Hello
Please tell me
const int temp = 0;
void setup()
{
Serial.begin (9600);
pinMode (temp, INPUT);
}
void loop()
{
float Real_Voltage = analogRead(temp)* 0.004882814;
float Temp_C = Real_Voltage * 100.0;
float Temp_F = Temp_C * (9.0/5.0) + 32.0;
Serial.print(analogRead(temp));
Serial.print("Voltage: ");
Serial.print(Real_Voltage);
Serial.print("Deg C: ");
Serial.print(Temp_C);
Serial.print("Deg F: ");
Serial.print(Temp_F);
if ( Temp_C >= 135.0)
{
Serial.println("Warning: The system is hot");
delay(1000);
}
else if (Temp_C
{
Serial.println("Warning: The system is cold");
delay(10000);
}
else
{
Serial.println("The system is functioning well ");
delay(10000);
}
}
But it's output generat without connect lm35 to Arduino Uno r3
In range of -12 to 460
8 years ago on Introduction
I m getting d output as 132.34*C .....in ds pattern nly but not as 23*C n all...wat crctns can I make ????
Reply 7 years ago
Don't keep the length of sensor pin wire (A0- to lm35) long..
kepp it as short as possible
Reply 5 years ago
Hi,
It is short, actually I have inserted the output pin of LM35 directly into the board. Same high readings,+140 degrees. Any idea why?
Reply 8 years ago
just check the wiring once again ...
see the picture and connect exactly as shown in image
5 years ago
wow