Introduction: Hemisphere Keyboard

About: Computer engineering grad student. I make the path.

This brass and glass USB keyboard supports 36 essential writing keys, and is perfect for writing stories. It is constructed using several different maker crafts; metal work, lampwork glass, electronics, wire wrapping and even a little bit of wood work. I used different tools from my workshop. A jeweler saw and bench, a lampwork torch, steel mandrels, ruler, tweezers, flex shaft, wire strippers, soldering iron. Materials are: Wooden doll head, 36 push buttons, 50+ feet of wire, hollow brass rods in several diameters, blue glass, fingernail glue, gorilla glue, Teensy board, electrical tape, heat shrink and stone clay.

Step 1: Wire Wrap the Push Buttons

Using 22G insulated wire, cut 12 lengths of wire, each about 30cm long. Use wire strippers to remove about 10cm of insulation and use the wire strippers to slice six gaps in the insulation, each about 1.25 cm apart.

For my build, I did not use 1.25cm spacing throughout. I started with .75cm and went up to 2cm. This resulted in more uneven keys I think, so in the future I'll probably just use 1.25cm or 2cm consistently. 

Test your push buttons so you know which two leads are the same, and using the needle nose pliers, form two small wire loops a distance apart as wide as your push button leads, around 5 mm.

Straighten the push button legs, and place them through the holes then fold them out to hold the push button in place. Slide the insulation over (you may need to use some strength to do that) and form two more loops for the next push button. Attach six push buttons to the first six lengths of wire. 

Using the remaining six lengths of wire, once again cut slices in the insulation about 1.25 cm apart. Then carefully link the rows of buttons together. Flip the entire grid over, and carefully solder the backs of all the rows and columns in place. 

Step 2: Program Teensy

Test out your grid matrix. To do this you need to program the Teensy Board. I use the Teensy 3.0 board from this website:
http://www.pjrc.com/store/teensy3.html

The pin layout is at the following link:
http://www.pjrc.com/teensy/pinout.html

I used the Teensy because it is very easy to turn it into a USB keyboard. After setting up your Teensy and testing it out with a simple blinking light, in the Arduino program, click on "Tools" then under "USB Type" select "Keyboard+Mouse+Joystick" and switch to the following code:


*NOTE* For now, don't worry about which button results in whatever key. In fact, it might be better to change all of the keys to #'s 4-9 and A-Z ( USE CAPITALS ) and use symbols like { } + to replace the keys labeled 1,2,3. This makes it easier to sit there and test to make sure you are actually receiving each button. ( Which I did in step 5 ) If you do this, do not use the numbers 1,2 or 3 for testing purposes. Those keys are mapped to Delete, tab and shift.

To type a capital letter, press shift, release, then press they key you want to capitalize. 

/*
  Keypad sketch
  prints the key pressed on a keypad to the serial port

  Successfully tested 06/28/13
*/

const int numRows = 6;       // number of rows in the keypad
const int numCols = 6;       // number of columns
const int debounceTime = 20; // number of milliseconds for switch to be stable
/*
  { '6','7'}
  */

// keymap defines the character returned when the corresponding key is pressed
const char keymap[numRows][numCols] = {
  { 'z','b','o' , 'x','3','j'},
  { '.','m','l' , ',','"','k'},
  { '?',' ','p' , 'v','\'','n'},
  { '2','w','t' , 'q','1','e'},
  { 's','g','i' , 'c','\n','h'},
  { 'a','f','u' , 'd','y','r'}
};
// 1 is delete
// 2 is tab
// 3 is shift

// this array determines the pins used for rows and columns
const int rowPins[numRows] = { 1,2,3,4,5,6 }; // Rows 0 through 3
const int colPins[numCols] = { 10,12,13,14,15,16};    // Columns 0 through 2
char sft = '0';

void setup()
{
  Serial.begin(9600);
  for (int row = 0; row < numRows; row++)
  {
    pinMode(rowPins[row],INPUT);       // Set row pins as input
    digitalWrite(rowPins[row],HIGH);   // turn on Pull-ups
  }
  for (int column = 0; column < numCols; column++)
  {
    pinMode(colPins[column],OUTPUT);     // Set column pins as outputs
                                         // for writing
    digitalWrite(colPins[column],HIGH);  // Make all columns inactive
  }
}

void loop()
{
  char key = getKey();
  delay(debounceTime); // This is a 'keyboard debounce' time

  if ( key == '1' ) {
    // Delete
    Keyboard.press(KEY_BACKSPACE);
    Keyboard.release(KEY_BACKSPACE);
    key = '0';
  }
  if (key == '2' ) {
    // Tab
    Keyboard.press(KEY_TAB);
    Keyboard.release(KEY_TAB);
    key = '0';
  }
  if (key == '3' ) {
    // Shift
    sft = '1';
    key = '0';
  }
  if( sft == '1') {
    if ( key != '0' ) {
       key = toupper( key );
       sft = '0';
    }
  }
  if( key != '0') {       // if the character is not 0 then
                          // it's a valid key press
    Keyboard.print(key);
  }
}

// returns with the key pressed, or 0 if no key is pressed
char getKey()
{
  char key = '0';                                  // 0 indicates no key pressed
  for(int column = 0; column < numCols; column++)
  {
    digitalWrite(colPins[column],LOW);         // Activate the current column.
    for(int row = 0; row < numRows; row++)     // Scan all rows for
                                               // a key press.
    {
      if(digitalRead(rowPins[row]) == LOW)     // Is a key pressed?
      {
        delay(debounceTime);                   // debounce
        while(digitalRead(rowPins[row]) == LOW); // wait for key to be released
        key = keymap[row][column];             // Remember which key
        digitalWrite(rowPins[row],HIGH);       // reset pushed button to high                                   
      }
    }
    digitalWrite(colPins[column],HIGH);     // De-activate the current column.
  }
  return key;  // returns the key pressed or 0 if none
}

