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:

The pin layout is at the following link:

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()
  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
    key = '0';
  if (key == '2' ) {
    // 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

// 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:  
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. 

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.

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



    • Faux-Real Contest

      Faux-Real Contest
    • Epilog X Contest

      Epilog X Contest
    • Remix Contest

      Remix Contest

    75 Discussions

    marc a lu

    4 years ago on Introduction

    Hello, I would like to make a hemispherical keyboard but I do not understand how to hold the key. If you could do me a shema (I do not know if I have made my point, I do not speak English) Thanks for your help


    4 years ago on Step 16

    I would make it smaller and then make it a full circle and have it connect wirelessly to computers so you can work with one hand and have different keys different sizes so you know which key is which. Also the electronics would be inside it since it would be hollow.

    1 reply

    Reply 4 years ago on Introduction

    I am working on a new version now. It will definitely be wireless, fully spherical and hollow inside… exact dimensions I am not yet certain of.

    At a recent maker hackathon I attended, one of the teams made this little communication device, that you can hold in one hand, called a touchstone.


    4 years ago

    Think it's a cool idea. Could help ppl keep from getting carpal tunnel. Maybe. If you could make it where you could hold it with both hands & learn where the keys are & just type without looking. Like learning on a keyboard. Practice practice practice. Lol. Have you gotta better at using it faster since you made it?

    1 reply

    Reply 4 years ago on Introduction

    Hi Jo! I managed to speed up enough that several of my letters fell off and I could still type by the touch of the buttons. Then I moved to California from NY and the poor sphere was in storage and I forgot how! I figured out the keys again and am developing a 3D printed model now.


    5 years ago

    Congratulations for the brilliant and astonishing project


    5 years ago on Introduction

    Drinking game!
    Everyone choose 5-10 different letters (depends on ppl). Throw the 'keysphere' on the table. If you didnt got any of the letters you've chosen - you drink.

    1 reply

    5 years ago on Introduction

    Wow , what a great project . I hope some high tech firm has hired you cause you have great ideas .

    1 reply

    Reply 5 years ago on Introduction

    I'm starting my own company, help it out, vote for my web app in the Booksmash Hackathon. :) I promise, the two (keyboard & web reader) are related... http://booksmash.challengepost.com/submissions/16960-illuminate


    5 years ago on Step 6

    You don't do fractions well, do you?

    It's not 6\16, 4\16 or 2\16. It's 3\8, 1\4 and 1\8. A fraction always contains an odd integer. You always reduce to the lowest common denominator.

    So, 6\16 are both Even numbers. What numbers do 6 and 16 share in common?
    So, 6 divided by 2 = 3. and 16 divided by 2 = 8.
    So, we get 3\8. A proper fraction.

    With 4\16, it should be easy to see the number 4 is the answer.
    4\4=1 and 16\4=4 So, it's 1\4.

    Hope that helps because you can't buy 6\16 inch brass tubing. But you CAN buy 3\8in.
    BTW, I'm loving the project! You're doing GREAT! And Really good work on building your own grid matrix! That's no simple task and you really have to use your brain and think it through.
    Nice work!

    4 replies

    Reply 5 years ago on Introduction

    Why yes you CAN buy 6/16th brass tubing... as a matter of fact, some stores will actually list BOTH fractions (even the non reduced) simply because converting between quarters, eighths, and sixteenths can be a pain in the butt on the fly when you are trying to get the OD of one fit the ID of another... if they have already been converted to the greatest common denominator one can easily add and subtract those fractions from one another.

    Either way 3/8 = 6/16 = 12/32 = 24/64....


    Reply 5 years ago on Introduction

    Not even going into the whole metric vs. imperial... I guess you've figured the most practical of the two by yourself ^^


    Reply 5 years ago on Introduction

    I would stick to metric, but I think the metric hollow tubing still had 1/16" thickness of the wall, it was slightly wobbly when I tried to telescope it.