Introduction: Toothbrush Machine

About: Creative Technologist.

The Toothbrush Machine®: because knowing how to build something doesn't always mean you should.

Backstory

The other week I built a toothbrush machine as a part of a pilot for a kids show about electronics. And because I love shitty robots and wanted an excuse to make one for myself. I posted it on Reddit and some people requested a tutorial on it so here we go.

Step 1: Get the Parts

  1. A robot arm from MeArm
  2. A skateboard helmet. I used this one but there are probably cheaper alternatives out there that work just as well
  3. An Arduino UNO
  4. A servo shield from SainSmart
  5. A toothbrush of your fancy

I had all the stuff laying around but I think the parts would come to about $140 all together.

Step 2: Assemble the Robot Arm

First thing I did was to assemble the robot arm. MeArm has a pretty intricate but good tutorial on how to do this.

I skipped step 2 and 3 that takes you through assembling the base and 18, 19, 20 that makes the gripping claw at the end of the robot arm.

Step 3: Attach Toothbrush

Instead of having a claw at the end of the robot arm, we'll attach the toothbrush. I went trough some iterations to find the best way to do this (without getting any extra parts, because I'm lazy).

To attach the toothbrush to the robot arm I used the parts in the first image, which are all left-overs from the robot arm kit.

Take the biggest part and drill two holes in the toothbrush head that co-align with the two topmost holes. Use the pointy screws to fasten it.

Use two screw to attach the collar with the spacers between to the part attached to the toothbrush. Make sure that the longer spacer is facing away from the toothbrush. Then attach all of it to the robot arm with the three remaining screws.

Step 4: Prepare the Helmet

Make a hole in the front of the helmet the size of the servo motor. There are probably more elegant ways to do this but I used a drilling machine an drilled small holes along the outline of the servo motor and then used a knife to cut it out.

Then take the plate from the robot arm and drill holes in the helmet that co-align with the holes of the plate.

Mount the servo with the motor mount facing down and put the acrylic square on top of it. Use the two long screws and the two nuts in the two upper holes. I had to cut out some of the insulation of the helmet to be able to screw them in. Then take the two shorter screws and put them in the two lower holes. It's important that the head of these screws are on the inside of the helmet as they otherwise will be in the way for the robot arm to move.

Step 5: Mount Robot Arm on Helmet

Place the robot arm so that the servo horn on the bottom of the robot arm mounts on the servo motor attached to the helmet. Make sure that the robot arm is placed so that you can move the servo motor as much to the right as you can to the left.

Fasten it with one of the small black screws from the MeArm kit.

Step 6: Attach the Arduino

Now we need to attach the Arduino to the helmet. If you haven't already, mount the servo shield to the Arduino UNO.

I just put a broken hair tie between the Arduino and the servo shield and then pulled it through two of the holes of the helmet. Make sure that the USB-port of the Arduino is facing towards the back of the helmet.

Step 7: Connect the Servo Motors

Pull the cable for the bottom servo motor through the front hole that the Arduino is tied to and connect it to pin 7 of the servo shield. Then connect the lower arm servo to pin 6 and the upper arm to pin 8.

Step 8: Program It!

Here's the code I wrote for the helmet. Might need some calibration to work with your face. Because we're all unique, yada yada yada.

// Written by Simone Giertz

#include <Servo.h> 
 
Servo servo[3];  
// base, upper arm, lower arm
static const int servoPin[3] = {7,8,6};
 
void setup() 
{ 
  Serial.begin(9600);
  for(int i=0; i<3; i++){ 
    servo[i].attach(servoPin[i]); 
  }
  // Fold the robot arm at the top of the helmet
  servo[0].write(90); // base
  servo[1].write(30);  // upper arm
  servo[2].write(150);  // lower arm

} 
 
void loop() 
{ 
   // Wait five seconds before we start the toothbrushing
   delay(5000);
   
   // Put the arm in brushing position
   servo[1].write(180);
   servo[0].write(90);
   servo[2].write(70);
   
   delay(1000);
   
   // brush back and forth
   for(int i = 0; i<10; i++){
    servo[2].write(60);
    delay(200);
    servo[2].write(120);
    delay(200);
   }
   
   // Fold the robot arm back up
   servo[0].write(90);
   servo[1].write(30);
   servo[2].write(150);
}