Jump into concepts and practice - no test required
or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Reading temperature sensor (LM35, TMP36)
📖 Scenario: You have a temperature sensor (LM35 or TMP36) connected to your Arduino. You want to read the temperature values from the sensor and display them on the Serial Monitor.
🎯 Goal: Build a simple Arduino program that reads the temperature sensor value, converts it to degrees Celsius, and prints the temperature to the Serial Monitor.
📋 What You'll Learn
Create a variable to store the analog pin number connected to the sensor
Create a variable to store the sensor reading
Create a variable to store the calculated temperature in Celsius
Read the analog value from the sensor pin
Convert the analog reading to temperature in Celsius
Print the temperature value to the Serial Monitor
💡 Why This Matters
🌍 Real World
Reading temperature sensors is common in weather stations, home automation, and electronics projects to monitor environment temperature.
💼 Career
Understanding how to read analog sensors and process their data is a fundamental skill for embedded systems and IoT developers.
Progress0 / 4 steps
1
Setup sensor pin
Create an integer variable called sensorPin and set it to A0 to represent the analog pin connected to the temperature sensor.
Arduino
Hint
The analog pin A0 is usually used for sensors. Use int sensorPin = A0;.
2
Setup variables for reading and temperature
Create two variables: an integer called sensorValue to store the analog reading, and a float called temperatureC to store the temperature in Celsius.
Arduino
Hint
Use int sensorValue; and float temperatureC; to declare the variables.
3
Read sensor and calculate temperature
In the loop() function, read the analog value from sensorPin using analogRead(sensorPin) and store it in sensorValue. Then calculate the temperature in Celsius using the formula temperatureC = (sensorValue * (5.0 / 1023.0)) * 100.0;.
Arduino
Hint
Use sensorValue = analogRead(sensorPin); and then calculate temperature with the given formula.
4
Print temperature to Serial Monitor
Add a line in the loop() function to print the temperature in Celsius to the Serial Monitor using Serial.println(temperatureC);.
Arduino
Hint
Use Serial.println(temperatureC); to print the temperature.
Practice
(1/5)
1. What does the analogRead() function do when reading from an LM35 temperature sensor?
easy
A. It sets the sensor's output voltage to a fixed value.
B. It converts the temperature directly to Celsius.
C. It sends data to the sensor to start measuring temperature.
D. It reads the voltage level from the sensor's analog output pin.
Solution
Step 1: Understand analogRead() function
The analogRead() function reads the voltage level on an analog pin and returns a number between 0 and 1023 representing that voltage.
Step 2: Relate to LM35 sensor output
The LM35 outputs an analog voltage proportional to temperature, so analogRead() reads this voltage level.
Final Answer:
It reads the voltage level from the sensor's analog output pin. -> Option D
Quick Check:
analogRead() reads voltage level = A [OK]
Hint: Remember: analogRead() reads voltage, not temperature directly [OK]
Common Mistakes:
Thinking analogRead() converts voltage to temperature
Assuming analogRead() sends commands to sensor
Confusing analogRead() with digitalRead()
2. Which of the following is the correct way to convert the analog reading from an LM35 sensor to voltage in Arduino code?
easy
A. float voltage = analogRead(sensorPin) / 5.0;
B. float voltage = analogRead(sensorPin) * 1023.0 / 5.0;
C. float voltage = analogRead(sensorPin) * (5.0 / 1023.0);
D. float voltage = analogRead(sensorPin) * 5.0;
Solution
Step 1: Understand analog to voltage conversion
The analog reading ranges from 0 to 1023 for 0 to 5 volts. To get voltage, multiply reading by (5.0 / 1023.0).
Step 2: Check each option
float voltage = analogRead(sensorPin) * (5.0 / 1023.0); correctly applies the formula. Others either divide incorrectly or multiply by wrong factors.
Final Answer:
float voltage = analogRead(sensorPin) * (5.0 / 1023.0); -> Option C
Quick Check:
Voltage = reading * (5/1023) [OK]
Hint: Use (5.0 / 1023.0) to convert analog reading to voltage [OK]
Common Mistakes:
Dividing by 5 instead of multiplying
Using 1024 instead of 1023 in denominator
Multiplying by 5 without dividing by 1023
3. What will be the output on the Serial Monitor if the following Arduino code reads an analog value of 250 from an LM35 sensor?
int sensorPin = A0;
int reading = 250;
float voltage = reading * (5.0 / 1023.0);
float temperatureC = voltage * 100;
Serial.println(temperatureC);
medium
A. 122.0
B. 12.2
C. 0.25
D. 1.22
Solution
Step 1: Calculate voltage from reading
voltage = 250 * (5.0 / 1023.0) ≈ 1.22 volts.
Step 2: Calculate temperature in Celsius
temperatureC = 1.22 * 100 ≈ 122 °C. Serial.println displays approximately 122.19, closest to 122.0.
Final Answer:
122.0 -> Option A
Quick Check:
Voltage ≈1.22V, Temp = voltage*100 = 122 [OK]
Hint: Multiply voltage by 100 to get Celsius for LM35 [OK]
Common Mistakes:
Forgetting to multiply voltage by 100
Using wrong analog to voltage conversion
Confusing TMP36 formula with LM35
4. Identify the error in this Arduino code snippet for reading TMP36 temperature sensor:
int sensorPin = A0;
int reading = analogRead(sensorPin);
float voltage = reading / 1023 * 5.0;
float temperatureC = (voltage - 0.5) * 100;
Serial.println(temperatureC);
medium
A. The voltage calculation divides before multiplying, causing integer division error.
B. The sensorPin should be declared as float, not int.
C. The temperature formula is incorrect for TMP36 sensor.
D. Serial.println() cannot print float values.
Solution
Step 1: Analyze voltage calculation
reading / 1023 * 5.0 uses left-to-right precedence: first reading / 1023 (int / int = integer division, truncates), then * 5.0, yielding wrong voltage.
Step 2: Rule out other options
A: Formula (voltage - 0.5)*100 correct for TMP36. B: Pin declaration int is fine. D: Serial.println prints floats fine.
Final Answer:
The voltage calculation divides before multiplying, causing integer division error. -> Option A
Quick Check:
Use float divisor to avoid integer division [OK]
Hint: Use float numbers in division to avoid integer division [OK]
Common Mistakes:
Using integer 1023 instead of float 1023.0
Misunderstanding operator precedence
Thinking Serial.println() can't print floats
5. You want to read temperature from a TMP36 sensor connected to analog pin A1 and print the temperature in Celsius every second. Which Arduino code snippet correctly implements this?
hard
A. int sensorPin = A1;
void loop() {
int reading = analogRead(sensorPin);
float voltage = reading / 1023 * 5;
float temperatureC = voltage * 100;
Serial.println(temperatureC);
delay(1000);
}
B. int sensorPin = A1;
void loop() {
int reading = analogRead(sensorPin);
float voltage = reading * (5.0 / 1023.0);
float temperatureC = (voltage - 0.5) * 100;
Serial.println(temperatureC);
delay(1000);
}
C. int sensorPin = A1;
void loop() {
int reading = analogRead(sensorPin);
float voltage = reading * (5 / 1023);
float temperatureC = (voltage - 0.5) * 100;
Serial.println(temperatureC);
delay(1000);
}
D. int sensorPin = A1;
void loop() {
int reading = analogRead(sensorPin);
float voltage = reading * (5.0 / 1023.0);
float temperatureC = voltage * 100;
Serial.println(temperatureC);
delay(1000);
}