Summary

A prototype where multiple suspended elements are independently raised and lowered to create flowing, wave-like motion. Synchronized movement is driven by simple mathematical patterns running directly on the controller. Mechanically, the system uses compact winches built from off-the-shelf spools and couplers mounted to NEMA17 motors. Electrically, the ESP32 runs the choreography directly using the AccelStepper library and drives TMC2209 drivers over STEP/DIR.

Features & Highlights

Precise, quiet motion: NEMA 17 stepper motors with TMC2209 drivers provide smooth actuation and low audible noise.
Onboard choreography: Animation (sine waves with phase offsets) runs on the ESP32 using AccelStepper library.
Simple winch design: The winch uses common plastic spools and a shaft coupler — no custom 3D printing required.

IO Diagram

[ESP32 (Processor)] ---> (STEP/DIR) ---> [5x TMC2209 (Motor Driver)] ---> (Phase Current) ---> [5x NEMA17 Stepper Motors (Actuators)]

Core Hardware & Bill of Materials

ESP32-DevKitC-32E (controller)
TMC2209 stepper drivers (one per motor)
NEMA 17 stepper motors (one per winch)
12 V power supply (Mean Well LRS-100-12 recommended)
Motor shaft coupler (5 mm flange coupling)
Plastic spool (2.64” or similar) used as the drum
Braided fishing line (low-stretch) and small eye hooks for attachment

Refer to the GitHub BOM for product links and quantities.

Wiring Summary

Motor power (12 V) → VMOT on every TMC2209.
Logic power (3.3–5 V) → VIO on each driver (from ESP32 5V or regulated 5V).
Common ground: Connect power supply ground and ESP32 ground — crucial.
Step/Dir: ESP32 GPIO pins to each TMC2209 STEP and DIR pins (pin mapping provided in the repo / .ino).
Motor coils: Connect each motor’s four wires to A1/A2/B1/B2 on its driver.

Example pin mapping (from the prototype .ino):

Motor 1: STEP -> GPIO33, DIR -> GPIO32  
Motor 2: STEP -> GPIO26, DIR -> GPIO25  
Motor 3: STEP -> GPIO21, DIR -> GPIO22  
Motor 4: STEP -> GPIO16, DIR -> GPIO17  
Motor 5: STEP -> GPIO2,  DIR -> GPIO4

Assembly & Usage

  1. Mechanically mount the spool to the NEMA17 shaft using the coupler and secure with M3 screws. Tie line to the spool and attach the element (wooden ball) with an eye hook.
  2. Wire all TMC2209 drivers to the common 12 V supply and connect their STEP/DIR pins to the ESP32 as per pin map. Connect ESP32 ground to the 12 V supply ground.
  3. Configure driver current limits and microstepping on the TMC2209 per motor torque needs.
  4. Load the .ino file (Arduino IDE, ESP32 board manager installed) and upload to the ESP32.
  5. On power-up the firmware does a short settling routine, then runs the continuous sine-wave choreography.

Firmware & Algorithm Notes

  • The sketch uses AccelStepper to schedule non-blocking, concurrent motion across motors.
  • Motion is computed as phase-offset sine functions so each winch moves with a programmable amplitude, frequency, and phase.
  • The controller implements a small startup settle routine and supports runtime parameter tuning via constants in the sketch.

Tips

Power is non-negotiable. Use a supply with headroom (current rating) and decoupling caps near driver power pins.
Quiet drivers matter. The TMC2209 in stealth mode is noticeably quieter and smoother than basic stepper drivers.
Test in isolation. Validate each motor/driver pair before wiring the whole bank — it saves time debugging.

Resources

GitHub Repository

  • The full Arduino .ino firmware (with pin definitions and motion parameters)
  • Wiring photos and diagrams
  • Winch mechanism images and the per-winch BOM