3D printers are capable of creating complex geometries with a minimum of fuss, but one of the tradeoffs is the long period of time it takes to print a part. Often, printers are left to run for many hours with a minimum of supervision to complete their tasks. This can leave printers idling for long periods of time after their work is finished. Noting this, [TheGrim] put together the Advanced Printer Control.
The aim of the APC is to monitor 3D printers, and shut them off when their work is complete. The aim is to avoid leaving printers running for hours after their prints are finished, which causes needless wear on fans and screens which can have a limited life. This is achieved by putting an ESP8266 in charge of the printer’s AC power supply, via a triac. It measures the current drawn by the printer when idling and in use to set a baseline. Then, whenever the printer drops back to idle levels, a timer begins. When the timer runs out, the printer is switched off. There’s also an option to automatically trigger shutdown with an I/O pin, too.
It’s a project that aims to extend printer life and save power, too. Of course, if you’re really worried about power draw, you could use a solar powered printer instead. If you’ve got your own printer controller hacks, be sure to drop us a line.
An interesting idea, but can’t say I’ve ever been too concerned about the fans in my printer being overused. Come to think of it, they stop on their own after awhile of not printing. So not really sure what this project is trying to accomplish.
With an always-on Pi running Mainsail and controlling Klipper and the printer’s PSU anyways, you just use that.
Octoprint also has a shutdown after print feature, so if using Octoprint to start the print job this is an option also.
Yes, but Octoprint is bloated and performs like **** compared to Mainsail/Fluidd (which runs perfectly fine on a Pi Zero with a webcam).
Hmm.. if you declare constants at the top of your code, please use them in your switch/case and if/else statements rather than magic numbers.
It will make the code easier to maintain, especially when you come back to it months later and decide that you need to add additional states/logic paths Otherwise, this will come back to bite you on the ass,as it has me on many occasions.
It would be nice if the printer controllers had this sort of feature built into them, rather than us having to build something additional to stick on the side of the printer. But that’d probably make the printers a lot more expensive. Maybe some of the (higher end) controllers already have this feature and I haven’t noticed?
Another interesting take on an issue that crops up with many 3D printers, though.
Good project.
One could also use any “smart outlet” with power monitoring, running Tasmota or similar firmware, to achieve that. No need to build a specialized hardware for this.
Have a Tasmota Sonoff POW2 controlling mine too, never thought of this method previously, but good point.
The Marlin firmware can be configured to do just this. The only requirement is to use an ATX power supply or an xbox 360 power supply.
Or any supply that you can switch with a single output pin.
I do exactly this using a solid state relay that is triggered from the pin on the ramps board.
Why not just update the 3D printer’s code to do this “idle” processing (most are open source)? Seems simple enough to set a flag and start an idle timer that “cleans up” when idle for a preset (& adjustable) time. Any action to start, continue, or restart a print will start the process over.
This is a one size fits all solution that will work for all printers, rather than a solution that has to be customized for each one. Ideally 3d printer manufacturers would put energy saving features in their printers, but people also want cheap 3d printers…
problem i have with my aging printrbot is that if im not there to pull the filament right as the print ends, it usually gets stuck in the hot end and another hour long rebuild and recalibration is in order to clear it.
or maybe i can just add some g-code to retract the filament when its done. but i worry about it breaking it in the hot end or gumming up feed wheels or whatever they are called.
If your filament overheats in the hotend, your fans shut off too soon, i.e. before the hotend cools down. Sounds like your slicer does something wrong. Retracting the filament in the g-code is just symptom treatment, you should really look for the reason it gets stuck at all, like the fans shutting off too soon, or the heat staying on.
You need better heat separation. Put an always-on fan pointed above the heat break. I use a little 10 (or is it 15mm?) model. Cover your hot block with silicone or ceramic tape or some other insulator.
Or you could just put a switch at the end of the bed travel so that when it sits in its “finished” position for a while you know it’s done. Some printers (like ultimakers etc that lower the bed when done) you could just relocate the power switch so it hits it for you.
Overkill and useless, since it can be done by software, but nice metal box
Worried about fan on 3D printer going out -> puts fan in AC control box
I am actually working on a project to do this with an octoprint / orange pi / relay after I had a hotend MOSFET on my control board fail in the permanently on state after a print finished leading to a VERY hot end.
That’s definitely an advantage to a printer which uses an ATX supply. Just add M81 to the end of the post-print script in your slicer’s config.
I’ll miss that when I finally get around to upgrading to 24V.
Most common firmware has this feature.
Smoothieware and marlin both do. Just set the command in your end gcode.