Step 3: Hollow the Doll Head and Drill Holes to Interior

I used a wooden doll head as the base shape. The problem with this is that the center of the doll head is full of wood, so it needed drilled out inside. I drilled 12 holes through the sphere for the wires of the button matrix to use to go inside and travel out the central base hole.

Step 4: Form Matrix to Ball

Take your grid of buttons, and carefully push the ends of the 'row' wires through their holes and into the center of the wooden ball.

Make sure you keep the row wires separated from the column wires.

Pull the column wires through, and shape the grid of buttons. I used a glue gun to throughly anchor each button, but it was probably not necessary. 

I used the wire spool as a temporary anchor and to keep the two groups of wire separated.

Step 5: Apply First Coating of Clay

Apply a thin layer of  Premier Light Weight Stone Clay. Just enough to cover the exposed wiring. Let it dry until hard. I think I let it sit for 3 days. Store the rest of your clay in a ziplock bag.

At this point, after the clay dried, I went through and pressed each key, and wrote a corresponding key map in pencil on the dried clay. The primary purpose of this was to make sure all of the buttons worked.

Step 6: Saw Brass Tubing

Buy 5 tubing sizes in inches:  
6/16"
5/16"
4/16"
3/16"
2/16"
In the store check to make sure the five sizes fit snugly inside of each other. You want a 'telescope' effect.

Saw the following lengths of tube:

36 pieces of 6/16" in sections about 4/16" long

36 pieces of 5/16" in sections about 1.5" long

72 pieces of 4/16" in sections about 3/8" long

72 pieces of 3/16" in sections about 3/8" long

36 pieces of 2/16" in sections about 1.5" long

That is only 252 cuts total... it took me about 2 days.


*NOTE* The tubing must be sawed, using a tube cutter slightly crimps the end preventing the tubing from fitting together. I also filed each cut slightly, but that was probably not necessary.

Step 7: Glue Tubing

Using nail glue, make the two parts of each button. 

BASE
One  5/16" tube with 6/16" tube glued outside of bottom end and one 4/16" and 3/16" tube glued inside of top end.

PLUNGER
One 2/16" tube with 3/16" and 4/16" tube glued about 1/2" away from one side.


Then test your button:
Once the glue dries ( in about 5 minutes maximum ) stick the long end of the plunger through the bottom end of the base.

Step 8: Lampwork the Glass Keys

Use the ends of your steel mandrel's which are 1/8" thick, lampwork 36 beads with only a single side hole. 

Any sort of one sided bead would work as a key, so if needed you could form them out of fimo clay or some other material. 

Step 9: Glue Keys to Brass

Use white Gorilla glue to glue the beads in place on the end of your brass keys. 

DO NOT press the button down until the glue has completely dried.

Step 10: Gather Springs

I used clickable ball point pens as the source for the springs used in the buttons.  

The pens are from Staples or any office supply store, and by pressing down on that blue tab you can pop the ink, click button and spring out of the pen.

Gather 36 springs this way. 

( Note: I still haven't figured out a use for the 36 ink sticks, and hollow pens. I'm thinking of making a lamp or something. )

Step 11: Build a Stand

I needed a way to hold the sphere while I added buttons, so I removed the temporary stand of the wire roll and build a little stand out of rocks, a plate and some spare wire and tubing. Anything works, the stand is just to make sure the clay is under no stress as it dries.

Step 12: Glue Gun Brass and Glass Keys to Matrix Ball

Insert a spring into a brass and glass key, and place the button over the push button.

Place a large blob of glue to stabilize the button and hold it still until the button is able to stay in place once you let go.

Add some additional glue around the border to make sure the button is secured.

Do not worry if the button is still wobbly.

Press the button down and make sure you hear a 'click'. 

Place about five brass buttons, and then place a thick layer (about 1 cm ) of clay around those buttons and let it harden for few hours. Keep doing this until all buttons are secured.

Step 13: Solder Teensy to Wires

At this point you no longer need the breadboard and can solder the wire connections directly to the Teensy. I bought a Teensy with the connectors in place, so it was easier to just use a through hole board for the connections.

Step 14: Finish Base

After letting the sphere harden for several days, you can start resting it on the keys as a support.

Tip it on its side and wrap the loose wires with electrical tape. Add a final coating of clay around the base. I used some loops of blue wire to press into the base just to make it look a little cooler, but that is not necessary.

Step 15: Paint Base

Paint the white clay with black acrylic paint. 

Step 16: Place Key Labels

Holding the keyball in one hand, and looking down, decide which key's you want to correspond to the 26 letters, 5 special keys and 5 punctuation choices.

Modify the code from Step 2, to fit your desired key map.

In general I modeled the key layout on a standard qwerty design, with notable exceptions being SPACE is right in the middle of the board ( pick the button you want to press the most and declare it SPACE ). Special function keys go along the outer perimeter and I picked a section for the three 'lower' punctuation marks ( . , ? ) and another for the two upper marks ( " ' ).

I glue gunned labels on it for now, using tweezers to place each label. I might make them permanent or let them fall off. It depends how easily I can use the keyboard.

Now you are done. Enjoy your spherical keyboard and use it to write a story. 


Step 17: Typing Video

A demo of typing on the spherical keyboard -->

HemiSphere Keyboard from skyberrys on Vimeo.


Arduino Contest

Finalist in the
Arduino Contest

Craft Contest

Participated in the
Craft Contest

Epilog Challenge V

Participated in the
Epilog Challenge V