Bird
Raised Fist0
Raspberry Piprogramming~20 mins

DistanceSensor (ultrasonic) in Raspberry Pi - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Ultrasonic Sensor Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the output of this ultrasonic sensor reading code?

Consider this Python code snippet using the DistanceSensor from gpiozero on a Raspberry Pi. What will it print?

Raspberry Pi
from gpiozero import DistanceSensor
sensor = DistanceSensor(echo=17, trigger=4)
distance = sensor.distance
print(round(distance, 2))
AA float number representing distance in meters, rounded to 2 decimals
BAn integer number representing distance in centimeters
CA string describing the distance like 'Distance: 0.5m'
DA runtime error because sensor.distance is not a valid attribute
Attempts:
2 left
💡 Hint

Check the distance attribute of the DistanceSensor class in gpiozero.

🧠 Conceptual
intermediate
1:30remaining
Which pin is used as the trigger in this DistanceSensor setup?

Given this setup: DistanceSensor(echo=18, trigger=23), which GPIO pin sends the ultrasonic pulse?

AGPIO 18
BNeither, pins must be specified differently
CBoth GPIO 18 and 23
DGPIO 23
Attempts:
2 left
💡 Hint

Remember: trigger pin sends the pulse, echo pin listens.

🔧 Debug
advanced
2:30remaining
Why does this DistanceSensor code raise an AttributeError?

Look at this code snippet:

from gpiozero import DistanceSensor
sensor = DistanceSensor(echo=27, trigger=22)
print(sensor.get_distance())

Why does it raise AttributeError: 'DistanceSensor' object has no attribute 'get_distance'?

ABecause the pins 27 and 22 are invalid GPIO pins
BBecause the sensor must be initialized with <code>DistanceSensor(trigger=22, echo=27)</code> instead
CBecause the DistanceSensor class uses the attribute <code>distance</code>, not a method <code>get_distance()</code>
DBecause the gpiozero library is not imported correctly
Attempts:
2 left
💡 Hint

Check the official gpiozero DistanceSensor API for available methods and attributes.

📝 Syntax
advanced
1:30remaining
Which option correctly initializes a DistanceSensor with trigger on GPIO 5 and echo on GPIO 6?

Choose the correct Python code snippet that creates a DistanceSensor object with trigger pin 5 and echo pin 6.

Asensor = DistanceSensor(echo=5, trigger=6)
Bsensor = DistanceSensor(trigger=5, echo=6)
Csensor = DistanceSensor(5, 6)
Dsensor = DistanceSensor(trigger_pin=5, echo_pin=6)
Attempts:
2 left
💡 Hint

Check the parameter names in the DistanceSensor constructor.

🚀 Application
expert
3:00remaining
How many distance readings will this code collect in 5 seconds?

Consider this code snippet:

from gpiozero import DistanceSensor
import time
sensor = DistanceSensor(echo=24, trigger=25)
start = time.time()
readings = []
while time.time() - start < 5:
    readings.append(sensor.distance)
print(len(readings))

Assuming the loop runs as fast as possible, how many readings will be collected approximately?

AAbout 50 readings (due to sensor measurement delay)
BAbout 100 readings (limited by sensor response time)
CAbout 5000 readings (one per millisecond)
DExactly 5 readings (one per second)
Attempts:
2 left
💡 Hint

Think about how fast the ultrasonic sensor can measure distance and how fast the loop can run.

Practice

(1/5)
1. What does the DistanceSensor measure using ultrasonic waves?
easy
A. The speed of sound in water
B. The temperature of the air
C. The distance to an object without touching it
D. The brightness of a light source

Solution

  1. Step 1: Understand the sensor's purpose

    The DistanceSensor uses sound waves to detect how far an object is without physical contact.
  2. Step 2: Identify the correct measurement type

    It measures distance, not temperature, speed, or brightness.
  3. Final Answer:

    The distance to an object without touching it -> Option C
  4. Quick Check:

    DistanceSensor measures distance = C [OK]
Hint: Remember: ultrasonic means measuring distance by sound [OK]
Common Mistakes:
  • Confusing distance with temperature
  • Thinking it measures speed or light
  • Assuming physical contact is needed
2. Which of the following is the correct way to create a DistanceSensor object in Python on Raspberry Pi?
easy
A. sensor = DistanceSensor(trigger=17, echo=4)
B. sensor = DistanceSensor(echo=17, trigger=4)
C. sensor = DistanceSensor(4, 17)
D. sensor = DistanceSensor(echo=4, trigger=17)

