Why build such a controller?
When I was younger, I was very fond of an Apple2 game called Sabotage, this is a very basic game but I still enjoy playing it from times to times.
To make this game more fun, I want to do what Nintendo did with the Wii : make an average game more interesting by using a special controller. I want to make a "physical" controller, something that requires a bit of strength and ample moves. I later learned this was more or less the definition of Extertainment or Exergaming and that Nintendo had released a bike controller in the 90's.
This controller should also work for games like Tetris and or FrozenBubble, etc.
I looked at similar projects that would involve "spinning a device" or more generally moving and I found one involving a unicycle! Too challenging for me ;-) Also, after developing my prototype, I found another project with a similar idea : Exercise machine as a usb controller
Alternate use for people suffering from cerebral palsy
Jomie from Hackaday suggested me to enter this project for the UCPLA Hackaday challenge. That is something I had not thought about, but it is true that for some people who struggle to do precise moves, a crank may be easier to interact with than a joystick. I would be happy if my project could be used in such a way.
Make existing retro games more fun with this controller!
I want to build at least 2 of those controllers so I can play versus games with friends. This project is also an excuse to learn new things such as designing a my own PCB, 3D printing and laser cutting.
I want to provide 2 ways of building such a controller, a simple one, for people who don't have access to a laser cuter and expensive boards, and a nicer one with higher range electronic and laser cut parts.
The goal is also to document this project enough so that it can be build by someone else and used by people suffering from cerebral palsy.
The technical details
Sabotage, the game I initially built this controller for, is played with D and F keys for left and right and any other key for fire. It means my device must be able to act as a keyboard, or more generally as a HID device, so I will be able to use it for other games.
How to act as a HID device? Some Arduino board can act as HID devices, but it is not always easy. For example if you want to use the Arduino Uno you need to reflash the Atmega8u2 to be detected as a HID device. Teensy boards are more appropriate for this task, and as a matter of fact I had a Teensy 3.1 lying around, so I used it for this project. It could also probably be done with a Teensy 2 or a STM32 blue Pill board which are much cheaper.
Then the other major part of the project is being able to read the position of a crank and feed it to the Teensy board.