Introduction: 3d Print an Artificial Muscle Robot Hand

About: I believe that the purpose of life is to learn how to do our best and not give in to the weaker way.
Here is an artificial muscle robot hand that could eventually be used as a prosthetic replacement for a human hand. The "bones" are 3d printed in PLA and the silicone rubber artificial muscles and skin were cast in 3d printed molds.

While most makers are not likely to want do duplicate this hand, some of the techniques used here might be found to be useful for other kinds of robots and casting.

Intro pic shows the hand holding a raspberry.

At this point, the soft robot fingers are a bit wobbly. I am working on adding an arm that will have room for more hand muscles. They would use tendons to open the fingers and balance the grasping muscles. This should stabilize the fingers and give a more natural movement.

The short video shows some of the movements of the robot hand.

Step 1: How It Works

This is an air powered hand that uses silicone artificial muscles as actuators. They are powered by compressed air. This gives it a soft touch that is much more human friendly than most robot hands. The artificial muscles are also very inexpensive to produce compared to traditional gear motors and servos.

Ideally, the whole thing would be printed completely in a 3d printer that printed a hard plastic and a soft rubber that holds air pressure. Since I have no access to such a machine, the soft silicone parts had to be cast in 3d printed molds.

This is an open source project. Version 1.0 is mainly a proof of concept--prototype and there is lots of room for improvements. While not near as strong as a human hand, it is strong enough to hold a cup of coffee or carry a briefcase.

Step 2: Materials

I used a Makerbot Replicator 2 to print the parts and molds in PLA plastic. Step 2 pic shows the 3d printed and cast parts used to make the robot hand.

Dragon Skin 20 pourable silicone from Smooth-On.com. Other kinds of silicone can be used, but this has very good flexibility and pour ability for casting the artificial muscles and skin.

100% silicone caulk

Corn starch to make Oogoo

1/8" silicone tubing and 1/8"PVC tubing and fittings-available from: http://www.usplastic.com

Parts for air muscle controller, see here: https://www.instructables.com/id/Air-Muscles-Make-an-Artificial-Muscle-Robot-Contr/


Parts for robot neurons, see here: https://www.instructables.com/id/Tinkertrons-Make-Artificial-Neurons-For-Robots/

6     4-40 x 3/4" round head screws and nuts

Step 3: 3d Printing the Hand Bones

There are four different hand bones that pivot and hold the four fingers. They can be printed without supports.

All 3d printed pieces were printed using PLA in a Makerbot Replicator 2 with the following settings:
Standard resolution with a raft
10% infill
2 shells
.2mm layers-standard resolution


There are two different bones that hold the thumb muscles and thumb. They are thumb1.stl and thumb2.stl

Step 4: Casting Artificial Muscles in Break-Apart Molds

An entire finger is cast in one 3d printed mold. This produces a soft robot finger that contains 3 muscles, soft bones between muscles, and a fingertip. It also contains two molded-in air channels that provide power to the muscles. Once cast and de-molded, the embedded separator fins are bent until they break away from the air bars. The air bars are then slid out to leave air channels. Silicone tubing is then glued to the air holes with silicone caulk or Oogoo. The Top separator fins are left embedded in place and do not hinder the muscle movement.

Three fingers are all the same size. The pinky finger is scaled down to 90 per cent of full size.

Break-Away Molds
The finger molds are designed to break apart into several pieces (pic 4) in order to make it easier to de-mold the silicone fingers. I first experimented with thicker reusable molds, but found that no matter what kind of release I used, it was extremely difficult to remove the cast silicone from the mold. They just have too much surface area. Half the time, I had to destroy the mold to get the casting out. So I ended up making very thin molds with break lines to make it easier to de-mold. No release is necessary.

Three Part Molds
The two lower thumb muscles were cast in two bottom molds that are taped together. A top piece with separator fins completes the mold.

Casting Silicone With A Vacuum Chamber
Unfortunately a vacuum chamber is required to cast good silicone artificial muscles. Without it,  the muscles would have bubbles that leak air even under low pressure. A vacuum pump is used by subjecting the silicone mix to a vacuum for  2 or three minutes before it is poured into a mold.