Solution

  1. Step 1: Recall parameter names for DistanceSensor

    The DistanceSensor constructor expects named parameters: echo and trigger pins.
  2. Step 2: Match correct pin assignments

    sensor = DistanceSensor(echo=17, trigger=4) correctly assigns echo=17 and trigger=4 as named arguments.
  3. Final Answer:

    sensor = DistanceSensor(echo=17, trigger=4) -> Option B
  4. Quick Check:

    Use named pins echo=17, trigger=4 = A [OK]
Hint: Use named arguments echo and trigger in correct order [OK]
Common Mistakes:
  • Swapping echo and trigger pins
  • Passing pins without names
  • Using wrong pin numbers
3. What will the following code print if the sensor measures 0.25 meters?
from gpiozero import DistanceSensor
sensor = DistanceSensor(echo=17, trigger=4)
distance_cm = sensor.distance * 100
print(round(distance_cm))
medium
A. 25
B. 0.25
C. 250
D. 2.5

Solution

  1. Step 1: Understand sensor.distance value

    The sensor.distance returns distance in meters as a float, here 0.25 meters.
  2. Step 2: Convert meters to centimeters and round

    Multiplying 0.25 by 100 gives 25 centimeters, then rounding keeps it 25.
  3. Final Answer:

    25 -> Option A
  4. Quick Check:

    0.25 m * 100 = 25 cm [OK]
Hint: Multiply meters by 100 to get centimeters [OK]
Common Mistakes:
  • Printing meters instead of centimeters
  • Multiplying by 1000 instead of 100
  • Not rounding the result
4. Identify the error in this code snippet using DistanceSensor:
from gpiozero import DistanceSensor
sensor = DistanceSensor(echo=4, trigger=17)
print(sensor.distance * 100)
medium
A. Echo and trigger pins are swapped
B. Missing import statement
C. sensor.distance returns centimeters directly
D. Print statement syntax error

Solution

  1. Step 1: Check pin assignments

    The echo pin should be connected to the sensor's echo pin, trigger to trigger pin. Usually, echo=17 and trigger=4 is standard, so swapping is likely wrong.
  2. Step 2: Verify other code parts

    Import is correct, sensor.distance returns meters (not centimeters), and print syntax is valid.
  3. Final Answer:

    Echo and trigger pins are swapped -> Option A
  4. Quick Check:

    Pin swap error = D [OK]
Hint: Echo pin usually higher number than trigger [OK]
Common Mistakes:
  • Confusing echo and trigger pins
  • Assuming distance returns centimeters
  • Forgetting to import gpiozero
5. You want to measure distance in centimeters and print only integer values every second. Which code snippet correctly does this using DistanceSensor?
hard
A. from gpiozero import DistanceSensor import time sensor = DistanceSensor(echo=17, trigger=4) while True: print(sensor.distance) time.sleep(1)
B. from gpiozero import DistanceSensor sensor = DistanceSensor(echo=17, trigger=4) print(round(sensor.distance))
C. from gpiozero import DistanceSensor import time sensor = DistanceSensor(echo=4, trigger=17) while True: print(sensor.distance * 100) time.sleep(1)
D. from gpiozero import DistanceSensor import time sensor = DistanceSensor(echo=17, trigger=4) while True: print(int(sensor.distance * 100)) time.sleep(1)

Solution

  1. Step 1: Check pin assignments and imports

    from gpiozero import DistanceSensor import time sensor = DistanceSensor(echo=17, trigger=4) while True: print(int(sensor.distance * 100)) time.sleep(1) correctly imports time, sets echo=17 and trigger=4, which is standard.
  2. Step 2: Verify distance calculation and printing

    It multiplies sensor.distance (meters) by 100 to get centimeters, converts to int for integer output, and prints every second with time.sleep(1).
  3. Step 3: Compare with other options

    from gpiozero import DistanceSensor sensor = DistanceSensor(echo=17, trigger=4) print(round(sensor.distance)) prints once and rounds meters, not centimeters. from gpiozero import DistanceSensor import time sensor = DistanceSensor(echo=4, trigger=17) while True: print(sensor.distance * 100) time.sleep(1) swaps pins and prints float centimeters. from gpiozero import DistanceSensor import time sensor = DistanceSensor(echo=17, trigger=4) while True: print(sensor.distance) time.sleep(1) prints meters, not centimeters.
  4. Final Answer:

    from gpiozero import DistanceSensor import time sensor = DistanceSensor(echo=17, trigger=4) while True: print(int(sensor.distance * 100)) time.sleep(1) -> Option D
  5. Quick Check:

    Correct pins, int centimeters, 1-second delay = A [OK]
Hint: Multiply by 100, convert to int, use sleep(1) for timing [OK]
Common Mistakes:
  • Swapping echo and trigger pins
  • Not converting meters to centimeters
  • Printing only once instead of every second
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard