Skip to content
/ PicoFX Public

A compact keyboard-style controller for Pump it Up

License

Notifications You must be signed in to change notification settings

dj505/PicoFX

Repository files navigation

PicoFX

A compact, feature-rich keyboard-style controller for Pump it Up simulators

ko-fi

Completed controller

See it in action!

Table of Contents

This readme may be rather large, but don't let that intimiate you! I've included as much information as possible to make sure this build is straightforward and beginner friendly. If you have any questions at all, feel free to shoot me a message through Discord (dj505#6697) or open an issue here.

Components

Many components listed below are optional. If you prefer to spend as little as possible on this build, they can be entirely omitted. In the case of the FR4 plate, leaving it out will require you to 3D print or laser cut a plate/case.
All prices below reflect the bare minimum cost of building 5 controllers with PCBs and components from JLCPCB and LCSC respectively, as the minimum number of PCBs from JLCPCB per deisgn is 5. Some components link to AliExpress as it's generally a good, cheap source for keycaps, switches, and other components LCSC won't have, at the cost of long shipping times. It's highly recommended to buy a few extra of each component in case any are damaged, lost, or DOA.

Components (per 1 controller) Specs Notes Recommended Purchase Link Approximate Min. Cost (USD, per 5 controllers)
1x Raspberry Pi Pico Any Pico that is not the Pico H No pre-soldered headers. Pico W should work, but there is currently no WiFi or Bluetooth functionality here. This may change in the future. Pin-compatible clones should work (in case you want USB C) - be sure that the pin mappings are the same! These are not officially supported and it's up to you to make sure it works. Link $4
Pin Headers 2 rows of 20 headers The Pico has 20 pins on either side. You can either go with 1 strip of 20 per side or 2 strips of 10 per side, whichever comes out cheaper and occupies all pins. Link $12
1x 3D printed shell N/A Cost depends on whether or not you own a 3D printer (or know someone who does) and what service you use. N/A - STL file located in Case/3D Prints directory N/A
2x right angle tactile switches Approx. 7.5x6mm, right angle. See recommended purchase link Recommendation - buy a couple extras just in case. Link $0.96
10x keyboard switches Must be Cherry MX compatible The ones linked here are what I used personally for the sake of a price estimate. You can pick any kind of switch you want. Ensure the switches you choose will accommodate the LEDs you pick! Link $23.99
10x keycaps Must be Cherry MX compatible Ideally a "flat" or uniform profile like DSA, XDA, F10, etc. Recommendation - source these on your own for better quality and prices. Link $28.50
4x machine screws M3 or M3.5*8mm, pan head Black would look nice if you can source some. Countersunk screws will not sit flush, and it's not advisable to countersink fiberglass without amazing ventilation and a mask with filters. M3 or M3.5 depends on your printer and its tolerances, but the design was made with M3.5 in mind. Recommendation - buy a couple extras just in case. Link $1.45
(OPTIONAL) 10x LEDs 4x red, 4x blue, 2x yellow (or whichever colours you prefer tbh) LEDs should be 3mm or smaller to fit your switches! Recommendation - source these yourself or find alternatives through LCSC. Buy a couple extras just in case. Link $3.29
10x resistors Surface mount, 330Ohm, 0805 package Only needed if using the above LEDs. Recommendation - buy a ton of them. They cost fractions of a cent each, and they're easy to lose! Link $0.17
(OPTIONAL) 6x WS2812B LEDs* Must be WS2812B or pin-compatible. Earlier WS2812 (non-B) LEDs with 6 pins will not work. Used for underglow lighting. Definitely buy extras - they're somewhat delicate and easy to break or burn out by mistake during installation. Link $4.43
1x Main PCB 1.6mm thickness, lead-free HASL or ENIG finish recommended Estimated price based on default options, but with a lead-free HASL finish. Link - gerber.zip located in gerber directory $8.40
(OPTIONAL but recommended) 1x FR4 plate 1.6mm thickness, lead-free HASL finish recommended Estimated price based on default options, but with a lead-free HASL finish. Not enough contacts or mask artwork to justify ENIG finish. Link - gerber.zip located in Case/Plate/gerber directory $9.30
Total Cost This cost estimate reflects building 5 full PicoFX controllers. If you're splitting the cost through a group buy, divide it by the number of people participating. $96.89

* There are a few options for RGB underglow depending on your needs and experience.

  • Option 1: There are foorprints for 6 individual WS2812B LEDs (PLCC4, 5x5mm) around the perimiter of the case. There are hand-solder friendly 0805 capacitor footprints beside each LED, but these are only needed if you run into issues with the LEDs being unstable or acting erratically. This option will likely look nicer, but may be more difficult for beginners to solder.
  • Option 2: A regular WS2812B strip cut down to 6 LEDs in length can be soldered to the three pins on the left hand side of the board (from the back) and adhered along the length of the PCB. This option is more friendly to beginners or those who aren't as confident with SMD soldering, but the lighting it provides isn't quite as even. Requires jumping the "Strip Enable" pad.

If you have any questions about the parts requirements, costs, or sourcing components, feel free to shoot me a message through Discord (dj505#6697) or open an issue here.

Ordering the PCBs

If you've never ordered PCBs before, don't worry! The process is super simple on most websites. These instructions are here to make sure each step is clear and straightforward, and to avoid accidentally ordering a set of boards with the wrong options. Keep in mind, most manufacturers have a minimum order number of 3-5, which means you're going to need to order at least 3-5 of each PCB (main board and plate). Feel free to put together a group order with friends or sell the extras! I really don't mind others making and selling units, just make sure they're well made, thoroughly tested, and work properly (and consider donating a couple bucks if you can!) Here are my recommendations:

Manufacturer Minimum order number Notes
PCBWay 5 PCBs per design Has sponsored the PicoFX, however opinions expressed are 100% my own. Offers several discount coupons for new users (first time order discount, coupons for completing a profile, etc). Straightforward order process, excellent quality end result. Also offers 3D printing, CNC, and PCB assembly, if needed. Recommended.
JLCPCB 5 PCBs per design Provides new user discounts. Straightforward order process, high quality end result. Also offers 3D printing and PCB assembly, if needed. Recommended.
OSH Park 3 PCBs per design Fewer options than the above two, but the minimum order number is smaller. Colour options are limited to purple and "after dark", a clear solder mask over black substrate so all the traces are visible (very cool but not very visible for this project). Overall a bit more costly, but shipping is generally faster as they're based in the United States.

Some manufacturers may need you to manually specify the PCB dimensions. To save you some time, here are the dimensions for both PCBs:

PCB Width Height
Main board 120.7 70.6 mm
Plate 139.1 mm 77.2 mm

The example order process described here is written with PCBWay in mind, but applies to most manufacturers. Be sure to sign up for an account beforehand and set up your delivery address/etc so you're good to go when you order.

  1. Download the gerber(s) you plan to order. Check the releases page for the gerber zip files. None of the other files are needed - just the zip files.
  2. Visit the manufacturer's website and look for the "Quote Now" button. Choose the settings for and add both PCBs to your cart individually and order them together once they're in there.
  3. Punch in the necessary options. The majority of these don't need to be changed and you can leave them be, however I recommend making sure the following are correct for both PCBs:
    • PCB thickness: 1.6mm
    • Surface Finish: LeadFree HASL OR ENIG (gold finish, more expensive but really cool and higher quality, but only recommended for the main PCB as the plate doesn't have enough solder points to warrant it)
      • HASL (with lead) can be used but I personally try to avoid it. Up to you.
    • Copper Weight: 1oz
    • You can pick whichever solder mask colour you want - this is the colour your final boards will appear. If you want, you can have different colours for the main PCB and the plate! Just remember that the main PCB may not be visible except from the bottom, if the case you use is transparent.
  4. Recommended, but optional - For the main board, you may add a note to the order to clarify that one of the design choices used by the keyboard switch footprint is intentional. The top layer's solder points are covered by solder mask to give it a cleaner look, as no soldering will ever be done on that side. You can either specify this as a note when submitting the order or wait to be asked about it and explain then. PCBWay manufactured the files as provided without bringing it up, but JLCPCB contacted me to double check. Your mileage may vary.
  5. Once you have your desired orders ready in your cart, the rest of the process is identical to any other online shopping site. Pick your shipping option, pay, and you're good to go!

Ordering Components

To make sourcing a little easier and cheaper, you can find all the small components for this project on LCSC. This doesn't include more specialized or larger parts such as keyboard switches, or hardware such as keycaps or screws. Check the recommended purchase links for those, or source them from sites like eBay, AliExpress, etc.
The bare minimum numbers of each part per controller are listed below, but I would highly recommend ordering a few extras of each, as they're very small and can be easily lost or damaged. Thankfully they're very inexpensive and adding extras will only cost you a few cents to a dollar more. See the Components section for a recap of what is/isn't optional and the alternatives for each.

  • 6 x WS2812B RGB LED (3 extra recommended per controller)
  • 10 x 0805 330ohm SMD resistor (5 extra recommended per controller but they're so cheap you can order literally hundreds for well under a dollar total)
  • 2 x right angle tactile switches (1 extra recommended per controller at most, they're super easy to solder but it would suck if one arrived damaged or DOA)

How To Build

This build applies to the full materials list, including the FR4 plate and surface mount parts. Text descriptions will be provided for the optional alternatives, such as replacing SMD LEDs with LED strips or skipping the FR4 plate. Be sure to read through each step in its entirety before doing anything!

Build process & guide video on YouTube

  1. Solder the WS2812B LEDs in place. If using an LED strip, skip this step and wait until step 9. The notch present on each LED should be positioned on the bottom right side. These can be finicky to solder - don't heat them for too long! WS2812B Installation
  2. Solder the SMD resistors in place. The footprints used for these are made with hand soldering in mind, but if you have a hot air rework station, reflow oven, or any other fancy tools at your disposal, those work great too. If you don't feel comfortable soldering these, you can skip them and bridge the pads with solder, but it's not good practice. WS2812B Installation
  3. Solder in the pin headers. It doesn't really matter which orientation you use, but if you insert the short pins through the PCB (unlike what I did here) you can avoid some extra trimming. Inserting the long side through the PCB will require trimming on the other side to make sure there's enough clearance to mount the switches. Do NOT solder the Pico yet. Optionally, if you don't have pin headers, you can use diole legs instead, or skip this step entirely and surface mount the Pico. This is not recommended, however, beacuse it may require trimming the switch step to ensure there's clearance, and absolutely requires trimming the LED/switch legs flush. Do this at your own risk. WS2812B Installation
  4. If using the FR4 plate, solder in the other, smaller pin headers. These go on the FRONT side of the board and connect with the top plate, so make sure the long side is facing up, as shown. WS2812B Installation
  5. Mount the switches in the plate. Mount the plate on the main PCB. Before you solder, make sure no legs are bent under the PCB and all of them are poking through the solder pads. Also insert and solder the LEDs one at a time. Pro tip - test your LEDs and make sure that they both work and are the right colour before soldering them in! The longer leg (positive) is marked "+" with a round hole, and the shorter leg (negative) is marked "-" with a square hole. Note: if your switches require LEDs to be mounted underneath, make sure to insert those first. WS2812B Installation
  6. Solder the test and service buttons. If you are using the FR4 plate, make sure you solder these to the holes on the plate as shown below. In either configuration, the switches should end up on the bottom of the PCB, not sticking out the top. To avoid sharp solder spikes, consider trimming the legs flush before soldering. WS2812B Installation
  7. Solder the pin headers for the test and service buttons if you haven't done so already. As with the previous step, consider trimming the pins flush before soldering to avoid sharp solder spikes. WS2812B Installation
  8. Install the Raspberry Pi Pico. The fun part! Simply place it on the pin headers and solder each pin in place. WS2812B Installation
  9. If you didn't surface mount solder the WS2812B LEDs and opted for a strip, cut the strip to a length of 6 LEDs. You may need to trim the legs of the LEDs along the bottom of the board so the LED strip can sit flat and stick properly. Jump the 2 pads labelled "Strip Enable" with a blob of solder, and wire up the LED strip to the corresponding pads. Ensure you're soldering to the "DI" or "DIN" pin on the LED strip! If you solder to "DO" or "DOUT" then your LEDs will not light up. (Note: lengths longer than 6 LEDs will work but may exceed the standard USB 500mA current draw and will require changes to the firmware.)

You're done! Flash the firmware, install the bottom half of the case, and you're good to go.

Flashing the Firmware

Prebuilt PIUIO firmwares here!

Prebuilt HID gamepad/keyboard firmware here!

For the PIUIO firmware source, see the piuio-pico repository by 48productions. This firmware emulates a PIUIO board and can be used on Windows devices via IO2Key (helpful installation video by Nirvash) or on Linux via a custom kernel driver (installation instructions in the README).

Do not use this firmware on any hand controller to play the latest official game online! It is considered cheating. Your machine and piugame profile will be banned, and you yorself can be banned from official events. Using any aspect of this project for prohibitied play on officially supported games is not endorsed, encouraged, or supported. However, do feel free to use this firmware to build a proper dance pad for legitimate play.

If you plan to use this controller with simulators exclusively, see the HID gamepad/keyboard firmware linked above.

To install the firmware, plug in your Raspberry Pi Pico while holding the "BOOTSEL" button to put it in programming mode. It should show up as a USB mass storage device. Compile the firmware (if necessary) and copy the .uf2 file onto the Pico through the file explorer. It should automatically disconnect itself and restart. You're done!

FAQ

  • Can I make and sell these, or sell extras?
    • Go ahead! However, do make sure they're well built and thoroughly tested, and consider donating a few bucks if you can!
  • Does this work with official games?
    • Yes, however using a hand controller on any currently online and supported game (XX 20th Anniversary Edition and Phoenix at the time of writing) is considered cheating, especially during events. Hand controller play can be detected and you may get the game/machine banned or blacklisted alongside your piugame account, and you may also be banned from official events. Not worth the risk!
  • Can I make this without any LEDs to start with and add them later?
    • Mostly. There is one in-switch LED that won't be reachable once the Pico is soldered in. If you plan to add LEDs later on, either install sockets of some kind to account for this without needing to solder later, or install the Pico with male/female pin headers so you can remove it later to install LEDs. All RGB underglow LEDs can be soldered at any time without removing the Pico.
  • How do I make the underglow work?
    • If you're using this controller's PIUIO firmware with IO2Key on Windows for StepF2/StepP1/StepPrime/StepPXX, underglow lighting will not work. Base StepMania or Project OutFox support lighting but extra manual configuration will need to be done, which I haven't had a chance to try yet. Linux users running StepMania or Project OutFox can use the kernel driver linked in Flashing the Firmware for lighting support by editing Preferences.ini and editing the LightsDriver line to read LightsDriver=PIUIO_Leds. If you're using the gamepad firmware, underglow lighting will be on by default and does not react to the game.
  • Can I make this project USB C compatible somehow?
    • If you can find a Pico clone that uses USB C and is pin-compatible with the official Raspberry Pi Pico, you absolutely can. I can't provide official support for multiple boards though, otherwise this project would get really messy really fast.
  • Can I build one of these without a PCB?
    • Absolutely! Check out the "3D Prints" folder for 3D printable cases and plates. Be prepared to do a lot of tedious wire management and soldering, though! You'll also need to figure out how to mount the test and service buttons on your own.
  • Can I make a hotswappable PicoFX?
    • While there is no footprint for Kailh hotswap sockets or anything similar, you can technically use MillMax sockets. I wouldn't recommend it unless you really know what you're doing, though. It took me an hour to install the sockets alone, and I ruined three. This also makes LEDs complicated. Hotswap sockets for LEDs exist, but you could also try to solder surface mount LEDs to the through-hole pads if you want. I don't provide official support with this method but I do encourage you to get creative :) Maybe a future hardware revision will account for this.

Special Thanks

Thanks to

  • therathatter & 48productions (firmware things)
  • SpaghettiSnail (putting up with my KiCad woes)
  • BedrockSolid (KiCad and component sourcing advice)
  • Everyone else who supported and contributed to the project!