HANDle (Nunchuck control)


Overview

In this tutorial you'll learn how to control the Ada robotic hand with a joystick.

The HANDle is a joystick device that is used to control the Ada hand, in this case the we will use a Wii Nunchuck. This tutorial guides you through configuring the HANDle correctly, and downloading the appropriate firmware to allow the Ada hand to be controlled using a Wii Nunchuck.

This tutorial is for:

You will need:


Connecting the HANDLE

4-Pole headphone connector I2C diagram

4-Pole headphone connector I2C diagram

The Wii Nunchuck is a very cheap controller which incorporates a 2-axis joystick, a 3-axis accelerometer and 2 buttons into a very ergonomic package. The data regarding each of these control inputs is passed out of the Nunchuck using I2C, which means it can be easily integrated as an Ada hand controller.

To do this we need to connect the Nunchuck to the Ada hand.

  1. Plug the WiiChuck Adapter into the connector of the Wii Nunchuck, orientated so that the CLK, NC and GND face upwards
  2. Plug the WiiChuck Adapted into a bread board using the header pins (if there are no header pins, you may need to solder these yourself)
  3. Connect the '+' from the WiiChuck Adapter to the 5V pin on the headphone connector (pictured)
  4. Connect the '-' from the WiiChuck Adapter to the GND pin on the headphone connector
  5. Connect the 'd' from the WiiChuck Adapter to the SDA pin of the headphone connector
  6. Connect the 'c' from the WiiChuck Adapter to the SCL pin of the headphone connector
  7. Plug the headphone connector into the Almond board

You should now have the Nunchuck completely wired up and connected to the Ada hand, the next step is to enable the HANDle in the Artichoke V1.1 firmware and upload it to the hand.


Firmware

ENABLING THE HANDLE firmware

