I built the Arm while experimenting with micro-servos and using bent sheet aluminium as a construction material.

It uses 5 servos: 4 control the arm position and the fifth operates the parallel-jaw gripper via a nylon cable. Most arms have the gripper and wrist servos at the end of the arm where its weight has to be lifted by the arm servos. Putting the gripper-servo at the back of the arm help counterbalance the hand and wrist but it's only easy if there is no wrist-turning servo.

The shoulder and elbow servos are assisted by springs (you can just about see them in the photo). The springs nicely couterbalance the weight of the arm so that the servos only have to lift the weight of the object in the servos.

The gripper-servo operates via a nylon cable and a coiled tension spring (inside the arm). The spring means that the position of the servo controls the force in the fingers rather than their absolute position.

The servos operate the arm and wrist via rods. (Many arms use the servo bearings themselves.) Rods make it easier to position the servos more conveniently and one can use tougher bearings at the joints.

The hand contains two sensors

The "object present" sensor shines an IR beam from one fingertip to the other. The beam is interrupted when there's an object present. The hand then moves forward so the rubber pads are around the object then closes.

The colour sensor measures the light reflected fom an object between the fingers while shining red or green light on it. In the demonstartion program, the arm uses the colour sensor to sort Lego blocks.


The electronics is very similar to that of the BrainiBiped.

The controller uses a PIC16F628. It drives the servos directly. A PIC16F628 can't self program and has only 128 bytes of flash. I added a few resistors so I could use the RS232 port of the pc to make an on-board PIC programmer (rather like the very cheap JDM programmer). I set aside 1k of the PIC's memory to use for the interpreted "user program". Of course, I wasn't really being clever. I should just have used a 16F87. The servos run on 6V unstabilised straight from the battery. The PIC runs on stabilised 5V.

The PIC measures the current used by the servos (the circuit is explained on the BrainiBiped page). The current is a reasonable indication of the forces they're generating. In theory, the processor could use the measurement in the programming language but that's not implemented yet.


The programming system is very similar to that of the BrainiBiped but the program can be displayed as a flowchart or as text.

You can download a copy of the programming system.

The PC-program acts as a teach-and-replay sequencer. You press buttons (on the left of the screen above) to move the servos then, when you have a position you like, press AddToProgram|Servos to add it to the "user program". The program can also contain if ... goto and Goto commands.

The PIC does't send the new servo position to the servo immediately: the servo pulses are ramped-up or ramped-down so the servo moves at constant speed (which is less than the servo's maximum speed). When all the servos have reached their new target positions, the PIC tells the PC and the PC sends the next set of positions in the sequence. You can single-step the "user program" and the Run button sends the "user program" to the robot. Once you have a good program, it can be downloaded into the PIC and can be run stand-alone.

The user's program is held in program-flash memory along with the PIC hex instructions. The user's program is a table of records. Each record contains 5 bytes. The format is similar to that of the BrainiBiped.


Questions or comments ? E-mail me at

No part of this web page may be reproduced in any form or by any means, including photocopying and recording, for any purpose without the express written permission of Analogue Information Systems Ltd.

This web page is copyright © 2008 Analogue Information Systems Ltd., 1 Warrender Park Crescent, Edinburgh EH9 1DX, Scotland, UK, Tel: +44 (0) 131 228 6008. All Rights Reserved