The article is a work in progress, and unfortunately I'm moving along with my PC about 250km very soon so it might take a while to finish.Update 18.02.2011: Some bad and some good news
Bad: I haven't been using my awesome hand for a few months (though I'm typing on it right now, for fun), mostly because I had too much work for classes and I'm still faster on a standard keyboard, mostly because I often hesitate, stutter, and ain't completely comfortable with it.
Good: I've got 10 cherry blacks;) 40x 9mm 1N and 40x 13mm 1.6N tact switches and two different concepts for the side keys, which should be way more durable.
Ohh and I've actually modified the units quite significantly a few months ago since I switched to sitting on a couch, so they're a bit more like a datahand (and the ratio of lego to anything else increased again;). I'll try to conjure (read extort) a camera from someone to make some pictures, and generate a static gallery for all the pictures (actually I'll make the gallery in a few moments, done, look bellow).
A device that allows for fast, accurate and effortless text, shortcuts and pointer input in situations with very mixed usage patterns, requiring rapid switching between the "pointer" and "keyboard".
This has shaped into two ideas, the more pointer favoring one:
To create a single handed datahand like keyboard that will hopefully allow for slower but good-enough typing speed. While the right hand wields a standard mouse.
and the more keyboard favoring one:
To create a two handed datahand like keyboard with an integrated pointing device (thumb trackball to be precise) that results in good-enough pointing accuracy and speed.
Both solutions are slower in at least one way than a keyboard and mouse, however as there is no need to move the right hand between the mouse and keyboard or dance with the left on the keyboard they should prove faster for my needs. Ironically I have a perfect and probably possible in my lifetime solution which is a datahand + gaze-tracking with at least 4 pixel accuracy;) Btw there's also the frogpad which, as this guy
proves, can be faster than my standard typing speed;p theoretically the one unit datahand has more main keys (20 vs 15) so it might be possible to reach such speeds but the chords are easier on the frogpad since you just lock two fingers and move the hand down, on the other hand I think shortcuts were easier on my prototype, keep in mind that I obviously didn't have enough time to really master the device. But honestly the main reason why I decided to make two units is to lower the required effort at a certain speed.Now hark for thou shalt witness ze AwesomeHand*2 a.k.a. Might-Be-Better-Than-A-DataHand a.k.a. Way-Cheaper-Than-A-DataHand.
Dammit I forgot to make a more artistic overall picture:/
click on any picture for more megapixels.Pictures (all of them): http://czlug.icis.pcz.pl/~timon/aadh/pictures/gal/General features:
[*]40 finger keys with adjustable position,
[*]2 left thumb switches,
[*]1 right thumb switch,
[*]2 axis clickable analog joystick, used as 4 keys or an analog joystick in gaming mode,
[*]thumb trackball, on bearings, optical sensor and electronics from logitech trakman wheel,
[*]n-key rollover (almost as left pcb is the old version),
[*]atmega32 microcontroller @ 12MHz,
[*]usb flashable firmware,
[*]chair mountable (only),
[*]leather palm pads!
[/LIST]Principles of operation & keymap:
There is a lot of different possibilities here, and some will fit certain tasks better than others. Below is the current state of my setup which I'll update as I make changes.
There are 3 modes which define the function of most finger keys, Normal, Move and NAS (numbers&symbols). A given mode is only active when the aproperiate joystick direction, or switch is held. The default mode is Move, the most important switch is RT which changes into Normal.
Joy: LT: RT (right thumb switch):
NAS+Ctrl Ctrl Ctrl+Shift Alt
NAS Space Norm
NAS+Shift Shift Shift Empty
Key 5D (JScr) when pressed in Move mode causes the Joystick to behave as a scroll wheel, where the angle defines the scrolling speed.
Common keys existing in all modes:
0W: 0E: 1W: 6E: 7E: 7W:
BackSpace Tab Escape Enter Space Delete
Normal (_ means it's one of the common keys, space means empty slot):
0: 1: 2: 3: 4: 5: 6: 7:
' r f c g c r l
_ a _ _ o x = e - y u i d h f / t \ b t _ _ s _
; q j k m w v z
0: 1: 2: 3: 4: 5: 6: 7:
` , .
_ 0 _ _ 1 2 3 4 5 6 7 8 _ _ 9 _
0: 1: 2: 3:
F3 F4 PgUp Up
_ F5 _ _ F6 Hom F7 End Lef F8 Rig
F1 F2 PgDn Dow
4: 5: 6: 7:
MMB ScrU F11 F12
MB4 LMB MB5 JScr _ _ _
RMB ScrD F9 F10
This time there is no relocating of zxcv when ctrl is held since all the keys have more or less the same ease of access.
[*]40 keys at your fingertips,
[*]no hand/wrist movements, small & diverse finger movements, and arguably most of whatever applies to the datahand http://www.datahand.com/products/proii.htm
[*]integrated trackball means resonable pointing accuracy & speed without moving your hand
[*]those 40 keys can also be 40 mouse buttons, macros, or whatever you can program into the firmware
[*]reasonably cheap and easy to make
[*]it's awesome (it even looks awesome if you ask me)
[*]relatively steep learning curve (though in my experience learning dvorak on a normal keyboard was harder)
[*]requires getting used to and carefully adjusting the position, as it's easy to unconsciously tense muscles at first
[*]can't be fully and quickly operated single handedly (this can to a certain degree be mitigated by handsensing and major modes)
[*]side finger keys are quite delicate and can easily unglue if hit by something or are pressed with quite a bit of force, didn't happen to me in normal use but I unglued a few keys with clothes or falling objects
[*]pressing two adjecent side finger keys (e.g. 3N & 3E) at the same time is a bit difficult
[*]tact switches have a relatively large margin of error of force,
[*]tact switches seem to have a relatively long bounce, which can result in double keypresses
[*]double tapping is a bit hard (though I might just not be used enough to it yet)
[*]the down keys can have uneven travel, require very close to center pressing (some more than others so cherry picking is advised)
[*]adjusting the position of the pcb is hard and annoying (though it has more freedom than a datahand)
[*]the palm pads aren't exactly the perfect shape
At this moment I'm a few days into using it and writing at around 200cpm. The main difference, as compared to the previous prototype, is the ease with which I can sustain this speed, and hopefully very soon around 300cpm which is my typing speed on a regular keyboard. Apart from that there is the huge benefit of not having to rapidly switch modes when typing, and more room on thumb switches. I'm noticing I have bursty typing where I pause a bit and really quickly burst some words so the potential for really high speed seems to be there (I also had this with the one haded versions but to a lesser degree). I'm thinking that dvorak may not be the best keymap as it feels a bit heavy on the right hand, also certain key combinations could prove significantly faster/slower with this (same keywell vs different etc.) so it might make sense to try to optimize for most common character pairings, but that's some complex analysis/thinking for probably a minor difference so I don't care.Experience/thoughts after about 2 weeks (with a relatively low amount of typing, due change of town):
Honestly I thought I would be better by now, in this
my avg is about 230-250cpm, max is 265cpm (47correct, 1wrong words), though I'm abusing that test a bit which means the results are not representative of my normal typing performance. In this
I just managed hmm 45wpm typing about 3 lines, which surprised me a bit to be honest;) the avg is probably more or less 35-40wpm.
The additional Space on the thumb joystick makes my typing more fluent, I think it's just that my brain is not yet fully used to the independent finger movements as I don't have problems with many rapid sequences of keys yet others and the space after words (right pinky, west key) is a bit problematic.Speed after about another 2 weeks:
I haven't been doing any training/testing except natural typing so this time the results should be a bit closer to my real world speed. In this
185 (I didn't write the first result down, but it was something like that)
So not so bad, but still not so good.Construction & DIY instructions/tips:
If you're thinking of building your own you should first think about your specific needs, skills and time, as there are quite a few possibile directions (of varying difficulty) in which you can go:
making the pcb for finger keys is not necessary (although advised), like this
the plastic for finger keys can be cut out from cd boxes with a trimming knife and careful bending,
the joystick optional, like this
, or this
the thumb trackball is optional,
you can just use the housing with microball bearings from the logitech,
you could use the controller from a standard keyboard, like this
, or this
, although this will require a custom driver (a keymap might be enough in some cases, need to verify),
you can just make the left unit and use a mouse in your right hand (along the initial concept),
possibilities not yet explored:
foot pedals - a very good idea, I didn't try it because of the positions in which I sit in front of the computer and the fact that I change them often
capacitive switches under palmrests to sense the hand and automatically switch into one handed modes (assuming you can handle two or three different keymaps;p)
the use of joystick as a mouse
the use of finger switches as a mouse (like in a datahand)
the use of cherry mx switches for down finger keys (I really goddamn want to explore this one)
Parts (the prices are very approximate as you can find much worse/better deals):
40x NINIGI TACT-65
= 40 x 0.068 = $2.72
= 8 x $0.25 = $2
3x micro switch
= 3 x $0.8 =$2.4
1x an. cl. joy
= $4 or $10 for a cheap gamepad
1x log. tm wheel = $30
2x 3mm thick acrylic =
2x pcb = ordered around 20$ ?
afew angle bars = a few $ maybe I didn't count
1x DIP40 =
44x diodes =
2x C22pf =
1x C100nf =
Argh finding all of this is annoying;p the parts are mostly cheap, the tools and time are the issue if you ask me. Though all in all it's not gonna be cheap I think I spent around $100 to $200 on the whole project, which to me is significant cash but still completely worth it;)
soldering iron - duuuh
a dremel with:
a small metal cutting disk - not necessary if you use 1mm thick plastic
something for grinding
sandpaper - cheap method for grinding the side keys so the edge resting on the pcb is flat
table drill - only needed to drill the pcb
This is arguably the most important element, and the most lacking as compared to a datahand. The idea to just glue the plastic to the tact switch was my friends idea, I was initially thinking of stupid stuff like cutting in the a pcb to make a pivot point or something;p I actually have another possibly much better idea, though harder to do without more precise equipment (which I kinda might be able to get my hands on), but that's for much later.
The generally simplest and most consistent method is to cut out the plastic rectangles, grind if necessary, then glue the tact switches on with a simple aligning tool:
Then just solder them into the pcb, and slightly align as the holes should have a bit of room or won't be perfectly aligned. Start with the west and east keys that are next to each other as they are the hardest to position. The plastic for 1W and 6E has to be grinded a bit on the side to not block on the other tact switch. The sizes I used were 15mm width, and 22mm and 27mm height, I thinking this a bit too high and I'll rise the down key another mm or two (this also lowers the actuation force for side keys). Btw the plastic for the keys is 3mm thick so I can grind it into a more datahand like shape but I'll probably never get to it. More pictures
With the first non pcb prototype (pictures
) I actually printed the positions of parts and glued that below the plastic, glued on the tact switches, then glued to them the plastic of the key and finally inserted the down key. The results were quite good, this order might be preferred since it might be hard to glue the tact switch to the base with the key plastic already attached.
The down key is a bit problematic, as the ones I got were a bit too hard so I shortened the springs more or less this much
. The internals are here
pictures 11 to 16. I first glued to the switch a 13x13x1mm plastic, then on top of that I add the 15x15x3mm black plastic with a concave top (grinded with dremel), with a small bit of double sided sticky tape in between.
The pcb layouts
, the important files are second4b and second5b for http://pcb.gpleda.org/
The internals are here
pictures 1 to 10. Again I shortened the spring (not pictured), but with the two-handed version that might not be necessary as rapid mode switches aren't necessary.
Most important pictures here
The controller, schematic:
514, 515, 535-538.
I've had some serious issues with making it a keyboard&mouse combo (Xorg had trouble handling it, windows completely refused to recognize it), but I think I managed though the gaming mode suffered death because of it. I'll try to clean it up a bit and release soon.
Unfortunately I'm having some problems in windows and linux with the mouse not working at first (in linux I just need to replug it), I'll try solving this during the next few days and try releasing a preliminary version, unfortuntely I won't be able to completely test the build and initial flashing instructions as I don't have most of my equipment with me:(
I think the problem is mostly beceause of my usb hub, but I had no time to really test anything or organize the firmware. Either way I'm putting it out, it's rough and ugly and may require a few touchups to compile & flash & work, but that's better than nothing atm. Contact me if you need help (email in readme). Firmware
The os side driver:
I didn't touch it for quite a while, and I won't unless someone wants to make a version without the controller. Keep in mind I can only write it for linux (it's based on Xorg evdev).Shorted pictorial history of evolution:
This device has gone through quite a few changes both physical, electrical, and conceptual. A few pictures more or less tell the story:
The controller is from a standard usb keyboard, and the whole logic of modes, chords, etc was in the modified evdev X driver.
This is the most important progress (I don't remember why I didn't make the north key higher;p)
Then the new adjustable chair mount with a palm pad made from a mouse top.
Then my first homemade pcb, an atmega32 controller, and a joystick (a bit later).
At more or less the same time I decided to make a right unit with this thumb trackball.
Which led to this, but finishing the right unit was on hold as I was quite happy using it.
But that was not enough so I finished the right unit to what you saw at the top, if you're interested in more details check out comments #1 to #35.Old stuff for reference:The second prototype:
Hear me, hear me. For I bring you the one and only AwesomeHand a.k.a. Almost-Better-Than-A-Datahand.http://czlug.icis.pcz.pl/~timon/awesomehand/Picture%20059.jpg
More pictures: http://czlug.icis.pcz.pl/~timon/awesomehand/
It has 5 switches per finger Down/South/North/West/East, and 6 for the thumb (the thumbpack is from the first prototype). In general this is almost a completely different device from the first prototype. The action is very light, the side switches when placed horizontally can't even support the weight of my finger, I calculated they require about 22grams but that is mostly a guess;p. The switches I used are unfortunately noname but they are definitely a lighter kind (you have some specs here http://www.ninigi.com/index.php?show=products&mnuID=16
the price is generally very low (I paid 0,8pln vs 2,4pln for the previous ones). You have some to scale inkscape drawings (though I might have made a mistake with the legs of switches) here http://czlug.icis.pcz.pl/~timon/awesomehand/awesomehand.svg
The best part of all this is that it can be made on a pcb:) Though universal pcbs aren't the best since the spacing is 4,5 and 7mm for the outer legs. You could also use the horizontal switches that have the very long nipple (for lack of a better word) and glue the plastic to it's side, though then you also need additional "something" to block it from rotating. In general a lot can be made different and better.Initial experience and thoughts on what could be better:
Unfortunately for now (second day) worse than I hoped. With this one the positioning of elements and the hand is far more important. I definitely made the center key too high, also it would probably help to have it concave (for more precise positioning), but that is a bit problematic since the switch is off center (to lower the resistance) and it rotates a bit. It might be better to make the center key on a normal keyswitch though the cherry mx may be a bit too large so something like this
would be necessary (just with a nice action). Shaped side plates would also help, I really wish I had a makerbot or something like that;) Then again it's possible to just glue a few cd boxes and grind with a dremel into the right shape but 20 elements is painful.
The mechanism of the driver is the same for now but I'll be changing it in the near future.
The new keymap is similar, also a bit based on dvorak, with quite a bit of free space:
The first prototype a.k.a. Almost-A-Datahand:
0: 1: 2: 3:
l r f c
b a p y o g w e m d u i
s n t h
01 12 23
D: k v j
S: q x z
0: 1: 2: 3:
Esc PgUp Up
Del BaSp Hom Spa End Lef Ent Rig
Tab PgDn Dow
Num (with standard shift chars):
0: 1: 2: 3:
8 9 ; /
[ 4 ] - 5 = \ 6 ' , 7 .
0 1 2 3
01 12 23
First a general picture of the first (more or less) prototype:http://czlug.icis.pcz.pl/~timon/almostdatahand/Picture%20003.jpg
More pictures, movies at: http://czlug.icis.pcz.pl/~timon/almostdatahand/
Note that this is relatively easy to make as it doesn't require any special skills or equipment. The hardest part for me was connecting the cables to the controller board since the contacts were at a non-standard spacing. The plates to which the switches are glued are made from plastic from cd boxes;)
Each finger has 3 switches north/down/south, and the thumb has 6 switches, the controller is from a standard keyboard, wired so the thumb switches can be pressed in any combination and not block each other and finger switches. The whole logic is in a modified xf86-input-evdev-2.4.0 driver so it's linux only until someone writes something for windows (don't count on me).
The keymap is just a first relatively simple attempt based on letter frequency in english, it's a bit similar to dvorak since it has aoeu and htns, I'm gathering stats to maybe improve it.
Fingers: 0 is pinkie, 3 is index, ND means North+Down simultaneous, 12 means fingers 1 and 2 simultaneous on the same row.
Norm: Move Num (with standard shift chars)
Fin: 0 1 2 3 0 1 2 3 0 1 2 3
N: l r d i LeAr DoAr UpAr RiAr 8 9 . -
D: s n t h Home PgDo PgUp End 4 5 6 7
S: a o e u Del BaSp Spa Ent 0 1 2 3
ND: y b p g [ ] , =
SD: w m f c Tab Esc ' \ / ;
01 12 23 01 12 23
N: x z
S: k v j `
D: Move mode
NW: Num mode
SE: Fn mode
Ohh and I have S: x c v z when Ctrl is pressed... guess why;)
The exact behaviour of the driver is a bit hard to explain, and honestly I don't exactly remember/know all of it myself so I'll just discuss the main characteristics.
Ctrl, alt, shift act normally, so if you press shift it sends a shift_press, and any keys sent will be shifted, when you release it it sends a shift_release.
The finger switches however send the actual key press and release to the system only when a switch is released, so just pressing a it results in nothing. When you press a switch, then press another one, and then release any of them the result will be a chord of the two switches.
The mode switches if clicked (press and release) will just modify the next finger switch, so a click on Move, then a press and hold of alt, then a click of SD3 will result in alt+escape (which would be impossible without this behaviour on the current keymap).
If you press a mode switch, then release a finger switch, it will be influenced by that mode and will also put the mode in a hold state which means that mode will also influence all keyreleases until the given mode switch is released.
If you double click (no timer currently so just 2 clicks in a row are enough) a mode switch it will lock it so it influences all finger switches until any the same mode switch is pressed again (removes the mode) or a different mode is entered.
There is currently no key repeat which is a major drawback in some cases, I'll work on it when it annoys me enough;)Experience:
After using it a little I reached about 8-15wpm;p But I'm not used to it yet, and I make quite a few mistakes and often have to think where a letter is. So 20 should be no problem and I'm hoping I'll reach somewhere around 30-40. Which for me would be very useful since it completely frees the right hand and it makes certain operations a lot easier since no jumping around the keyboard is needed. By the way I type 50wpm on a normal keyboard (dvorak).
At first my arm hurt but I was probably unconsciously tensing muscles, and the unit was on the desk, after a bit of use and holding it on my leg I don't feel uncomfortable though I haven't typed anything on it for longer periods of time. Feel, general mechanics:
These switches are a bit too hard for my tastes, but then again they aren't that bad. The side switches for fingers would be awesome since that's 8 more non-chorded keys, but making them so you don't have to have the fingers 5cm apart is quite a bit harder (though possible since they are offset) and also the force required to press these kind of switches might make them a bit too tiring.
I'm also thinking of bending the internals to lower the force a bit but that's troublesome and it also shortens the travel until a click.the first one is normal, the two middle ones are bended, and the right one is a different kindNot so exact dimensions:
The switchpack is the most important:plateplate with switchesplate with switches glued to lego (north is on the left)
I may have placed the finger switches a bit too close as I sometimes press ND or SD instead of D. Then again placing them farther apart would make ND and SD harder to press and your finger could get stuck on the metal of N when pressing ND (longer fingernails solve the problem). Keep in mind I have small hands, so many people would probably need to make the switchpacks differently.
General:width lowwidth midheight right side
The second switchpack from left should be a bit more to the left in my prototype but unfortunately lego is discrete;)Wiring:
I just did a 2x6 grid for the fingers, and 1x6 for the thumb. The only important thing is to make sure each switch gives a single unique keycode, and they don't have any weird side-effects. You can check this with: evdev printer along with some initial experiments (WARNING might destroy your PC since it's very hackish code)
It's very important for the thumb to be separate since you'll be making many chords/combos with it.Driver:
This might also destroy your PC, since it's very very hackish code, it made my xorg segfault quite a bit at first but I haven't had any segfaults since I've "finished" it.
You have the enum with keycodes at src/evdevmy.c:277, where you have to write the right ones for your unit. Also i use dvorak so you'll have to set the keymap to dvorak for it.
I've got xorg 1.8.1 with linux 2.6.34. I've also had some problems with auto detecting of devices and the mouse scroll registering twice. I solved it more or less by specifying everything in xorg.conf and doing mv /dev/input/event3 to /dev/input/myevent3 before starting X.my xorg.conf
Keyboard2 is the awesomehand.
I'm sorry for this being soo hackish but I didn't want to waste too much time. I'll make this a bit more normal if I decide the device really is useful.xf86-input-evdevmy-2.4.0.tar.bz2Pictures, Movies:http://czlug.icis.pcz.pl/~timon/almostdatahand/