Introduction: Goomwave - Reactive GameCube Controller LEDs

Goomwave is an open-source, customizable, reactive LED system for use with GameCube controllers. It uses the Arduino IDE to upload sketches either to a normal Arduino or an ATtiny85 to read the GameCube controller signal and perform LED actions based off of those inputs.

In this tutorial I will show 2 different types of Goomwave systems.

Here's the link to my GitHub which features code for the 2 new types of Goomwave 3.0 systems

Steps 1-33 are for the front Goomwave that only lights up the ABXY buttons. This version uses an ATtiny85 an has a different set of code specifically for the limitations of the ATtiny85

Steps 34-69 are for the front and back Goomwave that lights up the back as well as the buttons and sticks. This version uses an Arduino Nano and is able to make full use of all of the programmed Goomwave modes

Steps 12-24 are for the wire routing system which is universal to both types of Goomwave.

So if you're making just the front Goomwave, follow steps 1-33. If you're making the front and back Goomwave, follow steps 12-24 then steps 34-69.


Step 1: Prep for Goomwave ATtiny85 Face Buttons Version

First mark cut lines so you have a protoboard that is 6x8 holes. Then break the protoboard along the lines with the vicegrips.

Step 2: Solder on the SOIC Socket and JST Connector

Solder on the SOIC socket as shown.

Place a male and female end JST connector together. Placing the male end in is to prevent the female pins from melting/shifting while soldering.

Place the female end next to the SOIC socket as shown. You can remove the male end after it's soldered in place.

Step 3: Solder on the Capacitor

In this case I'm harvesting the capacitor off of an old controller motherboard. You can also buy these directly the same as all the other components.

Bend the leads of the capacitor and solder it in. If using an electrolytic capacitor like I am make sure ground is facing the correct way,

Step 4: Solder the LED and Switch On

Solder the LED on, making sure the ground end is facing out as shown.

Cut the leads of the LED and solder on the switch as shown. Make sure to have it as close to the LED as possible as shown. Afterwards cut off the excess protoboard with flush cutters.

Trimming the excess protoboard is important so it fits correctly in the front shell.

Step 5: Bridge the Solder Traces

Add the male end of the JST connector back on.

Use the vicegrips to hold the protoboard in place

Take any color of wire and strip it approximately half an inch (5 protoboard holes) in length

Solder it as shown to bridge the connections

Add extra solder to keep ot secure.

Step 6: Repeat With Other Wires

Cut off the remaining wire and strip the end, this time to 3 protoboard holes, and repeat as shown

Cut the remaining wire and repeat this time with 6 protoboard holes, but this time the wire will be bent

Step 7: Add Green Connector Wire

Now take 8 protoboard holes worth of green wire and strip 1 hole of insulation from each end then tin the ends

Attach the green wire to each end as shown.

Step 8: Bridge Pins and Add the Resistor

Bridge these 2 pins as shown.

Next solder half of the resistor as shown.

Then bend it so it touches the top left pin and solder to it as shown

Step 9: Attach Wires to LEDs

Cut 3 wires, each a different color 20 protoboard holes (2 inches) in length. In my case green will be 5v, yellow will be ground, and red will be data. Keep this the same throughout the project. Strip the ends of the wires 1 hole length. Dip the ends in tinning flux.

Next cut 3 LEDs in a row from the strip and apply solder to the pads nearest the back end of the arrow

Now attach the 3 wires to 5v, data and ground on the LEDs

Afterwards add hot glue to the connections for better long term durability

Step 10: Connect LEDs

Attach the LED wires to these spots on the ATtiny85 protoboard as shown

Fold the wires back until they're all straight and line up with each other

Step 11: Add the Final LED

Cut 3 more wires. This time 13 protoboard holes long, and attach another single LED in the chain. Make sure to hot glue all solder connections

Step 12: Drill Hole in Rumble Housing

Steps 12-24 will focus on the wire routing system. These steps will be the same regardless of which type of goomwave system you're doing.

Unscrew the controller and remove the rumble motor housing

Use a power drill and a 1/8" bit to drill a hole in the rumble motor as shown

Use flush cutters to cut to the edge of the hole

Step 13: Break Off a Plastic Square for the Controller Connector

Cut in the front as shown. Break off the cut section by twisting up and down with the flush cutters.

Step 14: Cut Horizontally to Hold the Controller Connector

Now carefully cut horizontally as shown on both sides. This may require additional expanding of the slits later to fit the thin protoboard in.

Step 15: Cut Channels for Wires

Next cut a few channels in certain places

Step 16: Cut Triangles

Cut a few triangles in the R digital press holder section

Step 17: Cut Wires and Protoboards

Cut 3 8" wires and strip and tin the ends.

Break a normal protoboard into 3x1 holes amd a thin protoboard into 5x1 holes

Step 18: Make Wire Routing System

Take a female and male mated pair of JST connectors and attach the 3x1 to the male end and the 5x1 to the female end. (Female end with 7x1 thin protoboard is shown but should be 5x1)

