Introduction: Fuse Beads NES Controller

Making a game controller with fuse beads that looks like a fridge magnet made of fuse beads that looks like a Nintendo NES controller.

Vintage video-game aesthetics made a big come-back a few years ago. Fuse beads, with their "pixel" look, design flexibility and easiness of use (suited for 5-year-olds +), benefited from this trend and became increasingly popular as a craft and as a form of personal expression: from Super Mario coasters to plastic jewerly, Zelda-inspired street art , and fridge magnets representing tapes or old-fashioned video-game controllers such as the NES from Nintendo. Aesthetics of the digital world leaked onto the physical one (ref: Wojtowicz), all in a nice geeky old-school way.

This project pushes the whole geekiness of it even further by making an actual game controller that references fridge magnets that reference Nintendo game controllers. All using fuse beads (and Arduino). Although not yet compatible with Nintendo game consoles, the controller can send simple binary information through the serial port that can be read by regular softwares and be used in computer games, computer music or other types of real-time control of digital content.

For this project, you will need:
- fuse beads (often called Hama or Perler): a few red ones and lots of black and grey ones
- a pegboard
- an iron
- iron paper
- push buttons (three or more)
- an Arduino micro-controller (how to get started with Arduino will not be explained here)
- a tape roll
- wires, a soldering iron and other equipment for making electronic circuits
- hot glue
- a USB cable
- a computer with USB port

Step 1: Front Panel

We start by making the front of the game controller, using fuse beads (also called Hama beads or Perler beads). This controller is not going to be an exact replica of a NES controller: only three buttons will be real, the red ones on the right, and the crosse on the left. Due to time and material constraints for preparing this instructable, the cross button will also be a simple push button.

The first step is to figure out the layout of the panel, then place the beads one by one on the pegboard.

- The pattern should resemble the appearence of a Nintendo NES controller (or of a fridge magnet imitation) as much as possible, only *inverted*.

- The size of front panel depends on the size of the buttons that fit in it. Make sure to test how much space you will need with the buttons you have available, before getting started with the arrangement.

- Leave empty space where the buttons are going to be and make button covers of the same size.

Once you are done arranging the beads, cover them with ironing paper, and iron them in order to fuse them together. The beads should melt just enough to hold together tight. Wait until the beads have cooled down before removing the paper.

The side that will be visible in the end is the one below that has not been ironed.

Step 2: Back and Sides

The 2nd step is to make the rest of the controller box: the casing in which the electronics will be placed.

In the same way as in step one, make rectangles of fuse beads for the back panel and the sides of the box.
- Make sure to make the sides deep enough to have an Arduino board inside of the casing. I made them 4 rows large.
- Also make sure to remove one line of beads in the intersections in order for the sides to fit together.
- On one side, make room for the Arduino's USB port.

Use a glue-gun to assemble the parts. Test to see if how well the Arduino's USB port would fit into the opening before gluing it. Another possible method is to sew the parts together, taking advantage of the fact that they have an even stucture of holes.

Step 3: Electronics

Next step, the electronics: Building the circuit, programming it and fitting it into the controller's casing.

I placed a roll of transparent tape next to the Arduino in order to allow for the front panel to sustain pressure from the push buttons, as the casing has a certain depth to accomodate for the Arduino and the plastic casing is rather fragile in comparison to wood, cardboard or other types of plastic packaging. But anything with the right size and robustness goes.

Before soldering the buttons, make sure they are positioned in such a way that they will properly fit into the empty spaces on the front panel.

For each push-button, one side of the switch needs to be connected to the ground and the other one to one of Arduino's digital pins (here: digital pins 3, 5 and 8 for the cross button and the red ones, in that order - see code). No need for resistorsm, as floating values will be forced to "high" in the programming code.

Some isolating material might be need to separate the Arduino from the back of the circuit.

In terms of programming the micro-controller, it is assumed here that you are already familiar with Arduino and have the programming environment installed on your computer. If not, all you need to know is gathered on the Arduino resource page www.arduino.cc.

