Introduction: Creating a Working Brain-Controlled Transhumeral Prosthetic Arm (Make It Move)

With the help of Tinkercad's 3D modeling design software, I created a fully-functional 3D-printed brain-controlled prosthetic arm operated via a novel electroencephalography-based gesture control method. The final synthesized prosthesis has four degrees of freedom (flexion/extention, wrist rotation, and a dual axis elbow joint) and can perform a variety of complex motions such as pouring a glass of water or transferring a round object between different containers. Using a variety of C++ algorithms, EEG electrodes, and an accelerometer-gyroscope, I was able to translate prefrontal cortex brainwave readings along with specific head gestures into robotic commands in order to enable fluid, intuitive, and dynamic control of a multi-degree-of-freedom transhumeral prosthesis. The non-invasive control system demonstrated in this project has many advantages over current ECoG brain-controlled prostheses which require open brain surgery, and at roughly US$150 the arm represents a significant cost reduction compared to commercially available prosthetics (myoelectric and ECoG prostheses can range anywhere between US$10,000 and US$450,000). The arm boasts excellent range of motion and functionality, and a sleek and robust 3D-printed design was achieved via the Tinkercad platform after more than 75 design iterations.

Demo Video:

Supplies

  • 1.75 mm PLA 3D printer filament (>500g)
  • Arduino microcontroller (Uno or Mega)
  • 4 servo motors
    • MG995 or DS3225MG (at least 2 DS3225MG servos recommended for smooth elbow joint control)
  • High strength 0.2mm plastic wire (fishing wire works well)
  • 1/8 inch nylon paracord
  • High strength 1mm elastic cord (a thin elastic jewelry cord can serve this purpose)
  • Jumper cables, electrical tape, and breadboard
  • Servo motor pan/tilt assembly
  • Toolkit (drill, wrench, screwdriver, screws, soldering iron)
  • Sticker paper/moleskin/leather repair tape (for aesthetic purposes)
  • A 3D printer (I used a small open-bed Monoprice Mini which can be found online for <$200)
  • (Optional) MPU6050 accelerometer/gyroscope
  • (Optional) Neurosky Mindwave Mobile EEG headset
  • (Optional) Additional Arduino Uno Microcontroller
  • (Optional) WRL-12576 Bluetooth Modem (Sparkfun)
  • (Optional) 10 LED light bar and resistors
  • (Optional) External battery pack

Step 1: Designing the Fingers

Each of the fingers consists of several basic Tinkercad shapes:

  • Fingertip = half sphere, flattened on one side (by grouping a long rectangular "hole" piece)
  • Main body = cylinder, flattened on one side, slightly flattened on the other (same method for flattening)
  • Finger joints = I rotated several cube hole pieces by 45 degrees to carve out three evenly spaced divots
    • These divots allow the fingers to flex
  • Cable and "tendon" holes
    • On the top, I used a long thin cylinder hole piece to create a long channel for the paracord which will give the finger its basic structure and elasticity
    • To the right and left of this top hole channel, I carved out two smaller cylinder hole channels for the elastic cord which prevent rotation and give added structure to the finger
    • Below and running through the divots, I created another long small cylinder hole channel for the plastic wire which will eventually allow a motor to flex and extend the fingers

Step 2: Designing the Hand Piece

  • For the main body of the hand, I used a wide rectangular prism and then tapered in the sides using two rotated long rectangular hole pieces
    • I also rounded off the edges using a negative cylindrical hole piece
  • I then created converging cylindrical channels to correspond to the channels in each of the fingers
    • The three upper channels should end on the top side of the hand, while the lower channels for the plastic wire should run all the way through into the wrist piece
  • For the thumb joint, I used a rotated paraboloid, cropped out a diagonal face using a rectangular hole piece, and then grouped it with the main body of the hand
    • Note: if you would like to create a left hand prosthesis instead of a right hand prosthesis, simply create a reflected version of the hand piece shown in the image above
  • On the reverse side of the hand, I merged the main body with a half-paraboloid to better connect to the wrist piece; however, this is totally optional
  • Finally, I added some texture to the palm using a negative print of several flattened paraboloids

Step 3: Designing the Wrist Piece

  • For the wrist piece, I hollowed out a paraboloid shape (simply copy the paraboloid, shrink slightly, and then make it a "hole" piece) and then flattened the paraboloid on three sides
  • I also created two holes, one on each end of the wrist piece - one to correspond with the ending of the finger channels, and another small slot for the servo wire to connect to the arm piece
  • I then made a split about 4/5ths of the way up to create a small lid for the wrist in order to enable easy access to the servo motor during later construction
  • (Optional) I designed a wrist covering to cover up the servo motor screws; however, this is not necessary

Step 4: Designing the Arm Piece

  • To design the arm, I created a large rectangular hollowed out rectangular piece and then tapered it in towards one side
  • I then created a large rectangular hole on the non-tapered end connecting to the wrist piece, and a smaller rectangular hole to accommodate the servo and CPU wiring
  • Finally, I split the piece twice - once to create a lid and another time to enable the arm print to fit on the print bed (I used a small open bed printer for this project, so the second split is not necessary for a bigger printer)
    • To enable attachment of the split arm piece, I designed a small lip to fit a screw connecting the arm piece

Step 5: Printing

Total print time was about 30 hours; however, this can be much shorter depending on the type of printer you use. Cura is very easy to use to slice the prints. I used an open-bed Monoprice Select Mini and 1.75mm PLA 2 filament from FilaCube.

Step 6: Assembly Instructions

  1. Thread the paracord through the main finger channel and tie off on one end.
  2. Loop the elastic cord through the two side channels
  3. [see first picture for proper assembly at this stage]
  4. Thread the paracord and elastic through the corresponding channels in the hand piece
  5. [see second picture]
  6. Thread the fishing wire through the bottom channel of the finger and into the hand piece
  7. [see third picture]
  8. Repeat x4 for the other fingers
  9. [see fourth picture]
  10. Cover knots with sticker paper/leather tape
  11. Glue the assembled hand onto the wrist piece, thread fishing wire into the wrist
  12. [see fifth picture]
  13. Insert and screw in servo into wrist piece, attach fishing line onto the servo horn
  14. Screw circular servo horn onto back of wrist piece, attach second servo onto circular servo horn
  15. Attach the arm pieces together using a drill and two screws
  16. [see sixth picture]
  17. Attach the second servo onto the arm - servo horn should go through the large rectangular hole
  18. [see seventh picture]
  19. Attach Arduino onto lid of arm, connect servos to Arduino via jumper cables
  20. [see eighth picture]
  21. Connect and wire servo pan and tilt assembly to back of arm
  22. [see ninth picture]
  23. You have now finished assembling your own transhumeral prosthesis!

Step 7: (Optional) Enabling Mind Control

  • Attach the Sparkfun Bluetooth Modem to an Arduino microcontroller, and pair with the Neurosky Mindwave Mobile headset
    • Note: you will need to run a C++ code on the Arduino to do so - feel free to email me at bjpchoi@gmail.com to get more info
    • Using the code, you can now open and close the hand using your mind!

Step 8: (Optional) Enabling Accelerometer/Gyroscope Based Control

  • Attach the accelerometer/gyroscope to the Arduino, and wire/connect using velcro to the top band of the Neurosky Mindwave Mobile headset
  • There are some sample codes on the Arduino community forums to help you get started, but feel free to email me at bjpchoi@gmail.com if you need help with coding
  • The final C++ code utilizes an algorithm to integrate angular velocity with the gyroscope in order to determine position for servo control, and can automatically recalibrate based on user movement and intuition