Halo
Hardware- 3 Devlogs
- 10 Total hours
A new control system for computers that is different than the regular keyboard and mouse.
A new control system for computers that is different than the regular keyboard and mouse.
Today I went back and forth, since it is pretty late for me right now ill just give a quick overview. I went back on using sensors for hand movement as I felt that wasn’t practical. So I opted for a CV method. So i built this simple pinch tool today and designed a turret with two cameras in onshape. For cursor and key movement.
yea so a fixed threshold on the emg envelope was never gonna hold up either.
went back and actually read the myoware docs properly instead of guessing, specifically https://learn.sparkfun.com/tutorials/getting-started-with-the-myoware-20-muscle-sensor-ecosystem/myoware-20-muscle-sensor, and turns out the board already outputs raw, rectified, and envelope in hardware, so i didnt need to build any filtering myself like i was planning last time. moved the wire off raw and onto env instead, watched the serial plotter, and it was night and day, clean baseline, clean spike on a clench. set a threshold in like ten minutes and called it a win.
came back after a break, restuck the electrodes in about the same spot, and the same threshold either pegged “flexed” the whole time or sat dead flat no matter how hard i clenched. also never wrote down where the gain trim pot was set the first time, so i cant even get back to the “clean” version on purpose right now, im just turning a knob and hoping. so, cool, a threshold that only survives as long as i never touch the sensor, my arm, or the pot again.
turns out this isnt just a me problem either, apparently even coapt’s commercial emg prosthetics need frequent recalibration for the exact same reason, contact impedance just isnt stable session to session for anyone. so a fixed number was always gonna break, i just hadnt hit it yet.
but yea, overall today i felt kinda dumb for thinking “clean signal on the plotter” meant “done,” and now im thinking the real fix is a calibration step that runs every time i put it on, flex hard for a sec, relax for a sec, threshold off whatever that session actually measures instead of a number i picked once and forgot about.
yea so trying to read raw emg by eye and call it a gesture was not the move.
started by digging out a myoware 2.0 i had left over from a old project, strapped the electrodes to my forearm and wired the raw output straight into an esp32 adc pin, no shield, no filtering, just wanted to see what a fist clench looked like on the serial plotter before doing anything smarter. flexed a few times expecting clean spikes i could just threshold.
instead the raw trace was just noise on top of noise. every tiny arm movement gave a spike that looked identical to an actual clench, and the esp32’s adc added its own jitter on top of that. so, signal soup basically, couldnt tell a real flex from garbage.
so i backed off and started looking at how people actually do this instead of freehanding it, found stuff like https://github.com/csce585-mlsystems/EMG-Based-Hand-Recognition which bandpass filters and extracts features before a classifier ever sees the signal, plus a bunch of stuff training on the ninapro dataset that everyone in this space seems to use.
but yea, overall today i felt kind of dumb for expecting raw signal to just work, and now im thinking the real first step isnt gesture classification at all, its building the filtering/envelope pipeline properly before i touch a single label. UI code linked below