6. 3D Scanning and printing

Intro

When I moved to Amsterdam, my friend Dustin helped me move into the apartment that I was renting. He had a 3D printer and was hoping to print, in secret, 3D designs of an engagement ring for his soon to be fiancé (hopefully). He brought the 3D printer to my house and said that I could keep it there to print with. He said the plate was bent, and spent a few hours fixing the Ender 3 machine that was going to be left at my new plek. I had high hopes for my 3D printing. After Dustin left, I attempted my first print. Halfway through the job, something went wrong. I brought the machine upstairs, to store it in a dusty corner. And that is my 3D printing career up until this point.

Tasks

Tasks

Group assignment

Our group assignment this week was to initialize and test the 3D printers at the Waag lab. In Neil's presentation, he outlined the different aspects of 3D printing that act as constraints on the ability of different printers and filament types. These are the features that we are comparing:

  • overhang
  • bridging
  • stringing
  • sharp-corners
  • tolerance
  • scale/diameter

In Neil's lecture, there were quite a few different, individual prints to test each of these features. However, following the lead of Michelle Vossen's Waag Fab Academy year, we decided to use a single test print that would incorporate everything in one.

3D printer set up

After our first full day of printer testing, I noticed that there was a notable pattern when it came to things to consider when using a 3D printer, a checklist, if you will...

  • Make sure to select the correct filament type for the project + nozzle size
  • Clean the plate with ethanol
  • Calibrate the printer / print bed (some machines have auto-calibration, some not -- for instance, the Ender 3 has analog dials under the build plate)
  • Choose a slicer that is compatible with the printer (for converting files into G-Code)
  • Load G code on an SD card
  • Check the first layer of the print (or first few)

Prusa MK3S

Slicer program: PrusaSlicer

Manual: Here

Calibration process: Here is the link to the different kinds of calibration processes. We opted to do an XYZ calibration.

What is an XYZ calibration:

  1. It checks whether the printer was assembled correctly and ensures the axes are perpendicular to each other
  2. Test measures the skew of the X/Y axis and applies compensations for any imperfections
  3. It verifies the printer's ability to move accurately along all three axes (X, Y, and Z)

From the LCD Menu > choose Calibration > XYZ calibration

Remove the steel sheet > Cut and place a piece of paper underneath the nozzle for each of 4 initial calibration points > Make sure the paper can move freely, but only just

The screen instructs to: "Hit reset if the nozzle touches the paper"

Then, when the initial 4 point calibration is done, the program calibrates 9 further points with the steel sheet back on (the heat bed).

Nine points

Before printing, clean the steel sheet with 70% ethanol and a dry paper towel.

To make space to clean, on the digital screen select Move axis > Z > move the nozzle up

Next, we did the First layer calibration > PLA

You want the filament being laid to be squished a bit, not hovering way above. Note the guides, provided by Prusa, below.

First layer 1

First layer 2

First layer 3

Our first First layer calibration test didn't meet our liking. The nozzle was too close to the print bed and it flattened the printed filament too much. We adjusted the Z-axis position and got the results we were looking for.

Layer test error

Next, it was time to print.

Print results:

We first tested transparent PLA. In order to check if transparent PLA behaves differently, we also ran a test on colored PLA. The blue PLA's print was a bit stringy, which Irja suggested is likely because the filament isn't packed in a plastic bag.

We used the default layer height of 0.2mm. I wasn't aware to consider the layer height until someone at Waag asked me and I didn't have a good answer.

Print result

Print result

SainSmart INFI-20 aka Wallboy

Wallboy

The INFI-20 (aka Wallboy) is the most interesting of Waag's 3D printers. It is also the trickiest to work with. It's attached to the wall and prints at a 45 degree angle. It has a treadmill-style print bed, which allows users to keep printing new parts -- while the old ones are rolled off the assembly line. It's also ideal for printing really long parts.

Slicer program: SainSmart Slicer

Manual: Here

Calibration process: We ran the First layer calibration on Wallboy and it seemed that the print bed was already well calibrated. The filament was flattened, but not squished. The filament was also sticking nicely to the print bed.

