Shwisssssh! The flagella of a sperm cell smacks its brother as it struggles toward its destination. If it doesn’t make it to the egg, it will die here. Its flagella spins behind it, round and round. Each rotation brings it closer and closer to its goal.
Slam! It hits the thick, viscous shell of the egg..
Bacterial organisms (including sperm) propel themselves using a filament that exits the cell membrane at roughly a right angle. The filament spins in a circle similar to propeller.
Fueling this motor is the flow of hydrogen ions or sodium ions across the cell membrane. Since ions have a different number of electrons than protons they have a charge. Cells tend to normalize their charge. In normalizing the charge, these ions move across cell wall and in turn power the rotation of the flagella. WOW! This is a super tiny engine driven by charge molecules. What a great way to power your tiny robot.
Even though some of these organism reach flagella rotational speeds of 2000 RPMs. My expectation is that the torque is not significant enough to move the robots that I would like to build. So I will need find an alternative propulsion mechanism. There are a variety of off the shelf devices and some exotic mechanisms that are mostly hand constructed.
Typically when folks talk about motors in context of robotics, they are typically referring to small DC motors that spin continuously around a central rod. When a current is applied to the motor, the electro magnets spin the central rod for as long as the current remains applied. For more information on motors, see the Society of Robots article.
Muscle Wires or Shape-Memory Alloys
I’ve only seen a muscle wire once, and honestly, I was not impressed with it. This is clearly not a topic that I know much about. It is always magical when you see this wire magically contract. However, I have not seen any SMA that was fast or supplied an interesting amount of torque. One of the common SMA’s weighs 2 grams and lifts 7 grams. Proportionally that is significant. However, the wire cools relatively slowly and requires cool time to recover before next use.
Pneumatics or Pneumatic Artificial Muscles
Pneumatic systems are extremely exciting – but extremely complex. These systems are often implemented in pairs (much like any animal muscle pair). Pneumatics refers to the process of using a bladder pressurized with a gas or viscous liquid. Implicitly this requires a set of pumps, expandable membranes to hold the gas and a set of actuator valves to control the movement of the gas. This seems like a complex system, subject to break down – but does seem to poses a ton of promise for building fast life like systems. Shadow hand by Shadow Robotic Co is one of the most impressive implementations of a pneumatic robotic system. Big Dog by Boston Dynamics combines the responsiveness of a pneumatic system with the sophistication of a modern control systems to build an amazing and eerie system.
Like so many things in life, there are tradeoffs. Servos are left for last because they are the primary propulsion mechanism for the hexapod that I am building. Originally my goal was to have a platform upon which to experiment with learning algorithms. Hexapods provide sufficient complexity (6 moving legs) and enough stability to be the perfect platform. Simple rotary dc motors could not conveniently be used to drive the six legs – each of which have 3 degrees of freedom. Pneumatics would be interesting, but seems like too much work for the result I am working toward.
Society of Robots has a great tutorial that I will not completely recast here. Briefly however, the servo rotates a specific distance based on the length of the DC current pulse sent to the control circuitry of the motor. Each Servo is essentially a precise DC motor with sophisticated control circuitry that responds predictably to the DC signal sent to it.
Controlling the Servo
Though a servo can be directly controlled by the Arduino compatible Panda Fez II, using one of the 6 PWM ports on the board. Hexapods have 6 legs. Each leg has a hip, a knee and an ankle (no foot joints for now) – that makes three joints per leg. Each joint needs a servo. Three servos per leg x six legs = 18 servos for the legs alone! So I needed some sort of Arduino shield or servo controller to run all those joints.
There are a number of servo controllers that offer something as simple as an off board interface. More sophisticated systems, like the SSC-32, are themselves small computers that are able to store and playback high level sequences of commands. The Panda Fez II (or your computer) connects to the SSC-32 over a simple serial connection. Your application can send simple single servo commands via text strings (shades of Hayes Modem) sent to the SSC-32 – or you can store command sequences (please note that there are a number of inaccuracies in this guide – especially the electrical connections – beware) on the SSC-32 that controls complex sequences of operations across all of the servos at once.
Testing the SSC-32 controller
Many of you would likely connect the Panda Fez II to the SSC-32 and the controller to the servos and be off to the races – right? Wrong. It has been my experience that nothing works the way you expect it the first time. Perhaps I’m just a pessimist. So I wanted to make sure that everything worked in small units first before I start assembly. At the very list it would give me a better understanding of how things work. More likely it would help my figure out how to debug this combination of hardware and software.
Fortunately Lynxmotion provides a terminal program, LynxTerm with a wide variety of built in test functionality.
So I sent type the following command in the terminal window:
#0 P2250 T10000
#0 P750 S1000
The first argument “#0” is the servo number. The second argument is the servo position. The third argument is the speed. This will move the servo from 2250 to 750 (around 170°) in 1.5 seconds. Travel Distance / Speed Value = Travel Time (2250uS-750uS) / (1000uS/Sec.) = 1.5 Sec. Assuming the servo supports that range.
When I pressed enter, the servo moved!
Next Time: Sending Commands from the Fez Panda II