Inspiration

What it does

How we built it

Inspiration

We wanted to make a game you can actually feel — not through a screen or a headset, but in your hand. Ping-pong was the perfect fit: fast, physical, all about timing. What if you could swing a real paddle at a ball that only exists on the wall, and feel the exact spot where it hit?

What it does

Edge Pong is a projected arcade ping-pong game. You swing a real paddle (or a mouse) at virtual balls, and when you connect, a smart paddle buzzes right where the ball struck — top-left, bottom-right, wherever. All the tracking, physics, and haptics run locally on the edge — no cloud, no headset. Miss your timing and the rally's over; land it and you score.

How we built it

  • Backend (Python): an authoritative game engine — fixed-step physics, swept collision so fast balls can't tunnel, a full rally system with serves and an AI opponent, scoring, and pose fusion that blends camera + IMU orientation using quaternions.
  • Frontend (Three.js + TypeScript): a 3D arena — table, net, paddle, opponent — driven over a WebSocket at 60 Hz, with sound and particles fired off the same impact events as the haptics.
  • Smart paddle (ESP32-C5): custom firmware streams motion over Wi-Fi and receives haptic commands, driving four vibration-motor quadrants through MOSFETs.
  • Haptics: four motor quadrants with bilinear interpolation, so the balance of the four motors encodes where on the paddle you hit.

Every physical piece also has a simulated stand-in — a fake camera and paddle feed the exact same pipeline — so the whole game was playable with a mouse long before the electronics were done.

Challenges we ran into

Honestly, most of the fight was hardware.

  • MOSFET wiring: our first motor spun the instant the battery connected, no code involved — a swapped Drain/Source, where the transistor's internal diode bypassed everything. Multimeter detective work to find it.
  • Power: the boost converter kept auto-shutting-off because the ESP32 didn't draw enough current. The fix — disabling Wi-Fi modem sleep — turned out to be exactly what we also needed for low-latency haptics.
  • Networking: with no home router, we ran the laptop as a hotspot. The paddle wouldn't connect until we forced it to 2.4 GHz; it kept landing on a flaky 5 GHz channel.
  • Feel: we measured the motor's stiction point (~18% duty), set the haptic floor just above it, and reworked the strength curve so even light hits land solid instead of fading to nothing.

What we learned

  • Your hand can't resolve 16 vibration zones on a paddle — 4 is plenty, and interpolation fills in the rest.
  • Quaternions beat pitch/yaw/roll for a swinging paddle: no gimbal lock, smooth blending.
  • "Fun over physically exact" — a slightly forgiving hit volume makes it feel responsive instead of broken.
  • Half of hardware is just measuring things with a multimeter before you trust them.

What's next

Wiring up the real camera + AprilTag tracking (the interfaces are already there), populating all the motors, and packing the electronics into the paddle handle for a proper self-contained controller.

Challenges we ran into

Accomplishments that we're proud of

What we learned

What's next for Edge Pong

Built With

Share this project:

Updates