Introduction: Giant LEGO NES Controller

About: I used to teach middle school science, but now I run my own online educational science website. I spend my days designing new projects for students and Makers to put together.

Everything in life is better when you're using an oversized LEGO™ version. This giant LEGO™ NES controller is no different, especially when playing a game of Mario.

At the heart of this controller are LEGO™ compatible Crazy Circuits “wired” with nylon conductive tape. The brain is an Arduino compatible Crazy Circuits Touch Board, which a computer recognizes as an external keyboard. All you need is a USB cable and an emulator to play your favorite classics on a giant LEGO™ controller!

Shameless plug: Back us on Kickstarter so we can get Crazy Circuits manufactured in the USA!

If you like our projects, follow us on Facebook. We post new projects, updates to our GitHub, and even give away free stuff.

Step 1: Supplies Needed


This project cost us about $130 in LEGO™ from online dealers. You can find a part list on our GitHub repository.

We also have a small, handheld version that use an 8x16 LEGO™ plate. Files for an optional laser cut enclosure are also on the GitHub.


1x Crazy Circuits Touch Board

6x Crazy Circuits Jumbo Buttons (12mm)

1x USB Cable

Nylon Conductive Tape



Double Sided Foam Tape



Arduino IDE

Teensy_NES_Controller.ino file from the GitHub repository

LEGO Digital Designer (needed to view the .lxf file on the GitHub repository)

Emulation Software and ROMs

Step 2: Video Guide

If you prefer video instructions to written, this is the step for you!

Step 3: What Is Crazy Circuits?

Crazy Circuits is an open source modular building system from Brown Dog Gadgets. It is based around the idea that building electronics should be easy, inexpensive, and fun. We are currently running a Kickstarter campaign to raise money for manufacturing.

All of the Crazy Circuits parts we have developed can be found on our GitHub. You can download our pre-made parts to CNC yourself, or follow the guides to design your own.

Crazy Circuits are designed to interface with LEGO™ bricks, giving us an easy to follow grid. The parts fit onto LEGO™ studs and stick firmly in place when used with our Nylon Conductive Tape. Using LEGO™ you can build your circuits in 3 dimensions and easily hide the wiring.

Using the Crazy Touch Board you can program your LEGO™. Everything in the Crazy Circuits system is Arduino compatible, which means you can adapt any Arduino project to the LEGO environment

In addition to LEGO™ projects, Crazy Circuits is great for

  • Paper Crafts
  • Conductive Sewing
  • Conductive Inks and Paints

Step 4: Designing the LEGO™ Controller

When we sat down to design the Giant NES Controller we tried to make things as functional as possible while keeping the classic NES look and feel. The D Pad is a single piece connected to the controller with a LEGO™ ball joint. The Start, Select, A, and B buttons are individual pieces sitting on top of the Crazy Circuits buttons. Lots of empty space on the inside provide room for the electronics and cut down on the number of pieces used.

The LEGO™ Digital Designer is a free piece of software released by LEGO™ to help people design and share their projects. Download the design file (NES_CONTROLLER_FINAL.lxf) for the NES Controller from our GitHub for instructions and a list of the parts used.

Step 5: The Mini NES Controller

We thought a smaller version of this project would be a good idea as well, so we built this miniature version. It uses an 8x16 LEGO™ plate and smaller 6mm micro switches to build a controller similar in size to an original NES Controller.

Just “wire” up the base plate as it is in the picture and you’ll have a working controller. If you have access to a laser cutter, you can use the files in our GitHub to cut out an enclosure. We’re really pleased with the way the hinged buttons turned out. The switches we used for this prototype have unusually tall buttons; you may need to adjust the height of the sides on your enclosure.

This mini version uses the same Crazy Circuits Touch Board as the bigger version. The one in the above photos is an older prototype. It looks different, but the newer versions are hooked up the same way.

Step 6: Fitting the Crazy Touch Board

Due to the way we designed our controller, we do not have many studs available on the inside to attach the Crazy Circuits.

To fix this problem we used some double sided tape and placed in some thin LEGO pieces. While not ideal, everything was held in place nicely and we didn't have to worry about our Touch Board coming off.

