Introduction: Telepresence Robot: Basic Platform (Part 1)

About: My name is Randy and I am a Community Manager in these here parts. In a previous life I had founded and run the Instructables Design Studio (RIP) @ Autodesk's Pier 9 Technology Center. I'm also the author of t…

A telepresence robot is a type of robot that can be controlled remotely over the internet and function as a surrogate for someone somewhere else. For instance, if you are in New York, but want to physically interact with a team of people in California, you could call into a telepresence robot in California and have the robot be your stand-in.

This is the first part of a seven-part instructables series. Over the next two instructables we will be building the basic electromechanical robot platform. This platform will later be enhanced with sensors and additional control electronics.

This base is centered around a plastic box which both provides structure, and offers internal space for storing electronics. The design uses two center drive wheels attached to continuous servos which allow it to go forwards, backwards, and pivot in place. To keep it from tipping side-to-side, it incorporates two metal chair gliders. The whole thing is controlled by an Arduino.

To learn more about the topics covered in this series of projects check out the Robot Class, Electronics Class, and Arduino Class.

Step 1: Materials

Since this is a two-part project, I have included all of the parts in one list. The parts for the second half will be reiterated in that lesson.

You will need:

(x2) Continuous rotation servos
(x1) Standard servo
(x1) Arduino
(x1) 4 x AA battery holder
(x1) 2 x AA battery holder
(x6) AA battery
(x1) M-type power plug
(x2) Caster wheels
(x1) Plastic box
(x1) Selfie stick
(x1) 1/2" ceiling plate flange
(x1) Metal coat hanger
(x2) 1/4-20 x 7/8" by 1-1/4" base sliders
(x4) 1/4-20 nuts
(x1) Assorted shrink tube
(x1) Assorted zip ties

Step 2: Drill the Servo Horn

Widen the outermost holes of the two continuous rotation servos with a 1/8" drill bit.

Step 3: Mark and Drill

Center the servo horn upon one of the 3" wheel hubs and mark the servo's attachment holes.

Drill these marks with a 1/8' drill bit.

Repeat for the second wheel.

Step 4: Attach

Zip tie the wheels to the respective servo horns and trim away any excess zip tie tails.

Step 5: Connect the Motors

Using the motor's mounting holes, firmly zip tie the two continuous servos together back to back such that they are mirrored.

This configuration may seem simple, but is actually quite a robust drivetrain for the robot.

Step 6: Mark the Wheel Openings

We need to cut two rectangles in the center of the lid to pass the wheels through.

Find the center of the tupperware lid by drawing an X from corner to corner. The place where this X intersects is the center point.

From the center, measure 1-1/4" inward towards one of the longest edges and make a mark. Mirror this on the opposite side.

Next measure 1-1/2" up and down from the center marks and mark these measurements as well.

Finally, measure 1-1/2" outwards towards the long edge from each of the inner marks, and make three outer marks to dilineate the outer edge of the cut lines.

Please note that I didn't bother marking these measurements because they lined up perfectly with the trough in the lid for the box edge.

You should be left with an outline of two 1-1/2" x 3" boxes. These will be for the wheels.

Step 7: Cut the Openings

Using the markings as a guide, cut two 1-1/2" x 3" rectangular wheel openings using a box cutter, or similar blade.

Step 8: Mark and Drill

Place the motor assembly in the center of the lid such that the wheels sit centered inside of the two rectangular holes and don't touch any of the edges.

Once you are sure you have acheived correct wheel positioning, make a mark on each side of each of the motors. This will serve as drill guides for holes that will be used to zip tie the motors to the lid.

Once the marks are made, drill each of these holes with a 3/16" drill bit.

Step 9: Attach the Drive Wheels

Firmly zip tie the servo motors to the lid using the appropriate mounting holes.

Trim away the excess zip tie tails.

By having mounted the motors in the middle of the robot, we have created a robust drive assembly. Our robot will not only be able to go forwards and backwards, but also turn in both directions.

In fact, not only can the robot veer left or right by differing the speeds of the motors while driving, but it can also pivot in place. This is accomplished by rotating the motors at the same speed in opposite directions. On account of this capability, the robot can navigate tight spaces.

Step 10: Prepare the Sliders

Prepare the sliders by threading 1/4-20 nuts about halfway down the threaded studs.

These sliders are used for leveling the robot, and may need to be adjusted later to allow the robot to drive smoothly without tipping.

Step 11: Drill and Attach Sliders

About 1-1/2" inward from each of the short edges of the box, make a mark on center.

Drill through these marks with a 1/4" drill bit.

Insert the sliders through the holes and fasten them with 1/4-20 nuts.

These are used to keep the robot balanced. They should not be so high that the drive wheels have trouble making contact with the surface of the ground, nor so low that the robot is wobbling back and forth. You will likely need to adjust the height of these as you begin to see how your robot is operating.

Step 12: The Circuit

The circuit is fairly simple. It consists of two continuous rotation servos, a standard servo, an Arduino, and a 9V power supply.

The one tricky part of this circuit is actually the 9V power supply. Rather than being one single battery holder, it is actually a 6V and 3V battery holder in series to create a 9V one. The reason this is done is that the servos need a 6V power source, and the Arduino needs a 9V power source. In order to provide power to both, we are connecting a wire to the spot where the 6V and 3V supplies are soldered together. This wire will provide 6V to the motors, while the red wire coming off of the 3V supply, is actually the 9V supply the Arduino requires. They all share the same ground. This may seem very confusing, but if you look carefully you will see it is actually fairly simple.

Step 13: Power and Ground Wires

In our circuit the 6V power connection needs to be split three ways and the ground connection needs to be split four ways.

