3-D Printing


This is a quick-start guide for my friends getting started with 3-D printing. It is mostly specific to the 3-D printer that we all have, the Creality Ender-3 Pro.

The latest version of this document is always found at https://futureboy.us/blog/3d.html

Table of Contents

Where is my Documentation?

When you first open the printer box, you may be wondering "where is my documentation?" There is a printed fold-out assembly guide, but not much else.

The printer's documentation is on the little USB drive that comes with your printer! Plug this into your computer and you will find assembly videos, manuals, and test files to print. I may have also printed out some of these manuals for you.

The USB drive contains a MicroSD card which is the way you will also print your models! The MicroSD card pulls out of the USB drive carrier and is inserted into the slot on the front of your printer. The 3-D printer will read files with the .gcode file extension and print them.

Assembling the Printer

There is an assembly video on the USB drive that comes with the printer that you can play in your computer. There is also a fold-out assembly guide. Note that the order of assembly in the video does not exactly match the printed directions. Use the printed directions but refer to the video when necessary. We assembled the printer, having no idea what we were doing, in about 90 minutes working slowly and carefully. Try to figure out what each motor moves as you put it together! Here are a few things to double-check:

Leveling the Bed

The most important thing you can do to ensure a good print is making sure your print bed is leveled and at the right initial height from the nozzle. For this, you will need a typical sheet of typing paper.

Manual Leveling

For your first attempts, I recommend that you manually level the bed by using the printer's built-in menus. You will learn a lot from this! The menu items you will need are under Prepare and are:

  1. Auto Home (do this first!)
  2. Move Axis (and then move the X, Y, and Z axes a bunch of times to move the print head to each corner. Always raise the Z axis before moving on the X or Y axis!)

In short, you will first place the piece of paper on the print bed and then manually move the nozzle to all 4 corners and the center of the print bed, adjusting the bed height so that the nozzle just scrapes the piece of paper and the paper can slide with just a tiny bit of resistance. Make sure you raise the Z axis off of the bed before moving it on the X and Y axes!

To adjust the bed level at each corner, you will move the head to each corner and turn one of the 4 large black knobs on the bottom of the bed to make the nozzle just scrape the piece of paper. Turning clockwise raises the bed (makes it "tighter") and turning counterclocwise lowers the bed (makes it looser.) Repeat this several times for each corner and the middle of the bed. When adjusting the middle of the bed, you must raise or lower all of the 4 corner wheels! Repeat this process a couple of times.

In my experience, the bed may not be exactly flat, and the center of the bed may be higher or lower than the corners. Since smaller prints will be made in the middle of the bed, getting the middle of the bed height correct is the most important!

Once you've leveled the bed manually once or twice, and have learned which are the X, Y, and Z axes, there are some faster ways to help level the bed!

Bed Leveling Tools

One of the best ways to help you level your bed is by running a program from your SD card that helps move the print head to each corner of the bed.

I have created a modified bed leveling tool which is a short .gcode program that you will "print" from your 3-D printer (it doesn't actually print anything, but moves the print head to various points on your print bed and lets you adjust the bed level.) The file is here:


You will need to download this to your SD card, safely eject your SD card from your computer, insert the SD card into the 3-D printer, and choose "Print from TF card" from the printer's menu. This file is based on a file by Chuck Hellebuyck. He has a video below describing the process:

Bed Leveling Tools and Video

The page above contains videos and his original .gcode file, CHEP_bed_level.gcode, that you will extract to your SD card (which the printer calls a TF card) and run on your printer to make it easy to level your bed by moving the nozzle to all 4 corners and the center of the bed.

Alternate Manual Leveling

Warning: I don't really think this is as safe as other methods. It requires disabling the stepper motors, and then manually shoving the print head around by hand. When doing this, you have to be careful not to move the print head up or down (but this means it may scrape the bed when you're moving it!)

This alternate method of leveling your bed is described in the video Ender 3 Pro Bed Leveling (Without Extra Tools or Upgrades).


This section of the document discusses working with different types of plastic filament for printing.

What Type of Filament Can I Use?

These printers can print with many different types of plastic.