Step 7: Common Ground

Each button is connected to an output pin on the Crazy Touch Board and a common ground. We started by laying a line of tape around the edge of the controller for each switch to attach to. Then we lined up the switches with the buttons that would be pressing them and started wiring and taping them down. You can see that we got a little messy without the gridded studs on the Mini Controller.

You might notice that our buttons are not all the same. We were working with prototype parts, and experimenting to see which ones we liked more. They all function the same, but the form factor is slightly different.

Step 8: Connect a and B Buttons

In these pictures, you can see that we used a “weave” technique to thread conductive tape through the holes on the part. This is the same method we use when making paper crafts or building on other smooth surfaces. It provides a good electrical connection and leaving extra length at the end can help keep parts in place. We used double-sided foam tape as well, just to be sure everything stays put.

One side of the button needs to connect to the ground, while the other needs to go to an input pin on the Crazy Touch Board. We used Pins 0 and 1 for A and B, respectively, but you can always change the assignments in the Arduino code.

Use your Multimeter to check for connectivity before moving on.

Step 9: Wire the D Pad

Use the same process here as you did for the A and B buttons. Wire one side of the switch to ground, and the other side to an input pin. We used pins 14, 16, 17, and 18, but these can be easily changed in the code.

We found that we got the best results by aligning the D Pad edges connected with the middle of our buttons. This resulted in a nice solid "click" every time we pressed down.

Use your Multimeter to check for connectivity before moving on.

Step 10: Connect Start and Select

You know the drill by now. Wire one side of the switch to ground, the other to input. The easiest way for us to reach an input pin was to go over the top of the board. This area does not have any conductive areas, so it did not cause an issue. If you wire over the green board you might short circuit something important.

Use your Multimeter to check for connectivity before moving on.

Step 11: Check Everything Over

Before closing up the controller, it's not a bad idea to retest your connections with your multimeter. We had one bad button, but a little more conductive tape fixed things.

Wiring the controller like this is simple but time-consuming. Things would go a lot quicker with a spool of wire and a soldering iron, but we wanted to demonstrate what you could do with Crazy Circuits as a non-soldering project.

Step 12: Emulation Software and ROMs

What good is a giant NES Controller if it can't play any video games?

Emulating old game systems falls in a weird legal grey area. Emulation software itself isn't illegal, however the ROM game files violate copyright law. Then again if you own a physical copy of the game you have a legal standing for owning a ROM file of it.

There are plenty of websites out there that host both software and ROM files. We won't link to them, but a search will point you in the right direction.

Step 13: Programing Your Touch Board

The core of the Crazy Touch Board is a Teensy microcontroller, which is a custom, Arduino compatible board. In order to program one from the Arduino IDE you need the Teensyduino plugin. Follow the instructions on the page to get it set up. This is also your best resource for learning how to adjust the key commands set in the .ino file in the GitHub.

Once you’ve connected the board you need to upload our code. Just download or copy and paste the .ino file from our GitHub.

Step 14: More Crazy Circuits Projects

The Crazy Touch Board has an interesting feature that we didn’t get to use in this project. The “Touch” in the name doesn’t refer to mechanical switches, but rather the capacitive touch sensing capabilities of the board. This feature allows the board to calibrate to conductive material attached to an input pin and notice changes in the electrical properties. Anything conductive can act as a button. Some materials, such as Bare Conductive paint can even be used as proximity sensors.

Pictured here are a couple projects we’ve made, a MIDI piano with Bare Conductive paint, and a lightboard made with Squishy Circuits conductive dough. We’ll be doing write-ups for both of these in the future, so stay tuned.

Step 15: Enjoy!

Enjoy your new controller! If you want, you can easily re-program it to type your name or even execute keyboard shortcuts.

If you've not done so, check out the Crazy Circuits Kickstarter and It's a really fun system that we hope both newbies and experts will enjoy.

If you come up with a better LEGO controller design, or something completely different, post it in the comments below. We hope you enjoyed this write up, and we’re looking forward to see what interesting projects people create with Crazy Circuits.