<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

 <title>Fabian Trauzettel</title>
 <link href="https://fabian.trauzettel.nl/atom.xml" rel="self"/>
 <link href="https://fabian.trauzettel.nl/"/>
 <updated>2026-08-25T12:58:04+00:00</updated>
 <id>https://fabian.trauzettel.nl</id>
 <author>
   <name></name>
   <email></email>
 </author>

 
 <entry>
   <title>Printing Better-Fitting Dust Gaskets with a Single Foamed Extrusion</title>
   <link href="https://fabian.trauzettel.nl/3d/printing/2026/08/25/Printing-better-fitting-dust-gaskets.html"/>
   <updated>2026-08-25T00:00:00+00:00</updated>
   <id>https://fabian.trauzettel.nl/3d/printing/2026/08/25/Printing-better-fitting-dust-gaskets</id>
   <content type="html">&lt;p&gt;We cut the print time for a batch of 14 wall-charger gaskets from approximately 60 minutes to 15 minutes, while also making the printing process more stable and installation easier.&lt;/p&gt;

&lt;center&gt;
  &lt;video width=&quot;100%&quot; controls=&quot;&quot; preload=&quot;metadata&quot; playsinline=&quot;&quot;&gt;
    &lt;source src=&quot;/assets/posts/2026-08-25-fiberflex-aero-gaskets/gaskets-timelapse-60s.mp4&quot; type=&quot;video/mp4&quot; /&gt;
    Your browser does not support embedded video. You can &lt;a href=&quot;/assets/posts/2026-08-25-fiberflex-aero-gaskets/gaskets-timelapse-60s.mp4&quot;&gt;download the video instead&lt;/a&gt;.
  &lt;/video&gt;
&lt;/center&gt;

&lt;p&gt;These gaskets have a simple job: keeping dust out of a static enclosure interface. Our first solution used gasket cord from a reel, but cutting and installing every length took too much time. Custom-manufactured gaskets were too expensive, so we moved to 3D-printed TPU.&lt;/p&gt;

&lt;p&gt;Printing made the parts inexpensive and quick to install, but conventional slicing introduced seams, travel moves and retractions. The resulting blobs, strings and local discontinuities made the process unreliable and could interfere with the fit in the enclosure groove.&lt;/p&gt;

&lt;p&gt;The breakthrough came from FiberFlex Aero by @Fiberlogy. Its heat-activated foaming allowed a nominal 0.40 mm extrusion to expand into the broad, compressible bead we needed. That made it possible to print each gasket as one continuous, five-turn helical extrusion, something the non-foaming TPU could not achieve with our 0.4 mm nozzle.&lt;/p&gt;

&lt;p&gt;Instead of relying on conventional slicing, we extracted the gasket centreline and used FullControl to generate the toolpath explicitly. The nozzle remains in continuous motion throughout each gasket, eliminating internal travel moves, retractions and stop-start seams.&lt;/p&gt;

&lt;p&gt;The result:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;14 gaskets in approximately 15 minutes instead of 60&lt;/li&gt;
  &lt;li&gt;A continuous toolpath with fewer defect opportunities&lt;/li&gt;
  &lt;li&gt;A foam-textured bead that is easier to compress into the groove&lt;/li&gt;
  &lt;li&gt;Faster, more forgiving installation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This was a focused side exploration at @Patient Lifting Solutions. I developed the concepts, test strategy and physical experiments, while ChatGPT Codex helped implement the Python tooling, adapt the Bambu Studio &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.gcode.3mf&lt;/code&gt; workflow, and prepare the analysis and whitepaper. I remained the human in the loop for testing, interpretation and final engineering decisions.&lt;/p&gt;

&lt;p&gt;Thanks to @Fiberlogy for drawing our attention to FiberFlex Aero and for developing the material that made this process route possible.&lt;/p&gt;

&lt;p&gt;The full method, settings, scanner-based extrusion-width study and limitations are documented in the whitepaper, &lt;em&gt;Printing Better-Fitting Dust Gaskets with a Single Foamed Extrusion&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;/assets/fiberflex-aero-gaskets.pdf&quot;&gt;Read or download the full whitepaper (PDF, 5.2 MB)&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Topics: Additive manufacturing, 3D printing, TPU, DfAM, manufacturing engineering, process development, and human-in-the-loop engineering.&lt;/em&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Using FullControlGcode on an Ultimaker 3</title>
   <link href="https://fabian.trauzettel.nl/3d/printing/2023/05/23/Using-FullControlGcode-on-an-Ultimaker-3.html"/>
   <updated>2023-05-23T00:00:00+00:00</updated>
   <id>https://fabian.trauzettel.nl/3d/printing/2023/05/23/Using FullControlGcode on an Ultimaker 3</id>
   <content type="html">&lt;p&gt;In which we try to use FullControl G-code to generate instructions for an Ultimaker 3 and waste an afternoon discovering the opacity of UM3 G-code.&lt;/p&gt;

&lt;h2 id=&quot;some-background&quot;&gt;Some Background&lt;/h2&gt;
&lt;p&gt;If you haven’t heard of FullControl Gcode, go check it out at &lt;a href=&quot;https://fullcontrolgcode.com/&quot;&gt;fullcontrolgcode.com&lt;/a&gt;. It’s an intriguing piece of software that lets you skip the STL in 3D printing and directly generate printer instructions from a python script.&lt;/p&gt;

&lt;h2 id=&quot;the-problem&quot;&gt;The Problem&lt;/h2&gt;

&lt;p&gt;I tried to get my feet wet with the following script adapted from the FCG tutorials, but no matter how hard I tried, the printer would just flash to the printing mode on its OLED screen before immediately reverting to the file selection screen.&lt;/p&gt;
&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;fullcontrol&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;fc&lt;/span&gt;


&lt;span class=&quot;n&quot;&gt;centre_point&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;fc&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Point&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;brimWidth&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;5&lt;/span&gt; 

&lt;span class=&quot;n&quot;&gt;start_radius&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;end_radius&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;start_angle&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;n_turns&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;20&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;pitch_z&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;segments&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;320&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;clockwise&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;bp&quot;&gt;True&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;steps&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[]&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;#Brim
&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;steps&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;extend&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;fc&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;spiralXY&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;centre_point&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;start_radius&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;brimWidth&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;start_radius&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;start_angle&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;360&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;bp&quot;&gt;False&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;#Helix
&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;steps&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;extend&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;fc&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;helixZ&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;centre_point&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;start_radius&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;end_radius&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;start_angle&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;n_turns&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pitch_z&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;segments&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;clockwise&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;


&lt;span class=&quot;n&quot;&gt;filename&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&apos;2023-05-16.01&apos;&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;printer&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&apos;generic&apos;&lt;/span&gt; 
&lt;span class=&quot;c1&quot;&gt;#printer options: generic, ultimaker2plus, prusa_i3, ender_3, cr_10, bambulab_x1, toolchanger_T0, toolchanger_T1, toolchanger_T2, toolchanger_T3
&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;print_settings&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;extrusion_width&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;0.5&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;extrusion_height&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;0.2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&apos;nozzle_temp&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;215&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&apos;bed_temp&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;60&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&apos;fan_percent&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;#&apos;extrusion_width&apos; and &apos;extrusion_height&apos; are the width and height of the printed line)
&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;fc&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;transform&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;steps&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&apos;gcode&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;fc&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;GcodeControls&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;printer_name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;printer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;save_as&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;filename&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;initialization_data&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;print_settings&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;After some finagling and google-fu, I figured out that the issue was with the header lines Cura generates. These tell the printer useful info about the print it’s about to start for functional reasons as well as (I assume) letting the printer show print time and filament usage estimates on its screen without having to parse and analyse a whole G-code file on the fly.&lt;/p&gt;

