Site Tools


kb:proj:ftg:auto_printer:start

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
kb:proj:ftg:auto_printer:start [2026/11/07 11:24] – removed - external edit (Unknown date) 127.0.0.1kb:proj:ftg:auto_printer:start [2026/11/07 13:53] (current) – robertk
Line 1: Line 1:
 +====== Auto Printer ======
 +
 +<note warning> The Auto Printer project is no longer maintained. It is based on an outdated printer and because the bulk of my projects are one-offs 24/7 production is not required</note>
 +
 +===== About =====
 +
 +I took on this project in my free time during 2021 to learn more about 3D printing and 3D printer firmware.
 +
 +The goal of this project was to create an automated FDM 3D printing setup. It was based on a [[kb:hw:prusa:i3_mk3splus:start|Prusa i3 MK3S+]] printer. Initially, I had planned on starting a print farm, but after some market research I found that wouldn't be a good use of my time and capital. I still built out an automated printer for the learning experience.
 +
 +To make the Prusa print and eject parts I developed a system with 4 basic parts:
 +
 +  * a custom FR-4 print surface that allows prints to release automatically at ambient temperature
 +  * an Arduino controlled bed scraper
 +  * an actively heated and cooled chamber
 +  * a custom version of the firmware to send commands to the arduino using g-code
 +
 +==== Build Plate ====
 +
 +FR-4 and G10 are popular and now fairly common build plate materials. They are essentially the same, but FR-4 is inherently flame-retardant. This is the same material that most circuit boards are made out of. What makes it a great build surface for 3D printing is that at ambient temperatures it has a low surface energy, meaning other materials stick to it poorly, but at higher temperatures it has a much higher surface energy. This means that most common filaments stick aggressively to FR-4 when it is heated and release automatically when it is cooled. I ordered some custom spring steel sheets and laminated FR-4 to the surface using some 3M adhesive sheeting to create a build plate suitable for part ejection.
 +
 +==== Bed Scraper ====
 +
 +The bed scraper used two u-shaped photo-electric sensors, a geared motor, and an arduino. Because the Prusa parts are open source, I was able to download and modify them to also act as supports for the scraper. The Arduino contained simple logic that received a signal from the 3D printer control board to raise and lower and ran the geared motor until it could confirm the position of the scraper using the photo-electric sensors.
 +
 +This took several CAD revisions and prints to make perfect, because the exact trigger point of the sensor was consistent but not accurate between sensors. In hindsight, I would have made the positions of these sensors more adjustable from the start rather than having to iterate the physical configuration through prints.
 +
 +All of the original printer parts as well as the scraper were reprinted in ASA to provide a higher heat deflection temperature. This meant redoing most of the extruder assembly and gantry support parts. The original PETG parts would have melted. 
 +
 +==== Chamber ====
 +
 +The chamber was a simple extruded aluminum frame with fiber reinforced concrete poured as a base. This with some custom printed feet allowed the printer to be held at an angle.
 +
 +The same Arduino that ran the scraper was also used to control the chamber temperature. A small resistive heater was used to raise the temperature and a circulatory and exhaust fan were used to homogenize and decrease the temperature. The exhaust fan was also equipped with a simple low pressure membrane , all air was retained in the chamber and when the fan kicked on the slight differential pressure opened the membrane and allowed air to be exhausted.
 +
 +To allow part ejection and air circulation for cooling, a servo actuated door on the front of the chamber was also controlled by the Arduino. To prevent problems with heat buildup, the control board and power supply were moved out of the enclosed space and placed in a custom printed enclosure.
 +
 +==== Custom Firmware ====
 +
 +To tie this whole system together, I had to edit the printer's firmware. This is much easier than it sounds. The firmware is open source and well documented, so I added a macro that responded to a specific m-code and used one of the extra headers on the control board to signal the Arduino. The Arduino itself handled all of the scraper and temperature logic. It would have been possible to set the chamber temperature with g-code, as is done in most modern heated chamber printers, but I found it simpler to set the temperature with a potentiometer and allow the Arduino to do all of the cooling and ejection logic. This was a suitable solution because I rarely changed filament type, but it was a bad design decision because it ignored convention.
 +
 +===== Logic Outline =====
 +
 +Once the m-code for ejection is sent, the control board signals the Arduino. The logic then follows these steps:
 +
 +  * chamber heater off
 +  * chamber door open
 +  * exhaust fan on
 +  * wait configured period for cooldown
 +  * lower ejection arm
 +  * printer moves bed to rear after configured wait period
 +  * raise ejection arm
 +  * exhaust fan off
 +  * chamber door close
 +  * chamber heater on
 +  * printer waits configured period for chamber to heat up
 +
 +Over a 48 hour period of continuous printing of 1hr long print cycles, I had a single ejection failure. The main limitation of this system is that the control board communicates with the Arduino but the Arduino had no way to confirm or communicate a successful ejection to the control board. This meant having to hard code wait periods in both the Arduino program and in the g-code for the printer. For a completely naive approach, this setup worked surprisingly well, but it really falls short as far as integration is concerned. It relies on the wait between g-code and Arduino matching and lacks communication for confirmation. I did not pursue the project further because I decided I had learned what I intended to when I took it on, but in hindsight I should have spent the time to establish bi-directional communication just for the learning experience.
 +
 +===== Thoughts =====
 +
 +As of 2026 heated chamber printers are now readily available in the commercial market. When I took on this project, that was mostly only true of very high end printers with companies like Stratasys sitting on most of the key patents until recently. I currently own two consumer printers with heated chambers, though they do not provide automatic part ejection. To me that is the gap in the market. Most print farms use custom printers, like Slant3D, or commercial off the shelf products, but all farms seem to require quite a bit of operator intervention that could be replaced with relatively cheap automation. Prusa has released a [[https://www.prusa3d.com/applications/prusa-pro-afs_236928/|farm oriented printer setup]] with automated print-bed changes, but fully heated and cooled printers that can eject parts themselves have not yet hit the market. I assume this is because large SLS machines produce better finishes in larger batches and attract most of the customers that need engineering materials in their prints. This is definitely something I would like to revisit someday with a different open source printer, perhaps a Voron, but for now it remains outside my expertise. If I ever revisit the project it would be when I can work with a commercial packaging automation company like Packsize where I could help create a pipeline from printer to ship-ready package. I think less automation than that would not be economical and as a systems integrator that is the sort of project that excites me.
 +
 +{{tag>projects rev_eng 3d_printing}}