Or "How I learned what iterative design was by bruteforcing my way through improvments"
When I was growing up, I was fascinated by the works of BenHeck, a hacker/modder that was always finding new ways to cram one thing into another. My favorite projects of his were his one-handed controllers, though. I thought it was extremely cool to modify an exisiting controller (at the time they were XBOX 360), and make it so people with disabilities could play games more easily. After years of tinkering, breaking stuff, and learning a lot along the way, I decided that I also wanted to try and build some accessibilty devices. This is a timeline of my efforts and their evolutions.
V1 was interesting because it was the first time I'd ever designed a circuit board. Judging by the random pieces of wire that acted as jumpers, it's obvious that I still had a lot to learn.
The idea was to connect a Wii Nunchuck to the board, then connect the Arduino's USB Micro port to the computer or a Nintendo Switch. You would move with the joystick, but if you held down C, the joystick became your face buttons (left for Y, right for A, etc), and if you held down Z, you got your triggers. Holding both would give you your DPAD, and some gestures would fill out the remaining buttons.
The problem with the Nunchuck approach was that it still didn't allow for a right stick. So you could only play stuff like Pokemon or various NES/SNES games on the Virtual Console.
This is also when I'd started experimenting with using thick heat-shrink tubing for a case as I hadn't figured out 3D printing yet.
Version 3 was interesting because I realized I could stack components on top of each other to make things smaller, but also thicker. I also switched to using an actual Wii Extension Port instead of the little stick-looking things you'd seen in previous version.
The little toggle switch was so you could flip back and forth between the left stick being the one controlled by the Nunchuck and the right stick.
This idea was okay, but it messed up because having to stop midway through a game to flip a switch to aim was a terrible idea in reality.
Here's where things start to get interesting. This version was an attempt to build a controller from scratch, instead of using an existing controller and modifying it.
The same functions are there so you can swap back and forth, but I added more buttons so there wouldn't need to be as many "SHIFT" functions.
The biggest change was the addition of an MPU6050 accelerometer/gyroscope for better motion control. I messed the idea some here, but it didn't really take off until Version 5
This was a huge leap forward in a lot of ways. Now, there were more dedicated buttons, and I figured out the "one stick" problem:
I'd just use motion controls!
The analog stick was used as the right stick so your thumb could aim, control the camera, and stuff. If you wanted to move forward, you'd tilt the entire controller back like you were pulling up on a plane. This seemed to be a much more comfortable motion as opposed to pushing forward. You could run forward just by lifting the controller up.
I managed to play a lot of Skyrim with this one and even some Fortnite!
This marked the beginning of things actually being more viable.
Version 6 used two analog sticks sandwiched on top of each other so your thumb moved the left stick and your index finger moved the right stick.
One the back was a five-way switch that could be used as your DPAD.
This was also the first one that I'd built that was designed to sit on its side, such as a table, chair arm, or lap so that it was ambidextrous and didn't need a wrist strap.
Version 8 was also designed to sit on its side to be ambidextrous.
This was also the first version where I started using keyboard switches instead of the loud, clicky tactile buttons. This meant I could customize the keycaps further too and arrange things a little better.
I abandoned the five-way switch because it ate up five pins on the Arduino. By using a third analog stick that acted as your DPAD, I was able to free up two more pins.
If you'll notice, everything also has a dedicated button, except for "HOME" and "Capture". This was because I ran out of pins on the Arduino Pro Micro, and was using every single pin available. I hadn't learned about pin expanders yet, so I thought I'd peaked.
I may have thought I'd peaked, but that's usually when you realize you've been doing something weird all along.
After discovering the GP2040-CE firmware, I stopped using Arduinos and started using the Raspberry Pi Pico. Not only did it have more features, it had a bunch more pins, so everything could have a dedicated button.
I maintained the two sticks on top of each other, but I absolutely hated putting them together because I had to very carefully remove the 90 degree pins from the breakout board, then replace them with vertical ones. This ate up a bunch of time, but also was prone to ruining boards when a solder pad came loose.
Some had also asked to use different sticks as the PS2 style sticks "max out" their readings much earlier than they should.
This ended up being the granddaddy of them all.
It had a dedicated button for everything, including the function button for the GP2040-CE firmware.
It was ambidextrous.
You could customize button layouts (which is why the caps switched to blank).
The sticks were replaced with the type that were inside of Switch joycons, so they didn't have to be resoldered, didn't damage nearly as easily, decreased the profile of the controller for storage and transport, plus they got appropriate readings.
You could also use it with a ton of different systems, depending on what adapter you had, but a bunch of stuff worked right out of the box.
It also had a 1/4" threaded mount so you could use it with a variety things, such as chair mounts, tripods, and more.
While I think this design turned out great and was well-received, I'm curious to see if I'll have a random epiphany one day and come up with another revision.
Regardless, thanks for reading through and going on this trip down memory lane!
-Cody