Cruiser Pedals
3D printed fully functional rudder pedals for use in a flight simulation program for added realism.
Total time spent on this project as of the latest entry: 22 hours
June 2nd, 2025 [Introduction & Research] - 4.5 hours
Today marks the beginning of this project. I wanted to create something that I'd actually use more than once, and wanted to tie it into my current obsession with virtual planes. Before continuing with any research, I began thinking of specific aspects that I'd like to incorporate into this project. Those are: - Easily constructed by anyone with a 3D printer, screwdriver, and soldering iron - Fully compatible with modern flight simulation programs such as X-Plane 12 and Microsoft Flight Simulator (2020 release since I can't afford the 2024 release). - Sturdy and durable for a long lifetime
I began with researching what types of pedals are available for purchase, and what common design features they share. A few things that I noticed were similar on several models are: - Flat or slightly curved pedals to easily grip the feet - Raised walls on the sides/back of the pedals to prevent the feet from slipping off of the pedals - Mechanism (that kind of reminds me of the steering thing on the front wheels of a car) that allows the pedals to shift forward and backward according to user input, while keeping the input inverted between pedals - A relatively small base footprint, which does help keep the underneath of your desk uncrowded
I then wanted to research already available 3D-printable solutions. After looking through many different models, I found several that were similar to what I wanted to create. The list is: 3D Printed DIY Flight Simulator Pedals (Rudder & Brake) Using Arduino - Easy Project - Author: Danilo Vilardi - Link: https://www.youtube.com/watch?v=B3WRmVOTyvY Highlighted due to: - Simple construction - Mechanism used to attach potentiometers for downward brake pressure measurement
Valkyrie Rudder Pedals - Author: hotpretzel - Link: https://www.printables.com/model/32579-valkyrie-rudder-pedals Highlighted due to: - Usage of some metal/wooden parts for extra structural integrity - Base design
SIM Rudder Pedals V1 - Author: DIY Beyond 3D - Link: (https://makerworld.com/en/models/44430-sim-rudder-pedals-v1) - Highlighted due to: - Sturdy metal frame - Usage of gears throughout the whole assembly
Then began parts research. Almost all of the designs that I went over utilized potentiometers to measure the current position of the pedals/brakes. One of the most popular choices is this generic looking potentiometer that I'm sure you've seen if you have dabbled in hardware before, and is sold practically anywhere that sells hobbyist parts.
10K Linear Panel-Mount
- Price: $0.95 from Adafruit
- Claimed lifespan: 100,000 cycles
I remembered seeing something about rotary encoders having longer lifespans than potentiometers, and that would be ideal for the project goal of having a long-lasting device. Most rotary encoders have what are called detents (the little clicks that are made as the knob turns) however, which would cause issues for this project as we want smooth rotation. Luckily, detentless encoders exist and are not that much more expensive than normal rotary encoders. A common option for a part of this desription would be the EC12:
EC12 Detentless Rotary Encoder - Price: $1.51 from Mouser - Claimed lifespan: 30,000 cycles
So apparently in this case I was incorrect about the lifespan of encoders compared to potentiometers, and as such something like the unit from Adafruit above will be used (both for longevity and attainability). But what are potentiometers without a board to recieve their input and send it on to the target computer?
There are thousands of microcontroller boards that would fulfill the purpose that I need, but I want one that can easily be acquired by someone else trying to build this project. Ideally, the board should have: - Enough flash RAM to handle inputs smoothly (32-64 KB for extra breathing room) - A minimum of 3 analog inputs for the potentiometers - A method of communication over USB
Several boards from popular manufacturers fit the criteria for this project, so I decided to narrow it down to three different models, each with varying features:
Arduino UNO R4 Minima
- Price: $20 from Arduino
- Analog Inputs: 6
- RAM: 32 KB
Raspberry Pi Pico
- Price: $4 from SparkFun
- Analog Inputs: 3
- RAM: 264 KB
Raspberry Pi Pico 2
- Price: $5 from SparkFun
- Analog Inputs: 3
- RAM: 520 KB
After considering these three options, I ended up choosing the Raspberry Pi Pico 2, as it is both affordable and has plenty of memory for our use case. It also has three analog inputs, which was needed for the potentiometers, and plenty of digital I/O for possible additions later.
Alright, great! Now we've got the hardware and main design features laid out, so it's time to begin the CAD process.
I used the following models from the GrabCAD website as reference to design the 3D printed parts around: - 10K Rotary Potentiometer by Pierre Gleizes - Raspberry Pi Pico by Alexander Mandron
Starting with the pedals themselves, I measured my own foot and found it to be around 22cm long and 10cm wide. I plan to make the pedals around 20cm by 10cm as I feel this is a suitable size for most people's feet. I then sketched this area out in Autodesk Fusion (formerly Fusion 360), along with a rough sketch of the mechanism that will ensure the pedals stay facing the user while moving forward or backward.
After a while of planning, I began creating the main base and two pedal swivel points. The basic concept is that the center acts as a fixed point, and the two pedals rotate around the center. They use 6804 bearings to ensure smooth motion across everything, and will have two linkages connecting them together. The bases of the three were then mirrored onto the top to create a mostly-finished assembly, which is depicted in the screenshot below.
<
June 3rd, 2025 [Continuing CAD Design] - 1.75 hours
Good morning! Today I wanted to continue progress on the actual design of the pedals, starting with modification of the shafts to hold a standard M5 hex nut in order to increase the strength of the screw joint. I accomplished this by cutting a pocket in the shaft to hold the nut, and then a channel into the side so that the nut can be inserted.
I then realized that the shafts were actually too close to one another for the linkage that I wanted to use, as depicted below. I wanted the linkage to surround the bearing for more strength, but seeing as how the two bearings are really close together, this wouldn't be possible.
After fixing the spacing of the shafts, I then began sketching the linkages themselves. I aimed for an internal diameter of 32.2 mm to accomodate the bearings properly, and an outer diameter of 45 mm for more stability.
This is a basic outline of what the linkages will look like in the final product, highlighted in yellow. They may be a little thick, but I'm prioritizing function over form for now.
After that, I thickened the center of the linkages to hold the bearings closer to the exterior, in order to have them be better aligned and stay in place.
June 4th, 2025 [Continuing CAD Design] - 3.25 hours
Well, guess who didn't end up getting any more work done yesterday OR the start of today. If you guessed me, you're correct. Personally, I blame it on Deltarune releasing this morning. Anyways, I began the day's progress by planning out how I wanted the pedals to actually interface with the moving bases, and did so in a MS Paint drawing.
In order to be able to read a position from the potentiometers, they will be placed inside of the pedal assembly like so:
After modeling the two side panels of the pedal assembly, I began using references of a 6802 bearing to cut the correctly sized pockets and holes for the axle to protrude through.
I ended up changing the design slightly, in order to have the screw on end caps to the outside and the parts that will attach to the pedal itself on the inside.
June 6th, 2025 [Continuing CAD Design] - 3.75 hours
I didn't end up getting any work done on this project yesterday, due to being occupied with other things. Anyways, I began by sketching out how I wanted the pedals to swivel along the axis, and came up with the following. This pedal design should provide a smoothly rotating surface that won't drag or get stuck on the frame.
I also wanted to add a stopper to make sure that the pedal doesn't rotate fully vertical when not in use, also making the use of the device more comfortable overall. (stopper highlighted in red)
After making the pedal solid, I then worked on connecting it to the rotating shafts. The two red pieces below are the points which will connect to the pedal in order to firmly connect it to the rotation axis.
I took a break from the pedal design at this point to make a small mockup of the steering mechanism, to test that it actually worked. It is a 1/3 scale replica of the original, and will be printed and tested today.
After printing out and assembling the test, here is what it looks like:
And here is how the mechanism in the final version will work:
https://github.com/user-attachments/assets/b4e4ff72-1c32-40a3-b54a-28351c390ba7
I then worked on connecting the rotating axle to the potentiometer, and settled upon a mechanism that uses two identical gears to transfer the force from the pedal into the potentiometer, like so:
The original mechanism that was planned in the sketch wouldn't work due to space limits within the pedal assembly.
After connecting the potentiometer to the gear, I then made a mount to hold the potentiometer in place during use.
The mount screws to the base of the pedal assembly with an M3x40 screw and accompanying M3 hex nut.
June 9th, 2025 [Continuing CAD Design] - 1 hour
Well. It's been a few days, hasn't it? I decided it was time to actually connect the pedals to the moving axle, and sketched out a method of attachment that should allow for sturdy movement of the pedal. It uses M4x35 screws and M4 hex nuts to attack the pedal to the axle.
I then went about making the bottom of the pedal look a little better, by adding some chamfers:
Then, I made a screw-on foot holder, to make steering with the pedals easier and more comfortable:
Here is what the overall design looks like at the moment:
I hollowed out the center of the linkages, to reduce the amount of material required and speed up printing times.
June 12th, 2025 [Finishing CAD Design] - 1.75 hours
After attending the Zack Freedman AMA with Hack Club, I regained motivation to work on this project.
I started work today with adding the mechanism on the back that allows the rotation of the steering to be transferred to the potentiometer for measurement purposes, along with rounding off the non-used bases to save materials.
After that, I then added M5x16 screws paried with M5 hex nuts to hold the large red semicircle gear in place.
I then added shafts for the springs inside the pedals, which are 50mm in length, have a 0.3mm wire diameter, and 6mm outer diameter.
I then added a small mounting solution for the Pico, which should hold it in place well enough with some hot glue. I did it this way to make adding on to the device much more easy, as all of the GPIO is exposed and not blocked by the base.
After that, I made the base slightly taller to help the pedals not drag along the floor. Some adhesive rubber/silicone feet will be placed on the bottom, to keep the device in place.
It was at this point that I called the CAD design finished. A full BOM will be in order next, and then the code will follow after I build and can test the device.
June 15th, 2025 [Wiring and Coding] - 2 hours
Just kidding, that wasn't the final journal entry. There's still so much to be done for this project, starting with the actual electronics portion of the build. In order to have a good idea of how I wanted the wiring to look from a schematic standpoint, I used Wokwi to lay out and connect all the components digitally. Since the Pico and Pico 2 share the same layout, and the software does not have a Pico 2 model as of yet, I used the original board for the diagram.
Starting with the data pins of each potentiometer, I connected them to all three of the Pico's analog inputs as follows: - Left Brake - ADC2 (GP28/Pin 34) - Steering - ADC1 (GP27/Pin 32) - Right Brake - ADC0 (GP26/Pin 31)
(In this example, I used a different looking potentiometer module because the specific ones that I plan to use for this project were not available in the Wokwi simulator.)
After that, I then connected the VCC of all the potentiometers to the 3V3 output on the Pico, and all of the GND pins to GND on the Pico (duh).
In order to actually test this with real hardware, I assembled a one-potentiometer breadboard circuit using an Orpheus Pico and the B10K potentiometer model that I plan to use for the final build.
I began by creating a new PlatformIO project for the Pico, as that's what I'm used to using for projects like this. (added in commit #f6d3838)
After that, I then made a simple C++ program that will readout the value of the potentiometer every 0.5 seconds (500 milliseconds) and print it to the serial console for testing. It works quite well, and seems to be pretty accurate. (commit #7e03fb2)
I then wanted to work on actually emulating a joystick device through hardware, and researched libraries that would make this possible/easy for me. One that I found was PicoGamepad by RealRobots, which would allow the Pico to emulate a USB HID game controller device, which is what I want to do. It is meant for the Arduino IDE, but seeing as PlatformIO uses the same core, it should work.
I implemented the library by placing the PicoGamepad.h
file inside of the include/
directory, and then included it at the top of my code. (commit #baf10a3)
Following one of the examples included in the README for the library, I added all the required parameters for the library to function the way that I wanted it to, along with changing the delay inside of the loop()
to be 50ms instead of 500, for a much better experience. (commit #243d89d
Upon attempting to compile this code I was met with several errors, which were fixed by dragging the PicoGamepad.cpp
file into the src/
directory. (commit #750bbac)
When attempting to use the device as a controller in Microsoft Flight Simulator 2020, it actually works! I am honestly surprised at how easy this project has been programming-wise.
June 15th, 2025 [BOM, CAD Upload, and Coding] - 2 hours
I began today's work by uploading the BOM for the entire project, with estimated prices of everything you need to build the device (commit #4badbb7).
I then wanted to export all of the CAD files in both an editable .step
format and the 3D-printable .stl
format. This took me a while, as Fusion doesn't currently support bulk exporting, but I got it done after a bit (commit #e1c4f7a). I will release the editable files shortly, after I eat.
Here I am several hours later, without doing anything with the editable CAD files. I will get those uploaded soon, but not immediately. I decided to work on the code again, and add support for all three axes that the final device will have. I don't have the hardware to test it currently, but I still can make some simple changes. Instead of using the X, Y, and Z joystick axes built into the PicoGamepad library, I opted to use the 0, 1, and 2 generic axes, for no reason other than that I felt like it. (commit #2e807a6)
After uploading and testing the firmware in a flight simulator, it works properly as expected.
It was then time to get on with the .step
CAD files, don't think I forgot about those. I opted to export the entire assembly as one file, and also included the .f3z
format in case anyone using Fusion wanted better compatibility. (commit #4a1e17d)