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.

Data Sheets

After learning about the 4-document-model (permalink), an insightful guide to writing better documentation for software projects, I realized that PsyLink really suffers from having its documentation so spread-out among the dozens of pages with no clear reference page that contains it all.

As a first step to mitigate this, I wrote extensive data sheets for the power module and the electrode module, bundled right along with their source in the schematics folder. You can find them here:

Hopefully this will help you to get the most out of the boards and reduce the mistakes you do while replicating or using them!

Prototype 10

I'm excited to announce that we reached the double digits with Prototype 10! 🥳

As the most advanced prototype so far, it's more comfortable, more sensitive, and cheaper than any of the prototypes before (if we don't count the super-cheap early prototypes that don't use any amplifiers.)

The three big changes are:

  1. Enhanced Signal by >1000% by optimizing the passive high-pass filter before the amplifiers, as described in the previous blog post. See Circuit 10.4 (electrodes). (thanks Farzam!)
  2. Switched to cheaper Arduino Nano 33 BLE (without the extra sensors of the "Sense" model, which were actually not needed anyway)
  3. More comfortable rounded "dome nut" electrodes, as you can see on this photograph:

Photograph of the Prototype 10

Along with this release, I have cleaned up the schematics folder in the git repository. and upgraded from KiCad 5 to 6. It should now be much easier for you to open/edit the PCBs/circuits. (Thanks AntonX!)

By the way, PCBWay kindly helped out by sponsoring their services, and I gave it a try and ordered pre-assembled PCBs. I never did that before, and of course, I made a bunch of mistakes with the order, but fortunately they quickly reached out to me, free of charge, and we fixed my mistakes before they went into production. I was very happy with the results and got exactly what I wanted on the first try. This kind of hand-holding sure takes off some pressure from experimenting with new technologies :) PCBWay also offers metalworking services, maybe it's finally time to dive into that and order some custom electrodes!

I hope you're also enjoying the continuous improvements I'm making to the website design, such as the rounded corners on the blog posts (only when more than one post is visible), the separator gaps between them.

Thanks to everyone who contributed ideas, code, financial support, and anything else to this project. For this release, it's especially Farzam Khodajoo and AntonX. We wouldn't have made it this far without you. Stay tuned for more updates! :)

Enhanced Signal by >1000%

Through a very simple change in the circuit, we've been able to greatly enhance the EMG signal captured by PsyLink!

On the suggestion of Farzam, I took a closer look at the high-pass filter at the very beginning of the signal processing pipeline in Circuit 10.2 (electrodes) and it turns out that any signal under 1,600Hz is being weakened. This is a big problem, since the EMG signals that we are interested in are approx. 5-500Hz. By changing the capacitance from 100pF to 100nF, the cut-off frequency of the high-pass filter is shifted to 1.6Hz, leaving the EMG signal intact, while still removing low frequency noise and DC voltage.

The signal-to-noise ratio is through the roof. See for yourself:

screenshot

screenshot2

Red = before, Blue = after.

Some more details, if you're interested: These are two signals at out1 (blue) and out3 (red) on Circuit 10.2 (electrodes) where C1 and C2 have been changed from 100pF to 100nF while C5 and C6 have been left unchanged. The electrode pair of out1 is in a row and side-by-side to the electrode pair of out3 on the same muscle (flexor digitorum superficialis muscle, as usual), about 2cm apart, so they record almost the same information.

It's even more impressive if you consider that the red signal is 16x magnified in software. The red signal spans ~300mV whereas the blue one spans ~5V, making use of all the 12 bits of the Arduino's analog-to-digital converter (though the bluetooth connection currently transfers only 8 bits. To be fixed in the future.)

What I am especially excited about:

photograph of two electrode modules side by side. the left one uses the more uncomfortable electrode, the right one the more smooth, rounded, comfortable electrode

We can switch from the spacer screw electrodes (on the left) to the dome nut electrodes (on the right)! These are infinitely more comfortable, and mean that you can easily wear the PsyLink for hours.

The spacer screws bite into the skin and produce a better signal, but cause pain after a while. With this kind of ground-breaking improvement in signal quality, this trade-off is not worth it anymore and the dome nuts make more sense now.

In the coming days I will update the schematics to reflect these changes.

I highly recommend PsyLink users to swap their 100pF capacitors (C1-C8) for 100nF capacitors on their electrode modules. If you do not want to do this yourself, you will be pleased to hear that we are offering every existing PsyLink customer an upgrade free of charge. We will cover the material and delivery cost for you. Simply contact us if you're interested in the upgrade.

Sample Signals

On popular request, I have uploaded some data sets of recorded signals, along with videos of their recordings.

They can be found in the new git repository "psylink-datasets". Here's a quick overview:

Spelling Out "hello"

Here, I recorded 4 different gestures to produce 4 different keys, "h", "e", "l" and "o", obiously to be able to spell out the word "hello".

Unlabeled Samples

