Example Sketch: Test Servo Speed

With this sketch, you can check servo RPM speed (and direction) for pulse values from 1375 µs to 1625 µs in steps of 25 μs.  These speed measurements will help make it clear how servo control pulse durations in the 1400 to 1600 µs range control servo speed.  This sketch starts by displaying the pulse duration that it’s ready to send as a servo control signal.  Then, it waits for you to send the Arduino a character with the Serial Monitor before it runs the servo.  It runs the servo for six seconds, and during that time you can count the number of full turns the wheel makes.  After that, the for loop repeats itself, and increases the pulse duration by 25 for the next test.

  • Place a mark (like a piece of masking tape) on the wheel so that you can see how revolutions it turns during the wheel speed tests. 
  • Set the BOE Shield-Bot on its nose so that the wheels can spin freely.
  • Enter, save and upload TestServoSpeed to the Arduino.
  • Open the Serial Monitor, and set the drop-down menus to “No line ending” and “9600 baud."
  • Click the transmit pane at the top, type any character, and click the Send button.
  • Count the number of turns the wheel makes, and multiply by 10 for RPMs.  (Don’t forget to make a note of direction; it will change after the 5th test.)
  • If you were to add your data points to the graph, would they fit the overall shape?

/*
 Robotics with the BOE Shield – TestServoSpeed
 Send a character from the Serial Monitor to the Arduino to make it run the
 left servo for 6 seconds.  Starts with 1375 us pulses and increases by
 25 us with each repetition, up to 1625 us.  This sketch is useful for
 graphing speed vs. pulse width.
 */

#include <Servo.h>                           // Include servo library
 
Servo servoLeft;                             // Declare left servo signal
Servo servoRight;                            // Declare right servo signal

void setup()                                 // Built in initialization block
{
  tone(4, 3000, 1000);                       // Play tone for 1 second
  delay(1000);                               // Delay to finish tone
 
  Serial.begin(9600);                        // Set data rate to 9600 bps
  servoLeft.attach(13);                      // Attach left signal to P13
}  
 
void loop()                                  // Main loop auto-repeats
{

  // Loop counts with pulseWidth from 1375 to 1625 in increments of 25.

  for(int pulseWidth = 1375; pulseWidth <= 1625; pulseWidth += 25)
  {
    Serial.print("pulseWidth = ");           // Display pulseWidth value
    Serial.println(pulseWidth);
    Serial.println("Press a key and click"); // User prompt
    Serial.println("Send to start servo...");

    while(Serial.available() == 0);          // Wait for character
    Serial.read();                           // Clear character

    Serial.println("Running...");
    servoLeft.writeMicroseconds(pulseWidth); // Pin 13 servo speed = pulse
    delay(6000);                             // ..for 6 seconds
    servoLeft.writeMicroseconds(1500);       // Pin 13 servo speed = stop
  }
}