&lt;p&gt;The header lines generated by cura look something like this:&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;;START_OF_HEADER
;HEADER_VERSION:0.1
;FLAVOR:Griffin
;GENERATOR.NAME:Cura_SteamEngine
;GENERATOR.VERSION:5.2.1
;GENERATOR.BUILD_DATE:2022-10-19
;TARGET_MACHINE.NAME:Ultimaker 3
;EXTRUDER_TRAIN.0.INITIAL_TEMPERATURE:240
;EXTRUDER_TRAIN.0.MATERIAL.VOLUME_USED:10213
;EXTRUDER_TRAIN.0.MATERIAL.GUID:eff40bcf-588d-420d-a3bc-a5ffd8c7f4b3
;EXTRUDER_TRAIN.0.NOZZLE.DIAMETER:0.4
;EXTRUDER_TRAIN.0.NOZZLE.NAME:AA 0.4
;BUILD_PLATE.INITIAL_TEMPERATURE:60
;PRINT.TIME:5972
;PRINT.GROUPS:1
;PRINT.SIZE.MIN.X:9
;PRINT.SIZE.MIN.Y:6
;PRINT.SIZE.MIN.Z:0.27
;PRINT.SIZE.MAX.X:182.58
;PRINT.SIZE.MAX.Y:209.42
;PRINT.SIZE.MAX.Z:48.07
;SLICE_UUID:616551fb-4680-4057-8bcf-28e64d25e6b9
;END_OF_HEADER
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;If the header is not present or does not match some specific requirements the printer will flat out refuse the print. Fortunately for us, the UM3 doesn’t seem to notice if we splice this header on to our own, FCG-generated, code.&lt;br /&gt;
There is a semi-handy guide &lt;a href=&quot;https://community.ultimaker.com/topic/15555-inside-the-ultimaker-3-day-1-gcode/&quot;&gt;here&lt;/a&gt; that helps us figure out some of the what and why, but alas, the post is already almost 7 years old and some of the requirements appear to have changed.&lt;br /&gt;
For instance, &lt;strong&gt;EXTRUDER_TRAIN.{X}.MATERIAL.GUID&lt;/strong&gt;, doesn’t appear to be optional anymore, and &lt;strong&gt;SLICE_UUID&lt;/strong&gt; seems to be newer than this post and also mandatory.&lt;/p&gt;

&lt;h2 id=&quot;so-what-to-do&quot;&gt;So what to do?&lt;/h2&gt;

&lt;p&gt;Fortunately the fix is easy, if a bit fiddly.&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Using Cura, slice an arbitrary STL file and save the G-code somewhere where you can find it later.
    &lt;ul&gt;
      &lt;li&gt;The exact file doesn’t matter, just make sure you pick the extruder you want to actually use for your FCG print, and the correct material (and therefore temperature) settings.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Using FCG, generate your G-code with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;printer = &apos;generic&apos;&lt;/code&gt; set to generic when you run &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fc.GcodeControls(printer_name=printer, save_as=filename, initialization_data=print_settings)&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Open both files in the plaintext editor of your choice.&lt;/li&gt;
  &lt;li&gt;Copy the header from the Cura-generated file into your FCG-generated file, making sure line 1 reads &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;;START_OF_HEADER&lt;/code&gt;. Positioning the header further down the file will most likely not work.&lt;/li&gt;
  &lt;li&gt;Delete the default &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;; Time to print!!!!! ; GCode created with FullControl - tell us what you&apos;re printing! ; info@fullcontrol.xyz or tag FullControlXYZ on Twitter/Instagram/LinkedIn/Reddit/TikTok&lt;/code&gt; in your file.&lt;/li&gt;
  &lt;li&gt;Tweak the following header lines in your FCG-generated file (code block for easy copy &amp;amp; paste):
    &lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;;EXTRUDER_TRAIN.0.MATERIAL.VOLUME_USED:0
;PRINT.TIME:0
;PRINT.GROUPS:1
;PRINT.SIZE.MIN.X:0
;PRINT.SIZE.MIN.Y:0
;PRINT.SIZE.MIN.Z:0
;PRINT.SIZE.MAX.X:215
;PRINT.SIZE.MAX.Y:215
;PRINT.SIZE.MAX.Z:200
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Why?
    &lt;ul&gt;
      &lt;li&gt;EXTRUDER_TRAIN.0.MATERIAL.VOLUME_USED
        &lt;ul&gt;
          &lt;li&gt;Set this to 0. Prevents bogus filament usage estimates.&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;PRINT.TIME
        &lt;ul&gt;
          &lt;li&gt;Set this to 0. Prevents bogus time remaining estimates.&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;PRINT.SIZE.MIN.X/Y/Z
        &lt;ul&gt;
          &lt;li&gt;Set all of these to 0. I have no idea if the UM3 checks whether its print moves fall inside the min/max footprint, but I cargo-cult the values anyway because I couldn’t be bothered checking for the sake of six values. If you figure it out, please let me know.&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;PRINT.SIZE.MAX.X/Y/Z
        &lt;ul&gt;
          &lt;li&gt;Set to the print envelope of the UM3, i.e. 215 x 215 x 200 for the regular version, or 215 x 215 x 300 for the UM3 extended.&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Presto Printo, your G-code should now work on your UM3.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example of an edited UM3 g-code header:&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;;START_OF_HEADER
;HEADER_VERSION:0.1
;FLAVOR:Griffin
;GENERATOR.NAME:Cura_SteamEngine
;GENERATOR.VERSION:5.2.1
;GENERATOR.BUILD_DATE:2022-10-19
;TARGET_MACHINE.NAME:Ultimaker 3
;EXTRUDER_TRAIN.0.INITIAL_TEMPERATURE:240
;EXTRUDER_TRAIN.0.MATERIAL.VOLUME_USED:0
;EXTRUDER_TRAIN.0.MATERIAL.GUID:eff40bcf-588d-420d-a3bc-a5ffd8c7f4b3
;EXTRUDER_TRAIN.0.NOZZLE.DIAMETER:0.4
;EXTRUDER_TRAIN.0.NOZZLE.NAME:AA 0.4
;BUILD_PLATE.INITIAL_TEMPERATURE:60
;PRINT.TIME:0
;PRINT.GROUPS:1
;PRINT.SIZE.MIN.X:0
;PRINT.SIZE.MIN.Y:0
;PRINT.SIZE.MIN.Z:0
;PRINT.SIZE.MAX.X:215
;PRINT.SIZE.MAX.Y:215
;PRINT.SIZE.MAX.Z:200
;SLICE_UUID:616551fb-4680-4057-8bcf-28e64d25e6b9
;END_OF_HEADER
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&quot;feedback&quot;&gt;Feedback&lt;/h2&gt;
&lt;p&gt;I’d like to give two small pieces of feedback to the development of FCG. 
(I know, everyone’s a critic, and I appreciate that these are low priority issues.)
1, please let us prevent FCG from printing the following lines:&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;; Time to print!!!!! 
; GCode created with FullControl - tell us what you&apos;re printing! 
; info@fullcontrol.xyz or tag FullControlXYZ on Twitter/Instagram/LinkedIn/Reddit/TikTok
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;If you have to muck about with the header like you do here, it would be great not to have to delete it manually all the time.&lt;/p&gt;

