DIY Keyboardless Typing

admin's picture
By on
alternative keybaord devices - keyboardless typing, typing in air

NEW VERSION

More info on new version : http://dscript.org/tip-type-2nd-prototype-diy-keyboardless-typing-air

So here is an idea I have been holding on to for a few years. I finally got around to building a DIY version, and it works wonderfully. Gonna make a better one out of gloves next :) I only did one hand cause it took quite a while to make and I was eager to test ;)

Maybe someone out there can turn it into a product actually viable for everyday regular use.. hopefully bluetooth ;) (if so please send me one, I have been dying to type this way for years!!!!)

One day I realized that excluding thumbs I have 8 bits, perfect I thought, that could fit a character map. And ever since I have been dreaming of how it would work and how to best use it.

I think there are tons of possible application, but best if keyboardless typing.

each finger pressed to the thumb is a bit, map the characters onto it (could be many maps.. will take some time to find the "most efficient layout", and may vary per person)

could easily be bluetooth so you could type while walking

 

Here are a couple maps and a "pre-prototype-introduction. I made a few months ago when I was showing the concept to a couple friends.

http://dscript.org/tip-type-new-alternative-keyboardless-typing

 

I just hacked the contacts onto a  USB gamepad and used the following script to extract the bits.

 

The key is the logic that it waits for full release before sending the character, otherwise some fingers would hit before other and send multiple characters for those that require more than one finger.

 

Here is the source code, will require some customizing for whatever hardware you hack to make it.

<?php

$char_map=array(
                 "",
                 "i",
                 "s",
                 "e",
                 "h",
                 "a",
                 "",
                 "",
                 "t",
                 "",
                 "",
                 "",
                 " ",
                 "",
                 "",
                 "",
                 "",
                 "",
                 "",
                 "",
                 "",
                 "",
                 "",
                 "",
                 " "
               );

//read in clean (some redundancy later for flexibilty)
function readPort($port){
  $rd=1;
  $c='';
  while($rd>0) {
    $bytesr=unpack("h*",fread($port, 1));
    $c .=$bytesr[1];
    if($bytesr[1]=='ff'){
        $rd=0;
      }
    }    
  return $c;
  }

//Open For reading
$usb='hidraw0';        
if(!$f=fopen("/dev/$usb", "r+")){
  echo "error opening file\n";
  exit;
  }

//Loop Reading (infinite, kill to exit)
$char_now=0;
while(1){
  if(time_nanosleep(0,5000000)===true){;}
  $c=readPort($f);
  $char_on=hexdec(substr($c,2,1)); // specific to input device
  if($char_on>$char_now)$char_now=$char_on;
  if($char_on==0){echo $char_map[$char_now];$char_now=0;}
  }
?>

Section: