100%
omnicontroller omnicontroller view
Description

Imported from GitHub: rp958/omnicontroller · commit c77027f · license CERN-OHL-S-2.0

Description

OmniController is an all-in-one controller designed with retrogaming solutions in mind.

README

OmniController

Description

OmniController is an Open Hardware / Open Source, all-in-one controller.

It was conceived with retrogaming solutions (such as emulators or FPGA) in mind but can accommodate to modern gaming as well. Its main goal is to cover original button layouts of most of the popular console controllers without having to remap buttons or use different controllers when playing games from different consoles libraries.

It uses the GP2040-CE firmware which is well known for its compatibility with most modern and retro platforms as well as its very low latency.

Default keymap

Front keys. Back keys.

Please note that the double L3 and R3 buttons (the ones on the joysticks and the face buttons ones) are wired in hardware. That means that if you chose, for exemple, to remap L3 to a different button, both L3s will be remapped to that button. This is due to the fact that all GPIOs available in the firmware/microcontroller are already in use. It is unlikely that you will need to use both joysticks and 6 faces buttons at the same time.

Getting Started

Prerequisites

Software:

  • Firmware: GP2040-CE
  • (optional for modifying the PCB): KiCAD
  • (optional for modifying the case and buttons): FreeCAD

Hardware:

  • 4x M2x4x3.2 threaded inserts
  • 4x M2x12 screws
  • a soldering iron (to melt the inserts into the case, no actual soldering required)
  • super glue
  • USB-C cable
  • a computer for installing the firmware

Making the PCB

Download and extract the latest OmniController release file.

All the necessary files for PCB fabrication are located in release/pcb/.

Bill of materials:

Item#DesignationManufacturerPart NumberPackageValueQuantity
1UP1, DOWN1, LEFT1, RIGHT1, Credit1, Menu1, SEL1, START1, A1, B1, bC1, X1, Y2, Z1, BOOT_SEL1Omron ElectronicsB3FS-1000P15
2bR1, bR2, bL1, bL2Omron ElectronicsB3F-31004
3C1, C20805 (2012 Metric)10u capacitor2
4C10, C110805 (2012 Metric)1u capacitor2
5C12, C13, C14, C3, C4, C5, C6, C7, C8, C90805 (2012 Metric)100n capacitor10
6C15, C160805 (2012 Metric)15p capacitor2
7LeftStick1, RightStick1AlpsRKJXV122400R(THT)2
8J1G-SwitchGT-USB-7010ASV1
9R1, R20805 (2012 Metric)27.4 ohms resistor2
10R3, R40805 (2012 Metric)1k resistor2
11U1Raspberry PiRP2040QFN-56 7×7mm1
12U2OnsemiNCP1117ST33T3GSOT-223-3_TabPin21
13U3WinbondW25Q128JVSIMSOIC 208-mil1
14Y1AbraconABM8-272-T3Crystal SMD 3225 4Pin1
15(Optionnal) J2GCTUSB1046-GF-0190-L-B-BUSB_A_Receptacle1

NOTE: J2 is only necessary for Host USB authentication mode. If not needed, can be left unpopulated.

NOTE: J3 is for development of and does not require populating.

3D Printing the case and buttons

You will need to print the following parts (all contained in release/case/).

Buttons:

  • 1x dpad_bottom
  • 1x dpad_top
  • 2x joystick
  • 2x button_select_start
  • 2x button_cred_home
  • 4x button_L_R
  • 6x button_face

Case:

  • 1x case_back
  • 1x case_front
  • 1x middle_frame

For better printing results, it is recommended the following parts be sliced at an angle of 45 degrees and with supports:

  • the joysticks
  • case_top
  • case_bottom

All the other parts should be printed flat and do not require any support.

Please note that depending on the quality and precision of your print, you might have to sand some parts.

Assembling

  1. Take the 2 parts of the D-Pad and glue them together back to back, making sure the two holes are aligned.
  2. Take the case front, melt the threaded inserts into the 4 holes using the soldering iron.
  3. Place all the face controls as well as L1 and R1 in their respective place. Make sure the rectangular holes in the back of the joysticks are placed horizontally.
  4. Place the PCB aligning the holes with the M2 inserts. Make sure the joystick axes go into the rectangular holes.
  5. Insert the middle frame.
  6. Place the L2 and R2 buttons.
  7. Close the controller using the back part, then screw it using the 4 M2 screws. Screw them firmly but not too tight.
  8. You're done!

Flashing the firmware

  1. Download the latest version of GP2040-CE from the project's download page. You must use the link for the Raspberry Pi Pico microcontroller.
  2. Unplug your controller.
  3. Use a pin or an unfolded paperclip to press the reset button at the back of the controller.
  4. While pressing the reset button, plug the controller to your computer. Your computer should detect your controller as a mass storage device.
  5. Copy the .uf2 firmware file to the controller memory.
  6. Once the file copy is finished, the controller should restart and be detected as an XInput (XBox360) controller by default.

Please refer to the GP2040-CE installation documentation for more details.

Recommended configuration

  1. Unplug your controller.
  2. Download the default omnicontroller_default.gp2040 configuration file on your computer.
  3. Press and hold the S2 button. While still holding S2, plug the controller to your computer. Your computer should detect your controller as a network adapter.
  4. Open the following URL in your Web Browser: http://192.168.7.1. This should bring you to the Web Configurator interface.
  5. Go to Configuration > Data Backup and Restoration.
  6. Click on Load and select the omnicontroller_default.gp2040 file you downloaded at step 2.
  7. Click the REBOOT button, then Controller.

Please refer to the GP2040-CE Web Configurator documentation for more details.

Usage

Please refer to the GP2040-CE usage documentation

Troubleshooting

In case of problems, you can use Hardware Tester's gamepad controller in order to make sure you controller is detected correctly and that all buttons are functioning.

Roadmap

  • Several new features are considered, for instance adding an OLED screen, rumble, colord LEDs. Please join the discord via the project's Patreon for discussing new features and/or new features prioritization.

Known issues / Limitations

  • At this stage, Host USB authentication mode for PS4/PS5 is implemented but has not been tester. Please read Additionnal PS4 settings from GP2040-CE Settings documentation. Any feedback is appreciated.

License

Distributed under CERN-OHL-S version 2 or later. See licence text for more information.

Contact

Please e-mail me if you want to contribute, especially if you have experience in electronics engineering, CAD or manufacturing.

Attributions

OmniController uses several KiCAD component footprints and models from the SnapEDA library.

Acknowledgments

Many thanks go to the GP2040-CE development team.

Help

If you want to help funding this project, any contribution is greatly welcome. This can help me acquire some prototyping equipment and spend more time on the development. To do so, please use my:

Thank you.

Comments
Sign in to comment

No comments yet. Be the first to ask about this board.