The firmware required for HANDle control is already part of Artichoke V1.2, it just needs to be enabled, recompiled and uploaded to the hand. 

       1. Navigate to the folder where you have downloaded OpenBionics_Artichoke (detailed download instructions here

       2. Open OpenBionics_Artichoke.ino and navigate to the Globals.h file

       3. Find the line with the following text (Line 29)

//#define HANDLE_EN// HANDle (Nunchuck) control

       4. Uncomment the line by removing the '//' before the '#define'. It should look the same as below

#define HANDLE_EN// HANDle (Nunchuck) control

       5. Compile and upload to the Almond board, as detailed in the Artichoke V1.2 User Guide

 

CONFIGURING the HANDLE firmware

Once uploaded and powered, connect using the Serial Monitor (baud 38400).

Once the Ada hand is powered up, enter the command 'A11' to enable the HANDle mode. If you see something resembling the following, then it means the Ada hand was unable to detect the Nunchuck and that you need to double check all of your connections.

Serial port if the HANDle is not connected

Serial port if the HANDle is not connected

If the Nunchuck is connected correctly, you should see the following

Serial port if the HANDle is connected correctly

Serial port if the HANDle is connected correctly


HAND CONTROL

MOVEMENT

Moving the joystick of the Nunchuck forwards closes the hand in the current grip, and moving the joystick backwards opens the hand.

The position of the joystick along the Y-axis is mapped to the 'grip position' of the hand in exponential manner, resulting in a greater sensitivity of movement around the midpoint of the joystick. This allows for finer control of the hand.

 

GRIP CHANGE

The two buttons on the back of the Nunchuck (C & Z) are used to cycle through the grips.

Pressing the 'C' button will increase the grip number, and pressing the 'Z' button will decrease the grip number. If the max/min grip number is reached, it will cycle round to the min/max grip number.

  • 0           Fist Grip
  • 1            Palm Grip (Fist Grip but with thumb extended)
  • 2           Thumbs Up
  • 3           Point
  • 4           Pinch
  • 5           Tripod (Pinch using both index and middle fingers)

CALIBRATING THE JOYSTICK

Occasionally the joystick will not return to the exact midpoint, causing the hand to slowly open/close when the joystick appears central. To recalibrate the midpoint of the joystick, hold both the 'C' and the 'Z' button for 500ms. You should see a confirmation via the serial port when the configuration is complete.

DEBUG DATA

Various pieces of 'HANDle debug data' can be viewed when in HANDle mode. Enter the command 'A12' to view the data from the HANDle, which should resemble the following;

Grip 0 joyPos 69.00 Hand pos 67 Fist
  • Grip # - the current grip number
  • joyPos ##.## - the current position of the joystick along the Y-axis
  • Hand pos ## - the current position of the hand (0 = open, 100 = closed)
  • Fist - the name of the current grip

IMPORTANT NOTE about i2c

The 2 data lines passed through the headphone port on the Almond board are connected to both I2C pins and analogue pins (through a 10k resistor). If the headphone port is being used for analogue data (e.g. muscle sensors), you should not initialise I2C. When using I2C (e.g Nunchuck), the analogue pins need to be pulled high to act as the pull ups for the I2C lines. 

pinMode(A6,OUTPUT);
pinMode(A7,OUTPUT);
digitalWrite(A6,HIGH);
digitalWrite(A7,HIGH);

This is implemented in HANDle.ino within the initialisation sequence of IOconfig().


Artichoke V1.1 Firmware User Guide


THIS TUTORIAL HAS BEEN ADDED TO THE ARCHIVES ON 22/08/16 AS IT HAS BEEN REPLACED BY ARTICHOKE V1.2 FIRMWARE USER GUIDE

OVERVIEW

In this tutorial you'll learn how to download and install the Artichoke V1.1 firmware for the Ada robotic hand. Artichoke is the version of hand control firmware designed for the Ada hand, running on the Almond board.

This tutorial is for:

You will need:


Getting Artichoke

THIS TUTORIAL HAS BEEN ADDED TO THE ARCHIVES ON 22/08/16 AS IT HAS BEEN REPLACED BY ARTICHOKE V1.2 FIRMWARE USER GUIDE

Artichoke includes full serial control of individual fingers and grip patterns, muscle control through EMG sensors and provides a framework for adding extra functionality to the hand (nunchuck/joystick control). As with all of Open Bionics developer materials, this firmware is completely free to download and use, and we strongly encourage you to incorporate this into your projects, to improve it and build upon it.

Downloading and installing FINGERlib.h

Before downloading Artichoke, you need to download and install FingerLib.h, a custom finger control library. FingerLib.h is designed to run on a number of different Arduino compatible microcontrollers, and manages all of the low level motor control and handling of timers, it also includes various example sketches for simple finger control applications.

You will first need to download and install Arduino, next we will install FingerLib.h

  1. Navigate to our GitHub www.github.com/Open-Bionics/FingerLib
  2. Download FingerLib as a ZIP
  3. Extract FingerLib-master.zip and rename it to 'FingerLib' instead of 'FingerLib-master'
  4. Move the FingerLib folder to your Arduino libraries folder (usually My Documents\Arduino\libraries)
  5. Restart Arduino by closing it and opening it again
Download and install Arduino

Download and install Arduino

Download FingerLib from GitHub

Download FingerLib from GitHub

DOWNLOADING and installing ARTICHOKE

THIS TUTORIAL HAS BEEN ADDED TO THE ARCHIVES ON 22/08/16 AS IT HAS BEEN REPLACED BY ARTICHOKE V1.2 FIRMWARE USER GUIDE

After FingerLib.h has been downloaded, we now need to download Artichoke and upload it to the Almond board.

  1. Navigate to www.github.com/Open-Bionics/Artichoke
  2. Download OpenBionics_Artichoke as a ZIP
  3. Extract Artichoke-master.zip
  4. Open the file OpenBionics_Artichoke.ino in the Arduino IDE
  5. Power up and connect the Ada hand to your computer
  6. Select the Arduino board (Arduino Mega 2560 or equivalent)
  7. Select the appropriate COM port (Instructions for Mac or PC)
  8. Upload the Artichoke firmware to the hand (if it is a right hand, the thumb may twitch when uploading)
  9. Once uploaded for the first time, the hand may be in demo mode
  10. Whilst in demo mode, the hand cycles through all of the various grips and finger movements
  11. See the next chapter to exit demo mode
Download Artichoke from GitHub

Download Artichoke from GitHub

Open OpenBionics_Artichoke.ino in Arduino (note, the other files within the folder may differ from this image as the firmware is updated)

Open OpenBionics_Artichoke.ino in Arduino (note, the other files within the folder may differ from this image as the firmware is updated)


Using Artichoke

Initial Config

THIS TUTORIAL HAS BEEN ADDED TO THE ARCHIVES ON 22/08/16 AS IT HAS BEEN REPLACED BY ARTICHOKE V1.2 FIRMWARE USER GUIDE

Once uploaded to the Ada hand, connect to the hand via the Serial Monitor (baud 38400).

You should first be greeted with a printout of the firmware version number and board name, followed by a list of possible serial commands. The demo mode should then start, and can be disabled by entering 'A0', without the apostrophes. Entering 'A0' toggles whether demo mode will run on start up (default enabled), and entering 'D' will run demo mode once.

At any time, if you enter '?' the hand will print the list of serial commands, and entering 'A1' will toggle whether the serial commands display on start up. Note that all characters must be uppercase.

Enter '?' to view the list of serial command

Enter '?' to view the list of serial command

HAND TYPE

THIS TUTORIAL HAS BEEN ADDED TO THE ARCHIVES ON 22/08/16 AS IT HAS BEEN REPLACED BY ARTICHOKE V1.2 FIRMWARE USER GUIDE

To select whether the Ada hand is a left or right hand, enter one of the following commands:

  • H1            Set the hand to be RIGHT
  • H2           Set the hand to be LEFT
  • H             View whether the hand is LEFT or RIGHT

Grip Control

THIS TUTORIAL HAS BEEN ADDED TO THE ARCHIVES ON 22/08/16 AS IT HAS BEEN REPLACED BY ARTICHOKE V1.2 FIRMWARE USER GUIDE

With demo mode disabled, if you enter 'G0' the hand should should close in grip pattern 0 (Fist Grip), if you enter 'G0' again it should toggle the hand open in grip pattern 0.

Try this with 'G#' where # is a number between 0 - 5 to perform a movement in a selected grip pattern, the grip patterns are as follows;

  • G0 Fist Grip
  • G1 Palm Grip (Fist Grip but with thumb extended)
  • G2 Thumbs Up
  • G3 Point
  • G4 Pinch
  • G5 Tripod (Pinch using both index and middle fingers)

For a more detailed explanation on the grip patterns and how to create custom grips, visit this tutorial.

Enter 'G0' to toggle the hand between open and close in 'Fist Grip'

Enter 'G0' to toggle the hand between open and close in 'Fist Grip'

Finger Control

THIS TUTORIAL HAS BEEN ADDED TO THE ARCHIVES ON 22/08/16 AS IT HAS BEEN REPLACED BY ARTICHOKE V1.2 FIRMWARE USER GUIDE

The fingers can be controlled individually by entering 'F#', where # is a finger number between 0 - 4.

  • F0 Thumb
  • F1 Index
  • F2 Middle
  • F3 Ring
  • F4 Pinky
Enter 'F0' to toggle the thumb between open and close

Enter 'F0' to toggle the thumb between open and close

Position and speed modifiers

THIS TUTORIAL HAS BEEN ADDED TO THE ARCHIVES ON 22/08/16 AS IT HAS BEEN REPLACED BY ARTICHOKE V1.2 FIRMWARE USER GUIDE

You can also set the fingers to move to a certain position (P0 - P100) for a selected grip or finger, for example if you enter 'G5 P50' the hand will move to the halfway position of the Tripod grip, or with 'F1 P10' the Index finger will be almost fully closed (P0 = fully open, P100 = fully closed).

The speed can be set in a similar manner by entering 'G# S???', where ??? is a number between 0 - 255 (note that due to the PWM frequency, the motors will struggle to move at any value below around 200).

Both the position and speed can be added to a grip (G#) or a finger (F#) command at the same time, e.g. 'F1 P50 S240'

Move the index finger to be 50% closed at a speed of 24

Move the index finger to be 50% closed at a speed of 24

Advanced settings

THIS TUTORIAL HAS BEEN ADDED TO THE ARCHIVES ON 22/08/16 AS IT HAS BEEN REPLACED BY ARTICHOKE V1.2 FIRMWARE USER GUIDE

Using an advanced command 'A#' allows different modes and settings to be configured, a full list of these settings can be seen by entering the '?' command.


EXTRAS

THIS TUTORIAL HAS BEEN ADDED TO THE ARCHIVES ON 22/08/16 AS IT HAS BEEN REPLACED BY ARTICHOKE V1.2 FIRMWARE USER GUIDE

For details on the different control methods available within Artichoke V1.1, visit out Control Methods Guide.

IMPORTANT NOTE ABOUT I2C

THIS TUTORIAL HAS BEEN ADDED TO THE ARCHIVES ON 22/08/16 AS IT HAS BEEN REPLACED BY ARTICHOKE V1.2 FIRMWARE USER GUIDE

The 2 data lines passed through the 3.5mm headphone port on the Almond board are connected to both I2C pins and analogue pins (through a 10k resistor). If the headphone port is being used for analogue data (e.g. muscle sensors), you should not initialise I2C. When using I2C (e.g Nunchuck), the analogue pins need to be pulled high to act as the pull ups for the I2C lines. 

pinMode(A6,OUTPUT);
pinMode(A7,OUTPUT);
digitalWrite(A6,HIGH);
digitalWrite(A7,HIGH);

THIS TUTORIAL HAS BEEN ADDED TO THE ARCHIVES ON 22/08/16 AS IT HAS BEEN REPLACED BY ARTICHOKE V1.2 FIRMWARE USER GUIDE


Grip Patterns - Artichoke


OVERVIEW

This post details how grips are produced and how grips can be customised in Artichoke V1.2.

This tutorial is for:

You will need:

Default Grips

Artichoke V1.2 incorporates 6 predefined grip patterns;

  • G0 Fist Grip

  • G1 Palm Grip (Fist Grip but with thumb extended)

  • G2 Thumbs Up

  • G3 Point

  • G4 Pinch

  • G5 Tripod

When using Serial control, the grip is selected based on the grip number (G#) entered, when using muscle control, the grips are cycled through from 0-5 when the outer forearm muscle is tensed for a set duration, and when using HANDle control, the grips can be cycled through by pressing either of the buttons.

(Each of the control methods ABOVE will link to their specific tutorial)

Finger positions

Each grip pattern is simply a combination of the individual finger positions, and each grip movement is a conversion of the desired grip position into the desired position of each finger within the grip. The function 'gripMovement( )' maps the input grip position (0 - 100) to individual finger positions defined by the values within the 'animation[ ][ ][ ]' array.

Simple

The animation[ ][ ][ ] array

The animation[ ][ ][ ] array

Without needed to know how the grip positions are processed (discussed in COMPLEX), you can modify the positions of the fingers within each grip by modifying the values within the 'animation[ ][ ][ ]' array within the 'AnimationPositions.h' file.

The array is split into 6 segments, where each segment represents one of the 6 grips. Each grip segment is then split into 6 columns, a grip position column (COUNT) and 5 finger position columns (F0 - F4). 

The array can be read by looking at the grip segment you wish to modify, then read down the grip position column to the grip position at which you wish to modify the finger positions, the finger position at that grip position can then be changed.

For example, if you wish to modify the position of a finger when the hand is closed in the tripod grip, you would look at the bottom segment (TRIPOD), look along the bottom row (COUNT = 100) and modify the finger position of the desired finger.

Both FULLY_OPEN and FULLY_CLOSED are defined presets within FingerLib.h, and are the maximum and minimum positions of the motors (50 - 973).

Complex

As detailed above, the array is read by first reading from the segment relating to the grip, the grip position is then used to determine the row of finger positions to use, however the actual function of this grip control is slightly more complex.

The segment of the array that applies to fist grip

The segment of the array that applies to fist grip

The function 'gripMovement( int grip position )' starts by looks through the COUNT elements of the desired grip pattern, and searches for two elements that the grip position is between. For example, in the above image, a grip position of 5 would be between COUNTA = 0 (Row 0) and COUNTB = 10 (Row 1), and a grip position of 50 would be between a position of COUNTA = 40 and COUNTB = 100.

After determining the two count values either side of the grip position (COUNTA and COUNTB), the position of the finger is determined by reading the finger position along the same row as the COUNT values. If the finger position reading (POSA) along the COUNTA row is read as BLANK, then the finger position from the row above is used, and if the finger position reading (POSB) along the COUNTB row is read as BLANK, then the finger position from the row below is used. The grip position (0 - 100) is then mapped from the range of COUNTA - COUNTB, to POSA - POSB, which calculates the finger position values between the ones in the array.

The Fist grip is designed so that when closing, the thumb moves across quickly to oppose the fingers, it then stays in the opposing position for a bit whilst the fingers close further, when the grip gets to a certain position, the thumb then continues closing to apply similar force to the opposing fingers. The graph below shows the how the positions of the fingers change (Y-axis) as the grip position is changed (X-axis) in Fist grip.

Fist grip movement

Note that F1 to F4 are all represented by F4

Using the Fist grip above as an example, when the grip position 0, we can generate the COUNT and POS values for each finger, as detailed below;

Grip Pos F0 F1 F2 F3 F4
0 50 50 50 50 50
5 400 96 96 96 96
10 750 142 142 142 142
15 750 188 188 188 188
20 750 235 235 235 235
25 750 281 281 281 281
30 750 327 327 327 327
35 750 373 373 373 373
40 750 419 419 419 419
45 769 465 465 465 465
50 787 512 512 512 512
55 806 558 558 558 558
60 824 604 604 604 604
65 843 650 650 650 650
70 862 696 696 696 696
75 880 742 742 742 742
80 899 788 788 788 788
85 917 835 835 835 835
90 936 881 881 881 881
95 954 927 927 927 927
100 973 973 973 973 973
  • FINGER0

    • COUNT A = 0

    • COUNTB = 10

    • POSA = FULLY_OPEN (50)

    • POSB = 750

  • FINGER1 to FINGER4

    • COUNTA = 0

    • COUNTB = 100

    • POSA = FULLY_OPEN (50)

    • POSB = FULLY_CLOSED (973)

Note that for FINGER1 to FINGER4, the finger positions for both Row 1 and Row 2 are BLANK, therefore COUNTB = 100.

When the grip position of 0 is mapped using the above values, the target position of each finger is calculated as 50. When the grip position is 5, the COUNT and POS values are still the same, but the mapped values are as follows;

  • FINGER0 = 400 (almost halfway closed)

  • FINGER1 to FINGER 4 = 96 (slightly closed)

When the grip position is at 25, the COUNT and POS values are different, but produce the following results;

  • FINGER0 = 750 (3/4 closed)

  • FINGER1 to FINGER 4 = 235 (1/4 closed)

We can see from the graph that fingers 0 - 4 move in a linear motion, whilst finger 0 moves quickly from 50 to 750, and remains at position 750 for a while, it then moves slowly from 750 to 973.


Ada V1.1 Printing Instructions


OVERVIEW

Parts on printer.PNG

In this tutorial you'll learn how to download and 3D print the Ada robotic hand, for a tutorial on the assembly of the hand click here.  The Ada robotic hand is the new generation of robotic hand, derived from our previous Dextrus robotic hand.

This tutorial is for:

You will need:


Downloading the Ada hand

The Ada robotic hand is released under Creative Commons Attribution-ShareAlike 4.0 license, meaning that it is completely free to download and use, we only require that any modifications and improvements are also released to the community with the same freedoms.

To download the latest version of our Ada hand:

  1. Download the 3D files here
  2. Extract the downloaded ZIP file (ada-robotic-hand.zip)

This folder contains the components required for a left and a right Ada hand (8 STL files), each part is prefaced with 'L' or 'R' denoting whether it is a part for a left or right hand. A single hand requires the following 3D printed components:

  • Palm - Ninjaflex
  • Back cover PLA/ABS
  • PCB tray upper PLA/ABS
  • PCB tray lower PLA/ABS

 


part ORIENTATION

palm

The palm is orientated to produce the best surface finish on the palm and the ventral (front) surface of the fingers, and also allows the finger joints to print correctly. With the part in this orientation, it requires support material between the print bed and the bottom surface; support material is not required for any of the internal parts of the palm.

The palm is printed with the fingers hyper-extended as this allows them to provide a more constant force when actuated and prevents the fingers from being too floppy at their naturally-extended position.

 

Back cover

The back cover is orientated so that the face of the wrist connector is on the print bed, and the text prints facing the correct way up. This part requires (line pattern) support material both between the bed and the bottom surface of the cover, and for the internals of the cover.

 

PCB Tray (Upper & Lower)

The PCB tray prints as 2 separate components, which are then glued together. They are orientated with their flat faces on the bed and do not require any support.


Recommended PRINT settings

Print settings will vary between printers, If you have already dialled in your printer for using Ninjaflex and PLA, then we recommend you use those settings. Below are the print settings we have used to print the Ada hand.

PLA

  • Ada Parts: Back cover, PCB tray upper, PCB tray lower
  • Layer Height: 0.3mm
  • Temperature: 205°C - 230°C
  • Print Speed: 
    • Outer shell: 30 mm/s
    • Inner shell: 70mm/s
    • Infill: 70 mm/s
  • Infill Density: 30%
  • Overhang Angle: 60%

Ninjaflex

  • Ada Parts: Palm
  • Layer Height: 0.3mm
  • Temperature: 230°C (Lulzbot Taz)
  • Print Speed: 
    • Outer shell: 16 mm/s
    • Inner shell: 20mm/s
    • Infill: 20 mm/s
  • Infill Density: 45%
  • Overhang Angle: 30%
  • Support Density: 25%

Please read the 'Tips for printing with flexible filament' section below for a more detailed discussion on printing with Ninjaflex, or visit the Ninjaflex website for their recommended print settings.


Print finishing

Palm

The support material on the back and inside of the palm needs to be removed, as well as any support material in the fingertips and in the motor slots.

Flex each finger in turn and make sure that there is no excess support material preventing the finger flexing.

 

Back Cover

Remove the support material from the inside of the back cover, the wrist connector holes and around the base of the back cover (support is highlighted in grey in the images).

 

PCB Tray

The PCB tray is printed in 2 separate components, upper and lower. Use super glue to join the two flat faces together, making sure that the slots for the motor cables line up, and allow time for the super glue to dry. 

 

tuning the STIFFNESS OF THE finger joints

The joints in the fingers have been designed in order that both of the joints close at the same rate, however the joint stiffness is greatly affected by the print settings. If one joint closes before the other, then you may need to manually adjust the joint stiffness, either by adding super glue or by slightly cutting the joint material with a scalpel. This step can damage the hand, so only adjust the stiffness of the joints if you feel that it is absolutely necessary.

When a finger is closed, if the proximal (bottom) joint completely closes before the distal (top) joint starts to close, or if the proximal joint seems overly floppy, you will need to stiffen the proximal joint. Use a toothpick or cotton bud to apply a small dab of super glue to the inside of the proximal joint. The tip with this method is to add a small amount of super glue, wait for it to dry, test the joint stiffness and then repeat. 

If when the finger is closed, the distal joint closes completely before the proximal joint start to close, then you may need to reduce the stiffness of the proximal joint. Use a scalpel to create a small cut on the inside of the proximal joint (highlighted blue), this should loosen the joint.

If the motors appear to struggle to close the finger, you may need to loosen both of the finger joints. Use a scalpel on both the proximal and distal joints, as described above.


TIPS for PRINTING WITH FLEXIBLE FILAMENT

Our Printing setup

Our 3D printing arsenal comprises of the following:

We use all of these printed to produce the various components of the Ada hand. The Mini is primarily used to print the PLA parts (Back Cover & PCB Tray) and both the Ultimaker's and the Taz's are used to print the Ninjaflex parts (Palm). We have modified/upgraded both the Taz's and the Ultimaker's to allow them to reliably print flexible filaments such as Ninjaflex. Below are a few of our tips, modifications and techniques for printing with flexible filaments.

Nozzle Size

The force applied by the feeding the filament into the hot end creates pressure in the nozzle which forces the melted filament through the nozzle. The nozzle pressure is influenced by many different factors, such as the consistency of the material at certain temperatures, the extrusion speed, the nozzle size etc. 

Flexible filaments require a low nozzle pressure to extrude reliably. One way to reduce this nozzle pressure is to increase the nozzle size. We use a 0.6mm nozzle on both the Ultimaker's and the Taz's. A nozzle size of 0.5mm still allowed us to print Ninjaflex reliably, however increasing the nozzle size to 0.6mm allows us to increase the extrusion speed, thus decreasing the print time.

extruding Flexible filament

An issue with flexible filament is that it can compress and buckle under pressure, which means that the distance between the extruder and the hot end should be as short as possible. There should also be as few gaps and pinch points as possible, such as the gap between the knurled bolt and the hot end. 

The Taz uses a direct drive extruder, therefore it is relatively simple to modify to print flexible filament. You only need to the standard extruder with the flexystruder, which removes all of the pinch points and possible gaps in the extruder.

The Ultimaker uses a bowden extruder setup, which comprises of a stepper motor mounted on the frame of the printer which feeds the filament through a length of tubing connected to the hot end. This setup reduces the mass and size of the print head, thus increasing the possible print speed. However this setup is not suitable for printing flexible filament as flexible filament tends to buckle in the bowden tube and the amount the filament can compress and stretch over the large length results in a less responsive hot end.

To modify the Ultimaker to print flexible filament we have used a Flex3Drive. The Flex3Drive uses a flexible drive shaft connected the frame mounted stepper motor, which also connects to an geared extruder assembly mounted on the print head. This means that the print head still has a small mass and footprint, but reduces the distance between the extruder and the hot end, effectively turning the configuration into a direct drive setup.

Temperature

The Ninjaflex website suggests that Ninjaflex is printed at 230°C (225°C - 235°C). We currently print Ninjaflex on the TAZ at 230°C, and at 195°C on the Ultimakers. The temperature of the Ultimaker is so low to prevent strings and to allow it to print bridges relatively successfully.

Print speeds

As detailed above, we need to keep the nozzle pressure relatively low in order to allow for reliable extrusion. Another way to reduce this pressure is to print slowly. We use print Ninjaflex at around 1/3 of the speed we use for PLA.

Retraction

Flexible filament compresses as it is extruded and stretches when retracted. This means that the retraction speeds and distances need to be increased to prevent stringing on the print.

Colour Pigments

We have found that the settings for printing Ninjaflex differ slightly between colours, for example we have found the following Ninjaflex colours to print inconsistently.

Inconsistent colours:

  • Sapphire Blue
  • Concrete

Consistent colours:

  • Black
  • White
  • Orange
  • Red
  • Green
  • Pink

Take this information about material inconsistencies with a pinch of salt, as there may have been other contributing factors causing the print inconsistencies.

More

More information on printing with flexible filaments can be found at Gyrobot and RichRap.



Ada V1.1 Assembly Instructions


Overview

This is a step by step guide on how to make an Open Bionics Ada robotic hand. This is derived from the Dextrus robotic hand, by the Open Hand Project.

This tutorial is for:

  • Hand: Ada V1.1
  • Board: Almond V1.2
  • Firmware: N/A

Introduction

This tutorial assumes you have either ordered the Ada robotic hand kit or have access to a 3D printer are planning to print 3D parts from thingiverse. The list of required 3D printed parts, components and tools are stated below. If you have purchased the Ada kit, you can skip the first step and start straight from step 2.

This hand would provide an excellent research platform for robotics or a test platform for prosthetics research. It has been designed to be easy to build and repair and should be a great project for someone with interests in robotics or prosthetics and wants their very own robotic hand!

Buy.png

This tutorial will take you through the assembly of the 3D printed parts, the mounting of the circuit board, and the uploading of test firmware. If you have all of the parts to hand, assembly should take around 1 hour. The assembly of this hand is exactly the same for both a left and right hand, the only difference being in Step 4, mounting the electronics.

 

Assembly steps:

  1. Printing and removing support material
  2. Inserting the motors
  3. PCB tray assembly
  4. Mounting the electronics
  5. Attaching the back cover
  6. Uploading the test firmware
  7. Attaching the finger tendons
  8. Hand is complete

 

Tools required:

  1. M3 Allen key
  2. Tweezers/Needle nose pliers
  3. Scissors
  4. Soldering iron (used for the push inserts)
  5. Micro USB cable
  6. 12V DC power supply

 

Components required:

  1. Super glue
  2. 9 x M3 bolts (6mm length)
  3. 13 x M3 threaded push inserts
  4. 1m x 0.7mm tendon string
  5. 5 x 12V PQ12 linear actuators (PQ12-30-12-P or PQ12-63-12)
  6. 1 x Open Bionics Almond electronics
  7. 5 x Micro gel fingertip grips

 

3D printed parts:

  1. Palm
  2. PCB tray upper
  3. PCB tray lower
  4. Back cover

1. Printing and removing support material

First off, we'll need to print the 4 main components for the Ada robotic hand, the files can be found on YouMagine or thingiverse

You will need:

  • 200g Ninjaflex
  • 100g PLA/ABS

3D printed parts:

  • Palm
  • PCB tray upper
  • PCB tray lower
  • Back cover

The palm is to be printed in Ninjaflex, and all of the other components are printed in either PLA or ABS (whichever you feel most comfortable printing with). Note that most of these parts require support to be printed effectively.

For a more detailed guide on how to print the Ada hand, visit this tutorial.

The Palm

  1. To print the palm make sure that the part is orientated correctly, so that the wrist and the fingertips are both the bottom most points of the model (pictured)
  2. Our recommended Ninjaflex print settings are as follows
    1. Layer height 0.3mm
    2. Fill density 45%
    3. Support
      1. Type 'Touching Build Plate'
      2. Angle: 30°
      3. Density: 25%
    4. Shell thickness 1mm
    5. Print Speeds
      1. Infill 20mm/s
      2. Outer shell 16mm/s
      3. Inner shell 20mm/s
  3. The print usually takes around 20 hours, but print time may vary depending on your print settings
  4. Once printed, remove the palm from the bed and use pliers to remove the support material from the back and inside of the hand
  5. Be sure to also remove all of the support material in the large motor horn holes and in the back of the motor slots (pictured)
  6. You should also remove any support material inside the tip of thumb, but make sure you don't damage the tendon attachment point on the tip of the thumb

PCB Tray

  1. Print both of the PCB tray components (upper and lower) in PLA (or ABS) so that the flat faces are on the bed
  2. These components do not require any support to be printed, and usually take around 2 hours
  3. These components will be glued together in step 3

Back Cover

  1. Print the back cover with support in PLA (or ABS), and orientated so that the wrist is on the bed and the part is vertical
  2. This part takes around 6 hours to print
  3. Once printed, remove the support from inside the cover and within the cable holes in the wrist

You should now have printed and cleaned up the palm, PCB Tray and back cover, the next step involves inserting the motors into the palm.


2. Inserting the Actuators

In this step you will insert the motors into the palm.

You will need:

  • 3D printed palm
  • 5 x PQ12 linear actuators

Insert the Actuators

Each motor has a moving "horn" protruding from the end closest to the cable exit point. There is a fixed, plastic "attachment loop" on the other end.

  1. Place the "3D printed palm" palm-down on the table 
  2. Insert the attachment loop of one of the PQ12 linear actuators into the cavity at the wrist end of the index fingers motor slot
  3. Press the "horn" end of the motor into the slot so that the motor is seated comfortably
  4. Repeat this for the remaining 4 motors
  5. The motor horns will be extended in a later step to allow us to attach the finger tendons

You should now have all 5 motors inserted into the palm, the next step is to mount the PCB tray ready for the electronics.


3. PCB tray assembly

Having inserted all of the motors, the next step is to assemble and mount the PCB tray.

You will need

  • Palm with motors
  • 3D printed upper PCB tray (Shown on the left in the first step of the image below)
  • 3D printed lower PCB tray (Shown on the right)

Assembling the PCB tray

The PCB tray is formed of 2 separate components which need to be joined together using super glue.

  1. Place the lower PCB tray on the table with the large flat side face up
  2. Inspect the packaging of the particular glue you are using to determine the drying time. Most superglues set within a few seconds. Also ensure the glue is suitable for use with plastics and that you are following the safety guidelines
  3. Apply a thin layer of super glue to the upper face of the lower PCB tray
  4. Align one edge of the upper PCB tray with that of the lower. Then press the two components together so that the flat faces become fixed, make sure that the cable slots line up. NOTE you will have very little time to readjust the relative position of the components before the glue sets
  5. Allow a few minutes for the glue to cure fully

Mounting the PCB tray

The PCB tray is designed to keep the motor cables in place and to allow the PCB to be mounted within the hand.

  1. Place the palm with motors palm down on the table
  2. Pass the motor cable for each motor through the corresponding slot in the middle the PCB tray. The numbers on the PCB tray should be facing up. Note that motor 0 (th thumb) doesn't have a slot, only a notch
  3. Thread each cable back down through the inner of the pair of slots on the finger edge of the PCB tray. The cables should now be poking out of the bottom of the tray
  4. Thread the cables back up through the remaining slots
  5. Press the PCB tray onto the top of the motors. It should fit snugly around them
  6. Ensure the thumb motor cable is in line with the notch marked 0
  7. Make sure there is no slack in the motor cables passing over the PCB tray

You should now have something similar to the pictures above, the next step is to attach Almond board electronics.


4. Mounting the electronics

With the PCB tray mounted, we need to connect the Almond board to the hand.

You will need:

  • Palm assembly with motors and PCB tray
  • Almond board

Note, the steps differ slightly between a left and right hand.

 

Both hands

  1. Place the Almond board upside down on the back of the fingers
  2. Unclip all of the motor connectors by using tweezers to gently slide the black clip away from the motor connector
  3. Plug in all of the finger motors by sliding them into the connectors, orientated so that the copper pads are facing into the board
  4. Slide the black connector clips back in to lock the motor cables into the connectors

Right hand only

5. Plug the thumb motor cable into the top right motor connector and lock the connector

Left hand only

5. Plug the thumb motor cable into the top left motor connector and lock the connector

Both hands

6. With all of the motor cables connected to the Almond board, place it so that it just slots onto the top of the PCB tray, depending on the material you have used, this may be either a tight or a loose fit.

Make sure that the motor cable for the thumb DOES NOT fold completely, as this can cause the cable to break!

The motors and electronics are now mounted and the hand is ready for the back cover.


5. Attaching the back cover

Before the back cover is mounted, we need to attach the threaded inserts.

You will need:

  • Palm assembly with motors and PCB
  • 3D printed back cover
  • 13 x M3 threaded push inserts
  • 9 x M3 bolts
  • Tweezers
  • Soldering iron (used for the push inserts)
  • M3 Allen key

Threaded push inserts

  1. Heat your soldering iron to around 220°C - 260°C
  2. Using the tweezers, place one of the threaded inserts over one of the holes on the back cover
  3. Heat the threaded inserts with the soldering iron
  4. Gently press on the inserts with the tip of the soldering iron to press them into the plastic, until the top of the insert is flush with the surface of the part
  5. Continue this process for all 9 inserts on the back cover and the 4 inserts on the wrist

Mounting the back cover

With all of the threaded inserts mounted in the back cover, we now need to attach it to the palm assembly.

  1. Place the back cover on the back of the palm so that the bolt holes on the back cover line up with the holes on the palm (note, you may need to bend the fingers/thumb to seat the back cover correctly)
  2. With the back cover in place, look through the holes in the wrist connector to confirm the 3 connections on the Almond board line up with the holes in the wrist and are still accessible
  3. Place the M3 bolts through the 9 bolt holes on the palm and bolt them into the threaded inserts in the back cover
  4. If the inserts squeak as you screw into them, this means that there is some melted plastic in the threads of the threaded insert. To clear this you may need to tighten a few turns, then loosen them slightly, and repeat this until the bolt is tight enough

You should now have something starting to resemble a robotic hand, the next step is to upload some test firmware to the PCB to extend the motors in order to attach the finger tendons.


6. Uploading the test firmware

At this stage we are wanting to test that the Almond board works so that we can extend the motors in order to allow us to attach the finger tendons.

You will need:

  • Hand assembly
  • 12V DC power supply
  • Micro USB cable
  • Computer

Downloading and installing Arduino

To upload the test software to the hand we first need to download the Arduino IDE.

  1. Navigate to www.arduino.cc/en/Main/Software
  2. Download the latest release of Arduino
  3. Once downloaded, run the installation file and follow the instructions to install Arduino
  4. If you have any issues, there are a number of tutorials on YouTube

Downloading FingerLib

Once Arduino has been installed, we need to download FingerLib.h, a custom library written by Open Bionics to handle the motor control and other board specific tasks. FingerLib.h includes various example sketches for simple finger control functions and is also used by the Artichoke firmware for the complete hand control system.

  1. Navigate to www.github.com/Open-Bionics
  2. Download FingerLib as a ZIP
  3. Extract FingerLib-master.zip
  4. Move the FingerLib folder to your Arduino libraries folder
    1. My Documents\Arduino\libraries
  5. Restart Arduino by closing it and opening it again

Upload the example code

Once the FingerLib library has been installed, open Arduino and open the 'MotorTest' example.

  1. Open Arduino
  2. Open 'File -> Examples -> FingerLib -> MotorTest'
  3. This should open up the MotorTest example from FingerLib

We now need to power up and connect to the Almond board.

  1. Plug the 12V DC power supply into the DC jack in the wrist (the left hole in the wrist connector)
  2. Plug the micro USB cable to the hand through the wrist (the right hole in the wrist connector)
  3. Within Arduino, select the board we are using
    1. 'Tools -> Board -> Arduino Genuino/Mega or Mega 2560' (the board name may differ depending on the version of Arduino you are using, make sure that the board selected relates to the Mega 2560)
  4. Select the COM port for the board
    1. 'Tools -> Port -> COM??' (where the '??' is the COM port number of the Almond board)
  5. With the board selected and connected, click the arrow/upload button to compile and upload the MotorTest example to the Almond board

Run MotorTest 

With the 'MotorTest' example uploaded, we now need to extend the motor horns in preparation for the finger tendons.

  1. With the MotorTest example uploaded to the Almond board, connect to the board using the Serial Monitor
    1. 'Tools->Serial Monitor'
  2. Use a baud rate of 38400 (bottom right drop down menu within the Serial Monitor)
  3. You should now see the board printing out the position of each motor channel (m0 - m4)
  4. If you enter a motor number and press enter(0 - 4), the finger attached to that motor should toggle between open and close
  5. If you enter number '5', all of the motors should toggle their positions between open and close
  6. Entering a number greater than 5 will stop the motors
  7. After playing around with the motors for a bit, set it so that all of the motor horns are fully extended
  8. Unplug both the power and the USB to proceed with the next step

You should now have the hand assembled with all 5 motor horns extended, the next step is to attach the finger tendons.


7. Attaching the finger tendons

The tendons attach the fingertips to the motors and allow for the fingers to be actuated, this step has some very fiddly parts due to the tight spaces and awkward angles.

You will need:

  • Hand assembly
  • 1m x tendon string (shark fishing line)
  • Scissors
  • Tweezers

Attaching the tendons to the fingertips

1. Cut a length of tendon string to 20cm

2. Thread part of the string through the hole on the tip of the finger

 

3. Use tweezers to partially pull the tendon string though the other finger tip hole, so that it loops around the termination point

 

4. Thread the string back through the finger and around the termination point a second time

 

5. Tie a knot in the tendon string to secure it to the tendon attachment point in the finger tip, we recommend using multiple knots and pull it tight to keep it secure

 

6. With one end of the tendon string tied to the finger tip, thread the other end through the finger tip hole, passing it through the tendon channels on the inside of the finger, down to the palm

 

7. With the tendon string exiting the finger near the palm, pull the tendon string tightly whilst holding the finger extended to pull the knot on the fingertip to the inside of the finger

 

8. Repeat this step for all of the fingers and the thumb

 

Attaching the tendons to the motors

You should now have all 5 finger tendons attached to their finger tips and threaded through the tendon channels within the finger, exiting near the motor horn holes.

1. You now need to use the tweezers to thread the tendon string from the finger tendon channel, passing it through the hole in the motor horn

 

2. Pass the string through the motor horn a second time

 

3. Tie a knot around the motor horn (we recommend that you slightly bend the finger during this process so that the natural position of the finger is slightly flexed)

 

4. You may need to tie multiple knots to keep the finger tendons secure

 

5. Repeat this process for all 5 fingers, but do not cut off the excess string yet

Test the tendons

  1. Power up the hand and run the MotorTest example again, to make sure that the positions of the fingers look natural
  2. If the tendons need tightening, undo the knot at the motor horns and tie the tendons with the fingers more flexed
  3. If you are happy with the tendon lengths you can cut off any excess tendon string at the finger tips and at the motor horns

You should now have all of the finger tendons attached to both the fingers and the motors.


8. Hand is complete

The final step is to attach the micro gel fingertip grips to each of the fingers.

You will need:

  • Hand assembly
  • 5 x Micro gel fingertip grips

Fingertip grips

The micro gel fingertip grips give the Ada fingers a more human-like grip ability by increasing the friction and texture of the fingertip.

  1. Spread the micro gel fingertip over the end of a finger until the very tip of the finger reached the end of the gel fingertip
  2. Pull the bottom of the gel fingertip down and place it so that it sits in the back of the middle finger joint
  3. Make sure the bottom of the gel fingertip is not sitting in the front of the middle finger joint
  4. Repeat this for all of the fingers

Congratulations, you have now completed the assembly of the Ada robotic hand! :)

IMG_7507 with logo.jpg

Hand software

We have written a version of Arduino software, named Artichoke, to specifically run on the Ada hand. It includes full Serial control of individual fingers and grip patterns and also includes muscle control. For instructions on where to download and how to use Artichoke, head over to the Artichoke User Guide here.

More Info

If you've completed this build, please do let us know on our forums, don't hesitate to post a forum message if you have any issues, questions or possible improvements. If you enjoyed this tutorial and wish to continue working with us to improve robotic hands, become part of the developer community.