Description
Ever had a spool of filament run out mid-print? If you're lucky, you knew you were going to run out and had to sit there waiting for it to happen, so that you could swap in a new spool. If you're unlucky, it ran out without you knowing about it - and now you've got half a print that you don't really know what to do with. Either way, it's not much fun.
That's where these sensors come in! These sensors allow your printer to detect when it has run out of filament so that it can pause and wait for you to swap over to a new spool. Mechanically, they're simply a microswitch inside a plastic housing, with a channel to feed your filament through. Electrically, they hook up like any endstop would - with the included cable, they plug straight into most common control boards like RAMPS, RUMBA, and so on. With a little bit of firmware configuration, you'll have a printer that pauses and waits for you whenever it runs out of filament. Perfect!
These sensors are designed to be easy to get up and running. They come with a 100cm cable that's pluggable on both ends, and will hook straight up to any of the endstop channels on most common control boards. There are two mounting holes in each sensor, so you can fasten it in place easily (check the images for mounting dimensions).
We're carrying these sensors in two different sizes - one to suit 1.75mm filament, and one to suit 3mm filament. The only difference is the size of the channel for the filament.
Marlin Firmware Setup
Before setting up the firmware, you need to know what pin you've got the sensor connected to. We're using the Z_MAX_PIN here - which on RAMPS is pin 19, and on RUMBA+ is pin 32. For other boards, you should check the pins.h file for the board you're using. You can use any spare digital pin you've got access to - we just recommend using an endstop pin because that makes things easy with the plug-in cable.
Once you've figured out the pin number, you need to enable the runout detection feature. This is done in the Configuration.h file, as shown here:
//#define FILAMENT_RUNOUT_SENSOR
#if ENABLED(FILAMENT_RUNOUT_SENSOR)
#define FIL_RUNOUT_INVERTING false // set to true to invert the logic of the sensor.
#define ENDSTOPPULLUP_FIL_RUNOUT // Uncomment to use internal pullup for filament runout pins if the sensor is defined.
#define FILAMENT_RUNOUT_SCRIPT "M600"
#endif
You should be able to find the above code in the file. Uncomment the first line (remove the // at the beginning) to enable the feature. The default settings for INVERTING, RUNOUT and SCRIPT, as shown above, will work perfectly with these sensors.
Next, we need to define the pin we're using. After the previous block, add the line to define your chosen pin:
#define FIL_RUNOUT_PIN 19 //19 for Z_MAX_PIN on RAMPS
The whole block should look like:
#define FILAMENT_RUNOUT_SENSOR
#if ENABLED(FILAMENT_RUNOUT_SENSOR)
#define FIL_RUNOUT_INVERTING false // set to true to invert the logic of the sensor.
#define ENDSTOPPULLUP_FIL_RUNOUT // Uncomment to use internal pullup for filament runout pins if the sensor is defined.
#define FILAMENT_RUNOUT_SCRIPT "M600"
#endif
#define FIL_RUNOUT_PIN 19 //19 for Z_MAX_PIN on RAMPS
Depending on the other settings you have enabled, you may also need to find and enable the NOZZLE_PARK_FEATURE (Configuration.h) and ADVANCED_PAUSE_FEATURE (Configuration_adv.h). You'll also need either an LCD attached and enabled (to unpause the print), or the EMERGENCY_PARSER enabled (to unpause over serial).