Control a hobby servomotor module.
Servos are feedback-controlled motors which move an output shaft to a specified position. Internally they use a potentiometer to measure the actual position. The internal circuit compares the actual and commanded position and generates positive and negative motor current pulses to operate a tiny gearmotor. They are a very convenient modular way to create controlled physical motion. However, due to the limited motion of the internal potentiometer, the servo also has a limited movement range (usually 180 degrees)
The commanded position is specified using a specific format of PWM in which pulses with duration approximately 1-2 ms repeat at approximately 50 Hz. The different pulse widths correspond to different positions. Note that this a significantly different waveform than the motor PWM, since the duty cycle is always very low, i.e., the pulse on-time is always much shorter than the cycle time.
Note that trajectories and speed control are only possible by issuing position commands at intervals.
As a challenge, rewrite the program to avoid delay()
and
operate two servos simultanously on different trajectories.