How to build your own Nerd-Cam 2 degree of freedom robotic camera mount
To run the camera once you have built it, read this.
For a printer friendly version of this how-to, click
here.
1. What you will need
A. 12 Round head 2-56 3/8" machine screws + nuts.
B. 14 Round head 2-56 1/2" machine screws + nuts.
C. 8 Flat head 2-56 1/2" machine screws + nuts.
D. 3 Flat head 2-56 1/2" machine screws + nuts.
E. 8 Round Head 4-40 3/8" machine screws + nuts.
F. 1/4" x 5/15" Tee nut, we used USS / 18891 from Crown Bolt, This can be purchased at Home Depot.
G. Sliding screen door top roller (Model B-537 Prime-Line), I bought this at Home Depot.
H. 2 STD TS-53, System 3000 servo motors from Tower Hobbies.
I. A Camera, We recommend Unibrain Fire-i firewire camera (and a standard VIA chipset firewire card you can buy anywhere).
J. A servo controller. We use a Mini-SSC II controller.
J. Something to cut parts from, we use 1/4" Plexiglas for our camera.
K. Parts diagram in Illustrator downloadable from here, or as PDF from here. Additionally you can download the
parts schematic from here. Additional PDF specs for pan and tilt with size info.
L. Tools, we use a BLANK to cut the Plexiglas parts. For additional machining we use a Dremel tool.
M. Safety glasses!
2. The first step is to machine the parts. If you use a BLANK you can cut them straight from our template. If you don't then you will have to be creative. Any rigid material will do, for the template to match up the parts must be only 1/4" thick.
3. You will need to drill pilot holes into the sides of the "side" parts. These will allow you to bond the "side" parts with the "bottom" and "holder" parts. The holes should be long enough so that you can insert 1/2" 2-56 screws. The bottom picture gives you an idea of what you are shooting for at this point.

4. Before you assemble the full holder assembly as shown above you will also need to drill some counter sinks. This is so that the bottom base can lie flush on what ever you want to mount the camera on eventually. The picture below shows how the counter sink should look on the parts

5. For the "Pan bottom" you will need to insert a tee nut. This may require some chiseling since it's a very tight fit. The picture below shows how this should look. The Tee-Nut is so that you can mount the camera on a standard tri-pod camera mount.

6. Go ahead and assemble the bottom "pan" holder. Secure the top part with 2-56 1/2" round head screws ,but use flat head screws on the bottom so that the your camera mount will sit flush on what ever you mount it to. It should look like below

7. Next insert a servo motor into the base using the 4-40 screws as shown in the picture below

8. Next you will need to take the plus shaped top off the servo motor and connect it to the odd "tilt side" piece as shown below. Use the 3/8" 2-56 flat head screws. The left part is the same as the right part. It just shows what the part looks like before and after you mount the plus shape servo thingy. Note: be sure the screw that connects the plus shape thingy to the servo is on the plus shape thingy before you connect the plus shape thingy to the side part. Also, you will need to widen the holes on the plus shape thingy just a tad in order for the 2-56 screws to fit. I use a drill bit to do this.

9. Connect your new base to the piece you just completed as so.

10. Next you will need to connect the "tilt bottom" to the sliding screen door roller. To do this align the rollers center of rotation with the center of rotation for the Plexiglas arm. This is about 8 mm back from the leading edge of the "tilt bottom" part. The first step is finding the center. Then you will have to decide where to drill three holes to connect this part to the "tilt bottom" part. This is the most difficult part and requires some solid measurements to make sure you center the piece correctly. You will also need to bevel an indentation as shown below so that swivel in the screen door roller has room to breath. Since this bevel will be hidden, it doesn't need to be pretty.

11. This picture above shows the three new holes and the beveled region. On the other side you will need to counter sink the three new holes as shown below

12. Not shown, you will need to counter sink the top two holes so that the screw you use will sit below the screen door roller. You will also need to cut slight notches into the screen door roller at the the points where it is fastened so that the screws hold tighter. The bottom picture shows the final result

13. Next begin to assemble and connect the top to the bottom pieces as illustrated. Be sure that as you connect the pieces to the servos that you align the pieces. That is, move the servo all the way to one side then connect the arm at that position. This means that the servo should be in the top most position with the arm pointing upwards. If you do not calibrate at this point you most likely will have to take the robot camera apart and do it at some point.

14. You will need to connect the top servo to the "tilt arm". Do this using the 2-56 3/8" screws.
15. Connect the tilt arm to the servo. The bottom picture shows the mounting finished without the camera added yet.

and

and

16. If you mount the unibrain firewire camera you will need to take it apart. I'm sure this voids the warranty so consider yourself warned. Mount the base part of the camera to the robot camera mount. Be careful, the unibrain camera contains surface mounted components that can easily come off. Be sure the camera is aligned when you mount it. The image below shows the finished camera.

17. The next step involves making the camera go. Connect the servos to the servo controller. Connect the servo controller to the computer. Power it up. Doesn't do anything? Relax, OK so now you have to make or get some software for your controller. For the Mini-SSC you can either download control programs that work under windows from the manufacturer, or you can write a very simple program in C++ to send bytes to the serial port. The code below shows a simple method to move one of the servos on the Mini SSC II controller under Linux.
00121 bool SSC::moveRaw(const int servo, const byte rawpos)
00122 {
00123 // Command Buffer:
00124 // [0] is start character
00125 // [1] is which servo to move
00126 // [2] is position to move servo to (0 to MAX_POSITION)
00127 char command[3]; 00128 command[0] = 255;
00129 command[1] = servo;
00130 command[2] = rawpos;
00131 int fd = open("/dev/ttyS0", O_RDWR); // open serial port 0
00132 if(fd==-1) LFATAL("open failed");
00133 if(write(fd, command, 3)==-1){
00134 perror("open");
00135 LFATAL("write failed");
00136 }
00137 close(fd);
00138 return true;
00139 }
To grab firewire images under Linux use the dc1394 library. For more info check http://www.linux1394.org/
All material copyright 2003 T. Nathan Mundhenk, iLab, University of Southern California