RedBot Sensor - Mechanical Bumper
RedBot Sensor - Mechanical Bumper
SEN-11999 ROHS
 
Description from Sparkfun.com:
These simple switches are the Mechanical Bumper sensor for the SparkFun RedBot, giving you the ability to detect a collision before it really happens. This sensor works by acting as a SPST switch. When the “whisker” bumps into a foreign object it will make contact with a nut next to it, closing the connection and, by default, turning off the motor. By attaching these mechanical bumpers to you robot the whisker will bump something before your robot crashes into it.
The sensor has a 3-pin header which connects directly to the RedBot Mainboard via female to female jumper wires. Use the included RedBot library to make sure your robot never crashes into anything again.
Schematic
 
Parts Included
  
 
To Assemble
 
- For more detailed instructions, see Sparkfun's Assembly page.
Demo RedBot with Mechanical Bumper
Note:
Typically, two of these sensors are used as a front bumper, as shown in the image above. However, the demo shown below uses only one mechanical bumper sensor, which is bent to act as a front facing bumper. A drawback with this design is that the robot detects strait-on collisions well, but is not optimal for angled collisions.

Wiring
| mbed | Bumper | |
|---|---|---|
| VU | 5V | |
| GND | GND | |
| p27 | OUT | 

Here is a short code example that causes the RedBot to move forward at 75% full speed using a while loop. In the beginning of every iteration of the loop, the output from the mechanical bumper is checked using the mbed DigitalIn API at pin 27. Until the bumper comes into contact with a wall, the output of the bumper sensor is 5V. Thus, the input at pin 27 will be high. When it hits a wall, the mechanical bumper acts a single-pole, single-throw switch, connecting to ground, and the input at pin 27 will be low. In this event, the stop() function is called which causes the RedBot to back up and rotate to a different direction. From there, the robot returns to the while loop in the main program. This process continues ad inifitum.
- As an alternative to polling, interrupts may be used.
main.cpp
#include "mbed.h"
#include "motordriver.h"
 
DigitalOut myled(LED1);
DigitalIn bumper(p27);
//See http://mbed.org/cookbook/Motor
//Connections to dual H-brdige driver for the two drive motors
Motor  left(p21, p22, p23, 1); // pwm, fwd, rev, has brake feature
Motor right(p26, p25, p24, 1);
// Turn off motors, then back up and rotate to a different direction
void stop(){
    // Turn on LED1 to indicate a collision
    myled=1;
    // Stop the motors
    left.stop(1);
    right.stop(1);
    wait(.5);
    // Back up
    left.speed(-1);
    right.speed(-1);
    wait(.5);
    // Rotate to a different direction
    left.speed(-1);
    right.speed(1);
    wait (.5);
    // Stop when repositioned
    left.stop(1);
    right.stop(1);
    wait(1); 
    // Turn off the LED1 indicator light
    myled=0;
}
// Main program causes robot to move forward at full speed until a collision is detected
int main() {
    while (1) {
        // Check for collision and stop if detected
        if (bumper == 0) stop();
        // Move forward at 75% full speed until collision is detected
        left.speed(.75);
        right.speed(.75);
    }
}
Demo Video
Please log in to post comments.
