Learning Polymer Flows
In order to automatically guess at print parameters (flowrate and nozzle temperatures), we developed an extruder that features a filament sensor (to detect real flowrates) and a pressure sensor, and used it to measure a swath of that parameter space using a simple routine, fit that data to a predictive function, and used a meta-heuristic to extract real parameters from those functions. We were then able to automatically determine print parameters for a number of new filaments that we had not previously tested.
Above is our extruder, featuring a loadcell to measure pressure (C), a filament sensor (A) that measures filament width and linear feedrate, and a COTS hotend (D) and drive gears (B).
We collect data with a simple routine that sets the nozzle at its maximum temperature, then begins flowing plastic at a set rate, and turns off the heater. Pressure and temperature data are simultaneously collected as the nozzle cools (and as pressure increases).
We can expand this fit into a full contour of the parameter space, and then select operating points using a meta heuristic.
Using this method, we were able to produce a series of test articles using filaments that we had not previously tested.
In this Repo
Analysis and Data
We have data an analysis in the analysis/ folder, with the most relevant data (from our paper) in analysis/flows/spindown/.
Data there is organized into material-nozzleSize
folders, with raw data in .json
format and cleaned data sets available as python pickles, which import as pandas dataframes (IIRC). Data was cleaned using this script and analyzed using this one.
Experimental System
The system folder contains the javascript controller as well as firmwares for the relevant hardware. Hardware from these experiments is now out of date; I can produce CAD and circuit design files if pressed, but sorting and documenting these things is more of a challenge.
The Paper
Writing is in... writing/, though it happens in overleaf - I will keep drafts and source files backed up here. The most recent draft is here
Future Work
~ we want to optimize printer parameters, but this inevitably leads to the whole printing process... i.e. given what we know about slumping and layer adhesion, we actually have as a kind of ~ primary input (un-surprisingly) the geometry itself: a critical factor is the inter-layer time, and that varies greatly with geometry...
So we end up with this loop that deconstructs a print layer-by-layer, builds (for each) a model of the layer's print time, given requested rates (which is calculated using the machine's own lookahead controller, basically a full sim of the machine's dynamics), then for each layer we find an optimal temperature-and-rate pair, given machine/material models we learn about the nozzle / extruder (how fast can we push, at what temperatuers?) and about the cooling properties (for slumping, to know how much time-to-cool each layer will need, given the temperature it's printed at).
The final challenge is that each layer has a different optimal temperature... Rates are easy enough to change layer-by-layer, but the machine's hotend can't slew as quickly; so we want to basically run a lookahead through layers to analyze these and find new targets... simpler option is to pick whichever min/max and run the print there.
Stubs
The Slumping Model (Slump-Sweeping)
Surface Finish and Pressure Consistency ?
The Thermal Model and Lookahead
We also need to figure, roughly, how fast we can slew nozzle temps up & down; this lets us do a fit of thermal-profiles to layer-rates, which is some ~ tricky dynamic programming I think... and will probably be real fun.
Also related is a new motion controller... that does network-model estimation inline with dynamics;