If you'd just like to just watch a really interesting video, I recommend Josef Prusa's comparison of 3-D printing materials which compares static and layer strength and ductility, stiffness, impact resistance, and temperature response of PLA, PETG, and ASA (which is similar to ABS.)

Inserting Filament

To insert filament into your printer, it is often most useful to snip the end of the filament at a 45 degree angle. Filament is inserted into the wee hole by the filament extruder motor by squeezing the spring next to the filament extruder motor with one hand (releasing the gear teeth) and inserting the filament with the other hand. Sometimes you have to rotate and jiggle the filament until it enters the hole. It can be fed by hand into the tube until it stops at the heater/extruder block.

Removing Filament

I had difficulties figuring out how to remove/change filament from my printer. After a print, the filament is usually melted solidly into the extruder heater block, and you can't simply pinch the spring next to the extruder motor (to release the extruder motor teeth) and pull it out.

The secret is you have to preheat the extruder! Once you have preheated the extruder, a menu item will appear to let you change filament! There will be no menu item before that! This will retract the filament backwards, after which you can either squeeze the spring next to the filament motor and pull the filament out manually or control the stepper motor to retract the filament more.

While doing this, keep your filament neatly coiled! See the section Storing Filament below for tips on storing your filament.

You can then insert new filament following the instructions in Inserting Filament above. You should squeeze the spring near the extruder motor and feed the filament into the tube until it is at the extruder heater. The screen will prompt you to insert new filament. At this point, it will run the extruder motor to feed in the new filament. During this time, you will get a mixed-color ooze of old and new filament from the nozzle. Remove this before printing.

Storing Filament

As noted above, PLA plastic can be degraded by exposure to humidity. It is recommended that you store your plastic in a closed bag, and keep the dessicant packet in with it.

In addition, it is important that you keep your spools of filament neatly coiled. Many people have noted problem with their prints if the filament is not neatly coiled on the spool and gets "tangled." You know you have this problem if your spool releases with a "sproing" during printing. Most filament spools have holes around their rims that you can tightly feed the end of your filament through to keep it neatly coiled.

Cut off the ends of your filament and discard it if it's bent too tight or too damaged from the extruder motor teeth.


What software do you need to print a 3-D object? The following sections will answer those questions, but the one piece of software you will almost always need is called a slicer.


The one piece of software you'll almost always need is called a slicer. A slicer turns a 3-D model (usually in .stl format or Wavefront .obj format) into a set of commands that control how a specific printer will move its print head, when to extrude plastic, how thick to print layers, what temperatures to require, etc.

The slicer is the program that turns a general 3-D model into very specific printing commands for your 3-D printer and your type of plastic.

The slicer program will usually let you configure the print in many ways, including:

The USB drive that comes with the Ender-3 Pro contains the Creality Slicer software for Windows. You will need to install this on a Windows computer to generate your prints. (Warning: the software available at the link above is probably very different than the software that shipped with your printer!)

The output of a slicer program is a .gcode file which is specific to a certain printer and printer settings. This .gcode file is usually exported to the USB adapter/SD card that comes with your printer.

You then must safely remove/eject the USB adapter from Windows (Creality Slicer has an option safely remove the USB adapter after you export/slice a file to the SD card, as long as no other window is using that SD card) and then the SD card is removed from the USB adapter and placed into the 3-D printer (label side down.)

Other Slicer Software

I would recommend getting started with the Creality Slicer software that comes with your printer. It exposes a good set of beginner and more expert options to control your slicing and printing. Here are some other options for slicer software.

Modeling Software

To create new 3-D models for printing, you need some sort of modeling software. This is where I have had the least experience (but now I have built an entire 3-D modeling system in my programming language Frink.) I started trying to design exactly-dimensioned engineering models in some programs but I had a hard time getting exact dimensions right. I ended up writing my own 3-D modeling software in my programming language Frink, which is nice because it blends a capable, full-featured programming language with a 3-D modeling library. See the 3-D in Frink section of this document for more.

Here are some options for modeling software, most of which I haven't evaluated:

Other Software

Sometimes you might need to visualize, clean up or fix models that come from elsewhere. The following is a list of software that may help with that:

Downloading Models

