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.
- All posts on one page
2023-05-31: Prototype 10
2023-03-22: Enhanced Signal by >1000%
2023-03-06: Sample Signals
2023-02-05: 2022 Retrospective
2022-02-24: Added Bills of Materials
2022-02-23: 3M Red Dot electrodes
2022-02-22: Microchip 6N11-100
2022-02-16: Next Steps & Resources
2022-02-15: Mass production
2022-01-19: Prototype 9 + Matrix Chatroom
2022-01-18: HackChat & Hackaday Article
2021-12-19: Prototype 8 Demo Video
2021-12-18: Prototype 8
2021-12-16: INA155 Instrumentation …
2021-12-15: Power Module 4
2021-11-30: Batch Update
2021-07-17: Neurofeedback: Training in …
2021-07-06: New Frontpage + Logo
2021-06-24: Cyber Wristband of Telepathy …
2021-06-21: Running on AAA battery
2021-06-16: Power Module 3
2021-06-10: Believe The Datasheet
2021-06-04: Back to the Roots
2021-05-31: Website is Ready
2021-05-29: Dedicated Website
2021-05-17: Gyroscope + Accelerometer
2021-05-14: Wireless Prototype
2021-05-09: Power Supply Module
2021-05-07: New Name
2021-05-06: Finished new UI
2021-05-04: Higher Bandwidth, new UI
2021-04-30: PCB Time
2021-04-29: Soldering the Processing Units
2021-04-28: Going Wireless
2021-04-24: First Amplifier Circuit
2021-04-14: Data Cleaning
2021-04-13: Cyber Gauntlet +1
2021-04-11: Adding some AI
2021-04-08: Baby Steps
2021-04-03: The Idea
HackChat & Hackaday Article└2022-01-18, by Roman
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└2021-12-19, by Roman
The demo video of Prototype 8 is out now:
Prototype 8└2021-12-18, by Roman
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:
And another picture:
A sample of the signal is this, using an INA128 with a gain of x228 and electrodes near the flexor digitorum superficialis:
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:
- The solder jumper J8, that activates the central Screw 5, overlaps with the battery clip, resulting in a short circuit with the battery's ground, unless I put some isolation tape over the jumper... Need to move the jumper further away.
- The power switch (SW1) is too close to the Screw 2, so the switch I wanted to use didn't actually fit, and I had to fall back to one that points off to the side, and looks a little awkward.
- I also wish that the analog pins were closer to the power pins, so that I can bundle up the wires, resulting in what would appear like one single connector, rather than two, per Electrode Module 3. Although this may lead to EM interference between the wires, reducing the quality of the signal, so maybe it's actually better this way.
INA155 Instrumentation Amplifier└2021-12-16, by Roman
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.
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:
Power Module 4└2021-12-15, by Roman
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:
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:
- Place Arduino and battery beside each other like in Power Module 3
- make the board ~15mm longer to fit the holes.
- Downside: The rubber band holes would be wider apart than on the Electrode Module 3
- 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
- make the board ~15mm longer to fit the holes.
- 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
- 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
- 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
- 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.
The matching circuit:
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.