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.
- Male 3 pin JST connectors
- Female 3 pin JST connectors
- Attiny85 programmer
- SOIC socket
- Through hole resistor (4-5kOhms recommended)
- Through hole capacitor (10-100uF recommended)
- Through hole LED
- Single DIP switch
- Soldering iron
- Solder Fume Extractor
- 3-4 colors of 30 AWG wire wrap wire
- Wire strippers
- 2 Clamps
- Hot Glue gun
- GameCube Controller with clear back and clear buttons/sticks
- GameCube Controller with clear ABXY buttons
- 4mm wide NeoPixel LED strip
- Triwing+Philips head screwdrivers
- Arduino Nano
- Arduino Nano cable
- Proto/breadboard pins
- Tinning flux
- Regular scotch tape
Power drill+1/8" bit
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.
Participated in the
Arduino Contest 2020