Bird
Raised Fist0
Raspberry Piprogramming~20 mins

Servo motor control with PWM in Raspberry Pi - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Servo PWM 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 PWM duty cycle print?
Consider this Python code controlling a servo motor's PWM on a Raspberry Pi. What will be printed?
Raspberry Pi
import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.OUT)
pwm = GPIO.PWM(18, 50)  # 50Hz frequency
pwm.start(7.5)  # Neutral position

time.sleep(1)
print(f"Current duty cycle: {7.5}")
pwm.ChangeDutyCycle(12.5)
time.sleep(1)
print(f"Current duty cycle: {12.5}")
pwm.stop()
GPIO.cleanup()
A
Current duty cycle: 7.5
Current duty cycle: 12.5
B
Current duty cycle: 12.5
Current duty cycle: 7.5
C
Current duty cycle: 0
Current duty cycle: 100
DSyntaxError due to missing GPIO.cleanup()
Attempts:
2 left
💡 Hint
Look at the print statements and the values passed to ChangeDutyCycle.
🧠 Conceptual
intermediate
1:30remaining
What does a 50Hz PWM frequency mean for servo control?
In servo motor control using PWM on a Raspberry Pi, what does setting the PWM frequency to 50Hz imply?
AThe PWM signal repeats 50 times per second, matching typical servo requirements
BThe servo motor will rotate at 50 revolutions per second
CThe duty cycle must always be 50%
DThe PWM signal is too fast for any servo to respond
Attempts:
2 left
💡 Hint
Think about how often the PWM signal repeats per second.
🔧 Debug
advanced
2:30remaining
Why does this servo not move as expected?
This code is intended to move a servo to 0, 90, and 180 degrees but the servo stays still. What is the problem?
Raspberry Pi
import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.OUT)
pwm = GPIO.PWM(18, 50)
pwm.start(0)

positions = [2.5, 7.5, 12.5]
for pos in positions:
    pwm.ChangeDutyCycle(pos)
    time.sleep(1)
pwm.stop()
GPIO.cleanup()
AThe GPIO pin 18 is not set as input
BStarting PWM with 0 duty cycle causes servo not to respond; should start with 7.5
CThe frequency 50Hz is too high for servo control
DThe positions list values are out of range for duty cycle
Attempts:
2 left
💡 Hint
Think about the initial duty cycle value when starting PWM.
📝 Syntax
advanced
1:30remaining
Which option causes a SyntaxError in this PWM code?
Identify which code snippet will cause a syntax error when controlling a servo with PWM on Raspberry Pi.
A
pwm = GPIO.PWM(18, 50)
pwm.start(7.5)
pwm.ChangeDutyCycle(10)
B
pwm = GPIO.PWM(18, 50)
pwm.start(7.5)
pwm.ChangeDutyCycle(10.0)
C
pwm = GPIO.PWM(18, 50)
pwm.start(7.5)
pwm.ChangeDutyCycle(10
D
pwm = GPIO.PWM(18, 50)
pwm.start(7.5)
pwm.ChangeDutyCycle(7.5)
Attempts:
2 left
💡 Hint
Look carefully at parentheses in each option.
🚀 Application
expert
3:00remaining
How many distinct positions can this servo code produce?
Given this code controlling a servo with PWM on Raspberry Pi, how many distinct servo positions will it produce?
Raspberry Pi
import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.OUT)
pwm = GPIO.PWM(18, 50)
pwm.start(7.5)

for duty in range(25, 126, 25):  # duty cycles from 2.5 to 12.5 stepping by 2.5
    pwm.ChangeDutyCycle(duty / 10)
    time.sleep(0.5)
pwm.stop()
GPIO.cleanup()
A6
B4
C3
D5
Attempts:
2 left
💡 Hint
Count how many values the range produces and how they are used.

Practice

(1/5)
1. What does PWM control in a servo motor connected to a Raspberry Pi?
easy
A. The temperature of the servo motor
B. The angle position of the servo arm
C. The brightness of an LED
D. The speed of the Raspberry Pi processor

Solution

  1. Step 1: Understand PWM role in servo control

    PWM (Pulse Width Modulation) sends signals to set the servo arm's angle by changing the pulse width.
  2. Step 2: Identify what PWM affects

    It does not control speed, brightness, or temperature but the position of the servo arm.
  3. Final Answer:

    The angle position of the servo arm -> Option B
  4. Quick Check:

    PWM controls servo angle = D [OK]
