|
Autodesk Fusion 360Autodesk
|
SUPER Nintendo Entertainment System Controller XL
Hello everyone, and now I have something really exciting to share with you all: the SNES XL, an enlarged version of the well-known SNES controller that has functional buttons exactly like a standard SNES controller for playing retro games.
It is arguably the largest SNES controller in the world, judging by its size (I am not sure if that is accurate).
Designed entirely in Fusion360, the controller's enormous size required us to split it into three separate parts, each of which we had to print individually before assembling them into one huge body.
We used 12 mm x 12 mm tactile switches soldered on some specially designed PCBs that were also created from scratch.
The primary MCU, the XIAO M0, imitates a game controller device using the HID standard.
The controller is merely an enlarged version of the same idea used in a previous project of mine.
https://www.hackster.io/Arnov_Sharma_makes/arduino-game-controller-for-nes-and-gba-84c89b
This article is about how this project was built, so let's get started.
MATERIALS REQUIRED
The following were the materials used in this build-
- Custom PCBs Provided by PCBWAY
- 3D-Printed parts
- Super Glue
- Tactile Switches
- Wires
- Threaded Inserts M3
- Soldering Iron
- XIAO M0 MCU
ABOUT THE OG CONTROLLER
The Super Nintendo Entertainment System (SNES) controller is a classic video game controller that was designed and released by Nintendo in 1990.
It was the primary input device for the SNES, a popular 16-bit gaming console that gained widespread popularity during the early 1990s.
The SNES controller features a distinctive design, with a rounded shape and a cross-shaped directional pad (D-pad) on the left side for movement control.
On the right side, there are four action buttons arranged in a diamond pattern, typically labeled A, B, X, and Y. These buttons are used for various in-game actions, such as jumping, attacking, and interacting with the game environment.
In addition to the main buttons, the controller includes two shoulder buttons, L and R, located on the top edge. These shoulder buttons added new gameplay possibilities by providing additional input options. The Start and Select buttons, positioned in the middle of the controller, are used for pausing games and accessing in-game menus.
The SNES controller has become an iconic symbol of retro gaming, and its design has influenced subsequent generations of video game controllers.
Many classic games, including Super Mario World, The Legend of Zelda: A Link to the Past, and Super Metroid, were designed to be played with this controller, contributing to its lasting legacy in the world of gaming.
DESIGN BREAKDOWN
This project's 3D design begins with an original SNES controller image that is imported into Fusion360. The controller's width is calculated by calibrating the image and making it 471mm from side to side.
The controller's shape was then created using the enlarged image, and the body was then made hollow using the shell command.
Buttons were then modeled by using the same imported image.
Every button has a PCB attached to the rear that houses a tactile push button. The PCB is positioned so that there is a 1 mm space between the top side of the push switch and the bottom side of the 3D-printed button.
The entire 3D part descends by 1 mm when we press the button, toggling the push button and allowing us to view the button press.
In the same way, the Push Button PCB is present in every button, including the D Pad, ABXY, Start, and Stop buttons.
With the exception of the DPad, each button has a single PCB with a single push button. The DPad has a square PCB with four push buttons.
PCB DESIGN
Following design completion, we export the layout for each board and utilize it to model three distinct PCBs: the XIAO MCU Breakout board, the DPad board, and the single button board.
Three schematics were prepared for each board.
First, we create the DPad schematic, which consists of four Tactile push buttons, pin 2 of which is attached to a CON1 port and pin 3 of each of which is connected to GND.
Next, we export the netlist and create the PCB for the DPad board. The CAD design's exported board layout was used to create the PCB's outline for the DPad.
Switches were placed according to the CAD layout.
Next, we set up the schematic for a single switch board, which had four CON1 ports connected to a single tactile switch.
Pin 3 of the Tactile switch is connected to two CON1 ports, which will be connected to the I/O pin of XIAO, and Pin 2 is connected to two CON1 ports, which will be the ground port.
After that, this schematic was turned into a PCB design, which was created using an outline from a CAD model.
Finally, the XIAO Board is ready. It was constructed in a manner similar to the other two PCBs, starting with the schematic, which was then converted into a PCB design and the board's layout was created using the outline from Cad.
PCBWAY SERVICE
After the PCB design was completed, Gerber data was generated and then sent to PCBWAY for samples.
For this project, we made three different-shaped PCBs so three orders were placed in white solder masks and black silkscreen.
The PCBs were received within a week, and they were excellent, as expected.
I really love the quality of PCBs made by PCBWAY.
There are other manufacturers available, but their service is always on another level.
check out PCBWay service for getting great PCB service at a lower cost.
BUTTON PCB ASSEMBLY PROCESS
- First, we begin the extremely simple PCB assembly process for the XYAB button PCBs.
- The tactile switch is added to the switch pads on the PCB, and the process is repeated for each of the four boards.
- After that, we solder the four pads on each PCB to permanently attach the switch, and we repeat this process for every PCB.
- Following the construction of the XYAB Button PCB, we take the Dpad PCB and solder the switch pads from the bottom side after adding four switches to the switch pads.
- Switch PCBs are now ready.
XIAO MCU Breakout Board ASSEMBLY PROCESS
- We utilize two CON7 female header pin connectors for the XIAO MCU Breakout Board, adding them to XIAO Pads.
- The board is then turned over, and the connector pads are soldered to permanently link the connector to the PCB.
- Now that XIAO is finally installed in the female header pin connector, the XIAO MCU Breakout PCB is assembled.
BUTTONS PCB & XIAO BOARD
- Eight single switch PCBs—for X, Y, A, B, Start, Stop, L button, and R button, respectively—will be used for the assembly.
- The D Pad Assembly will use a single square PCB with four buttons on it.
- Next, the XIAO MCU Breakout Board is utilized to link each PCB to the XIAO I/O pins.
- Every board has pads that are linked to switch pins; all we have to do to complete the wiring is connect GND to every switch PCB and each switch's other pin to the IO pins on the XIAO board.
BODY ASSEMBLY PROCESS
- Let us have a look at the super glue we will be using before we get started.
- We are using Feviquick 203, which is a cyanoacrylate adhesive with low viscosity and fast setting for rubber and plastic.
- Although Feviquick is well-known in India, there are other options that can be utilized.
- Using fiber tape, we first join two parts together from the front side to begin the assembly process.
- Next, we fill the space between the two parts from the inside face with super glue.
- We repeat the process on the other side, allowing the adhesive to dry and solidify for ten to fifteen minutes.
- After the glue solidifies, we remove the fiber tape and the result of this process will be a solid body that is made from three different 3D-printed parts.
This project can also benefit from an extra stage that involves using epoxy to fill the space between the two halves, sanding the epoxy, applying primer to the entire body, and then applying a couple coats of paint.
THREADED INSERTS PROCESS
- Threaded inserts of the M3 size are used to mount PCBs on the 3D printed body.
- These inserts are placed into holes that are added to the 3D part. They serve to facilitate the insertion of bolts or screws and make it easy to remove them for reuse at a later time.
- To position the Switch PCBs, we needed to employ a total of twenty threaded inserts; each board will have two inserts mounted on it, and the DPad has four threaded inserts for mounting.
- Using a tweezer, we first choose the insert and position it in the 3D body's hole.
- Next, we heat the insert with a soldering iron set to a temperature of 150°C. Once heated, the insert fits into the hole when the plastic in front of it melts.
- It thus slides into place, and after we take out the soldering iron, it cools down and is fixed there permanently.
D PAD BUTTON ASSEMBLY
- Prior to assembling the buttons, we mount the DPad button in its designated location and attach the DPad PCB to the rear of the 3D buttons.
- Next, we permanently fasten the PCB in place using four M3 bolts.
- We verify whether or not the button press is smooth.
XYAB BUTTONS ASSEMBLY
- The round buttons were then placed on the base body in the ABXY position, and the Switch single-board PCB was positioned on the back of the buttons.
- Following the installation of eight M3 bolts to secure every PCB in place, we tested the buttons to see if they were functioning correctly.
START/STOP BUTTONS ASSEMBLY
- After that, we placed START/STOP Buttons there and attached the switch PCB to the rear.
- Next, we permanently put the PCB in its place using four M3 bolts.
L & R BUTTONS
- The Left button is then positioned in its proper location and fastened there using an M2 screw.
- Next, we put the single switch PCB directly to the 3D body by mounting it vertically with the Left Switch using two M3 Screws.
- Following a check of the switch press, we install the R button in its designated location, repeat the process of attaching the button with an M2 screw, and then add the switch PCB vertically in its designated spot.
- Both Left and right button are now finalized.
BUTTONS TESTING
We use a multimeter set in continuity mode to test the button connections. We attach one wire of the multimeter to the switch's GND port and another wire to the other pin of the switch.
when we press the tactile button, multimeter beeps which means GND is being connected with the other pin of button which means the button is functioning perfectly.
we checked all buttons with this process.
ADDING XIAO BOARD
Next, we place XIAO Breakout Board in its place and use two M2 Screws to secure it in its place.
XIAO Breakout board has been placed in its place and now we can move onto the next step which is to wire everything together.
WIRING
When the digital pin is pushed through the switch and the key is pressed, our setup functions.
We are using total of 12 Tactile buttons in this built which are each connected to a Digital Pin of XIAO MCU.
Total Three PCBs are used in this project, the DPad PCB consists of Four Tactile buttons.
Then we have the single button PCB and the XIAO Breakout Board.
All button's PIN 1 are connected together with GND Pin of XIAO, this pin will be the common ground.
L Button is connected with Pin D0 of XIAO, UP is connected with D1, LEFT is connected with D2, RIGHT is connected with D3, D4 of XIAO is connected with DOWN, START is connected with D5, X is connected with D6, Y is connected with D7, A is connected with D8, B is connected with D9 and the R Button connected with D10 of XIAO.
STOP Button is not connected to any PIN as XIAO only have 11 I/O Pins which can be use.
TEST
Once the sketch has been uploaded, we connect the controller to the PC, launch Device Settings, and the Seeed XIAO M0 MCU will appear as a gaming controller icon.
We right click on the Game Controller Icon and open its settings which will show controller properties.
Any button on the controller that we press causes the button in the properties menu to change color, indicating that the setup is functioning and the button is sensed.
RUNNING RETRO GAMES: POWER Pi (RASPBERRY PI BASED EMULATION STATION)
We are using Power Pi, a device we created a few weeks ago, for retro game emulation.
As the name suggests, Power Pi is a lightweight, integrated Raspberry Pi Dock that powers the Pi wirelessly thanks to an internal lithium-ion battery pack.
RecalBox is the Emulation OS that is being used, and a Raspberry Pi 4 has been utilized in this Power Pi.
Check out the full article for more details about Power Pi-
https://www.hackster.io/Arnov_Sharma_makes/power-pi-28da7a
DOES IT RUNS DOOM?
As the project's last test, we used the POWER PI to run Classic DOOM and play the game with the SNES XL Controller.
I had to set the controller down on the table and use the keys to play the game because it was too big for me to control in the air.
We had to map the controller's keys in the Recalbox OS controller settings before we could start playing the game.
CONCLUSION
Here is the finished product of this GIANT build: the SNES XL Controller, which allows us to play nearly every SNES game ever created, including Doom and Super Mario Bros.
The sheer magnitude of this project makes everything extremely cool, thus even though we had to model the switches from scratch due to its large size, it was well worth it.
Although I do own a standard-sized SNES controller, it is nothing like the SNES XL Controller.
This project uses an XIAO MCU, but any MCU that supports HID can be used in its place. For instance, we could create this project with an Arduino Leonardo, Micro, Pro Micro, or even an RP2040.
That is everything for now, everyone. I appreciate you reading this far, and I will be back soon with a new project.
A special thank to PCBWAY for supporting this project; visit them to get a wide range of services, including CNC and PCB services.
Peace.
#include <Gamepad.h>
Gamepad gp;
void setup() {
pinMode(0, INPUT_PULLUP); //LEFTBUTTON
pinMode(1, INPUT_PULLUP); //RIGHTBUTTON
pinMode(2, INPUT_PULLUP); //UP
pinMode(3, INPUT_PULLUP); //DOWN
pinMode(4, INPUT_PULLUP); //LEFT
pinMode(5, INPUT_PULLUP); //RIGHT
pinMode(6, INPUT_PULLUP); //A
pinMode(7, INPUT_PULLUP); //B
pinMode(8, INPUT_PULLUP); //A
pinMode(9, INPUT_PULLUP); //B
}
void loop() {
int UPLEFT, UPRIGHT, UP, DOWN, LEFT, RIGHT, RIGHTBUTTON, LEFTBUTTON, A, B, START, STOP;
RIGHTBUTTON = digitalRead(0);
LEFTBUTTON = digitalRead(1);
UP = digitalRead(2);
DOWN = digitalRead(3);
LEFT = digitalRead(4);
RIGHT = digitalRead(5);
A = digitalRead(6);
B = digitalRead(7);
START = digitalRead(8);
STOP = digitalRead(9);
if(UP == LOW)
gp.setButtonState(2, true);
else
gp.setButtonState(2, false);
if(DOWN == LOW)
gp.setButtonState(3, true);
else
gp.setButtonState(3, false);
if(LEFT == LOW)
gp.setButtonState(4, true);
else
gp.setButtonState(4, false);
if(RIGHT == LOW)
gp.setButtonState(5, true);
else
gp.setButtonState(5, false);
if(RIGHTBUTTON == LOW)
gp.setButtonState(1, true);
else
gp.setButtonState(1, false);
if(LEFTBUTTON == LOW)
gp.setButtonState(0, true);
else
gp.setButtonState(0, false);
if(A == LOW)
gp.setButtonState(6, true);
else
gp.setButtonState(6, false);
if(B == LOW)
gp.setButtonState(7, true);
else
gp.setButtonState(7, false);
if(START == LOW)
gp.setButtonState(8, true);
else
gp.setButtonState(8, false);
if(STOP == LOW)
gp.setButtonState(9, true);
else
gp.setButtonState(9, false);
delay(20);
}
SUPER Nintendo Entertainment System Controller XL
*PCBWay community is a sharing platform. We are not responsible for any design issues and parameter issues (board thickness, surface finish, etc.) you choose.
- Comments(0)
- Likes(4)
- Josue Fernandez Sep 25,2024
- propgm Feb 29,2024
- Im' Peer Dec 16,2023
- (DIY) C64iSTANBUL Nov 22,2023
- 0 USER VOTES
- YOUR VOTE 0.00 0.00
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
More by Arnov Arnov sharma
- Delete Button XL Greetings everyone and welcome back, and here's something fun and useful.In essence, the Delete Butt...
- Arduino Retro Game Controller Greetings everyone and welcome back. Here's something fun.The Arduino Retro Game Controller was buil...
- Super Power Buck Converter Greetings everyone and welcome back!Here's something powerful, The SUPER POWER BUCK CONVERTER BOARD ...
- Pocket Temp Meter Greetings and welcome back.So here's something portable and useful: the Pocket TEMP Meter project.As...
- Pico Powered DC Fan Driver Hello everyone and welcome back.So here's something cool: a 5V to 12V DC motor driver based around a...
- Mini Solar Light Project with a Twist Greetings.This is the Cube Light, a Small and compact cube-shaped emergency solar light that boasts ...
- PALPi V5 Handheld Retro Game Console Hey, Guys what's up?So this is PALPi which is a Raspberry Pi Zero W Based Handheld Retro Game Consol...
- DIY Thermometer with TTGO T Display and DS18B20 Greetings.So this is the DIY Thermometer made entirely from scratch using a TTGO T display board and...
- Motion Trigger Circuit with and without Microcontroller GreetingsHere's a tutorial on how to use an HC-SR505 PIR Module with and without a microcontroller t...
- Motor Driver Board Atmega328PU and HC01 Hey, what's up folks here's something super cool and useful if you're making a basic Robot Setup, A ...
- Power Block Hey Everyone what's up!So this is Power block, a DIY UPS that can be used to power a bunch of 5V Ope...
- Goku PCB Badge V2 Hey everyone what's up!So here's something SUPER cool, A PCB Board themed after Goku from Dragon Bal...
- RGB Mixinator V2 Hey Everyone how you doin!So here's a fun little project that utilizes an Arduino Nano, THE MIXINATO...
- Gengar PCB Art Hey guys and how you doing!So this is the GENGAR PCB Badge or a Blinky Board which is based around 5...
- R2D2 Mini Edition So here's something special, A Mini R2D2 PCB that speaks ASTROMECH.Astromech is a fictional language...
- C-3PO Blinky Board Hey guys and how you doing!So this is the C3P0 PCB Badge or a Blinky Board which is based around 555...
- WALKPi Breadboard Version Greetings everyone and welcome back, Here's something loud and musical.Similar to a traditional walk...
- BOXcilloscope Greetings to everyone, and welcome back.This is BOXcilloscope, a homemade portable oscilloscope that...
-
-
-
-
-
-
3D printed Enclosure Backplate for Riden RD60xx power supplies
156 1 1 -
-