You may not need to design the object you're going to build! There are lots of sites on the web with downloadable 3-D models that you can slice and print!

File Formats

The file formats that are usually produced by modeling software for 3-D printing are .stl format and Wavefront .obj format. These files can both be simple text files that you can write by hand or with a program! I created my first 3-D models by creating Wavefront .obj files with some simple Frink programs.

What does an .stl or .obj file format represent? Well, all they usually represent is a bunch of triangles that represent the external hull of a 3-D object! The coordinates of the triangles are listed in counterclockwise direction as seen from the "outside" of the object. That's it! Now you can write your own! See the links below to format specifications.

When I'm generating 3D model files, I prefer Wavefront .obj file format because it, unlike .stl format, can contain planar polygons and not just triangles, and you don't need to specify the unnecessary/redundant normal vector like you do in .stl format. Wavefront format also allows you to specify a list of vertices and re-use them. This is very helpful to slicer software to know that two vertices represent the same point, and results in smaller files.

Links to file formats:

STL format notes: The surface normal in a .stl file can often be set to 0 0 0.

Wavefront .obj format notes: My slicer software can only understand simple .obj files with vertices and faces. Vertex numbers cannot be negative.

Your First Print

To print an object, you need to give your printer a .gcode file. These files contain the commands to move the printer nozzle around, extrude plastic, etc. (These are just plaintext files so you can look inside one of them with a text editor! You can learn a lot from the .gcode files, especially ones from good software that includes comments!)

The SD card that comes with your printer comes with a few sample .gcode files that you could print right away, but most of them are somewhat large and might take several hours. These .gcode files have already been "sliced" and you can't modify any of their settings.

(This next part needs fleshing out.)

I suggest that you take a small .stl or Wavefront .obj file (see the Downloading Models section) and send it through your slicer (see the Creality Slicer User Manual that comes with your printer.) Make sure it is flat to the printer bed. Scale it to about 1 inch (25.4 mm) cube. Slice it, export the .gcode file to your USB drive, eject the USB drive safely, remove the SD card from the USB carrier, place the SD card (label side down) in the slot in the front of the printer, turn the printer on, level the bed, insert filament, preheat PLA, choose print from TF, choose your .gcode file, then print.

3-D in Frink

My programming language Frink is rapidly becoming a highly-capable environment for 3-D printing.

Here are some Javadocs for Frink's 3-D routines. These may change and are intended for use in 3-D printing, and not realtime 3-D rendering. The class you want to look at is VoxelArray which contains a lot of methods for drawing primitives (like cubes, rounded cubes, spheroids, cylinders, capped cylinders, toroids, tapered cylinders, planes,) moving tools through solids, performing constructive solid geometry (that is, taking the intersection of two objects, the union of two objects, or the difference of two objects,) extruding images and text, creating solids of rotation, and more. It also contains algorithms for many 3-D operations such as cross product, dot product, 3-D coordinate transformation (and inverse transformation,) distances to points, distance to lines, distance to finite line segments, inside/outside polygon algorithms, inside/outside plane algorithms, plotting of arbitrary equations in 3-D, moving tools by parametric equations along arbitrary paths, and many more.

To see samples of Frink's increasing support for 3-D printing, search the sample programs for voxel. For older programs that render Wavefront .obj file formats directly, search for wavefront.


The following are some videos that I've found interesting:

Glass Bed or Magnetic Mat?

The Ender-3 Pro comes with a nice magnetic mat that makes it easy to remove prints from the printing bed. It works great for small prints or thin, fragile prints that might be hard to remove otherwise. You can just lift the magnetic mat and gently curve it, and your print will pop off! Be careful not to cut or crease it, and remove excess plastic from it between prints. You can clean it with isopropyl alcohol. Magnetic build plates and heated print beds used to be super-rare-and-expensive features that only experts had or made for themselves. And it comes standard with the Ender-3 Pro!