Wallboy calibration

Print results: The print started smoothly, however, at a certain stage, Sam yanked the SD card from the machine and the print stopped. When we fired up the print again, the filament wasn't sticking to the print bed. It kept "pooping" out curly strands of filament. I cleaned the print bed, rolled back the y-axis, and tried again. We got the same results.

Wallboy error

Although the results were quite confusing, with a bit of deductive reasoning, I figured out that there were two files on the SD card that had the same name. One of them was for Wallboy, and the other was for the Prusa.

Luckily, that was the issue and the print started working.

The issue, however, with a printer at 45 degrees, is managing how the print sticks to the print bed. Our test print eventually became too heavy and fell.

For the rest of the week, we avoided Wallboy.

Ender 3

Slicer program: PrusaSlicer, Creality, Ultimaker Cura, etc.

Manual: Here

Calibration process: Auto home > then try to fit paper underneath the nozzle at the four corners of the print bed by moving the paper and nozzle along the X and Y axis > making sure that the paper is sort of in contact with the nozzle, but can still move freely.

Print results:

We didn't really get to use the printer that much because Sam was working on his project and then on Friday the nozzle clogged and since then we haven't been able to unclog it.

Print result

Ultimaker

Ultimaker

Ultimaker specs

Slicer program: Ultimaker Cura

Manual: Here

Calibration process: This seemed to almost break Irja. I was working on calibrating Wallboy at the time, though, so I wasn't involved.

She confirmed that it was a tough day, but I think that the Ultimaker didn't break her, it was just the icing on the cake. Here are her notes about calibration, but it appears that you just need to follow the prompts on the Ultimaker's screen, much like the other printers.

Print results: This printer was definitely the slowest of the bunch. The print quality seemed to be the best, though. It seemd that the print time estimation was way off, but regardless, we mistimed our test print and didn't have enough runway to finish our first test print. Since we were going to run out of time anyways, we decided to increase the print speed, from 100% to 250%. It had no effect on the estimated print time. It did however shift the whole print so that the filament was lined up incorrectly.

On Friday, Sam got in early and started the prints. Perhaps he felt guilty about destroying my first beautiful print on Wallboy. Perhaps we'll never know. Anyways, this time the print finished. The print quality was very good when compated to the Prusa and the Ender.

Print result

Elegoo Mars 3

Slicer program: Chitubox

Manual: Here

Calibration process: Prepare the model in the slicer so that the support structures aren't too many. Load the file onto a USB and insert that into the printer. Before printing, make sure to calibrate the plate (with the resin bowl off). Use an allen key to loosen the top plate. Select the calibrate option from the touch screen. When the process is done, make sure to set that as the Z-zero point. Guide the plate up, add the resin bowl back, and fill it with stanrdard photopolymer resin. Start the print.

Prep

Layer view

When the print is ready, unscrew the top plate and let some resin drip off. Prepare the cleaning / curing machine. Attach the alchohol filled Elegoo tupperware. Add in the model and set the machine to do a spin cycle for 6 minutes. After that's done, set the model on the yellow disk and set the machine to curing mode. We cured the model for 7 minutes. After that, the print was ready -- apart from some supports that needed to be clipped off.

Done!

Cleaning

Cleaning 2

The cleaning process is the last major aspect of using the Elegoo machine. It's the main con of using this machine. The resin is sticky and toxic. Everything needs to be cleaned with 99% isopropyl alchohol. And it's important never to let the resin get / stay on the bottom of the resin bowl. The cleanup claimed a lot of innocent paper towel lives. RIP.

Cleaning more

Print results: The results were excellent. Way more detailed and precise than the other 3D printers. The tiny, little teeth on the dragon head that Henk printed were very well done. I was impressed.

Done!

Slicing

Keep objects close together.

Select all and decrease scale to make the parts fit on the print bed.

Scale down

Place object flat.

Make flat

