I had the Problem that my Filament ran out because it did. That was very bad because i was in a 4 hour print and it failed like 90 percent trough the print. So i looked for runout sensors and i quickly came to the conclusion to make my own.
Needed hardware:
1x M10 Bowden Tube coupler
1x Microswitch (The same kind of the Voron Endstops)
3x Cables 15cm long with crimped connectors
1x Standard Voron 0.1 rear Foot
Assembly:
2. If your Microswitch looks like this: You need to make the Contacts smaller to fit our Connectors.
3. Squeeze the contacts with Pliers as shown and cut the Lever shorter so its flush with the Housing of the switch.
4. It should look like this:
5. Now we are going to cut a Bowden Tube in half so it looks like this:
(cut segment should be about 20mm long)
6. Insert the Microswitch into the part facing as shown.
7. Now we are inserting the Bowden Tube with the opened side to the top like this:
8. Push it so far in that the complete Microwsitch is covered with the cut section of it.
9. After you have done al of this you can go to the individuel wiring Process. You need to connect all the Contacts.
For the Skr mini e3 v2 (my mcu) the right pin of the switch goes to 5v at E0 Stop Header. The middle pin goes to GND and th left pin goes to PC15 or Signal.
After this it can look like this:
10. The Software part is pretty easy. I give you my script for your printer.cfg (works on skr mini e3 v2) file.
After you have done that your Printer will now Pause when Filament runs out! Thats what you wanted right?
#####################################################################
# Filament Runout Sensor
#####################################################################
[filament_switch_sensor runout]
## When set to True, a PAUSE will execute immediately after a runout
## is detected. Note that if pause_on_runout is False and the
## runout_gcode is omitted then runout detection is disabled. Default
## is True.
pause_on_runout: TRUE
runout_gcode:
{action_respond_info("RUNOUT: Filament runout")}
PAUSE
insert_gcode: {action_respond_info("RUNOUT: Filament inserted")}
## The minimum amount of time in seconds to delay between events.
## Events triggered during this time period will be silently
## ignored. The default is 3 seconds.
event_delay: 3.0
## The amount of time to delay, in seconds, between the pause command
## dispatch and execution of the runout_gcode. It may be useful to
## increase this delay if OctoPrint exhibits strange pause behavior.
## Default is 0.5 seconds.
pause_delay: 0.5
## XYE mcu E0DET
switch_pin: ^!PC15
[gcode_macro SET_FILAMENT_SENSOR]
description: Sets the filament sensor on/off and save value to file
rename_existing: SET_FILAMENT_SENSOR_BASE
gcode:
{% if printer.save_variables.variables.filament_sensor is not defined %}
{% set filament_sensor = {params.SENSOR|string: params.ENABLE|int} %}
{% else %}
{% set filament_sensor = printer.save_variables.variables.filament_sensor %}
{% set _dummy = filament_sensor.update({params.SENSOR|string: params.ENABLE|int}) %}
{% endif %}
SET_FILAMENT_SENSOR_BASE SENSOR={params.SENSOR} ENABLE={params.ENABLE}
SAVE_VARIABLE VARIABLE=filament_sensor VALUE="{filament_sensor}"
[gcode_macro _RESTORE_FILAMENT_SENSOR]
description: Restore the filament sensor on/off state at klipper start
gcode:
{% if printer.save_variables.variables.filament_sensor is defined %}
{% for sensor in printer.save_variables.variables.filament_sensor %}
SET_FILAMENT_SENSOR_BASE SENSOR={sensor} ENABLE={printer.save_variables.variables.filament_sensor[sensor]}
{% endfor %}
{% endif %}
[gcode_macro M600]
description: Filament change
gcode: PAUSE Y=10 ; everything needed is defined there
The author marked this model as their own original creation.