&lt;p&gt;2, please make the default date+time filename optional too. (Yes, I saw the &lt;a href=&quot;https://www.reddit.com/r/FullControl/comments/138bwm7/poll_preference_about_default_filename/&quot;&gt;Reddit poll&lt;/a&gt;, but I was too late to participate.)
With either of these two changes, it would be trivial to include the header in the python script and generate it automatically in the FCG G-code, without having to copy and paste every time.&lt;/p&gt;

&lt;p&gt;To the Ultimaker team, please post some sort of updated guide to the G-code header structure. It would’ve saved me a lot of time. At the very least, let the firmware give a “G-code header invalid” error instead of failing silently. That would’ve put me on track immediately.&lt;/p&gt;

&lt;h2 id=&quot;closing-remarks&quot;&gt;Closing remarks&lt;/h2&gt;

&lt;p&gt;I’d like to thank Andy Gleadall for publishing this tool, and for doing it under the generous terms he chose to share it under. FFF hardware has reached a high level of maturity, but I feel like the slicing tools have not had the same pace of progress until recently. People like Andy are really unlocking the next level for FFF tech, and that’s beyond cool, especially if it’s open to all.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Adventures in 3D printing PVC - Finale</title>
   <link href="https://fabian.trauzettel.nl/3d/printing/2023/05/11/Adventures-with-PVC-Finale.html"/>
   <updated>2023-05-11T00:00:00+00:00</updated>
   <id>https://fabian.trauzettel.nl/3d/printing/2023/05/11/Adventures with PVC - Finale</id>
   <content type="html">&lt;script type=&quot;text/javascript&quot; src=&quot;http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML&quot;&gt;&lt;/script&gt;

&lt;h1 id=&quot;finally-printing-with-liquid-pvc&quot;&gt;Finally, printing with liquid PVC&lt;/h1&gt;
&lt;p&gt;With these three main issues as well as pump calibration out of the way, it was possible to truly begin 3D printing with PVC, at first beginning with very simple shapes such as flat pucks with a 5cm diameter and 3mm thickness such as the one pictured below:&lt;/p&gt;
&lt;center&gt;&lt;img src=&quot;/assets/posts/2023-05-11-Adventures with PVC - Finale/Picture10.jpg&quot; width=&quot;600&quot; /&gt;&lt;/center&gt;

&lt;p&gt;These pucks are well suited to detecting any telltale signs of 3D printing issues, such as gas inclusions, over or under extrusion or bad feed system calibration. Fortunately, the system worked extremely well with the aforementioned improvements, and it was possible to print a more complex demo piece: a scaled-down model of a human ear:&lt;/p&gt;
&lt;center&gt;&lt;img src=&quot;/assets/posts/2023-05-11-Adventures with PVC - Finale/Picture11.jpg&quot; width=&quot;600&quot; /&gt;&lt;/center&gt;

&lt;center&gt;&lt;video width=&quot;600&quot; controls=&quot;&quot;&gt;  
  &lt;source src=&quot;/assets/posts/2023-05-11-Adventures with PVC - Finale/MOV_0804.mp4&quot; type=&quot;video/mp4&quot; /&gt;  
&lt;/video&gt;&lt;/center&gt;

&lt;h1 id=&quot;comparison-of-3d-printed-pvc-with-conventionally-manufactured-pvc&quot;&gt;Comparison of 3D printed PVC with conventionally manufactured PVC&lt;/h1&gt;

&lt;p&gt;The final of the initial three goals of the project was to compare the PVC produced by the 3D printer with PVC that had been conventionally manufactured, i.e. cast PVC.&lt;/p&gt;

&lt;p&gt;Due to time and equipment constraints in CIT at the time, it was only possible to perform a tensile test as a comparative metric, as there are no Shore hardness testers in the college.&lt;/p&gt;

&lt;h2 id=&quot;iso-372011--rubber-vulcanised-or-thermoplastic--determination-of-tensile-stress-strain-properties&quot;&gt;ISO 37:2011 – Rubber, vulcanised or thermoplastic – determination of tensile stress-strain properties&lt;/h2&gt;

&lt;p&gt;ISO 37 describes methods for testing the tensile properties of elastomers by destructive testing in a tensile testing machine. It provides two main methods of testing: using ring test pieces or dumbbell test pieces. Due to the comparative ease with which dumbbell test pieces can be manufactured, it was decided to use the latter.&lt;/p&gt;

&lt;h2 id=&quot;dumbbell-test-pieces&quot;&gt;Dumbbell test pieces&lt;/h2&gt;

&lt;p&gt;The standard prescribes four different sizes of dumbbell for use in different scenarios, however due to the limited quantity of PVC on hand, type 4 dumbbell geometry was selected&lt;/p&gt;

&lt;center&gt;&lt;img src=&quot;/assets/posts/2023-05-11-Adventures with PVC - Finale/Picture12.png&quot; width=&quot;600&quot; /&gt;&lt;/center&gt;

&lt;p&gt;To manufacture the cast test pieces, a mould was built from a spare piece of aluminium stock using the CNC milling centres in CIT. A solid model of the mould was transferred to a workshop computer running AlphaCAM. A toolpath was created to mill out the exact geometry required, and a piece was produced (pictured below).&lt;/p&gt;

&lt;center&gt;&lt;img src=&quot;/assets/posts/2023-05-11-Adventures with PVC - Finale/Picture13.jpg&quot; width=&quot;600&quot; /&gt;&lt;/center&gt;

&lt;p&gt;The moulds were filled with PVC using a syringe to dispense the right quantity of PVC, and then placed in the oven at 250°C where the PVC was allowed to cure until glassy, a colour change which indicates that the right curing state of the PVC has been reached.&lt;/p&gt;

&lt;center&gt;&lt;img src=&quot;/assets/posts/2023-05-11-Adventures with PVC - Finale/Picture14.jpg&quot; width=&quot;600&quot; /&gt;&lt;/center&gt;
&lt;center&gt;&lt;img src=&quot;/assets/posts/2023-05-11-Adventures with PVC - Finale/Picture15.jpg&quot; width=&quot;600&quot; /&gt;&lt;/center&gt;

&lt;p&gt;At the same time, the PVC 3D printer produced five samples of 3D printed PVC dumbbells of the same geometry, also printed at 250°C, in order to obtain a one-for-one comparison.&lt;/p&gt;

&lt;center&gt;&lt;video width=&quot;600&quot; controls=&quot;&quot;&gt;  
  &lt;source src=&quot;/assets/posts/2023-05-11-Adventures with PVC - Finale/media2.mp4&quot; type=&quot;video/mp4&quot; /&gt;  
&lt;/video&gt;&lt;/center&gt;

&lt;p&gt;The resulting samples:&lt;/p&gt;
&lt;center&gt;&lt;img src=&quot;/assets/posts/2023-05-11-Adventures with PVC - Finale/Picture17.jpg&quot; width=&quot;600&quot; /&gt;&lt;/center&gt;

&lt;h1 id=&quot;tensile-testing&quot;&gt;Tensile testing&lt;/h1&gt;

&lt;p&gt;The testing was carried out on the Instron tensile testing machine in the Mechanics laboratory in the A block of CIT. Testing was unfortunately not carried out under temperature-controlled conditions as described in ISO 37, however as the samples were stored together for over a week it is not expected that environmental factors played a large role in the results. It should be noted that it is only possible to compare the tensile properties of the 3D printed PVC parallel to the grain, as it is not possible to print such a thin and soft structure without being encased in support material.&lt;/p&gt;

&lt;h2 id=&quot;procedure&quot;&gt;Procedure&lt;/h2&gt;

&lt;p&gt;The machine was set up with a gauge length of 10mm and a strain rate of 100mm per minute. Samples were tightly clamped in the jaws of the machine in order to prevent sample slippage. Care was taken to ensure samples were correctly aligned in the machine, as pictured below:&lt;/p&gt;

&lt;center&gt;&lt;img src=&quot;/assets/posts/2023-05-11-Adventures with PVC - Finale/Picture18.jpg&quot; width=&quot;600&quot; /&gt;&lt;/center&gt;

&lt;p&gt;Once the sample was firmly secured, the test was initiated.&lt;/p&gt;

&lt;h2 id=&quot;results&quot;&gt;Results&lt;/h2&gt;
&lt;p&gt;3D printed samples:&lt;/p&gt;
&lt;center&gt;&lt;img src=&quot;/assets/posts/2023-05-11-Adventures with PVC - Finale/Picture19.png&quot; width=&quot;600&quot; /&gt;&lt;/center&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt; &lt;/th&gt;
      &lt;th&gt;Ultimate   tensile strength (MPa)&lt;/th&gt;
      &lt;th&gt;Tensile   strength at break (MPa)&lt;/th&gt;
      &lt;th&gt;Elongation   at break (%)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Specimen   1&lt;/td&gt;
      &lt;td&gt;4.3545&lt;/td&gt;
      &lt;td&gt;4.2955&lt;/td&gt;
      &lt;td&gt;600%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Specimen   2&lt;/td&gt;
      &lt;td&gt;2.8886&lt;/td&gt;
      &lt;td&gt;2.8409&lt;/td&gt;
      &lt;td&gt;283%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Specimen   3&lt;/td&gt;
      &lt;td&gt;4.3727&lt;/td&gt;
      &lt;td&gt;4.3273&lt;/td&gt;
      &lt;td&gt;599%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Specimen   4&lt;/td&gt;
      &lt;td&gt;4.3091&lt;/td&gt;
      &lt;td&gt;4.1682&lt;/td&gt;
      &lt;td&gt;564%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Specimen   5&lt;/td&gt;
      &lt;td&gt;4.7909&lt;/td&gt;
      &lt;td&gt;4.7341&lt;/td&gt;
      &lt;td&gt;672%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Average   value&lt;/td&gt;
      &lt;td&gt;4.1432&lt;/td&gt;
      &lt;td&gt;4.0732&lt;/td&gt;
      &lt;td&gt;544%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Standard   deviation&lt;/td&gt;
      &lt;td&gt;0.6509&lt;/td&gt;
      &lt;td&gt;0.6447&lt;/td&gt;
      &lt;td&gt;1.3487&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Cast samples&lt;/p&gt;
&lt;center&gt;&lt;img src=&quot;/assets/posts/2023-05-11-Adventures with PVC - Finale/Picture20.png&quot; width=&quot;600&quot; /&gt;&lt;/center&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt; &lt;/th&gt;
      &lt;th&gt;Ultimate   tensile strength (MPa)&lt;/th&gt;
      &lt;th&gt;Tensile   strength at break (MPa)&lt;/th&gt;
      &lt;th&gt;Elongation   at break (%)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Specimen   1&lt;/td&gt;
      &lt;td&gt;3.7500&lt;/td&gt;
      &lt;td&gt;3.6955&lt;/td&gt;
      &lt;td&gt;464%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Specimen   2&lt;/td&gt;
      &lt;td&gt;1.4841&lt;/td&gt;
      &lt;td&gt;1.4705&lt;/td&gt;
      &lt;td&gt;109%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Specimen   3&lt;/td&gt;
      &lt;td&gt;2.8182&lt;/td&gt;
      &lt;td&gt;2.8091&lt;/td&gt;
      &lt;td&gt;372%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Specimen   4&lt;/td&gt;
      &lt;td&gt;4.0455&lt;/td&gt;
      &lt;td&gt;3.9909&lt;/td&gt;
      &lt;td&gt;602%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Specimen   5&lt;/td&gt;
      &lt;td&gt;2.4000&lt;/td&gt;
      &lt;td&gt;2.3864&lt;/td&gt;
      &lt;td&gt;386%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Average   value&lt;/td&gt;
      &lt;td&gt;2.8995&lt;/td&gt;
      &lt;td&gt;2.8705&lt;/td&gt;
      &lt;td&gt;387%&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Standard   deviation&lt;/td&gt;
      &lt;td&gt;0.9269&lt;/td&gt;
      &lt;td&gt;0.9093&lt;/td&gt;
      &lt;td&gt;1.6104&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;discussion-of-tensile-testing-results&quot;&gt;Discussion of tensile testing results&lt;/h2&gt;

&lt;p&gt;Contrary to expectation, the 3D printed PVC proved to be about 43% stronger, both in ultimate tensile strength and in tensile strength at break. However, these results should be regarded with caution; firstly, these are very small sample sizes for an effective and statistically significant comparison, and secondly, the results contain some distorting factors. When the cast dumbbells were made, they were cast without a degassing step. This led to some of the samples being filled with bubbles and cavities, which negatively impact the mechanical properties of the samples. Furthermore, problems were encountered when clamping the samples in the tensile tester, as some samples slipped out from between the jaws of the clamp and had to be retested, which may damage the sample prior to retesting.  Specimen 2 for example was strained almost to breaking, but slipped from the chuck of the machine. Retesting the sample gave a very low UTS and breaking strength when compared with the other samples.&lt;/p&gt;

&lt;p&gt;All in all, these results are an interesting indicator, showing the possibility that the 3D printed PVC may actually have a significantly higher tensile strength than cast PVC.&lt;/p&gt;

&lt;h1 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h1&gt;

&lt;p&gt;Originally, this project was intended to achieve three major goals; The first goal, to examine the possibility of additive manufacturing with soft PVC was achieved in October of 2015 with the initial feasibility testing showing that PVC can be extruded through a common hot-end at pressures attainable by a 3D printer. The second goal, to integrate the feed system into a 3D printer and actually print with it was reached in late April with the production of a model of a human ear as well as a collection of test pieces to diagnose extrusion problems and material properties. Finally, the last goal has also been reached, if not quite conquered; it would have been much better to have had the time to produce and test large sample sizes to acquire statistically significant data, as well as being able to compare other material properties, particularly shore hardness.&lt;/p&gt;

&lt;p&gt;Finally, I can say I regard this project as being enormously successful for myself; not only was the original idea proven to work, but I was able to access a wealth of knowledge in fields range from electronic design and mechanical design, to material science, chemistry, control theory, biology, CAD/CAM and biomedical manufacturing.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Adventures in 3D printing PVC - Part 3</title>
   <link href="https://fabian.trauzettel.nl/3d/printing/2023/03/07/Adventures-with-PVC-3.html"/>
   <updated>2023-03-07T00:00:00+00:00</updated>
   <id>https://fabian.trauzettel.nl/3d/printing/2023/03/07/Adventures with PVC - 3</id>
   <content type="html">&lt;script type=&quot;text/javascript&quot; src=&quot;http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML&quot;&gt;&lt;/script&gt;

&lt;h1 id=&quot;implementing-my-new-knowledge-in-a-3d-printer&quot;&gt;Implementing my new knowledge in a 3D printer&lt;/h1&gt;

&lt;p&gt;First, I needed to know how to feed the extruder in a way that could be integrated in a 3D printer.  At the time, I had a Kossel Mini from Think3DPrint3D running on a RAMPS 1.4 board, so ideally the feeding system could run on a regular stepper motor hooked up to the extruder motor driver on the RAMPS board.&lt;/p&gt;

&lt;p&gt;In the end I settled on using a peristaltic pump.&lt;/p&gt;

&lt;p&gt;To achieve a printing speed of 100mm/s (0.1 m/s) with a 0.4mm nozzle:&lt;/p&gt;

&lt;p&gt;Cross-sectional are of the nozzle:&lt;/p&gt;

&lt;p&gt;\(A=\frac{\pi d^2}{4}=\frac{\pi(0.4\cdot10^{-3})^2}{4}=1.2566\cdot10^{-7} m^2\)
With a flow velocity of 0.1 m/s, this corresponds to a volumetric flow rate &lt;em&gt;Q&lt;/em&gt; of:
\(Q=A\cdot v=1.2566\cdot10^{-7} (0.1)=1.2566\cdot10^{-8} m^3/s\)
Or about 0.75 mL per minute.&lt;/p&gt;

&lt;p&gt;The flow rate of a peristaltic pump is calculated as follows:&lt;/p&gt;

&lt;p&gt;\(Q=v_{tubing}\cdot n_{rollers}\cdot \omega\)
Where $Q$ is in $mL\cdot min^{-1}$, $v_{tubing}$ is in mL, and $\omega$ is in RPM.&lt;/p&gt;

&lt;p&gt;So, how much tubing is actually occluded by my pump? To do this I need to know the sizing of my tubing and the arc length.&lt;/p&gt;

&lt;p&gt;\(L=\dfrac{\theta}{360} \cdot 2\pi r\)
Where $L$ is the Length of occluded tubing, $\theta$ is the angle along which the tube is occluded and $r$ is the radius of the curve.&lt;/p&gt;

&lt;p&gt;In my case, the tubing had an ID of 3.5mm,   and is occluded along a 271° arc with a radius of 32.5mm, so the occluded length works out to be 0.153m.&lt;/p&gt;

&lt;p&gt;Knowing the radius of the tubing, it’s easily to calculate the volume of the occluded tubing as 1.472mL.&lt;/p&gt;

&lt;p&gt;So, to reach my desired flow, my pump must rotate at 0.171 RPM, which is totally doable, even for a motor that is highly reduced to increase the available torque.&lt;/p&gt;

&lt;h2 id=&quot;steps-per-mm&quot;&gt;“Steps per mm”&lt;/h2&gt;
&lt;p&gt;We don’t want to have to completely redo the flow math that the slicer and firmware have to do. Fortunately, the feed tube and regular filament have one thing in common, and that is the fact that both are cylindrical. Therefore we can theoretically just set the filament diameter in our slicer to be equal to the ID of our tubing.&lt;/p&gt;

&lt;p&gt;However, we still need to figure out the actual steps per mm of our “filament” extruder.
If we know the amount of liquid being pumped in one revolution of the pump, we can infer the “length” of “filament” being extruded as the height of a cylinder whose diameter is the ID of our tubing and of a volume equal to the amount of liquid metered by the pump in one rotation;&lt;/p&gt;

\[\frac{4v}{\pi d^2}=L\]

&lt;p&gt;Where $v$ is the volume of liquid pumped in one revolution, $d$ is the tubing ID, and $L$ is the length of “filament” being extruded in one motor revolution.&lt;/p&gt;

&lt;p&gt;If we then divide the number of steps of the motor in one revolution, we can divide this number by the “filament length” to get our steps/mm value to start with.&lt;/p&gt;

&lt;p&gt;However, for best results, it’s probably a good idea to only use this as a starting ballpark value and do some manual calibration.&lt;/p&gt;

&lt;h2 id=&quot;installing-the-modified-hotend&quot;&gt;Installing the modified hotend&lt;/h2&gt;
&lt;p&gt;In order to prepare the 3D printer for conversion to PVC printing and to integrate the PVC feed system into the 3D printer, it was necessary to swap out the 3D printer’s effector plate for a modified version. The hot end is secured to the effector plate using a locking clip which is then held in place by a set of 6xM3 bolts.&lt;/p&gt;

&lt;center&gt;&lt;img src=&quot;/assets/posts/2023-03-07-Adventures with PVC - 3/Picture1.jpg&quot; width=&quot;600&quot; /&gt;&lt;/center&gt;

&lt;p&gt;These bolts also secure a variety of other accessories to the 3d printer when the hot end is installed, such a supplemental cooling fan and a print bed levelling probe:&lt;/p&gt;

&lt;center&gt;&lt;img src=&quot;/assets/posts/2023-03-07-Adventures with PVC - 3/Picture2.jpg&quot; width=&quot;600&quot; /&gt;&lt;/center&gt;

&lt;p&gt;Once the hot end was installed, the silicone tubing was connected to the peristaltic pump. With all vital connections now made, it was possible to begin the first feed system test.&lt;/p&gt;

&lt;center&gt;&lt;img src=&quot;/assets/posts/2023-03-07-Adventures with PVC - 3/Picture3.png&quot; width=&quot;600&quot; /&gt;&lt;/center&gt;

&lt;p&gt;The first feed system test with the redesigned pump went exactly as was originally hoped; the pump was able to produce sufficient pressure to extrude the PVC from the nozzle of the hot end, and the material cured sufficiently on its way through the hot zone. It was, however observed that the extruded filament of PVC was filled with bubbles, see below:&lt;/p&gt;

&lt;center&gt;&lt;img src=&quot;/assets/posts/2023-03-07-Adventures with PVC - 3/Picture4.jpg&quot; width=&quot;600&quot; /&gt;&lt;/center&gt;

&lt;p&gt;The PVC suspension tends to settle when stored for extended periods of time. In order to use the material, it must be gently shaken to restore a homogeneous mix to the suspension. As the suspension has a comparatively high viscosity, the entrapped air (particularly very small bubbles) does not readily escape out of the solution.&lt;/p&gt;

&lt;p&gt;Bubbling is an undesirable condition for 3D printing, as air in the extrusion path can cause localised weaknesses in the material which reduce the printed part’s overall strength.&lt;/p&gt;

&lt;p&gt;Additionally, it was observed that when the pump was made retract some pressure during printing (retractions are performed to prevent extruder “ooze”- the unintentional dragging of thin fibres of plastic behind the nozzle) the nozzle would temporarily lose pressure and would take too long to begin extruding material again. This condition is highly undesirable due to the fact that it causes underextrusion, a phenomenon caused by the deposition of too little plastic on the build surface. Underextrusion causes weak and porous prints which fail easily along the printing planes in the finished model.&lt;/p&gt;

&lt;p&gt;Unfortunately, this condition proved very difficult to solve, as it was caused by backlash in the gearing. All gears require just enough space to clear the non-meshing teeth. This means that engaged teeth have a small amount of play – meaning that the two gears can move relative to each other without transferring the right amount of motion. This mechanical loss was aggravated by the fact that FDM 3D printers only possess limited precision.&lt;/p&gt;

&lt;p&gt;Finally, it was observed that, if left idle for too long at 210°C or higher, the nozzle of the printer would become clogged. On disassembly, it was found that the nozzle had clogged due to the PVC degrading inside the nozzle, causing a blackened plug to form in the extrusion path.&lt;/p&gt;

&lt;center&gt;&lt;img src=&quot;/assets/posts/2023-03-07-Adventures with PVC - 3/Picture5.jpg&quot; width=&quot;600&quot; /&gt;&lt;/center&gt;

&lt;h2 id=&quot;corrective-actions-taken-in-response-to-results-from-feed-system-testing&quot;&gt;Corrective actions taken in response to results from feed system testing&lt;/h2&gt;

&lt;p&gt;Based on the information gathered during the initial round of feed system testing, three actions were taken, outlined below.&lt;/p&gt;

&lt;h3 id=&quot;1-nozzle-clog&quot;&gt;1. Nozzle clog&lt;/h3&gt;

&lt;p&gt;To solve this issue, both software and hardware solutions were implemented. Firstly, the printer nozzle was upgraded from a 0.4mm aperture brass nozzle to a 0.8mm stainless steel nozzle. Smaller nozzles, such as the 0.4mm nozzle being used cause higher backpressures in the feed system, and don’t allow any “idle leakage” from the extruder – small amounts of plastic forced from the nozzle due to thermal expansion. This idle leakage reduces the build-up of overheated PVC in the nozzle.&lt;/p&gt;

&lt;p&gt;Secondly, it is possible to reduce the amount of hot time by modifying the G-code so that the hot end only heats up immediately before beginning to print using the following line of G-code:&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;M109 S[first_layer_temperature]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Next, the printer can be told to deactivate the cartridge heater immediately after completing a print using the command:&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;M104 S0
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;In practice, these two changes have eliminated any further occurrences of nozzle clogging due to degraded PVC.&lt;/p&gt;

&lt;h3 id=&quot;2-replacement-of-the-peristaltic-pump&quot;&gt;2. Replacement of the peristaltic pump&lt;/h3&gt;
&lt;p&gt;As it was not possible to produce the same pump design with no backlash, it was decided to replace the peristaltic pump entirely with a directly-driven (zero backlash) peristaltic pump.&lt;/p&gt;

&lt;center&gt;&lt;img src=&quot;/assets/posts/2023-03-07-Adventures with PVC - 3/Picture6.jpg&quot; width=&quot;600&quot; /&gt;&lt;/center&gt;

&lt;p&gt;The purchased pump, with its direct-drive design, works perfectly when combined with the 65Ncm NEMA 17 motor, and has prevented any further occurrences of retraction/backlash-related underextrusion.&lt;/p&gt;

&lt;h3 id=&quot;3-bubble-reduction--degassing&quot;&gt;3. Bubble reduction / degassing&lt;/h3&gt;

&lt;p&gt;In order to address the bubble formation problem, it was decided to create a theoretical design for a degassing unit attached to the PVC reservoir. Before initiating a print, the reservoir would be reduced to about 0.5 Bar absolute pressure. This low vacuum would be maintained for one minute, after which the unit returns the reservoir to ambient pressure. To remove the maximum amount of bubbles from the PVC suspension, the system would pulse the vacuum, reducing the chamber pressure and returning to ambient repeatedly.&lt;/p&gt;

&lt;p&gt;In practice, the PVC suspension was simply allowed to sit undisturbed for a minimum of one hour before initiating a print, giving the air plenty of time to bubble out.&lt;/p&gt;

&lt;h2 id=&quot;calibration-of-the-new-pump&quot;&gt;Calibration of the new pump&lt;/h2&gt;

&lt;p&gt;The newly-bought pump had to be calibrated to allow the printer to use the extruder correctly. Unfortunately, exact data of tube diameters, etc. was not available from the manufacturer, so the steps/mm calibration had to be performed empirically.&lt;/p&gt;

&lt;p&gt;To calibrate the pump through physical measurements, rather than by calculating the correct value, a way of controlling the motor had to be come up with. To this end, an Arduino mega 2560 was used in conjunction with a discarded Pololu A4988 stepper motor driver, in a configuration similar to the one pictured below:&lt;/p&gt;

&lt;center&gt;&lt;img src=&quot;/assets/posts/2023-03-07-Adventures with PVC - 3/Picture8.jpg&quot; width=&quot;600&quot; /&gt;&lt;/center&gt;

&lt;p&gt;For the 12V supply, a common mains-fed “power brick” was used, which provided power to both the Arduino (via the Vin pin) as well as the stepper driver through the Vmot pin.&lt;/p&gt;

&lt;p&gt;Additionally, two buttons were added to send the motor 5000 steps in one direction or 5000 steps in the opposite direction.&lt;/p&gt;

&lt;p&gt;The following Arduino Code was used:&lt;/p&gt;

&lt;div class=&quot;language-cpp highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;cp&quot;&gt;#include&lt;/span&gt;&lt;span class=&quot;cpf&quot;&gt;&amp;lt;a4988.h&amp;gt;&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt; //A4988 stepper driver library&lt;/span&gt;&lt;span class=&quot;cp&quot;&gt;
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;//define the which pins on the A4988 are connected to what&lt;/span&gt;
&lt;span class=&quot;cp&quot;&gt;#define MS1PIN 8
#define MS2PIN 9
#define MS3PIN 10
#define DIRPIN 4
#define STEPPIN 5
#define ENABLEPIN 6
#define MOTOR_STEPS 200
&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;//initiate an instance of the A4988 library object and call it &quot;myA4988&quot;&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;a4988&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;myA4988&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MOTOR_STEPS&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;MS1PIN&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;MS2PIN&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;MS3PIN&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DIRPIN&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ENABLEPIN&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;STEPPIN&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;setup&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;//do not enable the motor on boot&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;myA4988&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;enable&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;//set the stepper driver to 1/16th stepping mode&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;myA4988&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;setStepMode&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;16&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;//sets the microsecond delay betweeen steps&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;myA4988&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;setDelay&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;800&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;loop&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;//if button A is pressed, send 5000 steps in one direction&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;digitalRead&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;14&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;HIGH&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;){&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;myA4988&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;setDirection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;myA4988&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;step&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5000&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;//if button B is pressed, send 5000 steps on the other direction&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;digitalRead&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;15&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;HIGH&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;){&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;myA4988&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;setDirection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;myA4988&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;step&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;5000&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;By filling the tube with water and running the pump, it was possible to measure the distance the water was moved through the tubing, making it possible to calculate back the number of steps per mm.&lt;/p&gt;

&lt;center&gt;&lt;img src=&quot;/assets/posts/2023-03-07-Adventures with PVC - 3/Picture9.jpg&quot; width=&quot;600&quot; /&gt;&lt;/center&gt;

&lt;p&gt;The meniscus of the water in the tube was marked off using a permanent marker. The pump was then set to run 5000 steps, and the displacement of the meniscus inside the tube was recorded. Ten runs were performed and an average value for steps per mm was calculated.&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Run&lt;/th&gt;
      &lt;th&gt;Steps&lt;/th&gt;
      &lt;th&gt;distance&lt;/th&gt;
      &lt;th&gt;steps/mm&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;1&lt;/td&gt;
      &lt;td&gt;5000&lt;/td&gt;
      &lt;td&gt;64&lt;/td&gt;
      &lt;td&gt;78.1250&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2&lt;/td&gt;
      &lt;td&gt;5000&lt;/td&gt;
      &lt;td&gt;64.06&lt;/td&gt;
      &lt;td&gt;78.0518&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;3&lt;/td&gt;
      &lt;td&gt;5000&lt;/td&gt;
      &lt;td&gt;64.46&lt;/td&gt;
      &lt;td&gt;77.5675&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;4&lt;/td&gt;
      &lt;td&gt;5000&lt;/td&gt;
      &lt;td&gt;64.12&lt;/td&gt;
      &lt;td&gt;77.9788&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;5&lt;/td&gt;
      &lt;td&gt;5000&lt;/td&gt;
      &lt;td&gt;64.6&lt;/td&gt;
      &lt;td&gt;77.3994&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;6&lt;/td&gt;
      &lt;td&gt;5000&lt;/td&gt;
      &lt;td&gt;63.98&lt;/td&gt;
      &lt;td&gt;78.1494&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;7&lt;/td&gt;
      &lt;td&gt;5000&lt;/td&gt;
      &lt;td&gt;64.63&lt;/td&gt;
      &lt;td&gt;77.3635&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;8&lt;/td&gt;
      &lt;td&gt;5000&lt;/td&gt;
      &lt;td&gt;63.94&lt;/td&gt;
      &lt;td&gt;78.1983&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;9&lt;/td&gt;
      &lt;td&gt;5000&lt;/td&gt;
      &lt;td&gt;63.81&lt;/td&gt;
      &lt;td&gt;78.3576&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;10&lt;/td&gt;
      &lt;td&gt;5000&lt;/td&gt;
      &lt;td&gt;64.13&lt;/td&gt;
      &lt;td&gt;77.9666&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt;avg&lt;/td&gt;
      &lt;td&gt;77.9158&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt; &lt;/td&gt;
      &lt;td&gt;stdev&lt;/td&gt;
      &lt;td&gt;0.3304&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
</content>
 </entry>
 
 <entry>
   <title>Adventures in 3D printing PVC - Part 2</title>
   <link href="https://fabian.trauzettel.nl/3d/printing/2017/04/08/Adventures-with-PVC-2.html"/>
   <updated>2017-04-08T00:00:00+00:00</updated>
   <id>https://fabian.trauzettel.nl/3d/printing/2017/04/08/Adventures with PVC - 2</id>
   <content type="html">&lt;script type=&quot;text/javascript&quot; src=&quot;http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML&quot;&gt;&lt;/script&gt;

&lt;h1 id=&quot;testing-the-concept&quot;&gt;Testing the concept&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;Why?&lt;/strong&gt; To investigate the behaviour of the PVC when extruded through a conventional 3D printing extruder, as well as to gain an insight into the pressures and temperatures required to process the material in this manner.&lt;/p&gt;

&lt;h2 id=&quot;experimental-setup&quot;&gt;Experimental Setup&lt;/h2&gt;
&lt;center&gt;&lt;img src=&quot;/assets/posts/2017-04-08-Adventures with PVC - 2/image18.png&quot; width=&quot;600&quot; /&gt;&lt;/center&gt;

&lt;p&gt;The photograph above shows the experiment between test runs. In the foreground the extruder can be seen filled with PVC and mounted to a stand, ready for weights to be applied on the syringe plunger, as well as the power supply and control circuitry. Note the Current reading on the 24V supply: no current is flowing, meaning the Arduino has not yet switched on the heating element. The 12V supply is providing power for the cooling fan, which is run continuously.&lt;/p&gt;

&lt;h2 id=&quot;extruder&quot;&gt;Extruder&lt;/h2&gt;
&lt;p&gt;The extruder used for this experiment consisted of a syringe attached to an &lt;a href=&quot;http://e3d-online.com/E3D-v6&quot;&gt;e3d v6 hotend&lt;/a&gt; with a 0.4mm nozzle, as pictured below. This particular hotend was modified by cutting a thread into the top of the heatsink and attaching a hose barb to connect a liquid feed.&lt;/p&gt;

&lt;center&gt;&lt;img src=&quot;/assets/posts/2017-04-08-Adventures with PVC - 2/image19.png&quot; width=&quot;600&quot; /&gt;&lt;/center&gt;

&lt;p&gt;The entire apparatus is mounted on a 3D-printed bracket to hold all parts in aligment. The syringe containing the PVC, was connected to the hotend via a short length of 6mm silicone tubing. During the experiment, weights were applied to the plunger until cured PVC began to be extruded from the nozzle. The required pressure was then be calculated by knowing the internal diameter of the syringe and the force applied to it.&lt;/p&gt;

&lt;p&gt;The e3d v6 hotend (pictured below) was chosen for this experiment because of its robust aluminium design and open-source community support, meaning that all required documentation was easily available. Furthermore, the aluminium body meant that it was quite easy to simply bore out and thread the extrusion channel to attach a hose fitting. Beginning with a commonly-used platform like the e3d series of hotends also allowed a reduced design complexity when integrating the nozzle into an existing 3D printer.&lt;/p&gt;

&lt;center&gt;&lt;img src=&quot;/assets/posts/2017-04-08-Adventures with PVC - 2/image20.png&quot; width=&quot;600&quot; /&gt;&lt;/center&gt;

&lt;h2 id=&quot;temperature-control&quot;&gt;Temperature Control&lt;/h2&gt;

&lt;p&gt;In order to maintain the hotend at the desired temperature, a PID controller was implemented on an &lt;a href=&quot;https://www.arduino.cc/en/Main/arduinoBoardMega2560&quot;&gt;Arduino Mega 2560&lt;/a&gt;, using the following code:&lt;/p&gt;

&lt;div class=&quot;language-cpp highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;cp&quot;&gt;#include&lt;/span&gt; &lt;span class=&quot;cpf&quot;&gt;&amp;lt;PID_v1.h&amp;gt;&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;   			//PID library&lt;/span&gt;&lt;span class=&quot;cp&quot;&gt;
#include&lt;/span&gt; &lt;span class=&quot;cpf&quot;&gt;&amp;lt;math.h&amp;gt;&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;     			//Math library&lt;/span&gt;&lt;span class=&quot;cp&quot;&gt;
&lt;/span&gt;
&lt;span class=&quot;kt&quot;&gt;double&lt;/span&gt;  &lt;span class=&quot;n&quot;&gt;Setpoint&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Input&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Output&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;  	&lt;span class=&quot;c1&quot;&gt;//declare variables used in the code&lt;/span&gt;

&lt;span class=&quot;kt&quot;&gt;double&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;Thermistor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;RawADC&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;){&lt;/span&gt;    	&lt;span class=&quot;c1&quot;&gt;//declare the function that reads the temperature from the thermistor&lt;/span&gt;
  &lt;span class=&quot;kt&quot;&gt;double&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;temp&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  					&lt;span class=&quot;c1&quot;&gt;//using the Steinhart-Hart equation&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;temp&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;9600.0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;1024.0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;RawADC&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)));&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;//find the log of the resistance&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;temp&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.0008104849864&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.0002115244184&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;0.00000007098035250&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;temp&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;temp&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;temp&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; 			&lt;span class=&quot;c1&quot;&gt;//using the Steinhart-hart coefficients&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;temp&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;temp&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;273.15&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;//convert absolute temperature into degrees celsius&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;temp&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;//create a PID controller, defining input, output, setpoint, Kp, Ki and Kd, set to direct mode&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;PID&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;tempPID&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Input&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Output&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Setpoint&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;21.28&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;2.37&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;47.76&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;DIRECT&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; 

&lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;setup&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;Serial&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;begin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;9600&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;         &lt;span class=&quot;c1&quot;&gt;//begin Serial communication&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;tempPID&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;SetMode&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;AUTOMATIC&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;//set PID to run automatically&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;Setpoint&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;                 &lt;span class=&quot;c1&quot;&gt;//initialise setpoint to 0 (off)&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;loop&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;Input&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Thermistor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;analogRead&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;A0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;//PID input is the current temperature&lt;/span&gt;
  
  &lt;span class=&quot;n&quot;&gt;tempPID&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Compute&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;                  &lt;span class=&quot;c1&quot;&gt;//calculate the PID&apos;s output&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;analogWrite&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Output&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;             &lt;span class=&quot;c1&quot;&gt;//write the output as PWM to one of the digital pins&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;Serial&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Setpoint&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;              &lt;span class=&quot;c1&quot;&gt;//serial outputs for datalogging &lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;Serial&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;, &quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;Serial&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Input&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;Serial&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;, &quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;Serial&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;println&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Output&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Serial&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;available&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;){&lt;/span&gt;         &lt;span class=&quot;c1&quot;&gt;//if there is a non-zero integer in the incoming stream&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;Setpoint&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Serial&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;parseInt&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;         &lt;span class=&quot;c1&quot;&gt;//set the setpoint to the integer&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;delay&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;250&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;                         &lt;span class=&quot;c1&quot;&gt;//repeat 4 times per second&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&quot;the-steinhart-hart-thermistor-equation&quot;&gt;The Steinhart-Hart thermistor equation&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;https://en.wikipedia.org/wiki/Steinhart%E2%80%93Hart_equation&quot;&gt;Steinhart-Hart equation&lt;/a&gt; referenced in the code comments is the following equation:&lt;/p&gt;

\[\frac{1}{T} = A+B *ln(R) + C[ln(R)]^3\]

&lt;p&gt;It models the behaviour of NTC (negative temperature coefficient) thermistors. The variables represent the following:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;T is the absolute temperature in Kelvin&lt;/li&gt;
  &lt;li&gt;R is the resistance of the thermistor in Ohms&lt;/li&gt;
  &lt;li&gt;A, B and C are coefficients individual to the resistor used. These can be acquired from the Thermistor’s documentation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this case, A, B and C were found by examining the manufacturer datasheet for the Semitec 104-GT2 thermistor found &lt;a href=&quot;http://www.atcsemitec.co.uk/gt-2-glass-thermistors.html&quot;&gt;here&lt;/a&gt;. Considering the intended temperature range of the extruder would be between room temperature and approximately 250°C, the following resistance values were used:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Data Point&lt;/th&gt;
      &lt;th&gt;Temperature (°C)&lt;/th&gt;
      &lt;th&gt;Resistance (Ω)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;\(T_1\)&lt;/td&gt;
      &lt;td&gt;0°C&lt;/td&gt;
      &lt;td&gt;353.7 kΩ&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;\(T_2\)&lt;/td&gt;
      &lt;td&gt;100°C&lt;/td&gt;
      &lt;td&gt;5.556 kΩ&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;\(T_3\)&lt;/td&gt;
      &lt;td&gt;200°C&lt;/td&gt;
      &lt;td&gt;0.1740 kΩ&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;Plugging these into the matrix calculation for A, B and C:&lt;/p&gt;

\[\begin{matrix} 
1 &amp;amp; ln(353700) &amp;amp; (ln(353700))^3 \\ 1 &amp;amp; ln(5556) &amp;amp; (ln(5556))^3 \\ 1 &amp;amp; ln(174) &amp;amp; (ln(174))^3 \\
\end{matrix}
 *
 \begin{matrix}
 A \\ B \\ C
 \end{matrix}
 =
  \begin{matrix}
 \frac{1}{0+273.15} \\ \frac{1}{100+273.15} \\ \frac{1}{250+273.15}
 \end{matrix}\]

\[\begin{matrix}
A = 0.8104849864 * 10^{-3} \\
B = 2.115244184 * 10^{-4}  \\
C = 0.7098035250 * 10^{-7}  \\
\end{matrix}\]

&lt;p&gt;In other words,
\(\frac{1}{T} = 0.8104849864 * 10^{-3} + 2.115244184 * 10^{-4} * ln(R) + 0.7098035250 * 10^{-7} [ln(R)]^3\)&lt;/p&gt;

&lt;p&gt;In graph form, it looks like the following:&lt;/p&gt;
&lt;center&gt;&lt;img src=&quot;/assets/posts/2017-04-08-Adventures with PVC - 2/g3508.png&quot; width=&quot;600&quot; /&gt;&lt;/center&gt;

&lt;h2 id=&quot;circuitry&quot;&gt;Circuitry&lt;/h2&gt;

&lt;p&gt;The hotend was powered using a 24V PSU borrowed from the electronic engineering department.  The following circuit was used:&lt;/p&gt;

&lt;center&gt;&lt;img src=&quot;/assets/posts/2017-04-08-Adventures with PVC - 2/image21.png&quot; width=&quot;600&quot; /&gt;&lt;/center&gt;

&lt;p&gt;There are effectively  two separate circuits in this schematic. The first is a voltage divider where R2 is a 10kΩ resistor and R4 is the NTC thermistor, allowing changes in the thermistor’s resistance to be measured as voltage changes by the Arduino. However, when measured with an Extech EX330 multimeter, the resistor was found to be closer to 9600Ω.
To reduce errors due to this discrepancy, the 9600Ω resistance was used in the voltage divider calculation.&lt;/p&gt;

&lt;p&gt;To calculate the output of the voltage divider, the following formula was used:&lt;/p&gt;

\[V_o = V_i (\frac{R_2 } { R_{Thermistor} +R_2 })\]

&lt;p&gt;Where \(R_2 = 9600\Omega\).&lt;/p&gt;

&lt;p&gt;The second circuit contains the heater and a &lt;a href=&quot;https://www.onsemi.com/pub/Collateral/TIP120-D.PDF&quot;&gt;TIP 121&lt;/a&gt; That allowed the Arduino to regulate the hotend with a PWM signal. The two circuits were assembled on a piece of protoboard as pictured below:&lt;/p&gt;
&lt;center&gt;&lt;img src=&quot;/assets/posts/2017-04-08-Adventures with PVC - 2/image22.jpeg&quot; width=&quot;600&quot; /&gt;&lt;/center&gt;

&lt;h2 id=&quot;procedure&quot;&gt;Procedure&lt;/h2&gt;
&lt;p&gt;The extruder was connected to the power supply and the control circuitry. After establishing contact to the Arduino via serial connection and beginning to log the data to the attached PC, the temperature of the extruder was set to the level desired for the test run. The air was manually purged from the extrusion channel by pressing down the plunger by hand until PVC began to be extruded from the nozzle, at which point no more force was exerted on the plunger. Once the flow of extruded PVC stopped, weights were added on top of the plunger in 2N increments until a steady stream of PVC could be observed being extruded from the nozzle of the extruder. At that point, the total force on the plunger was recorded.&lt;/p&gt;

&lt;h2 id=&quot;results&quot;&gt;Results&lt;/h2&gt;
&lt;p&gt;Syringe inner diameter was measured as 15.75mm.&lt;/p&gt;

\[Syringe Area=0.00194828 m^2\]

\[Pressure = \frac{Force}{Area}\]

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Temperature (°C)&lt;/th&gt;
      &lt;th&gt;Attempt 1 (N)&lt;/th&gt;
      &lt;th&gt;Attempt 2 (N)&lt;/th&gt;
      &lt;th&gt;Attempt 3 (N)&lt;/th&gt;
      &lt;th&gt;Mean (N)&lt;/th&gt;
      &lt;th&gt;Mean Pressure(Pa)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;210°C&lt;/td&gt;
      &lt;td&gt;20N&lt;/td&gt;
      &lt;td&gt;24N&lt;/td&gt;
      &lt;td&gt;22N&lt;/td&gt;
      &lt;td&gt;22.00N&lt;/td&gt;
      &lt;td&gt;11,292.01 Pa&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;200°C&lt;/td&gt;
      &lt;td&gt;24N&lt;/td&gt;
      &lt;td&gt;26N&lt;/td&gt;
      &lt;td&gt;30N&lt;/td&gt;
      &lt;td&gt;26.67N&lt;/td&gt;
      &lt;td&gt;13,688.99 Pa&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;190°C&lt;/td&gt;
      &lt;td&gt;30N&lt;/td&gt;
      &lt;td&gt;32N&lt;/td&gt;
      &lt;td&gt;34N&lt;/td&gt;
      &lt;td&gt;32.00N&lt;/td&gt;
      &lt;td&gt;16,424.74 Pa&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;180°C&lt;/td&gt;
      &lt;td&gt;40N&lt;/td&gt;
      &lt;td&gt;38N&lt;/td&gt;
      &lt;td&gt;42N&lt;/td&gt;
      &lt;td&gt;40.00N&lt;/td&gt;
      &lt;td&gt;20,530.93 Pa&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;success&quot;&gt;Success!&lt;/h2&gt;
&lt;p&gt;We proved that liquid PVC can be cured and extruded from an e3d v6 hotend!&lt;/p&gt;
&lt;center&gt;&lt;img src=&quot;/assets/posts/2017-04-08-Adventures with PVC - 2/image1.jpg&quot; width=&quot;600&quot; /&gt;&lt;/center&gt;
</content>
 </entry>
 
 <entry>
   <title>Adventures in 3D printing PVC - Part 1</title>
   <link href="https://fabian.trauzettel.nl/3d/printing/2017/01/22/Adventures-with-PVC.html"/>
   <updated>2017-01-22T00:00:00+00:00</updated>
   <id>https://fabian.trauzettel.nl/3d/printing/2017/01/22/Adventures with PVC</id>
   <content type="html">&lt;p&gt;For my first blog post, I thought I’d write about the project which took up most of my time in my final year of undergrad.&lt;/p&gt;

&lt;p&gt;During my third year internship, one thing kept popping up in my mind - what the hell was I going to do for my final year project? Rumour had it that lecturers offered a limited number of projects to students without one every year, and that preference was given to students with better grades. While I wasn’t concerned about my grades, they were also fairly middle-of-the-pack for my class. It was clear I had to come up with something, and fast.&lt;/p&gt;

&lt;p&gt;Working in the lab, I’d look over my co-workers’ shoulders whenever I wasn’t busy with something else. I got to see a lot of cool materials I wouldn’t have gotten to see otherwise this way - different grades of latex, natural rubber, PVC and silicone, among others. Eventually I noticed something interesting about the way plasticised PVC behaves. You see, it starts life as a mixture of a particulate PVC resin, liquid plasticiser and heat stabilisers, as well as a few other components. Without any external colourants added to the mix, it’s a milky liquid, slightly runnier than cream. When you start to warm the mixture up, the plasticiser and the PVC begin to react with each other, and the mixture gels. The speed of this reaction varies based on the temperature and the exact ingredients used. This property is useful for slush moulding or dip coating - you can use a hot mould and dip it into a vat of PVC, and the material will deposit on the mould, giving a nice smooth coating.&lt;/p&gt;

&lt;p&gt;The magic happens when you keep warming the PVC. After it has finished gelling it begins to melt like a thermoplastic. Provided it’s not overheated and begins to decompose, the PVC isn’t any worse for wear afterward - it looks and feels indistinguishable from the conventionally-made material.&lt;/p&gt;

&lt;p&gt;I began to think that if I went about it the right way, I could modify a regular RepRap-style printer to print with soft PVC.&lt;/p&gt;

&lt;p&gt;Having convinced my lecturers that I was confident I could pull this off, I started the project… by buying my first 3D printer. I’d had my eye on &lt;a href=&quot;https://www.think3dprint3d.com/Kossel-Mini-3dPrinter-Kit&quot;&gt;Think3DPrint3D’s Kossel Mini&lt;/a&gt; for a while, and this was the perfect excuse to buy one.&lt;/p&gt;

&lt;center&gt;&lt;img src=&quot;/assets/posts/2017-01-22-adventures-in-3d-printing-with-pvc/Kossel_Mini.jpg&quot; width=&quot;200&quot; /&gt;&lt;/center&gt;

&lt;p&gt;See my next few posts on how I got the system working.&lt;/p&gt;

&lt;p&gt;Here’s a teaser:&lt;/p&gt;

&lt;center&gt;
&lt;video width=&quot;480&quot; controls=&quot;&quot;&gt;
&lt;source src=&quot;/assets/posts/2017-01-22-adventures-in-3d-printing-with-pvc/media2.mp4&quot; /&gt; 
&lt;/video&gt;
&lt;/center&gt;

&lt;p&gt;And another:&lt;/p&gt;

&lt;center&gt;
&lt;video width=&quot;480&quot; controls=&quot;&quot;&gt;
&lt;source src=&quot;/assets/posts/2017-01-22-adventures-in-3d-printing-with-pvc/MOV_0804.mp4&quot; /&gt; 
&lt;/video&gt;
&lt;/center&gt;

</content>
 </entry>
 

</feed>
