Driver Station Custom Board

My team is looking to make a custom board for our driver station. I’m just wondering if you guys have any good recommendations with parts for creating a custom board/any pictures of your team’s driver station from previous years for inspiration/any tips you have in mind in creating a custom board.


Ah, my question has been answered so I’ll edit to reflect that. My team doesn’t use buttons on a board, rather just two controllers with a laptop in the middle. I’ll still link a picture of it later to maybe give some inspiration :slight_smile:

Our team has made custom boards for a few years now and they’re really pretty easy. You don’t need much more than a basic wood or plywood structure, plus some important components. Here are two pictures of our 2023 board:

The board itself is just a plywood plate with a wood-frame box on the button board end. It has a commercial laptop stand attached to the left side, with a large USB fan under it (to cool the laptop) and a USB/network hub ziptied on at the top left to provide a network port off the laptop and enough USB A ports. You can see the XBox controller that the driver uses under the stand.

There’s a small monitor mounted on an adjustable monitor arm at the back center so the driver can have the drive camera/Limelight feed in view while driving and not cluttering up the laptop screen and obscuring the driver’s station interface.

The button board on the right is the operator’s console. It has a polycarb face plate velcroed on the top of the box, drilled for the buttons and concealing the other works of the board: a three-socket extension cord to plug into power (for the laptop and monitor), the laptop and monitor power supplies, and the board that runs the buttons. This last is the key. It’s an I-Pac4 button interface board from Ultimarc that’s used for arcade systems. It attaches to the laptop by USB and can emulate both game controller and keyboard inputs. It allows the buttons to be assigned pretty much any way the programmers want them to be. The buttons themselve also come from Ultimarc.

As you can see from the closeup shot of the button board, this year we had the automatic functions of the arm/end effector programmed for the top buttons, which the bottom buttons (corresponding to the grid positions) being the auto position and place determiners. The operator can push a position button on the grid, then the Place button and the robot would auto drive and place at that position. The pick-up buttons work much the same way, but only the loading station and chute buttons also auto position (the floor pickup depends on the driver). The Kill button terminates an auto function if something goes wrong and the toggle mode button switches between cone and cube positions on the end effector.

The I-Pac4 can control up to 56 buttons, so it’s great for just about any kind of control you want to attempt. The only real limit is what you’re programmers can think up and code.


Awesome example! I’m DYING to know what the KILL button does??? I hoping it executes a kill -9 on the Rio… :slight_smile:

what’s the diameter of those buttons?

The Kill button terminates other buttons’ auto functions (i.e., stops the robot from doing the auto routine if it’s become problematic.) We actually had to use it this year when the end effector got caught in the chute during an intake run.


The large buttons at the top are 1 1/8" holes, the small grid buttons are 5/8" holes. The buttons themselves (the part that moves) are 1" and 1/2" in diameter. We actually cut the face plate on our CNC this year, which made distributing the grid pattern much more even and prevented any cracking from over-zealous drilling.

with a little fiddling, an elgato stream deck can make a pretty good solution

We used this keypad as a node selector controller for our operator. We used custom Pi Pico firmware to make it a game controller instead of a keypad (link available upon interest)


How did you handle 56 buttons from a coding standpoint? The DS only supports up to 32 buttons per HID device

From what I understand from my programmers, you treat it as a keyboard. You’ll notice that our board from this year has 33 buttons, so it can be done. Ultimarc has excellent documentation for the I-Pac series of boards which pretty much explains how to make them work with almost any PC interface and software.

If it’s treated as a keyboard, how do you transfer the input to the robot? The DS doesn’t support keyboards out of the box

I could imagine using joystick axes as multiple inputs-- the DS supports resolutions to at least 2 decimal places as far as I remember, which you could fit 6 bits inside of (+sign bit).

You’d have to implement your encoding in both your robot code and your control board, but that gets you ~50 devices supported. If I’m wrong and joystick resolution is closer to 4 decimal places, that could be many hundreds of devices supported.

1 Like

Thanks for covering this for me. I had to ask my programmers and this is basically what they said.

Haha this is exactly what we did, rhe axis value is 8 bits


A few years ago we had a ton of buttons on our control panel, but we were using an Arduino due and we simply had it emulate 2 joysticks instead of 1.

1 Like

We used this kit for our main boards and buttons, plus a couple extra switches and dials. We put it in a 3D printed case with replaceable top plates so that we could change our layout without too much work. It registered as two USB gamepads that we read from as normal.


I’d recommend an Xbox Adaptive controller as the basis for a custom control panel. It’s designed for nearly this exact function, is extremely rugged, and is simple to use. Here’s some details on how we’ve used it for the past several years:

We built a custom operator control panel using an Arduino Leonardo programmed to behave as a standard USB HID joystick. We opted to use an Arduino instead of just an I-PAC because we wanted to include an analog joystick.

We iterated a few times to design the ideal button layout for the game functions the drive team wanted to have. The orange toggle in the center places the robot into “cone” or “cube” mode, which not only sets the LEDs on the robot to signal the HP with which game piece to load, but also alters the arm and intake set points to handle the different game pieces.

The white and black switches set the arm to different presets for intake and scoring. The green button is intake and red is score. The arrow toggles and the analog joystick are overrides for the arm position.

The top panel was laser-cut 1/8" plywood with a thin wood veneer applied to make the design. We wanted to use team colors, but also theme the controller to the Charged Up game. On top of the veneer is a thin clear protective sheet of acrylic, also laser cut.

For simplicity, we used the wiring harness that came with an I-PAC kit, as well as a “servo shield” to simplify the connections to the Arduino. All connectors were secured with a generous application of hot glue to keep them from vibrating loose.