The nice thing about the Ender-3 Pro is how cheap, easy, and open it is to replacing parts or upgrading. (Look at Micro Center's 3-D Printer accessories page! They have almost all replacement parts in stock, for surprisingly low prices.)

One of the most common modifications is to replace the magnetic mat with a glass build plate. The helpful, knowledgable sales associate at Micro Center recommended a glass build plate when I was buying my printer. I didn't know if I needed one or not, but I bought one anyway because the Ender-3 Pro glass plate was only $17.99.

For 3 to 4 months, I happily printed smaller items in the middle of the build plate, and the magnetic mat worked for me. I knew that there were problems, though. No matter how perfectly I leveled the 4 corners of my print bed, the center of the bed was always low and loose! Since I only printed smaller single items in the middle of the print bed, I adjusted my leveling process to make sure the 4 corners were extremely tight, which just barely got the middle of the bed to adhere. Usually.

I knew that the magnetic bed was somewhat concave and I could probably never properly level large prints. Some people get around this by putting heat-proof tape underneath the center of the magnetic mat to make it more level. Or they physically bent the plate to make it flatter!

The issue that forced me to finally try the glass bed was multiple attempts to print a small version of Enzo Mari's beautiful "16 Animali" artwork. It was an artwork/puzzle/toy/sculpture made in 1954 that consisted of 16 charming animal pieces. You can reproduce your own using Frink's 16Animali.frink program and the associated files. Also see the charming 16Pesci.frink program for a puzzle with fish and marine animals.

It was the largest print that I had made (width 150 mm or about 6 inches) and no matter what I tried, I could not get all of the pieces to adhere properly to the bed. I tried 3 times, tweaking the bed leveling, but it was clear that the magnetic bed was concave enough that it was not possible to maintain levelness across the entire build.

So, finally, I decided it was time to try the glass bed.

This initially did not go smoothly. It's sort of silly that there is no attachment mechanism, but people use binder clips to hold the glass plate to the build plate. This is evidently what is recommended. I spent quite some time finding binder clips that were the right thickness and strength, and making sure that they were not in the way of the print head in normal usage.

The next, more serious problem, was that the nozzle dug into the buildplate, no matter how far I turned the leveling wheels! Nobody tells you about this! It was literally impossible to level the bed, or to keep the nozzle from digging into the glass bed!

The problem is that the glass bed is much thicker than the magnetic build plate, and the printer rams the nozzle into its surface before it hits the z-axis limit switch! This is a problem!

Important technical note: (The z-axis limit switch is on the left of your printer. It is triggered when the print head is low enough to be at its "bottom". (This will become important in the next paragraph.) There are 3 limit switches on your printer: one each for the x, y, and z axes. Each of them tell the printer when the head has moved to its limit on one of the axes. The y-limit switch is in the back and tells the printer that it has moved all the way to the back. The x-limit switch is on the left and tells the printer that it has moved all the way to the left.)

The thing that nobody tells you when you're installing a glass print bed is that you can never level it properly unless you move the z-axis limit switch!

Let me repeat that. If you're installing a glass print bed, you can never level it properly unless you move the z-axis limit switch!

What I finally found out after watching hours of videos about installing a glass bed, one dude finally mentioned that the glass bed was much thicker and that you had to "adjust" the z-limit switch on the left-hand-side of the printer.

After very much trial and error, what his comments meant was that I had to fiddle with the z-limit switch on the left-hand-side of the printer and move it upwards. There are 2 adjustment screws (that can go wonky) that you need to use to move the z-axis limit switch up properly a few millimeters. This will give you enough travel in the adjustment knobs to finally make the nozzle not dig into the glass bed. I fiddled with this at least 6 times over many hours and finally got it to work, after running the bed-leveling program many many times. I don't know if I have enough screw travel to level the bed again if I go back to the magnetic bed. There are also many reports that the glass plate may permanetly adhere, and you will not be able to remove it! Buyer beware.

However, it gave me a planar bed. That I can print many unconnected pieces on. Which was the intent.

The glass bed, if leveled correctly, gives great adhesion. It is very very hard to remove some models from the glass bed. I had a puzzle that could not be removed and had the most luck using bar clamps to squeeze the parts of the model together, which finaly popped them off.

Its also possible to use a light hammer (possibly combined with a painter's knife) to pop objects off the glass build plate.

Alan Eliasen, eliasen@mindspring.com
Twitter: @aeliasen
Back to Alan Eliasen's website
Back to Alan Eliasen's technical blog