05 — EMBEDDED · 2026
Golf Cart Modernization
A 2019 golf cart, rebuilt: lithium power, a relay ignition, a GPS speedometer, an aftermarket shifter, WLED lighting and printed speaker pods.
- Built
- A full modernization of a 2019 E-Z-GO RXV: power, ignition, gauges, shifter, lighting and sound.
- Stack
- Lithium battery pack, relays, an ESP32-S3 with a round display and GPS, WLED, and Blender plus Bambu printers for the printed parts.
- State
- On the cart and driving. The printed parts keep getting better.
IN USE · UPDATED 2 OCT 2026
Lithium, ignition, speedometer, shifter, lights and speaker pods are all on the cart.
Carter Barnes · cloud engineer, federal Azure · Contact








What it is
A 2019 E-Z-GO RXV golf cart, brought up to date. It started with printing a few parts for the dash and turned into rebuilding most of what makes the cart go: the batteries, the ignition, the gauges, the shifter, the lights and the sound.
Nobody publishes drawings for a 2019 cart, so the printed parts start from the real thing: a phone scan where I can get one, calipers and a traced outline where I can't. Then model, print, fit, repeat.
















How it works
- Power
- The original lead-acid deep-cycle batteries came out and a lithium pack went in.
- Ignition
- Rebuilt from scratch around relays, run from the key switch and controls on a new printed switch panel.
- Speedometer
- A GPS speedometer on a 2.1-inch round display, driven by an ESP32-S3 in a printed dash pod. Its firmware updates over Wi-Fi.
- Shifter
- An aftermarket drive selector in place of the factory one. Figuring out how it worked took two of them; more on that below.
- Lighting
- LEDs run through WLED, so the color and effects change from a phone.
- Speaker pods
- A pair of speaker pods in the kick panels, built from a Scaniverse scan of the footwell. v14 printed and fitted on 22 Aug 2026; v16 rounds the outline without moving anything that fits.
- Printed dash
- The dash pod is traced from a photo of the factory opening and scaled to my own measurements. The switch panel is a hollow pod with a 15° face on the factory four-screw pattern, printed as one piece.
- Still on the bench
- A power-distribution tray for the front harness, designed and waiting on two measurements off the cart, and a printed knee guard over a sharp steering-column clamp.








What I learned
- 01
Once a fit surface fits, it is frozen
The speaker pod's v14 fitted the cart. Every version since is held to it: nothing more than 18 mm in from the trimmed edge may move at all, and where the rim does move, outward motion is capped at 0.25 mm. The part can shrink into clearance but never grow into the cart. Improvements happen everywhere except the part that already works.
- 02
Verify booleans by volume
On the knee guard, an exact boolean cut finished without an error and changed nothing. On the switch panel, another one silently inverted and added 783,700 mm³ instead of removing it, and the panel shipped solid through four versions while every mesh check read clean. Booleans now go through trimesh with the manifold engine, and volume against an analytic prediction is the only number that tells you a boolean did anything.
- 03
Trace the real part when the drawing contradicts itself
The first dash pod was a symmetric oval drawn from a diagram whose own numbers conflicted. It was rejected on sight, because the real part is not symmetric. v2 traces the real asymmetric outline from a photo, scaled to my own tape measurements, and its print fit the opening.








Decisions
- 01
Never cut the cart
The tray waits on two numbers, a depth and a width off the cart. The answer is agreed in advance: above 220 mm it prints as designed, 195 to 220 gets a squeeze, below 195 it is re-proportioned. Cutting the back panel would buy six inches, and it is off the table.








What went wrong
- 01
The first shifter didn't make it
Working out how the aftermarket shifter switched cost me the first one: I took it apart past the point of putting it back together. I bought a second, and that one is in the cart.
- 02
The display didn't fit the first two dash pods
The first print fitted the dash opening and its buttons passed, but the display board was bigger than its 58 mm bore. The next print would not seat the display either: its tab hit the touch-button trays. v6 turns the tab up into a notch in the collar and tightens the bore so the notch locks rotation.
Talk about this








