Indirect Laser Filament Monitor

The Duet3D laser filament monitor detects filament movement by reflecting a laser off of the filament and reading it with a precision sensor. The filament sensor detects movement of the filament and compares it with the commanded movements by the printer. If the movement detected falls outside of a user defined minimum and maximum range the printer will pause. This method is also used to detect a filament out situation as it would detect zero filament movement.

Duet Laser Filament Monitor
Duet Laser Filament Monitor

Link to install guide

Direct Filament Monitor Issues

The concept seems great but I have experienced mixed results. The issue revolves around the varying degrees of performance the reflection has off of various filament types and colors. So if the filament is the variable how do we provide a more consistent medium for the sensor to monitor for movement?

  • Lack of precision – In my traditional direct monitor install I have found that the sensor works decent but it must have a wide tolerance (40-120%) to prevent nuance false detection. Even with that wide range of tolerance I find it disappointing to find my prints have been paused for long periods of time due to false positives. The following config.g command demonstrates the wide range of acceptable error when monitoring 3mm of sensor movement. This works but could it work better?
  • Unable to detect loaded filament – The sensor principal operates on detecting movement. This means that the system is unable to simply query the sensor to determine if filament is loaded or not. Static detection capability is useful as it can be used in macros and scripts to prompt the user to load filament before printing or to skip unloading filament that isn’t really there during a change process. The sensor includes a micro switch input that can be used with a Normally Open switch to detect the presence of static filament but this will need to be added as most designs to do make use of it.

Indirect Filament Monitor

An indirect filament monitor approach means that instead of pointing the laser at the actual filament, instead the laser is aimed at some kind of rotating medium such as a carbon fiber shaft or dark surface coated bearing that is turning based on the friction of filament moving against that shaft or bearing. The advantage is that the new detection surface will be consistent rather than changing with each filament type.

Indirect Filament Monitor – First Attempt

I found an very interesting model on thingaverse I wanted to try. This design made use of a carbon fiber rod. Assembly took a lot of tweaking.

Indirect Filament Monitor – Carbon Fiber Shaft

Material List


This build required lots of tweaking

  • Metric allen wrench
  • Small phillips and standard screw drivers
  • Hack Saw or Carpet Knife
  • Dremel and Bits or Cordless Drill & Small Drill Bit Set
  • Butane Torch/Lighter
  • 6″ Clear 1.75mm Filament (for the LED window and testing)
  • 2 x Needle nose pliers
  • Super Glue

The Build

The instructions for the build were non existent so I can of just figured it out as I went. I will capture the steps I took and hopefully with community involvement we can modify this design to be more out of the box assembly friendly.


Step 1 – Cut the carbon fiber rod

I wrapped the rod in a rag and put it in a vise to cut it very slowly with a hacksaw. I have seen posts online where others have used a carpet knife and rolled the rod on a table. The cutting was pretty easy. As far as length goes you just need to place the bearings on the rod and insert it into the printed enclosure to determine the length.

Step 2 – Assemble the idler pulley

The thingaverse file includes a small insert. You need to print two of these inserts. I used wire cutters to clip the end off of the tension spring so it was straight. I then inserted the two printed parts inside of the idler pulley. Finally, while holding the tension spring with pliers I heated up the spring end and pushed it into the center of the printed parts, holding it until cool.

Idler Pulley Assembly
Idler Pulley Assembly

Note: Out of the box the tension spring is at a 90 degree angle. I found I needed to use two sets of pliers to bend the spring to more of a 45 degree angle to provide more force on the filament. Don’t worry, you can do this step at any time during the build as you tweak it.

Idler Pulley – Tighter Spring Tension

Step 3 – Insert Idler Assembly into Enclosure

Next insert the idler assembly into the printed enclosure. Use the M2.5x20mm screw to hold it in place. The screw does not screw into the material. Instead the tension of the spring hold the entire thing in place.

Idler Pulley – Assembled into enclosure

Step 4 – Mount the sensor PCB

Mount the PCB into the enclosure using two M2 x 6mm flat head screws. Do not over tighten and strip out the plastic the screw is biting into.

PCB Mounted

Step 5 – Build the shaft assembly

After cutting the cam shaft to the desired length, use some super glue to glue the bearings in place. Lave a 1mm gap between the end pulley and the filament pulley and then tighten the allen screws on the pulley to fasten it into place. Ensure that the screws on the pulley do not come into contact with the PCB.

Shaft Assembly

Step 6 – Insert Brass Nuts

To keep tension on the filament the enclosure must be tightly screwed together. Use the appropriate size small drill bit to drill the mounting holes large enough to fit the brass nut. Insert an M3 x 20mm screw into the brass nut. Using pliers to hold the screw, heat the brass nut with the butane lighter/torch enough that you can press it into the counter sunk holes you have enlarged with the drill bit. Make sure to keep the screw straight and aligned with the hole. Once the object has cooled, use a wrench to remove the screw.

Note: I used a dremel to expose the static filament switch header as I wanted to experiment with a micros switch assembly as well. Doing so is optional.

Step 7 – LED Window

Insert a portion of clear filament into the enclsure and cut it to length so that it covers the LED on the PCB. This acts as a light tube and will allow the blinking LED to be seen when the enclosure is assembled.

LED Light Tube

Step 8 – Final Assembly

Mate the two sides of the enclosure together and tighten the M3 screws with the allen wrench. This is where the design is flawed in my opinion. The design needs to have a bowden coupling on both the top and bottom of the enclosure for better feeding. Hopefully someone in the community will do a remix on the printed portion to remedy this issue.

Bottom view showing LED Window

Because of the cam mechanism the direction of flow is reversed from the perspective of the laser. The PCB will need to be inverted so the side with the LED window will feed into your extruder.

Step 9 – Update Config.g

Using Rep Rap 3.x I added the following to my config.g:

M591 D0 P5 C"e0stop" R70:130 L34.3 E3.0 S0
  • D0 = Extruder Drive 0
  • P5 = Laser Sensor w/o Static Switch
  • C = End stop 0 on the duet board
  • R = Allow the filament movement reported by the sensor to be between 70% and 130% of the commanded values; if it is outside these values and filament monitoring is enabled, the print will be paused
  • L = This is ignored for laser sensors and instead it is used for rotating sensors. The extruder pulley has a Diameter of 10.9 mm and a circumference of 34.24336 mm. I was curious if I provided this parameter if the G code was smart enough to realize I was using an indirect detection method and adjust the outputs to be between 0-100%.
  • E = Check the calculation every 3 mm
  • S = 0 = Disabled, 1 = Enabled. I left it disabled for my testing so it wouldn’t trigger a pause.g


I found that the lack of bowden couplings meant that the natural bend of the filament from being on a spool could slip past the extruder pulley. Adding a bowden coupling to both the top and bottom would force a straight path of the filament through the box. I did get some very accurate results originally but it seems to be sporadic. I am also disappointing that I still do not have a static filament sense capability. Ideally, the design could kill two birds with one stone by being remixed to have a micro switch added to the top of the enclosure to serve as the static sensor but this would also take the natural curve out of the filament and make it drive straight through the enclosure.

M591 D0
Duet3D laser filament monitor v2 on pin e0stop, disabled, allow 70% to 130%, check every 3.0mm, version 2, quality 222, brightness 255, shutter 90, measured min 0% avg 12% max 150% over 704.9mm

Leave a Reply

Your email address will not be published.