Hint: PWM changes pulse width to set servo angle [OK]
Common Mistakes:
  • Confusing PWM with speed control
  • Thinking PWM controls LED brightness here
  • Assuming PWM changes temperature
2. Which of the following is the correct way to start PWM on GPIO pin 18 at 50 Hz in Python using RPi.GPIO?
easy
A. pwm = GPIO.PWM(18, 50); pwm.start(7.5)
B. pwm = GPIO.PWM(50, 18); pwm.start(7.5)
C. pwm = GPIO.PWM(18); pwm.start(50)
D. pwm = GPIO.PWM(7.5, 18); pwm.start(50)

Solution

  1. Step 1: Check PWM initialization syntax

    GPIO.PWM(pin, frequency) initializes PWM on the specified pin and frequency.
  2. Step 2: Verify correct parameters

    Pin 18 and frequency 50 Hz are correct; start() takes duty cycle like 7.5.
  3. Final Answer:

    pwm = GPIO.PWM(18, 50); pwm.start(7.5) -> Option A
  4. Quick Check:

    GPIO.PWM(pin, freq) with start(duty) = B [OK]
Hint: Remember GPIO.PWM(pin, freq) then start(duty) [OK]
Common Mistakes:
  • Swapping pin and frequency order
  • Missing frequency argument
  • Passing duty cycle in PWM() instead of start()
3. What will be the output angle of the servo if the duty cycle is set to 12.5% using PWM at 50 Hz?
medium
A. 0 degrees
B. 90 degrees
C. 270 degrees
D. 180 degrees

Solution

  1. Step 1: Understand duty cycle to angle mapping

    At 50 Hz, about 2.5% duty cycle corresponds to 0°, 7.5% to 90°, and 12.5% to 180°.
  2. Step 2: Match 12.5% duty cycle to angle

    12.5% duty cycle sets the servo to its maximum angle, 180°.
  3. Final Answer:

    180 degrees -> Option D
  4. Quick Check:

    12.5% duty cycle = 180° [OK]
Hint: Max duty cycle ~12.5% means 180° angle [OK]
Common Mistakes:
  • Confusing duty cycle values with angles
  • Assuming 12.5% is 90 degrees
  • Thinking servo can rotate beyond 180 degrees
4. Given this code snippet, what is the error?
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.OUT)
pwm = GPIO.PWM(18, 50)
pwm.start(7.5)
# Missing cleanup
medium
A. GPIO pins are not cleaned up after use
B. PWM frequency is incorrect
C. Duty cycle value is out of range
D. GPIO mode is not set

Solution

  1. Step 1: Review code for setup and cleanup

    The code sets mode, pin, and starts PWM correctly but does not call GPIO.cleanup().
  2. Step 2: Identify missing cleanup importance

    Not cleaning up GPIO pins can cause warnings or errors on next runs.
  3. Final Answer:

    GPIO pins are not cleaned up after use -> Option A
  4. Quick Check:

    Missing GPIO.cleanup() = A [OK]
Hint: Always call GPIO.cleanup() after PWM use [OK]
Common Mistakes:
  • Ignoring GPIO.cleanup()
  • Thinking frequency or duty cycle is wrong here
  • Forgetting to set GPIO mode
5. You want to sweep a servo motor from 0° to 180° smoothly using PWM on Raspberry Pi. Which approach is best?
hard
A. Use a fixed duty cycle of 12.5% without delay
B. Set duty cycle to 7.5% and wait for 5 seconds
C. Change duty cycle gradually from 2.5% to 12.5% in small steps with delays
D. Change frequency from 50 Hz to 100 Hz rapidly

Solution

  1. Step 1: Understand servo sweeping method

    Sweeping means moving smoothly from 0° to 180°, which requires changing duty cycle gradually.
  2. Step 2: Identify correct PWM control

    Duty cycle must change from about 2.5% (0°) to 12.5% (180%) in small steps with short delays for smooth motion.
  3. Final Answer:

    Change duty cycle gradually from 2.5% to 12.5% in small steps with delays -> Option C
  4. Quick Check:

    Smooth sweep = gradual duty cycle change [OK]
Hint: Sweep by small duty cycle steps with delays [OK]
Common Mistakes:
  • Using fixed duty cycle for sweeping
  • Changing frequency instead of duty cycle
  • Skipping delays causing jerky motion
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