The code I used is the following:

int CrossButton = 3;
int RedButtonL = 5;
int RedButtonR = 8;
int val1 = 0;
int val2 = 0;
int val3 = 0;

void setup() {
pinMode(CrossButton, INPUT);
pinMode(RedButtonL, INPUT);
pinMode(RedButtonR, INPUT);
digitalWrite(CrossButton, HIGH);
digitalWrite(RedButtonL, HIGH);
digitalWrite(RedButtonR, HIGH);
Serial.begin(9600);
}

void loop(){
val1 = digitalRead(CrossButton);
val2 = digitalRead(RedButtonL);
val3 = digitalRead(RedButtonR);
Serial.print(val1, BIN);
Serial.print(val2, BIN);
Serial.print(val3, BIN);
Serial.println(",");
delay(10); // pause for 10 milliseconds
}

Step 4: Et Voilà!

The final step of this project, as far as the hardware is concerned, is to place the front panel and the button covers, and to secure the construction.

Different methods for closing the casing can be used:
- A few drops of hot glue on the corners of the buttons to hold them close to the front panel, and one the borders of the casing to close it: robust method but makes it difficult to reach for the electronic components if there is any problem
- Sewing: all beads have a hole in the middle, and so does the circuit board, which makes it possible to sew them together and close the box in a non-permanent way. However, the thread might be too visible for one's taste.
- Double-sided tape: versatile but not very robust.
- A combination of all of them.

The button covers made on step 1 can now be glued on top of the push-buttons.

The game controller's hardware is now finished and ready to be control a softtware!

As mentioned in the intro, the controller is not compatible with Nintendo consoles (yet), but serial information coming from the controller can be used in many kinds of interactive applications (see example in step 5), including computer games.

So go ahead, geek on!


Step 5: Example: Control ITunes With Your Fuse Beads NES

Here is an example of application for the controller: a "remote controller" for iTunes. You can change track and volume (for Mac only) using Applescript commands sent through Arduino.

1. Download the following application from Tinker.it to execute Applescript commands that can control iTunes when calling certain characters:
http://tinker.it/now/2007/04/26/control-your-mac-from-arduino-the-easy-way/
(direct link: http://www.tinker.it/files/asproxy02.dmg )
Make sure to choose the right port.

2. Modify the previous Arduino code in the following way in order to send characters to the app when pressing the buttons:

int CrossButton = 3;
int RedButtonL = 5;
int RedButtonR = 8;
int val1 = 1;
int val2 = 1;
int val3 = 1;
int state1 = 1;
int state2 = 1;
int state3 = 1;

void setup() {
pinMode(CrossButton, INPUT);
pinMode(RedButtonL, INPUT);
pinMode(RedButtonR, INPUT);
digitalWrite(CrossButton, HIGH);
digitalWrite(RedButtonL, HIGH);
digitalWrite(RedButtonR, HIGH);
Serial.begin(9600);
}

void loop() {
val1 = digitalRead(CrossButton);
if (val1 != state1 && val1 == 0){Serial.print("C");}
if (val1 != state1){state1 = val1;}

val2 = digitalRead(RedButtonL);
if (val2 != state2 && val2 == 0){Serial.print("B");}
if (val2 != state2){state2 = val2;}

val3 = digitalRead(RedButtonR);
if (val3 != state3 && val3 == 0){Serial.print("A");}
if (val3 != state3){state3 = val3;}

delay(10);
}

3. Use the following commands in the app :
Change track (cross button):
C tell application iTunes
play next track
end tell

Volume up / down for red buttons B and A (see http://bbs.macscripter.net/viewtopic.php?pid=103916 )
A tell application "iTunes"
set currentVolume to sound volume
set sound volume to currentVolume + 10
end tell
B tell application "iTunes"
set currentVolume to sound volume
set sound volume to currentVolume - 10
end tell

Press start in the applescript application.... Done! Now you have a fuse beads NES controller that can control iTunes!