PsyLink

PsyLink is experimental hardware for reading muscle signals and using them to e.g. control the computer, recognize gestures, play video games, or simulate a keyboard. PsyLink is open source, sEMG-based, neural-network-powered, and can be obtained here.

This blog details the steps of building it and shows recent developments. Subscribe to new posts with any RSS reader, and join the community on the Matrix chatroom.

HackChat & Hackaday Article

Someone at Hackaday kindly invited me ("hut") to host a Hack Chat about Electromyography and PsyLink on Wednesday, January 19, 8 PM GMT. There, I will answer all sorts of questions from the hackaday community.

Drop by too, and watch me struggle for an hour to pretend that I know what I'm talking about :)

Someone else at Hackaday also kindly wrote a whole article about PsyLink, which sparked nice discussions in the comments, got the P8 Demo Video over 5k views, and inspired several tinkerers to reach out to me about getting their own PsyLink :)

Prototype 8 Demo Video

The demo video of Prototype 8 is out now:

Prototype 8

The order of the PCB of Power Module 4 has arrived, and so all the parts for Prototype 8 are finally here :) After some assembly (and crimping of some rainbow-colored connectors that look a little neater than those stray black wires from previous photos), this is the final picture:

photo of the p8

And another picture:

photo #2 of the p8

The Signal

A sample of the signal is this, using an INA128 with a gain of x228 and electrodes near the flexor digitorum superficialis:

sample_signal

The baseline is the midly noisy line around a value of 0.3 and shows the state of rest.

The spikes and "spindles" (periods of higher amplitude) occured when I performed various movements, like extending the arm, snapping the fingers, or twisting the wrist.

Bugs in the BP4

The Power Module 4 is not perfect though:

INA155 Instrumentation Amplifier

I tried replacing the INA128 chips on the Electrode Module 3 with INA155 chips with a Gain of 50, and it works just fine :) The signal even looks a little bit cleaner than with the INA128, though I don't have good metrics to decide which one is better overall. They both have the same PCB footprint so I didn't even have to change the board design :)

This is good news. If I buy the INA155 chips in bulk (250+), they would cost ~1.75€ each (and I currently pay ~5.65€ per INA128), which would bring the material cost of the whole product down from ~60€ to ~30€ plus Arduino (~38€) plus shipment. Even if the INA155 is slightly worse, that's totally worth it.

At this price, it would even be affordable to use more than 8 signals (with additional analog multiplexing, since the Arduino only has 8 analog inputs) and wear more than two Electrode Module 3 at the same time.

Another big plus is that INA155 chips can easily work with a supply voltage of 3.3V!! And I wouldn't need to boost the battery voltage all the way up to 5V anymore, which is probably not very power efficient.

CORRECTION

I did some more tests and concluded that with the electrodes that I'm currently using, the maximum gain of INA155 is not high enough, and I have to either find better electrodes, add extra amplifiers, or switch back to INA128 for the time being. For now, the relatively expensive INA128s will have to do.

But hey, the current electrodes are literally just... plain metal spacer screws, so there is DEFINITELY room for improvement.

Here are some pictures of electrode placement and resulting signals, where you can see that the INA128 (blue line) shows considerably more features:

resulting signal

electrode placement

Power Module 4

Prototype 8 needs a matching power module. I can't continue to awkwardly stuff the rubber band between the velcro and the PCB of Power Module 3 like this:

showing a p8 with a very awkward rubber band construction

We need a PCB with proper rubber band holes and screw mounting points, so it can be worn along the radius bone with about 2x Electrode Module 3 beside it.

Unfortunately the large dimensions of the Arduino and the battery make it a little difficult. There's several options to do this, but none of them are perfect:

  1. Place Arduino and battery beside each other like in Power Module 3 and either...
    1. make the board ~15mm longer to fit the holes.
    2. make the board ~12mm wider to fit the holes.
      • Downside: It would be too wide to comfortably fit on the radius bone
    • Downside of both options: it might feel unbalanced when worn on the side of the arm, because the heavy battery moves the center of mass off to the side
  2. Place Arduino and battery on top of each other, with pin sockets for the arduino that are taller than the battery, then make the board the size of Electrode Module 3 to fit the holes
    • Downside: It might be hard to acquire pin sockets that tall
    • Downside: Little space left for the holes and the remaining components, but might work
  3. Place Arduino and battery in a line next to each other and make the board 20mm longer and 8mm wider than Electrode Module 3 to fit the holes.
    • Downside: The rubber bands are relatively close to the center, reducing the force with which the far ends of the board are pressed onto the skin
    • Downside: The large dimensions might make it too bulky
  4. Remove the Arduino and solder the NINA-B306 bluetooth module of the Arduino onto the board directly, along with all the peripherals I need
    • Downside: Unnecessary complexity
    • Downside: More difficult soldering
  5. Instead of adding any holes, just stack the board on top of a Electrode Module 3 and use its screws and rubber band holes for physical support. (Thanks to PerlinWarp for that idea!)
    • Downside: Would require a redesign of Electrode Module 3
    • Downside: The height of the prototype might make it feel unbalanced
    • Downside: The board would have be either wider or longer than the Electrode Module 3 due to the dimensions of the Arduino and battery. As a result, it would stick out to the sides, unless I enlarge the electrode board as well.

In the end I chose option 3 for simplicity reasons, and because the downsides seemed the most acceptable. This also gives me a lot of space on the PCB which is currently not needed, but may be used for analog multiplexing later on, to allow supporting more than 8 electrodes.

I am quite tempted by option 2 though, it would make for a really compact board. Maybe I give it a try later (if I ever find a source for 1x15 pin sockets that are 14mm+ tall and 2.54mm spaced apart.)

Here is the resulting board. As you see, I also added a screw mounting hole in the center, which should point right at the bone, which perhaps makes for a great ground electrode. Any of the screws can be used as ground electrodes though, simply by closing their respective solder jumper. I will try out various combinations to see which one is best.

PCB bp4 front side

PCB bp4 back side

The matching circuit:

circuit 11

I ordered the production of this board already, and I'm excited to see if it will work out like I imagine. :)

Fun story on the side: I ordered the boards on Aisler, and they let you change the PCB design for free until it hits production. This time, I had a couple of hours left, which I used to make a couple of adjustments here and there, until I was happy and went to sleep. After 3 hours I woke up, with racing thoughts, and I couldn't really fall asleep again (which happens very rarely). After laying awake for 2 hours, it occurred to me that I should run the automatic PCB layout check of KiCad once again to test my board for obvious mistakes. Of course I had run the check before submitting my order, and several times after doing my various modifications. But as it turned out, I had indeed forgotten to run it on the final version, and there were multiple errors too! Several unconnected nodes and some copper tracks that were too close to each other. Luckily I caught this just a couple minutes before my time for free modification ran out, and fixed it just in time. Thanks insomnia.

Page: 1 2 3 4 5 6 7 8 9 10 all