Here I perform various arm movements and simply display/record their signals.

2022 Retrospective

I've gotten out of the flow of writing blog entries, but that doesn't mean we have been idle. There has been progress in the PsyLink sphere along various fronts and I could make several blog posts out of it, but I want to try something new, and summarize everything in a 2022 retrospective post:

Publicity

Early in 2022, Hackaday released an article on PsyLink (see HackChat & Hackaday Article) which pointed many eyes towards this project, and inspired several follow-up blog posts on other platforms:

Around 30 people have reached out to me following those blog posts, with their own stories, suggestions, and requests for collaborations, for which I am extremely grateful.

I could make arrangements for 8 people in 2022 to get their own PsyLink device for their personal research. (See also: Mass production) This is quite a small number, especially when compared to the spread of software-only projects, which anyone can obtain through a click of a download-button.

But let's look at the bright side: Instead of serving a large number of casual users, I served a smaller number of serious, enthusiastic users of which most have contributed back to the project. Thanks to all the new users for collaborating with me, it was a pleasure so far!

Yet, I'm looking into how to improve that number in the future, perhaps by outsourcing production or through cheaper components, faster assembly, and better advertising.

In total, there are now 9 PsyLinks in the wild: 4 in Europe, 4 in the USA, and 1 in Canada. That's 1x Prototype 4, 3x Prototype 9.1, 5x Prototype 9.2.

Prototype 9.2

The design of the PsyLink Prototype 9.2 was finalized in early 2022, and has remained the standard prototype since then.

The modular setup of electrode modules allows custom-tailoring to specific purposes. The photo above shows a dense electrode layout (only 2 electrode modules with 8 electrodes each), but it's also feasible (although cumbersome) to go for an 8-electrode-module setup for maximum flexibility:

photograph

AntonX' Electrode Module for MCP6N11

The Microchip 6N11-100 seems quite promising for use in an electrode module, and AntonX designed a PCB that supports this chip natively:

front side of the PCB

See also:

Thanks a lot to AntonX for designing this!

Hopefully I get to test out this board soon and evaluate how it compares to Electrode Module 3.2.

Before ordering it, I wanted to do some polishing: The connector for the signals (S1 through S4) should be at the top rather than bottom, like in Electrode Module 3.2, and the label with the link ("psylink.me/b4") should be on the front side rather than the back side, but that's relatively minor problems and maybe I should just go ahead and order it as it is.

3D-Printed Case

It's not a long-term solution to wear raw circuit boards on the skin. (Or is it?) John Shahbazian saw an opportunity, and designed a 3D-printed case for PsyLink's Power Module:

photograph

Thanks John for designing the case, this is a good start! I tried out printing it with the help of a friend successfully and it fits well, though we couldn't quite get the hinge to work.

What I would personally change:

You can get the source files here:

John also built a convenient MacOS user interface for plotting PsyLink's EMG signals:

screenshot

You can find his project PsylinkGUI.py on GitHub. Note that the software is not officially supported.

PsyLink is mainly an EMG sensor, but can be turned into a wide variety of appliances. The power module, e.g. Power Module 4.2, can be used as a battery powered breakout board for the Arduino Nano 33 BLE Sense for any purpose besides neural interfacing.

For example, due to a domestic flooding situation, I wrote some quick-and-dirty code for water detection, plugged a PC speaker and 2 wires onto the PsyLink, and now it makes a siren sound whenever water touches the wires:

photograph

And of course PsyLink can also be used to power LEDs for a mobile, battery-powered mood light, see this mastodon post:

photograph

This is taking advantage of PsyLink's boost converter without using the Arduino at all:

photograph

Sponsorship

PCBWay has offered sponsorship for free PCB prototyping to the project, for which I'm very grateful. We haven't actually made any use of this sponsorship so far, but may do so in the future.

Finances

By the end of 2022, the project has cost me (Roman, the main author) about 2500€. (excluding lost income)

The total income from donations and PsyLink-related consulting work was about 1850€, which is more than I ever dreamed of earning from an open source project! Yet, it's not quite enough to cover the costs, and certianly not enough to pay my bills. (Not that making money was ever a priority of this project.)

As a result, I am currently looking for paid work as a freelance software developer, so that this project can stay independent and free. If you know of any company in the field of neural interfaces, medical devices or biotechnology that's looking for a freelancer to get some IT work done, let us get in touch!

What's Next

Hopefully the funding situation improves soon and I can dedicate more time to PsyLink and take on the next steps which are outlined in the wiki. :)

But of course there are now other PsyLink users out there and I am very excited what other contributions will come from the community.

Rochester Institute of Technology's Neurotech Exploration Team (NXT) is currently getting set up with their PsyLink and is looking into getting it to run on Microsoft Windows, and to control a 3D-printed robotic arm with PsyLink.

Good luck to everyone in the open source neural interface community, a big thank you to every PsyLink contributor, and a successful 2023 to you all! :)

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