Multiple custom PCBs for specially designed arduino based arcade stick

Remote Full-time
I have been programming my own arcade stick style videogame controller using an Arduino Leonardo. My code successfully functions as intended testing each of the parts in isolation, now all that's left is to put it all together so I can test everything at once.

What's special about my design is that it incorporates a simultaneous analog and digital arcade lever. By using a Ginfull hall-effect thumbstick module, with a custom designed arcade balltop style stickcap, that is designed to actuate 4 clicky mechanical keyboard switches. In addition a female PS/2 port is also connected directly to the Arduino, allowing an arcade style PS/2 trackball to be connected and function primarily as the right analog stick (though all the outputs are remap-able with toggle switches), for more precise mouse-like movement in first-person games.

There are 8 primary action buttons arranged in a Viewlix style layout, as well as a row of 10 function keys for toggling things like turbo, auto-holding buttons down, and rebinding, as well as the Start and Select buttons. To the left of the lever is a set of 4 arrow keys which default as the d-pad, and 2 adjacent keys akin to shift and Space-bar in position. Surrounding the trackball on 4 corners are a set of keyswitches designed to be easier to reach while aiming with the trackball. In total there are 33 keyboard switches, the 4 for the lever are clicky, and the rest are all linear. the 4 clicky switches must be mounted perpendicular to the surface of the device, facing inward toward the analog stick.

To be able to fit this many switches I have connected 2 PCF8575 GPIO expansion modules to the Leonardo, each at a different I2C address

I have already tried putting everything together at once myself using a breadboard, but the noise is interfering with the analog stick signal.

Bottom line is I already have all the parts, and am willing to handle getting these PCBs fabricated on my own. the only thing I'm looking for here is for someone to design all the files for me so that I can more easily put it all together.

Now this device is pretty big, imagine a box that sits on your lap. where you let your wrists rest naturally over top of it. So I think the best approach going forward will be to design several PCBs split up and placed across the underside of the top panel of the chassis to keep manufacturing costs down

1 for the cluster of arrow keys

2 single switch PCBs for the shift and Space-bar keys

1 row of 10 function keys for all the extra features and customization options I've added.

1 for the 8 button Viewlix layout cluster ( I say button but again to be clear these are mechanical keyboard switches with 30 mm arcade button style keycaps)

2 for each pair of the 4 corner switches around the trackball. 1 for the top 2, and one for the bottom 2

That's 7 PCBS

Plus one "mainboard" PCB that must connect everything together. Here is where I expect to be able to:

Snap in the Arduino Leonardo and have its power, and GND lines split up appropriately, as well as its SDA and SCL lines fed into the expansion modules

Snap in the PCF8575 expansion modules. Note I will be soldering the pin headers on these upside-down. So that i will be able to snap the modules in on top of the board and still clearly see each of the pin labels.

And finally this is also where I will connect my PS/2 port. It must be fed 3.3v power from the Leonardo to prevent interference with the analog stick and PCF8575 GPIO expansion modules. I am currently using a breakout board with screw terminals https://tinyurl.com/bt84sehf, but I think throughholes for soldering a bare port would be acceptable. As long as CLK goes straight to the Arduino on pin 7, and DAT goes to pin 8, on the screw-terminal breakout those are pins "6" and "2" for CLK and DAT. Everything else as far as I can tell should share a common GND with the Arduino (GND on the PS/2 breakout is pin 4)

One quick note on pin-outs, as I've said before, the PS/2 port will be powered from the 3v3 line of the Arduino Leonardo (pin "3" of my screw terminal breakout), while everything else such as the analog stick and expansion modules can be powered from 5v. No external power supply is used, only the Arduino Leonardo's mini usb cable is used for power. The pins labelled less than 100 (10-13, 7 and 8) correspond to the GPIO pins directly available on the Leonardo itself. The pins over 100 correspond to the first PCF8575 GPIO expansion module on I2C address 0x20. The pins over 200 correspond to the pins on the second module at I2C address 0x24. These are the modules I'm using https://www.amazon.com/ACEIRMC-PCF8575-Expander-Extension-Arduino/dp/B0B3TG6FLF'th=1

and note that for pins labelled P10-P17, in my code I have found that these actually correspond to pins 108-115 for the module on address 0x20 and 208-215 on the module at address 0x24 respectively.

The circular hole on the left represents where the analog stick goes. I'm using this module https://tinyurl.com/ymez7ojw, with this breakout pcb https://tinyurl.com/yv2y2wt7, the reason pin 108 is floating in the middle of this hole is because that pin is used for the L3 button, which I would like to have correspond to the clicking of the analog stick's internal tact switch, making it effectively the 33rd switch, counting all the rest alone nets only 32. The 4 pins surrounding it are the clicky lever switches. And that big square hole on the right represents where the ball of the PS/2 trackball will poke through so the user can spin it while the rest of it sits underneath, I will likely have it replaced with a circular hole later at some point but that's beyond the scope of this post which is just for those 8 PCBs. Which again only really need to function as wiring. The only component I might want built into the boards would be the hotswapable MX profile keyswitch sockets (something like these https://tinyurl.com/vcj8ufdd) but I probably want to solder those myself.

Apply Now

Apply Now
Apply Now

Similar Opportunities

Experienced Registered Behavior Technician for In-Home ABA Therapy - Atlanta, GA

Remote Full-time

Immediate Hiring: Experienced Registered Behavioral Technician (RBT) for Clinic-Based ABA Therapy Services

Remote Full-time

Experienced Registered Behavioral Technician (RBT) - ABA Therapy for Children with Autism Spectrum Disorder

Remote Full-time

Experienced Registered Nurse - Telehealth: Providing Remote Care Coordination and Patient Support

Remote Full-time

Experienced Substitute Teacher for Riverside County Schools - Join Scoot Education's Innovative Team

Remote Full-time

Experienced Substitute Teacher for San Bernardino County - Flexible Schedules & Competitive Pay

Remote Full-time

Experienced School Year Instructional Coach for High-Dosage Tutoring Programs in Edgewater Park, NJ

Remote Full-time

Experienced School Year Tutor for K-8 Students in Math and Literacy - Mickleton, NJ

Remote Full-time

Experienced Secondary Social Studies Teacher for Kansas - Flexible Hybrid Remote Arrangement

Remote Full-time

USPS Office Helper

Remote Full-time

Manager, Strategy & Operations, Global Medical Affairs Oncology

Remote Full-time

Regional Quality Manager

Remote Full-time

Medicaid Audit and Compliance Specialist (Full-time, Remote)

Remote Full-time

Immediately Need Teacher: English Language Development, High School - Madison Park Academy Upper Campus Middle-High School in Oakland, CA

Remote Full-time

​​Government Affairs Intern​

Remote Full-time

Remote Sales - No Experience Required

Remote Full-time

Sr. Director, Renewals & Customer Success - Enterprise (EMEA & APJ)

Remote Full-time

Supply Chain Sourcing Analyst

Remote Full-time

Hybrid Night Warehouse Worker – Coca-Cola Bottling of Alaska

Remote Full-time

Lien Resolution Manager - Mass Tort - MUST HAVE PARALEGAL EXPERIENCE - 100% Remote!

Remote Full-time
← Back to Home