Using MoldsThat Dissolve
I also experimented with 3d printed molds made of HiPS filament that dissolves in Limonene. While it dissolves well enough, the Limonene shrinks and hardens the silicone to an unacceptable degree. It also permanently saturates the silicone making it impossible to glue to it. Acetone works better, but to a lesser degree, it also shrinks and hardens the silicone.

I have begun experimenting with PVA filament that dissolves in water, but have not fully worked it out yet.

Step 5: Thumb Muscles

Step 5 pic shows the two lower thumb muscles. I did not get the pivot point correct. The back muscle should have rotated toward the palm. Something to fix in the next version.

Step 6: Casting the Removeable Robot Skin

The skin on the back of the hand is designed to slot into grooves in the bone structure. This makes it possible to peel it back to access the inner muscles and bones.

Skinmold.stl is used to cast the skin. A piece of acrylic sheet is put on top of the mold and weighted after pouring to keep the skin thin.

The skin pads were cast in forms and were later glued to the PLA palm plate and thumb muscles using Oogoo. To get good adhesion a thin coat of pure silicone caulk has to first be put on the PLA where the pads go. Let it dry overnight and then use Oogoo to glue the pads on. Oogoo by itself will not stick very strongly to the PLA.

Step 7: The Artificial Muscle Controller

The pneumatic muscle controller consists of 13 solenoid valves and a 12 volt air compressor. It allows for the control of 11 muscles. They can be pressurized at 9 psi or a vacuum can be applied.

I have given details on how to build it in a previous instructable: https://www.instructables.com/id/Air-Muscles-Make-an-Artificial-Muscle-Robot-Contr/

If you just want to test some air muscles without a controller, a 60cc syringe with tubing works well. It can provide up to 30 psi.

Step 8: The Robot Neuron Schematics

Here is the schematic for the the master robot neuron that controls the pneumatic valves that power the artificial muscles. There are basically three Picaxe micro-controllers that are serially networked. A master neuron sends commands to the two actuator neurons that control the valves.

Pic 3 shows the schematic for the two activator neurons.

For more details on the robot neurons, see here: https://www.instructables.com/id/Tinkertrons-Make-Artificial-Neurons-For-Robots/

Step 9: The Robot Neuron Code

Here is the Picaxe code that controls the robot neurons. A universal TV remote control set up to use Sony code can be used to control the individual muscles. Muscle sequences can also be activated with the remote.

Here is the code for the 3 Picaxe controller neurons:

'20m2 master neuron-hand

b1=1
pause 100
serout c.0,t4800,(1,11)  'open intake
pause 40
serout c.0,t4800,(1,11)  'open intake
pause 40
serout c.1,t2400,(170,9,$0C,127) 'clock m1 24-127, 84-2/3 speed, 127default
pause 100


loop1:
low c.7

'    debug b1

irin [1000,loop1],b.5, b6

if b6 = 0 then send1 'valve1  button1=0
if b6 = 1 then send2    'v2
if b6 = 2 then send3    'v3
if b6 = 3 then send4    'v4
if b6 = 4 then send5    'v5
if b6 = 5 then send6    'v6
if b6 = 6 then send7    'v7
if b6 = 7 then send8    'v8
if b6 = 8 then send9    'v9
if b6 = 9 then send10
if b6 = 59 then send11  '(-)
if b6 = 11 then send12  'enter
if b6 = 14 then send13  'guide
if b6 = 21 then send14  'power

if b6 = 16 then send16   'ch+-vid1
if b6 = 17 then send17   'ch--vid2
if b6 = 116 then send116  'closehand
goto loop1


send1:  
'serout c.0,t4800,(1,13) 'guide
'pause 40
serout c.0,t4800,(1,1) 'send 1 byte with 1, as qualifier
pause 40
goto loop1

send2:  

serout c.0,t4800,(1,2)
pause 40
goto loop1

send3:  

serout c.0,t4800,(1,3)
pause 40
goto loop1

send4:  

serout c.0,t4800,(1,4)
pause 40
goto loop1

send5:  

