Filament runout switch delayed pause after tripped
-
Hi All,
I am currently working on redesigning my printer and have added a filament runout sensor. I have a simple switch type sensor placed close to the filament spool so whenever the filament sensor gets tripped I have a specific length(~750mm) of filament left between the extruder(Direct Drive) and the filament runout switch.
I was wondering if there is a simple way to configure the system to allow the printer to continue to print that remaining 750mm of filament after the filament runout sensor has been tripped.
This isn't an issue necessarily but it would be nice to be able to use that last bit of filament left between the sensor and extruder. I could probably get a few more layers out of a large print with that amount of filament.
I could move the sensor closer to the extruder but that would mean significant redesign/rewiring on my end which isn't necessarily worth it for me to get that extra bit out of the filament roll. I could also bypass my sensor and resume my print then pause once its close to the extruder but that would not be ideal either.
I understand that this isn't crucial so if the fix is complicated/cumbersome then I wouldn't worry about it.
I am running my printer on a Duet 2 Wi-Fi
Please let me know if this has already been asked and/or solved, I've tried to look into this but I haven't been able to find anything, maybe my search terms are off.
Thank you for your time!
-
@cooknadam I have moved this to the firmware wishlist for now as there is no built in way to have a delay.
Thinking about it a bit more you might be able to set the switch up as a trigger (as opposed to a specific filament monitor switch) then have the triggerN.g macro start counting the extruder movement from when it is triggered (using conditional gcode, the object model and a variable to store the count), then pause the print when the count = 750mm. That said it would require some testing to see if the extruder movement could be reliably extracted from the object model...
-
Maybe something like this?
if sensors.gpIn[4].value == 0 var triggerheight = move.extruders[0].position + 200 - move.axes[2].machinePosition set var.triggerheight = move.extruders[0].position + 200 - move.axes[2].machinePosition while move.extruders[0].position < var.triggerheight if sensors.gpIn[4].value == 1 break if sensors.gpIn[4].value == 0 M226 ; calls pause.g
Needs some testing though.
-
@argo Thank you for the thoughtful response! I'm sorry for my lack of knowledge, I'm not a programmer so I am relatively clueless with this, but where exactly would I insert this code, does it go into the firmware?
I'm also confused about what is happening with the code itself, if you would like to maybe explain it/ comment the lines I would appreciate it but don't feel obligated to do so.
I would be willing to test it out once I get my printer back up and running but that may not be for a couple weeks.
Thanks again!