Artichoke V1.1 Control Methods


In this guide you'll learn about the various methods for controlling the Ada robotic hand.

With the release of Artichoke V1.2, the Ada hand can now be controlled using number of different methods. It also includes a several modes geared towards use in a research environment. This guide will detail the various options for controlling the hand, as well as the different types of data outputs which can be used for simulation, analysis or control.

This tutorial is for:

You will need:

control methods

The Ada hand can be controlled by a number of different control methods.

We have written guides and tutorials regarding the following control inputs:

  • Basic serial control - control the Ada hand via basic serial instructions
  • Low latency serial control - control of the Ada hand optimised for speed
  • EMG control - control the Ada hand via muscle and surface electrodes
  • Joystick control - control the Ada hand using the joystick of a Wii Nunchuck

The Ada hand can also be controlled using the following (untested):

The above lists will be constantly updated as new control methods are developed.

Serial Control

For most applications, the most suitable control method will be to connect the Ada hand to a computer and to control it via a serial connection. All of these serial control methods require a 'Carriage Return' as the line ending.


This mode is the default control mode of the Ada hand, as it is very user friendly and slightly resembles the Gcode format. This control method is explained in detail in the Artichoke V1.2 Firmware User Guide.


Low latency mode allows the position of each finger to be controlled at a faster rate than basic mode, and is very suited to interfacing with desktop applications (e.g. Matlab, Python). This mode receives the target position for each finger, and outputs the current position of each finger in the Comma Separated Value (CSV) format.

To enter into this mode (aka 'Research mode 0, finger position control') enter the serial command 'A10'. This setting changes the default hand control mode, meaning that on power up the hand will remain in 'Research mode 0'. To disable this mode, enter the command 'A10.

The format for the CSV string for both the setting the target position and reading the current position of each finger is detailed below.

Finger0_Pos, Finger1_Pos, Finger2_Pos, Finger3_Pos, Finger4_Pos
  • Finger0_Pos       position of the thumb (0 - 1023)
  • Finger1_Pos        position of the index finger (0 - 1023)
  • Finger2_Pos       position of the middle finger (0 - 1023)
  • Finger3_Pos       position of the ring finger (0 - 1023)
  • Finger4_Pos       position of the pinky (0 - 1023)

Where position 0 is a fully extended finger (open), and position 1023 is a fully contracted finger (closed).


In Basic Mode, the position value 0 - 100 is mapped to 50 - 973, meaning there is no chance of the motors hitting their endstops in Basic Mode.

For example, sending the following string will move all of the fingers to the mid-position.


The target position of each finger is stored until it is overwritten by the latest target position CSV string, but the current position of each finger is printed over serial constantly. Therefore you can send a single target position command, and only send the next target position command until you read that the current position has reached the previous target position.

e.g. Pseudo code

targetPos_CSV= 50,50,973,973,50        // (this would move the fingers to perform the 'spiderman' grip gesture)
send targetPos_CSV to hand
while not (positionReached):
    read currentPos_CSV from hand
    if currentPos_CSV is equal to targetPos_CSV:
        positionReached is true
targetPos_CSV= 50,50,50,50,50        // (this would move the fingers to the open position)
send targetPos_CSV to hand

EMG control

The Artichoke firmware and the Almond board are configured so as to allow the Ada hand to be controlled via Electromyography (EMG) sensors. These sensors attach to surface electrodes placed on the forearm, and detect when the muscle is active. For a complete tutorial on this control method, visit our Muscle Control Tutorial.


Any release after Artichoke V1.1 allows the Ada hand to be controlled via a Wii Nunchuck. This control method is called the 'HANDle', and is the most intuitive control method. This control method most suited to tasks that require grasping motions. For a complete tutorial on the HANDle, visit this tutorial



The Ada hand is very suited to being integrated into projects using Matlab. With the hand in low latency mode (Research Mode 0), Matlab can be used to receive the current finger position data as a CSV string, which can then be split into it's individual components and logged. 

A simple Matlab UI could also be implemented to control the position of each finger using sliders, where the slider value for each finger is concatenated into a CSV string, which is then sent to the Ada hand.

Adding extra sensors

The Ada hand has been designed as a research platform. We fully encourage the addition of extra sensors for force feedback or other metrics. There are two main options for adding extra sensors to the hand, detailed below.

OPTION 1 - Add Ons

The Almond board datasheet details the unused Atmega2560 pins which have been broken out to the edge of the board. These can be used to communicate with external sensors, detailed below.

  • 2 x Analogue Pins
  • 8 x Digital IO (max)
  • 3 x 5V
  • 3 x GND
  • SPI
  • UART

Various sensors, such as Force Sensitive Resistors (FSR), can be soldered to the Almond board directly. The Artichoke firmware would then need to be modified to read the added sensors and print them over the serial port to the computer.

One advantage of using this option is that it requires only a single serial connection (Hand - Computer), resulting in a relatively compact and portable system.

The disadvantages of this option are that a maximum of 2 analogue pins are available. Furthermore, the sample rate of the sensor over the serial port may be slow, as the Artichoke firmware still needs to perform the various hand control functions.

OPTION 2 - extra arduino

A simpler option is to buy a small arduino (ArduinoNano) and connect the sensors to this extra arduino. The software running on the extra arduino can be incredibly simple, thus increasing the sample rate. It would also allow many more analogue inputs.

The disadvantages of this option are that the setup would require 2 serial connections (Hand - Computer, Extra arduino - Computer).