Below 4°
-
Hello everyone. I am developing a multiple gel dispenser and one of the heads must cool to 4 degrees. It is designed and working properly with a peltier cell, but when I send to print the machine does not wait until the head reached 4 degrees. I read that for temperatures below 40 degrees the machine does not wait (because evidently it is prepared for temperatures above the ambient temperature, not below). Is there any way to modify it so that it does wait? Thanks
-
@falco22 please post your config.g file so that I can better understand what we may be able to do.
-
This post is deleted! -
-
@falco22 I don't know the STM board, however my expectation is that when using a cooling device instead of a heater, you will need to use the M307 I1 parameter to indicate that increasing PWM on the port reduces the temperature.
-
Yes, I am using M307 I1. And it works fine. I manually set the peltier to cool and it goes perfectly down to 4 degrees. The problem is when I send a print file from the CURA with a setting of 4 degrees, the print starts without waiting for the temperature to go down to 4 degrees.
-
Can you share a sample gcode from cura?
-
-
I want to use the M116 but:
Note: The M116 will not wait for temperatures below 40c because in many cases they will never be reached due to ambient temperatures. So if you want to wait for the hotend or bed to cool, use 41c or higher.
-
@falco22 I think you could do it with conditional gcode - it certainly works for heating so I don't see any reason why it wouldn't work for cooling.
Something like this should work after you set the demand temperature
while sensors.analog[1].lastReading > 4 M291 P"Waiting for dispenser to cool" S1 T4 echo "Dispenser temp", sensors.analog[1].lastReading G4 S4
-
@falco22 I see the I1 parameter now, on heater 1 (I was looking at heater 0).
A solution may be for RRF to change its behaviour when the I1 parameter is given. Normally, RRF assumes that temperatures below 40C are not of interest, and ambient temperature may be as high as 40C, so do not wait for cooling below 40C. With the I1 parameter, RRF could assume that temperatures above e.g. 10C are not pf interest, so do not wait for the temperature to become greater than 10C after the cooler is turned off. Would this be sufficient? Is 10C a suitable value, or should it be lower e.g. 5C or 0C ?
-
Well, the ideal would be between 0 and 4 degrees.
-
@falco22 ideal for you perhaps! We need to look for a solution that works for other users with cooling devices too.
-
@dc42 Of course it is ideal for me. But I have seen that many people are developing bioprinting solutions, and to work with certain cells the minimum recommended temperature is 4 degrees.
-
@deckingman said in Below 4°:
conditional gcode
Can you explain a little more? how to apply it and where? thank you very much. -
@deckingman Forget it, it worked perfect!
-
@deckingman Forget it, it worked perfect!
I'm pleased that it did - I thought it might. I use that while loop myself instead of M116 although I can't take any credit, as it was someone else on these forums who advised me how to do it.
In my case, I wanted a solution which would check if the hot end was at or above a threshold temperature. The problem with M116 is that if the hot end is already above that threshold, then it will wait for it to cool until it reaches the set point, which is not what I wanted to happen. Using a "while loop" gives much more flexibility IMO.
-
@deckingman I find a problem with that solution. It only works for 4 degrees. Is there any way to formulate the equation to fit any temperature between room temperature and 0C? Thank you.
-
@deckingman I find a problem with that solution. It only works for 4 degrees. Is there any way to formulate the equation to fit any temperature between room temperature and 0C? Thank you.
I'm not an expert on conditional gcode so someone else might have a better answer. But do you mean if the temperature is within a range from (say) 20 to 0? In which case you could use something like
while {sensors.analog[1].lastReading >0} & {sensors.analog[1].lastReading <20}
or do you mean a fixed temperature but one that you can define? In which case you could use a global variable that you define elsewhere - e.g. in a separate macro or config.g.
so something like
global dispenserTemp = nn (where "nn" is the temperature value)
then the expression would become something like
while sensors.analog[1].lastReading > {global.dispenserTemp}.
But as I said, I'm not expert and may have got something wrong. Suggest you check out the documentation https://duet3d.dozuki.com/Wiki/GCode_Meta_Commands#main