serout c.0,t4800,(1,5)
pause 40
goto loop1

send6:  

serout c.0,t4800,(1,6)
pause 40
goto loop1

send7:  

serout c.0,t4800,(1,7)
pause 40
goto loop1

send8:  

serout c.0,t4800,(1,8)
pause 40
goto loop1

send9:  

serout c.0,t4800,(1,9)
pause 40
goto loop1

send10:  

serout c.0,t4800,(1,10)
pause 40
goto loop1

send11:   '(-)

serout c.0,t4800,(1,11)
pause 40
goto loop1

send12:   'enter

serout c.0,t4800,(1,12)
pause 40
goto loop1

send13:   'guide
serout c.0,t4800,(1,13)
pause 40
goto loop1

send14:   'power send 21
serout c.0,t4800,(1,21) 'send 21
pause 40
goto loop1

send16:   '
serout c.0,t4800,(1,16)
pause 40
goto loop1

send17:   '
serout c.0,t4800,(1,17)
pause 40
goto loop1




'18x activator neuron one-hand
'picaxe 18x
low 1
low 2
low 3
low 7
low 6
low 5
low 4

loop1:
'serin 0,t4800, b1
serin 0,t4800,(1),b1 'receive 1 byte after receiving 1
pause 30
'debug b1

'valves 1-7

if b1 = 1 then act1
if b1 = 2 then act2
if b1 = 3 then act3
if b1 = 4 then act4
if b1 = 5 then act5
if b1 = 6 then act6
if b1 = 7 then act7

if b1 = 16 then vid1
if b1 = 17 then vid2
if b1 = 116 then closehand

if b1 = 21 then openhand 'pressurev1v2 'power
goto loop1

vid1:
high 7
pause 800
low 7
high 4
pause 70
low 4
pause 2000
high 7    'vac
pause 1000
high 4
pause 1000
low 4
low 7

high 1
high 2
'high 3
high 4
high 5
high 6
'high 7
pause 4000
low 1
low 2
low 4
low 5
low 6
'high 3
pause 3000
high 3
'low 7
pause 3000

pause 4000 'midpause

'open thumb index
'high 3
high 4
pause 4000
high 3
low 4
pause 2000
low 3
goto loop1

vid2:
pause 1200
high 3
pause 500
low 3
pause 200
goto loop1

pause 3000

goto loop1


act1:     'v1
high 1
pause 20
low 1
goto loop1

act2:    'v2
high 2
pause 20
low 2
goto loop1

act3:
high 3
pause 20
low 3
goto loop1

act4:
high 7
pause 20
low 7
goto loop1

act5:
high 6
pause 20
low 6
goto loop1

act6:
high 5
pause 20
low 5
goto loop1

act7:
high 4
pause 20
low 4
goto loop1

closehand:
high 1
high 2
high 3
high 4
high 5
high 6
high 7
pause 2000
low 1
low 2
low 3
low 4
low 5
low 6
low 7
goto loop1


openhand:
high 1
high 2
high 3
high 4
high 5
high 6
pause 4000
low 1
low 2
low 3
low 4
low 5
low 6

high 7
pause 4000
low 5
low 6
low 7
goto loop1


pressurev1v2:    'ch+
high 1     'v1 arm down
high 2      'v2
pause 800
low 1
pause 1500
low 2
high 1
high 2
pause 700
low 1
low 2
pause 60
high 4      'v7
pause 1440
low 4
pause 20
'goto loop1
pause 1600  'close gripper

high 1   'v1 up arm
high 2   'v2
pause 2200
low 1
low 2
            'arm left
high 5     'v6
pause 1200
low 5
            'arm down
high 1   'v1
high 2   'v2
pause 800
low 1
low 2
goto loop1



vacv1v2:   'vac   ch-
pause 3000
high 1   'v1  vac valves
high 2   'v2
high 6   'v5
high 5   'v6
high 3
high 7
pause 3500
low 1
low 2
low 6
low 5
low 3
low 7
pause 20
high 4   'v7
pause 3000
low 4
high 1    'release vac inline
high 2
high 4
high 6
high 5
pause 2000
low 1
low 2
low 4
low 6
low 5
high 3
high 7
pause 1000
low 3
low 7
goto loop1