Attach the wires as shown to each end

Hot glue the male end.

Step 19: Trim the Pins of the Female End

Trim the pins of the female end of the controller connector

Step 20: Attach the Controller Connector

Add a dollop of hot glue to temporarily keep the female end in place. Make sure to tuck the thin protoboard underneath the plastic triangles.

Add small amounts of hot glue only to the top part of the thin protoboard. If glue is added to the bottom and sides it will interfere with the placement of the cord

Step 21: Pull the Wires Through the Channels

Pull the wires down through the drill hole and into the channel. Then hot glue it in place and squish it once it's half cooled with a finger to flatten it. If the hot glue isn't flattened it can interfere with the shell while closing.

Use your thumbnail to bend the wires into the corner, then route them through the next channel.

Step 22: Hot Glue

Hot glue the wires in the corner, making sure if there's any excess hot glue that it's near the top rather than the bottom. If glue is near the bottom it will interfere with the controller being able to close

Route the wires through the triangles on the R digital press holder and pull them down afterwards. Add more hot glue in the triangles to keep the wires in place

Step 23: Make a Male-end Connector

Take a male ended JST connector and add a 3x1 protoboard to it

Cut 3 2.5" wires, strip the ends and tin them, then attach them to the connector as shown

Step 24: Hot Glue and Attach Connector to Controller

Drape the wires to the side as shown then add hot glue

Solder 3 pins to the gamecube controller cable pins as shown

Step 25: Upload Arduino Sketch

Upload the arduino sketch. After its uploaded, unplug the usb and transfer the ATtiny85 to the LED chain using the special tweezers to remove it (if you use your fingers you risk bending one of the corner legs)

Make sure the dot on the Attiny85 is on the same side as the notch of the SOIC socket. If it it backwards it can fry your chip, leds, controller and/or wii.

Step 26: Attach the Rumble Housing

Attach the L and R digital press boards as normal

Attach the controller connector to the rumble housing connector

Put on the rumble pack and make sure the rumble pack stick goes over the wires

Tuck the LED chain connector under the c stick cable

Step 27: Create a Spinny Stretchable Cable

Tightly spin the cable around a triwing to create a stretchable cable

Step 28: Test LED Chain

Plug in the controller, attach the LED chain and see if it turns on. Make sure the switch is in the "on" position.

If it doesn't light up, there's likely something wrong with a solder connection, or an LED may have blown if you put the ATtiny85 in backwards at some point

Step 29: Cut Slits in the Faceplate for the LEDs

Cut slits in the faceplate with the flush cutters. Wiggle the piece back and forth until it breaks off. Do this with the other 3 buttons as well

Step 30: Cut Additional Slits to Make Room for Things

Use the flush cutters to cut off a few of the plastic supports on the back and cut out a small section on the front plate to make room for the wires

Step 31: Press Fit in the LED Chain

Bend the LED chain at a 90 degree angle as shown.

Press fit the LED chain body into the front of the controller as far to the end as possible

Press fit all the LEDs into position as shown and use tools to push them as far down as possible

Step 32: Add Hot Glue for Added Stability

Move the press fit LED chain body and add dabs of hot glue to each side that it contacts, then put the LED body back.

Add hot glue to the LEDs as well for added stability (they should stay without any hot glue but the hot glue is just for added stability)

Tuck the wires going the LEDs to the side

Step 33: Final Step of Front Goomwave: Closing the Controller

Place the motherboard on the front shell

Attach the spinny connector to the LED chain body and move the spinny wire out of the way of the shell

Attach the cord as normal

Put the back on (it should fit normally without much or any extra resistance) and screw in the screws

CONGRATS you're done! (With this version)

Step 34: First Step of Full Goomwave: Make Board With Connectors

Take 2 pairs of male and female JST connectors. Color one black. Solder both of them to a 1x12 prototboard as shown

Step 35: Bend Pins and Solder to Arduino

Bend the pins 90 degrees with the pliers and vicegrips, then solder them to the Arduino as shown. Cut the excess of the pins off with flush cutters

Step 36: Cut Wires and Attach to Arduino Pins

Cut 1" of green wire and attach it from the JST connector to the 5V of the Arduino as shown. Also attach the data from the black JST connector to D2 on the Arduino with a 2.5" wire

Step 37: Attach the Remaining Wires

Cut 2.5" wires and attach the wires as shown. The 2 yellows should go to ground and the 2 greens should go to 5V. The black JST connector's red wire should go to D2, the white JST connector's red wire should go to D4.

Step 38: Cut, Strip, and Tin Wires

Cut 18 (15 pictured) 2.5" (up to 3" is OK) wires, strip and tin the ends. These will be for the bottom LEDs

Step 39: Make Black Connector for LEDs

Break a 3x1 protoboard and solder a male JST connector to it. Take 3 of the 2.5" wires and solder them to the connector as shown. Hot glue the connection after

