Instead of seeding EMA with first reading after stabilization, now
continuously update EMA during the 500ms stabilization window. This
ensures EMA represents normal running current rather than potentially
high stall current if motor hits end stop immediately.
Freeze EMA updates when any spike candidate is detected (delta > threshold),
not just after stall is confirmed. This prevents EMA from rising to meet
the spike before the confirmation time elapses.
- Use exponential moving average (EMA) to track normal running current
- Detect stall when current spikes above average by STALL_DELTA_THRESHOLD (2.0A)
- Add stabilization period (500ms) after motor start to let EMA settle
- Stall confirmation requires spike to persist for STALL_CONFIRM_MS (100ms)
- EMA stops updating during stall to prevent threshold creep
- Removes dependency on absolute current threshold that varied with speed
- Add MIN_PWM_PERCENT (20%) to ensure motor starts reliably
- Add CURRENT_CALIBRATION factor (0.33) for accurate current readings
- Add stall-based return option for pingpong mode (returns on stall instead of time)
- Update stall detection: 7A threshold, 1000ms confirm time
- Add DISABLE_STALL_DETECT config option
- Keep last speed setting when motor stops (UI improvement)
- Update webserver UI with 'Return on stall only' checkbox
- Add pingpong oscillation mode that alternates motor direction
- Settings: base speed (10-100%), time before return (0.5-10s)
- Randomness controls for both speed (0-50%) and time (0-50%)
- Web UI with sliders and start/stop buttons
- API endpoints: /pingpong/start and /pingpong/stop
- Real-time status polling shows pingpong active state
- Adjust stall current threshold to 4A and detection time to 2500ms
- Add comprehensive README with hardware specs, wiring diagrams
- Include current sensing circuit documentation and math
- Improve motor and webserver implementations
- Implement MotorController class with PWM speed control (0-100%)
- Add bidirectional control (forward/reverse) via LEDC PWM at 20kHz
- Include optional current sensing and stall detection
- Create responsive web UI with speed slider and direction buttons
- Configure WiFi with static IP (10.81.2.185)
- Use built-in WebServer library for ESP32 Arduino 3.x compatibility