To do this, we will solder three solid core red wires to a single solid core red wire.

We will also solder a solid core black wire to four solid core black wires.

We are using solid core wire because they largely need to plug into servo sockets.

To begin, cut the appropriate number of wires, and strip a little bit of insulation of one end of each.

Twist together the ends of the wires.

Solder this connection.

Finally, slip a piece of shrink tube over the connection and melt it into place to insulate it.

You've now soldered two wiring harnesses.

Step 14: Connecting the Wiring Harness

Solder together the red wire from the 4 X AA battery holder, the black wire from the 2 X AA battery holder, and the single red wire from the power wiring harness. Insulate this connection with shrink tube.

This will serve as the 6V power connection for the servos.

Next, solder the black wire from the 4 X AA battery holder to the single black wire from the ground wiring harness. Insulate this with shrink tube as well.

This will provide a ground connection for the whole circuit.

Step 15: Attach the Power Plug

Twist apart the protective cover from the plug and slide the cover onto one of the black wires from the wiring harness such that it will be able to be twisted back on later.

Solder the black wire to the outer terminal of the plug.

Solder a 6" red solid core wire to the center terminal of the plug.

Twist the cover back onto the plug to insulate your connections.

Step 16: Make the 9V Connection

Solder the other end of the red cable attached to the power plug to the red wire from the battery pack, and insulate it with shrink tube.

Step 17: Mount the Battery Holders

Place the battery holders on one side of the box lid, and mark their mounting holes using a permanent marker.

Drill these marks with a 1/8" drill bit.

Finally, fasten the battery holders to the lid using 4-40 flathead bolts and nuts.

Step 18: Program the Arduino

The following Arduino test code will allow the robot to drive forwards, backwards, left, and right. It is only designed to check the functionality of the continuous servo motors. We will continue to modify and expand upon this code as the robot progresses.

/*
 
Telepresence Robot - Drive Wheel Test Code

Code which tests the forward, backward, right and left
functionality of the telepresence robot base.

*/

// Include the servo library
#include <Servo.h>

// Tell the Arduino there are to continuous servos
Servo ContinuousServo1;  
Servo ContinuousServo2;  

void setup() {

  // Attach the continuous servos to pins 6 and 7
  ContinuousServo1.attach(6); 
  ContinuousServo2.attach(7);  

  // Start the continuous servos in a paused position
  // if they continue to spin slightly, 
  // change these numbers until they stop
  ContinuousServo1.write(94); 
  ContinuousServo2.write(94); 
}

void loop() {

  // Pick a random number between 0 and 3
  int range = random(4);

  // Switches routines based on the random number just selected
  switch (range) {

    //If 0 is selected turn right and pause for a second
    case 0:
       right();
       delay(500);
       stopDriving();
       delay(1000);
       break;

    //If 1 is selected turn left and pause for a second
    case 1:
       left();
       delay(500);
       stopDriving();
       delay(1000);
       break;
    
    //If 2 is selected go forward and pause for a second
    case 2:
       forward();
       delay(500);
       stopDriving();
       delay(1000);
       break;

    //If 3 is selected go backward and pause for a second
    case 3:   
       backward();
       delay(500);
       stopDriving();
       delay(1000);
       break;
    
  }

  // Pause for a millisecond for stability of the code
  delay(1);
}

// Function to stop driving
void stopDriving() {
  ContinuousServo1.write(94); 
  ContinuousServo2.write(94); 
}

// Function to drive forwards
void forward(){
  ContinuousServo1.write(84);
  ContinuousServo2.write(104); 
}

// Function to drive backwards
void backward(){
  ContinuousServo1.write(104);
  ContinuousServo2.write(84); 
}

// Function to drive right
void right(){
  ContinuousServo1.write(104);
  ContinuousServo2.write(104); 
}

// Function to drive left
void left(){
  ContinuousServo1.write(84);
  ContinuousServo2.write(84); 
}

Step 19: Attach the Arduino

Place the Arduino anywhere, on the bottom of the box.

Mark both the Arduino's mounting holes and make another mark just outside the edge of the board adjacent to each of the mounting holes. Basically, you are making two holes to zip tie the Arduino board to the plastic box.

Drill all of these marks.

Use the holes to zip tie the Arduino to the inside of the box.

Like usual, trim away any excess zip tie tails.

Step 20: Plug in the Wires

Now it is time to finally connect everything together.

Plug the 6V red wires into the servo motor's socket that corresponds to its red wire.

Plug the ground wires into the corresponding black wire socket.

Connect a 6" green solid core wire to the socket that aligns with the white wire.

Connect the other end of one of the green wires to Pin 6 , and the other to pin 7.

Finally, plug the 9v power plug into the Arduino's barrel jack.

Step 21: Insert Batteries

Insert the batteries into the battery holders.

Keep in mind that the wheels will start spinning when you do this.

Step 22: Fasten the Lid

Put the lid on and fasten it shut.

You should now have a very simple robot platform that goes front, back, left and right.

We will expand further upon this in the coming lessons.

Step 23: Troubleshooting

If it is not working, check your wiring against the schematic.

If it still not working, re-upload the code.

If even this does not make it work, check to see if the green light on the Arduino is on. If it is not, get new batteries.

If it is mostly working, but not coming to a complete stop between movements, then you need to adjust the trim. In other words, the zero point on the motor is not configured perfectly, so there will never be a neutral position that will pause it.

To fix this, fine the little screw terminal in the back of the servo and very gently tweak it until the motor stops spinning (while in its paused state). This may take a moment to get just perfect.

In the next instructable in the series we will be attaching a servo-adjustable phone holder.