Step 40: Attach the Black Connector to an LED

Clamp the LED in place, apply solder to the pads, attach the wires from the black connector as shown, then hot glue the connection

Step 41: Upload, Attach the Arduino, Test the LED

Upload the sketch, and attach the Arduino to test the LED. If it doesn't light up there's likely a problem with a solder connection somewhere, or the LED may be fried if 5V and GND got connected at some point

Step 42: Attach Wires to the End of the LED

Clamp the LED and solder 3 wires to the exposed end as shown

Step 43: Repeat the Previous Steps of Attaching LEDs

Repeat the previous steps of attaching and testing the LEDs until you have a chain of 5

Step 44: Make and Attach the Black Female JST Connector

Cut and attach a 3x1 protoboard, attach the wires on each side

Step 45: Cut Leds for LED Chain Section 2

Cut 5 single LEDs and 1 set of 3 leds in a row

Step 46: Cut 15 1.4" Wires

Cut, strip, and tin 15 1.4" wires (5 of each color)

Step 47: Cut 3 8" Wires

Cut, strip and tin 3 8" wires

Step 48: Make Black Connector to LED

Cut 3x1 protoboard, attach to black male end, connect, hot glue

Step 49: Test the 8" Connector

Plug into the female end of the 5-led chain and test to see if it turns on

Step 50: Attach Another LED to the End

Attach 3 of the 1.4" wires to the end and then to an LED and hot glue the connections

Step 51: Attach and Test More LEDs

Attach and test more LEDs until you have a chain of 4 coming from the 8" connector

Step 52: Add 3 LEDs Then 1 on the End

After the chain of 4 LEDs, attach a row of 3 LEDs that haven't been cut, and attach the final LED on afterwards, and test after each LED has been added.

Step 53: Wrap LEDs in Tape

Peel off the back brown tape that holds the adhesive on the back of the LED, break off square of scotch tape, and tape around the LED. This is to "future proof" them while hot gluing them to the shell in case corrections need to be made it doesn't mess up the whole LED chain cause the hot glue sticks to the other hot glue

Step 54: Tape the Rest of the LEDs in the Chain

Tape the rest of the LEDs in the chain

Step 55: Cut Parts Off of the Shell

Cut parts off of the shell as shown to make way for the wiring for the LEDs

Step 56: Cut More Parts of the Shell Off

Use the flush cutters to cut off the 2 inner support ridges as well as the bottom outer support ridge to make way for the Arduino

Step 57: Hot Glue Down LEDs

Make sure the LED chain is facing the correct way. The female end of the connector should be on the right and should be directly attached to the first LED being glued down on the left handle as shown

Step 58: Glue the Rest

After gluing make sure all wires are tucked down and out of the way as much as possible

Step 59: Glue Female End of Connector

Add copious amounts of hot glue to the sides and bottom of the female connector and place it in between the 2 support ridges as shown

Step 60: Move Connector, Prepare Arduino for Gluing

Move the connector wire into the position shown, bunch up the wires on the Arduino as shown and place so that all the wires are bunched up in 1 section of the support ridges. Remove the R button and attach the programming cable so it's positioned to be able to be programmed after you hot glue it

Step 61: Hold and Glue Board

Hold the board as far to the edge as possible then inject large amounts of hot glue into the ridges next to the Arduino that don't house the wires. After the first injection has dried you may need to refill the top again. Also make sure to glue the bottom portion as shown as well

Step 62: Cut Front Plate

Use flush cutters to cut out parts of the front plate. Similar to the steps with 4 faceplate LEDs

Step 63: Cut Additional Spots on Front Plate

These spots are different/in addition to the 4 ABXY buttons.

Step 64: Hot Glue in Stuff

First route the chain of 8 LEDs as shown. The LEDs should more or less stay in place without any glue except for the start button and analog stick. Hot glue those down first.

Step 65: Hot Glue the C Stick and Prepare to Glue the Connector

The C stick should be as far down as possible. The higher it is the more likely it is to interfere with the C stick. Add very minimal hot glue for the C stick. The other LEDs don't require hot glue if they're staying without it

Prepare to glue the connector by wrapping it as shown

Step 66: Hot Glue and Wrap Up the Connector

Add a large dollop of hot glue as shown. After it's dried use a triwing and wrap the wire around tightly to make a springy connector.

Step 67: Cut the Top of the Start Pad

Cut the top of the start pad so it fits flush like normal given that the start LED is too high

Step 68: Connect the Connectors

With the motherboard in and controller facing down, connect the 2 connectors, 1 white connector on one side and 1 black connector on the other side. Place the back on like normal. It may take some wiggling but ultimately should sit like normal without needing to be excessively forced

Step 69: Screw It in and BAM We're Done

Congrats if you made it this far! This is no easy task. If this is way too much work and you'd rather just buy this or similar products, check out my website.

Arduino Contest 2020

Participated in the
Arduino Contest 2020