Voron Filament Runout Sensor — Best Mods and Setup Guide
Sensor Mod Klipper Electronics V2.4 Trident V0.2
A filament runout sensor is one of the most practical additions you can make to any Voron printer. It detects when filament has run out or broken, pauses the print at a known position, and waits for you to reload. Without one, a spool that empties mid-print means a failed print — hours of wasted time, wasted filament, and a potential nozzle clog. This guide covers every popular runout sensor mod for Voron printers, from simple mechanical switches to advanced smart sensors with filament detection features.
Last updated: May 2025. We compare mechanical, optical, and BTT smart sensor options. All pricing reflects China-direct sourcing via AliExpress or our mini-program. Installation difficulty ranges from easy to moderate depending on the sensor type and your printer's wiring configuration.
Why Add a Filament Runout Sensor?
The Voron ecosystem does not include a runout sensor in the standard BOM for any model. While you can print without one, the risk is significant. A single overnight print lasting 12+ hours has a non-trivial chance of running out of filament. Here is what a runout sensor gives you:
- Print recovery: The printer pauses, retracts slightly, and moves the toolhead to a safe park position. You swap spools, purge a small amount of filament, and resume — no visible layer line, no lost time.
- Broken filament detection: If the filament snaps in the extruder or PTFE tube, the sensor detects the absence of filament and pauses before the print head continues extruding air.
- Unattended printing: Run print jobs overnight or during the workday with confidence. A runout sensor is the single cheapest insurance against failed long prints.
- Filament type switching: With a runout sensor and a pause/resume macro, you can manually swap filament colours or materials at a specific layer height. This enables multi-colour single-extruder prints.
In short, a filament runout sensor is the highest-ROI upgrade you can make. For under $10, you eliminate the most common cause of failed long prints.
Sensor Types Compared
1. Mechanical Microswitch Sensor
The simplest design. A lever-actuated microswitch is depressed when filament is loaded. When the filament runs out, the lever springs back, opening or closing the circuit. These are reliable, cheap, and easy to wire.
Pros: Costs under $2, extremely reliable, no electronics required beyond the switch itself, works with all filament types including flexibles.
Cons: Requires a printed body and lever, adds mechanical resistance to filament path, can wear out after 50,000+ cycles (unlikely to be an issue for hobbyists).
China-direct cost: Microswitch $0.50-1.50 (10-pack on AliExpress), printed body $3-5 (pre-printed). Total: ~$4-7.
2. Optical Sensor
Uses an infrared LED and phototransistor pair. Filament passes through a slot between the emitter and detector. When filament is present, it blocks the beam. When filament runs out, the beam reaches the detector, triggering the sensor.
Pros: No mechanical wear, no resistance to filament path, compact, very fast response time.
Cons: Transparent filament (natural PETG, clear PLA) may not trigger optical sensors reliably. Requires a 5V supply and a pull-up resistor in most cases.
China-direct cost: Optical sensor module (PMS-003 or similar) $1.50-3, printed mount $2-4. Total: ~$4-7.
3. BTT Smart Filament Sensor (SFS 1.0 / 2.0)
BigTreeTech's Smart Filament Sensor combines a filament runout switch with a rotation encoder. The encoder measures filament movement — if the encoder stops turning but the extruder is commanded to move, the sensor detects a jam or slip. This is the most advanced option available.
Pros: Detects both runout AND jams/slips, includes a Bowden coupler for clean integration, LED status indicator, compact footprint.
Cons: Pricier than simple sensors, requires Klipper configuration for the encoder function, slightly larger than microswitch-only designs.
China-direct cost: BTT SFS 2.0 $8-12, mounting bracket $3-5. Total: ~$11-17.
Parts List — Mechanical Microswitch Sensor
This is the recommended build for most users. Simple, reliable, and under $7.
| Part | Quantity | China-Direct Price | Notes |
|---|---|---|---|
| Microswitch (3-pin, lever type) | 1 | $0.50-1.50 | SS-5GL or similar, buy 10-pack |
| Printed sensor body (ABS/ASA) | 1 set | $3-5 | STL from Voron User Mods |
| JST XH 2.54mm 3-pin connector | 1 | $0.50 | Pre-crimped or DIY |
| PTFE tube (4mm OD, 2mm ID) | 100mm | $0.50 | Scrap piece |
| M3 screws and nuts | 4 each | $0.50 | From your Voron hardware stash |
| Total | $5-10 |
For the BTT SFS 2.0 smart sensor, budget approximately $11-17 including the module and a printed bracket. The smart sensor includes its own Bowden coupler and LED indicator, so no additional parts are needed beyond wiring.
Compatibility by Voron Model
| Voron Model | Mounting Location | Recommended Sensor | Notes |
|---|---|---|---|
| V2.4 (all sizes) | Rear frame extrusion or side panel | Mechanical or SFS 2.0 | Plenty of frame space, easy wiring |
| Trident (all sizes) | Rear frame or top extrusion | Mechanical or SFS 2.0 | Similar mounting options to V2.4 |
| V0.2 | Top of the mini-StealthBurner or rear frame | Optical (very compact) | Limited space, optical sensor fits best |
| Switchwire | Side of the frame near spool holder | Mechanical | Easiest routing for Bowden-style printers |
| Legacy | Rear of the frame above the spool | Mechanical or Optical | Choose based on space available |
Installation Steps — Mechanical Microswitch Sensor
These instructions assume a V2.4 300mm or Trident. Adapt the mounting location as needed for your model.
Step 1: Print the Sensor Body
Download the STL from the Voron User Mods repository or Printables. Search for "Voron filament runout sensor" — there are dozens of designs. Look for one with:
- A microswitch pocket that fits your specific switch (SS-5GL is the most common)
- A 4mm OD PTFE tube press-fit or coupler mount
- M3 screw mounting holes spaced at 20mm (compatible with 2020 extrusion slot nuts)
- A filament guide that keeps the filament aligned with the switch lever
Print in ABS or ASA at 0.2mm layer height. Use 4 perimeters and 40% infill for strength. The lever arm needs to be stiff enough to spring back reliably.
Step 2: Assemble the Sensor
Insert the microswitch into the printed pocket. It should snap in with light pressure. If it is loose, use a dab of superglue on the bottom edge. Route a 100mm piece of PTFE tube through the sensor body so the filament path passes directly over the switch lever. The lever should be depressed when filament is loaded and released when filament exits. Secure the PTFE tube with a printed clip or a M3 screw clamp if your design has one.
Step 3: Mount the Sensor on the Frame
Slide two M3 T-nuts into the appropriate slot on your 2020 extrusion (rear vertical extrusion is typical for V2.4). Mount the sensor body using M3x8mm or M3x10mm screws. Orient the sensor so filament enters from the spool side and exits toward the extruder. The PTFE tube should have a smooth, low-angle curve from the spool to the sensor and from the sensor to the extruder.
Step 4: Wiring
The microswitch has three pins: COM (common), NO (normally open), and NC (normally closed). For a typical Klipper setup, use the NC configuration so the circuit is closed when filament is present (switch depressed). Wire as follows:
- COM to GND on your controller board
- NC (normally closed) to a free GPIO pin configured as an endstop with pull-up enabled
- NO is unused in this configuration
Use a JST XH 3-pin connector if your board uses those, or solder directly to the board header. Keep the wire run under 500mm to avoid signal noise. For a Trident or V2.4, route the wire along the existing cable chain or zip-tie it to the frame.
Klipper Configuration
Add the following to your printer.cfg. This example uses the NC (normally closed) wiring on pin PC14 — adjust the pin to match your board and available GPIO.
# Filament Runout Sensor
[filament_switch_sensor runout_sensor]
switch_pin: !PC14
pause_on_runout: True
runout_gcode:
{% raw %}
M117 Filament Runout
SAVE_GCODE_STATE NAME=runout_state
G91
G1 E-3 F300
G1 Z20 F600
G90
G1 X150 Y250 F6000
G91
G1 E-20 F300
G90
}{% endraw %}
insert_gcode:
{% raw %}
M117 Filament Loaded
RESTORE_GCODE_STATE NAME=runout_state
}{% endraw %}
The pause_on_runout: True setting tells Klipper to pause the print automatically. The runout_gcode section handles retracting filament, lifting the Z axis, and parking the toolhead. When you reload filament, the insert_gcode restores the previous state and resumes printing. You will need to manually send RESUME from the Mainsail or Fluidd interface after reloading.
BTT SFS 2.0 Klipper Config
If you are using the BTT Smart Filament Sensor v2.0, add the encoder section for jam detection:
[filament_motion_sensor SFS]
detection_length: 2.0
extruder: extruder
switch_pin: !PC14
encoder_pin: ^PD2
pause_on_runout: True
runout_gcode:
M117 Filament Runout or Jam
SAVE_GCODE_STATE NAME=runout_state
G91
G1 E-5 F300
G1 Z20 F600
G90
G1 X150 Y250 F6000
M109 S{params.TARGET}
insert_gcode:
M117 Filament Loaded
RESTORE_GCODE_STATE NAME=runout_state
The detection_length parameter sets how much filament must move through the sensor before it registers as loaded. 2.0mm is a good default. The encoder pin should be connected to the SFS module's encoder output. This setup detects both runout (no filament in the sensor) and jams (extruder is moving but the encoder is not turning).
Common Issues and Troubleshooting
- False runout triggers: Usually caused by a microswitch lever that is too sensitive to vibration. Add a 100nF capacitor across the switch terminals to debounce the signal. Alternatively, increase the Klipper endstop debounce setting with a minimum time of 100ms.
- Filament path too tight: If the sensor body puts a sharp bend in the filament path, it increases drag and can cause extrusion issues. Make sure the PTFE tube from spool to sensor and sensor to extruder has a smooth curve. Use a spool holder with bearings to reduce drag.
- Optical sensor not detecting transparent filament: Natural PETG, clear PLA, and translucent filaments can pass enough IR light to avoid triggering optical sensors. Switch to a mechanical sensor for these materials, or use an optical sensor with a phototransistor designed for visible light (red LED type).
- Wiring noise causing false positives: Route sensor wires away from stepper motor cables and heater wires. Twisted-pair wiring helps. If using a long cable run (over 1m), add a ferrite bead near the controller board.
- SFS encoder not working: The encoder wheel on the BTT SFS can get gummed up with filament dust over time. Clean it with isopropyl alcohol. Also verify the encoder pin assignment — it uses a different pin than the switch.
Difficulty Level
Mechanical microswitch sensor: Easy (1/5). No soldering required if you use pre-crimped connectors. The printed parts snap together. Wiring is two or three wires. Klipper config is a straightforward copy-paste. Expect 1-2 hours total including printing the parts.
Optical sensor: Easy (1/5). Similar to mechanical but requires wiring a 5V supply. Some designs use a PCB that needs light soldering.
BTT SFS 2.0: Moderate (2/5). The encoder adds complexity to the wiring and Klipper config. Expect 2-3 hours including calibration of the detection length parameter.
A filament runout sensor is the cheapest, most effective insurance against failed prints. For under $10, you gain the ability to run unattended prints overnight, detect broken filament immediately, and switch spools mid-print without visible layer lines. The mechanical microswitch design is the community standard for good reason — it is dead simple, costs almost nothing, and works with every filament type. Build one this weekend and you will never run a long print without one again.