Adjust infill percent and pattern. There was only one object that seemed thick enough to warrant this, so I wanted to figure out how to adjust the infill of just one object.

One object

Infill settings

NB. According to Sam, Gyroid is the quickest infill to use.

Make sure to consider layer height and how it will affect print quality vs. speed. 0.2mm is standard on the Prusa printer. The Ultimaker has lower default settings (.06, .1, .15).

Layer height

Filament considerations

When loading filament, make sure to trim the end.

Cut

Let the printer know that you're loading in filament by selecting Load filament > wait for the nozzle to heat up > put the spool on something that will allow it to spin > feed the filament through a tube / into the extruder > test extrude

Loading

Filament type

Thru tube + spool

Extruder load

NB. Make sure to select (on-screen) the correct filament type (important for heating).

On Friday, I struggled to get the filament out of the Prusa. After trying the method of heating the nozzle and pulling, with no success, eventually, Sam figured out that running a test extrusion helped pry the filament free.

Unload

Unload fix

G-Code

G Code is the language that the 3D printer understands. G-code is very old. It’s used for all CNC machines / anything with XYZ or rotating axis.

G-commands: positioning M-commands (miscellaneous): tool and machine set up

Individual project

Fusion design

The previous toilet model I made was clunky, too big, and not as clean as I remembered. So, I decided to simplify things by creating just a swiveling toilet seat that hinges around a through bar. I was pretty stoked about the new model, but it turned out to be too subtractive. I redesigned the hinge so that the through bar would be printed right in the middle of the toilet's hinge opening. And Henk approved.

Hinge 1

In this second screenshot you can see that I have two different mechanisms that I was looking to test. I figured that there was a good opportunity here to see which design would work better so that I can possibly use that knowledge for future project iterations.

Hinge 2

In order to save on print time for this test, I sliced the model in Fusion and exported it as an STL file. In PrusaSlicer I was able to separate the object into separate parts. Clever lil program this one! After that I removed the front of the toilet seat. My first print attempt took just over an hour.

Trim for slicer

The print turned out rather well. The through bar didn't need any supports. It sagged a little bit, but moved completely freely at the end of the print.

The only major issue was a bunch of spaghetti on the big overhang that is the base of the middle knob. Check that in the top right hand corner of the photo below.

Hero

Project print

Opensource toilet model

The toilet design I found online looked great. The parts were made to fit together and this definitely inspired my reimagined toilet seat design. I printed it using PLA on the Ultimaker -- in white -- and I'm happy with the results.

Test toilet

3D scanning

On Friday, we 3D scanned my head. The results are below in the model viewer. For this we used the Creality Ferret.

ME scan

Render file

Ferret scan

Creality Ferret

On Monday I decided that I would try to 3D scan my mouse: the Logitech MX Vertical.

Mx Vertical

The set up of the Ferret was straightforward. There is plenty of information about the device and best practices.

Mouse scan

Mouse scan 2

As you can see, the result is not great. We didn't have tons of time to perfect the scanning, but I definitely think there is achievable room for improvement, if I were to review the tutorials that Creality gives users.

Online 3D model viewer

I wanted to have my documentation show a 3D model, so, I looked at Henk's code because he said that he got the model viewer working.

This was the site that he used: Model-viewer.dev.

However, my 3D render file was huge. Henk's wasn't. However, I still tried to make it work. Reviewing his Git repository, I could see that he had a glTF file, so I converted my .obj to .gltf with Blender.

There was also a min.js file on Henk's repository that I was unable to open in Gitlab. When I opened it, the site would crash.

Eventually I found the file on model-viewer, copied the file's contents to a file I created in my repository in VSC. Still I was without a working 3D model.

I saw that Henk has something called a .bin in his repository, but my model's bin file was way too big.

Mkhitar (aka The Chosen One) uses a SketchFab embed to display his models, but when I tried to make one, it turned out that my .obj file was too big. I uploaded a .glb file, that I had converted to in Blender, and that was small enough to use SketchFab. It's much easier for 3D models that are large. I think I'll just do this.

Digital files

Inspiring resources