'18x activator neuron two- hand
low 1
low 2
low 3
low 7
low 6
low 5
low 4

loop1:
'serin 0,t4800, b1
serin 0,t4800,(1),b1 'receive 1 byte after receiving 1
pause 30
'debug b1

'valves 8-14

if b1 = 1 then act13
if b1 = 2 then act13
if b1 = 3 then act13
if b1 = 4 then act13
if b1 = 5 then act13
if b1 = 6 then act13
if b1 = 7 then act13

if b1 = 8 then act8
if b1 = 9 then act9
if b1 = 10 then act10
if b1 = 11 then act11
if b1 = 12 then act12
if b1 = 13 then act13
if b1 = 14 then act14
if b1 = 16 then vid1
if b1 = 17 then vid2
if b1 = 116 then closehand
if b1 = 21 then powervac5

goto loop1


vid1:
pause 2850
low 5   'vac
low 7
high 6
pause 2000
high 7
low 6
high 5


high 5
high 1
high 2
pause 4000
low 1
pause 4000
low 2
low 5
pause 2000

pause 4000 'midpause

'open thumb index
low 5
low 7     'vac intake off
high 6
high 1
pause 4000
high 7
low 6
low 1
high 5
goto loop1


vid2:
high 2
high 5
pause 900
high 1

pause 1000
low 1
low 2
low 5
goto loop1

pause 2000
high 7    'low vac
high 6
low 5
pause 1000
low 6
high 5

goto loop1


act8:
high 1
high 5
pause 20
low 1
low 5
goto loop1

act9:
high 2
high 5
pause 20
low 2
low 5
goto loop1

act10:
high 3
high 5
pause 20
low 3
low 5
goto loop1

act11:  'v11 intake
high 7
goto loop1

act12:
high 6
high 5
pause 20
low 6
low 5
goto loop1

act13:
high 5
pause 20
low 5
goto loop1

act14:   'stop
high 4
pause 5000
low 4
goto loop1

closehand:
high 5
high 1
pause 2000
low 5
low 1
goto loop1

powervac5:   'power vac 5 sec
low 7     'up arm    intake off
low 5
high 6
high 1
high 2
high 3
pause 8000
high 7
low 6
low 1
low 2
low 3
high 5
goto loop1

pressurev1v2:     'ch+
high 5     'arm down
pause 3160

high 1     'v8
pause 1200
low 1
pause 200
'goto loop1

vacv1v2:    'ch-
low 7     'intake off
high 6    'vac in

high 2   'open gripper
pause 1500
high 3   'grip
pause 1500
high 1  'v8
pause 3520

pause 3000
low 6
high 7
low 1


Step 10: Other Possibilities

Foot Powered Compressor
One of the advantages of using air powered muscles is that it should be possible to design an air pump that fits in or on a shoe. This could be used to pressurize a small flat backpack tank while walking. This could keep a prosthetic hand and arm powered in a fairly unobtrusive way.

Finger Tendons
One thing lacking in this first version of a robot hand is tendons and muscles to pull the fingers open. Right now it relies on the stiffness of the fingers, so it is a bit floppy. I experimented with various tendons (silicone elastic bands) and ligaments to open the fingers. Unfortunately, they severely hampered the grasping power of the fingers.

Once an arm is built, it could house four or five air muscles that pull on tendons to open the fingers. I have also been working on pull type muscles that use tendons.

Higher Pressures
I used surplus valves for the muscle controller and they can only hold about 9 psi. I am currently testing some 3d printed valves I designed that will work up to 30 psi. This will increase the grasping power and speed of the fingers considerably.

Robot Prosthetic Arm
I have started working on a human sized arm, but it is not yet ready. I am working on making my own lightweight valves that will fit in the arm.

Robot Contest

Participated in the
Robot Contest

Gadget Hacking and Accessories Contest

Participated in the
Gadget Hacking and Accessories Contest

Full Spectrum Laser Contest

Participated in the
Full Spectrum Laser Contest