Image of a Creality Ender-3 V3 KE printer, from Creality’s website (not an affiliated link, and all opinions my own)

Complex hobbies are fun

At the end of 2023, I started on a career break (get in touch if you’re hiring!) and I’ve done lots of reading, some coding and have recently picked up a 3D printer. I’m in love with it, but it is a complex hobby with a lot of variables to tweak, so I’m writing these first impressions to give others that might be interested as well some intro to the fascinating world of 3D printing, specifically FDM.

FD- what?

There are two big camps in home 3D printing - FDM (Fused deposition modeling) and resin printing. I won’t cover resin printing, as it’s a toxic process that scares me a bit and it also requires UV post-processing for best results but it is the best way to print intricate models with lots of detail, like figurines. FDM is comparatively low in toxicity, and much easier to get into with the downside of prints having lower resolution, thus making them a poor choice for some models.

The name comes from how the plastic filament used is heated up and deposited, layer over layer, on a print surface.

FDM vs Resin print results for a small figurine, showing the resin print to be much finer in detail than the FDM one
FDM vs Resin print results for a small figurine

In this example comparison of FDM and resin results (source), you can see the layer lines on the FDM print (left) but they’re much less pronounced on the resin print on the right.

FDM was invented by S. Scott Crump, who co-founded Stratasys to bring his process to market in the early 90s. Stratasys is still around, but no hobbyist will be able to afford their products which are focused on the enterprise market. The modern low-cost printer started with the RepRap movement in 2005, and really got going in 2009 when the patents (but not the trademark) for FDM expired and commercial entities got involved.

I had heard about RepRap, but back then the process was very much tinker-oriented as few true “turnkey” solutions existed, or they required heavy hacking to get good results from. Then I heard about 3D printing again more recently as Bambu Lab (a high-end printer manufacturer with Apple-esque vibes) made a big splash in 2022 with their X1 model printers, aimed at the “prosumer” market and recipient of some awards for their ability to bring 3D printing to the “masses” that can afford a 1k+ price tag for their hardware. It was still too pricey for me, but as I browsed Youtube I started to see more and more 3D printing videos which made me think there was maybe a new player on the market with a more amenable price tag. That’s when I heard of Creality.

Creality has a history of making cheap somewhat reliable printers since the launch of their Ender-3 printer in early 2018. I say somewhat because their track record isn’t the best for those early models, but newer ones are seen in a much better light. Most Youtubers will still badmouth it for horrible QA and the need for 23 upgrades for their printers to be acceptable, but my experience with their Ender-3 V3 KE model has been great so far. “Ender-3” is kinda like “Agile” in the sense that it doesn’t mean much in their lineup - printers from 6 years ago or as late as a few months ago still have that name on them, and people have been vocal about Creality’s need to start naming their printers something else (Ender-3 V3 KE is a bit of a mouthful, after all) especially since Ender-3 is used for both bed-slinging and CoreXY models and that’s a bit confusing. Printers in their current lineup include:

  • Ender-3 V3
  • Ender-3 V3 KE (the one I got)
  • Ender-3 V3 SE
  • Ender-3 V2 Neo
  • Ender-3 Max Neo
  • Ender-3 Neo
  • Ender-3 S1 Plus
  • Ender-3 S1 Pro
  • Ender-3 S1
  • Ender-3 V2
  • Ender-3 Pro
  • Ender-3 Max

…you get the idea, feels more like an SEO thing than an actual lineup. But I mentioned bed-slinging and CoreXY - what does that mean?

Types of printers

First, a word on extruders

All 3D printers have an extruder assembly that takes filament from a spool and drives it into a heating element and ultimately into a nozzle which then deposits the melted filament onto a build plate, layer by layer. The extruder can either be a direct-drive one, that pulls the filament using a stepper motor, or a Bowden style one that receives the filament as it’s pushed out by a stepper motor placed somewhere else and just “pushed” onto the extruder.

Comparison diagram of direct-drive and Bowden style extruders
Comparison diagram of direct-drive and Bowden style extruders

source

There are pros and cons to both systems. Direct-drive extruders allow for less “banding” on the print, since the filament is fed in a consistent matter, and they can also pull more elastic filaments that just bunch up on the tube between the motor and the extruder on a Bowden type setup, due to friction. They can also have higher flow rates, for wider nozzles. However, having the stepper motor on the extruder head makes it heavier, which reduces the maximum acceleration the head can have as it moves over the bed.

Printer types

FDM Printers come in 2 main types: bed-slingers and CoreXY.

Bed-slingers are the cheaper ones. The printer’s extruder moves along the X and Z axis - left to right, and up and down. The bed moves back and forth on the Y axis. This setup is cheap, but as you try to achieve higher print speeds, the bed’s movement generates a lot of wobbling, which impacts print quality.

CoreXY printers move the extruder in the X and Y axis (left to right, back to front) and the bed moves up and down on the Z axis. This makes for less vibration and ultimately a more stable print, but you need a frame, more motors and more belts, which in turn implies a more powerful controller board for the whole printer. Thus, they tend to be more expensive. But they are also easier to enclose, if you need to remove toxic fumes or achieve higher temperatures for certain filaments.

I mentioned “main” types because there are also Delta printers, which take a different approach to the extruder assembly. Here’s a video:

These printers usually feature round build plates (curiously, the one in the video doesn’t), and they’re even more expensive than CoreXY types. Delta printers are fast and very accurate, but they’re also expensive and have limited build space, with tall models being a particular plus.

Other printer types do exist, but they’re relatively obscure.

My printer is a bed-slinger which felt like a good place to start, and affordable at around €300. I got some upgrades which seems to be the thing to do with any printer, Ender-3s in particular 😅

Components of a 3D printer

The main components for a printer are:

  • Extruder assembly
  • Print bed (which can be heated or not) on which you place a
  • Printing plate
  • Stepper motors and belts
  • Controller board
  • Spool holder

I’ve already mentioned extruders. One thing I haven’t mentioned is the nozzle.

You can find nozzles in 0.2, 0.4, 0.5, 0.6 and 0.8mm widths easily, with other sizes like 1.0mm being a bit harder to find. The nozzle width will determine how fine your prints can be, but of course smaller ones will imply lower flow rates and thus longer print times. Sometimes much, much longer. Think of it as the pixel size for your models. Normal nozzles will be made of brass, which is fine for normal PLA but some filament types can be infused with harder materials like carbon fiber that will completely file away your nozzle’s aperture in just a few prints. For those types of filament, a hardened steel nozzle is a must and you can even go all-in and get an amazing diamond-tipped nozzle that basically lasts forever.

Heated print beds are great for higher adhesion of some materials, sometimes essential - with Nylon for example. I wouldn’t buy a printer without a heated bed. They are usually made of steel.

Print plates go on top of the heated bed and are usually made of some material that other plastics don’t stick to, like PEI or glass. The PEI coating can be rough or fine, with fine ones making it harder to remove your prints but a big help when printing taller models - the inertia differential between the top and bottom of the print due to the slinging of the bed might make it impossible for the print to stay on the bed. Glue can help your prints stay on, and normal UHU sticks work great for this purpose. Some filaments require specific glues to stick to anything.

Stepper motors and belts are a must, and you can usually tell how good a printer is by how much “backlash” the motors have. This is the measure of how much wiggle you can get out of a belt when the motor is stopped. If it wiggles a lot, your prints will vary from each other and from the intended model even if you use the same filament.

The controller board makes the whole thing work, and they vary in processor capacity. There are still 8-bit models like the ATmega2560 being used for new printer models, and they get the job done. But most medium to high-end ones are 32 or 64-bit ARM parts. It won’t surprise you to know most of them run Linux, but more on that on the software section.

The spool holder can vary from a simple plastic piece, to more elaborate multi-color setups like Bambu Lab’s AMS that only works with their printers (they are trying to be the Apple of the market, after all 😄).

Filament types

Of course, every printer turns spools (or pellets) of plastic compounds into physical objects. There are ALOT of filament types, and even subtypes within the main ones.

PLA

PLA is the most common and usually cheapest filament type. Made usually from corn starch, every shop will have PLA, and even some of its common subtypes like PLA+ or Silk PLA.

This filament is a good all-rounder, and has easy to achieve melting temperatures usually in the 190-230C range - well within the reach of common printers. The same lower melting temperatures make it unsuited for high temperature applications. It’s also not very tough, so prints for models subject to high mechanical stresses are not advised. On the plus side, its fumes are non-toxic.

PLA+ or PLA-HT tries to mitigate the temperature aspect by being a bit more resistant, and Silk PLA’s appeal is the coloring effect on your prints, to the detriment of its sturdiness as it’s even less resistant to impacts than normal PLA.

PLA is great, you should definitely start with it. My printer came with a “HyperPLA” sample from Creality, and you can tell the difference from normal PLA. Not sure it justifies the premium, though.

PETG

PET is one of the most common plastics, most water bottles are made from it. It’s also very tough so those parts subjected to mechanical stress that PLA can’t handle are a great target for PET prints. Straight up PET is too hard to print with a cheap printer, so glycol is added to it hence the G in PETG. PETG requires a higher temperature to print, and a heated bed is almost a necessity.

ABS

Acrylonitrile-Butadiene Styrene is what Lego bricks are made of! It’s relatively easy to print even if it requires higher temperatures than even PETG, but emits somewhat toxic fumes when printing. Compared to PETG, it’s harder but less flexible and durable.

ASA

Acrylonitrile-Styrene Acrylate is very similar to ABS, but with one advantage: much improved UV resistance! So if your parts are going to be outdoors, ASA is a must. It requires a bit higher temperatures than ABS, with a heated bed a must at around 80-110C. An enclosure is basically required to maintain temperatures constant during printing and avoiding warping.

TPU

Thermoplastic Polyurethane (TPU) is a flexible filament for all those stretchy models (phone cases, etc.) It absorbs humidity like crazy, so a dry box is surely needed. Being a stretchy material, printing it is especially challenging (I haven’t tried it, yet).

Nylon

Nylon has very desirable qualities for prints: it’s very durable, resilient, tough, can be easily colored and is UV resistant. It’s however very expensive, sensitive to humidity, prone to warping if the temperature is not just right and has very short shelf life so make sure to use up the whole spool in under a year or so. It requires sustained 300C or more for printing, so entry-level printers usually can’t handle it too well.

PEEK, PEKK, PC, etc.

There are other more exotic filaments and sub-types of PLA and ABS/ASA like the carbon fiber PLA I mentioned, these are just general properties. Always check with your supplier for required heater and bed temperatures and any special care they might need. For more info, Zach Freedman has an extensive and highly entertaining series on YouTube of printing with every filament type he could find on Amazon.

Storing filament

Filament tends to react to moisture in the air - this process is called hydrolisation and is non-reversible, so if your filament gets too moist for too long it will become an unusable spool of easily warped gunk. Keeping it under 25% relative humidity is a good rule of thumb.

There are a few solutions for storing and drying filament, even one by Creality themselves but in keeping with the maker vibe, I’ve made my own and am super happy with how it turned out. I wanted something like a Sterilite 20 Quart clear gasket box, as these come with a handy seal, but they’re impossible to find in Portugal for some reason and hella expensive to import. The solution I ended up involved a normal (no seal) plastic box, some insulating tape, sealing foam and 2 dehumidifier pouches.

one of the custom dry boxes
one of the custom dry boxes
close-up of the box, with the humidity sensor showing 18.9%
close-up of the humidity sensor (18.9%)
close-up of the IKEA sensor outside the box, showing 45%
humidity sensor in the room, for comparison (45%)
close-up of the box, showing the seal setup
the custom seal solution
close-up of the other box
the other box, even drier

Coupled with a Zigbee sensor that I could link to my IKEA Dirigera hub, I get pretty good results. Their humidity percentage is usually at half or less of what the room is. It’s been raining here lately, and for an ambient rate of 80%, the boxes are steadily below 40%. As a plus side, the dehumidifer pouches are reusable with just 6 minutes in the microwave when the symbol on them turns pink. After mere seconds of opening the box, the humidity levels with the ambient rate of the room, but it’s easy enough for it to come back down again.

close-up of the dehumidifier pouch
the dehumidifier pouches

The printer I got

I’m quite happy with the Ender-3 V3 KE, this is how I have it set up.

photo of the printer
my setup

To mitigate vibration, I have placed two 2Kg weights on each side of the front - they help a lot, and might just be the most cost-effective significant upgrade you can have. Even better would be to not use a €10 IKEA table for this, or using an even heavier concrete slab under the printer. The only other upgrade I’ve done so far is adding two mounts (the white parts on the extruder and the bed, on the right) for the accelerometer from Creality that allows for better calibration of the printer. The model for the mounts is great and available for free from Printables.

photo of the printer, showing the two mounts for the accelerometer
accelerometer mounts

The software side of things

Arguably, one of the things that made printers so accessible has been improvements in the software side of things. But first let’s talk about what printers actually need to print a model.

Most models you can get on repositories like Thingiverse, Printables or Thangs come in STL files. These files only contain the model’s geometry and are thus kinda useless for the printer, which needs instructions on where to direct the motors and when to turn on/off the heater, place walls, etc. Printers need these STL files to be “compiled” into something called G-code.

G-code is a text-based format that basically has lines and lines of go to this coordinate, heat up to temperature X, adjust flow rate to Y, etc. It can also include Base64-encoded thumbnails of the model, in PNG format!

Here’s a sample of the G-code for the Benchy which is basically the 3D printer equivalent of a Hello World, that came with my printer on a USB flash drive, ready to print:

;FLAVOR:Marlin
;TIME:977.665
;Filament used:3.55576m
;Layer Height:0.25
;MINX:80.277
;MINY:94.775
;MINZ:0.2
;MAXX:139.703
;MAXY:125.225
;MAXZ:47.95
;OuterWall Time:356.024
;InnerWall Time:180.697
;Skin Time:199.268
;Support Time:0
;SkirtBrim Time:0
;Infill Time:37.0034
;Support Infills Time:0
;Combing Time:44.7438
;Retraction Time:159.928
;PrimeTower Time:0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Creality Print GCode Generated by CXEngine
;CRSLICE_GIT_HASH:b39074a
;Creality Print Version : V4.3.8.6678
;CXEngine Release Time:2023-10-27 17:48:02
;Gcode Generated Time:2023-10-27 18:23:59
;----------Machine Config--------------
;Machine Name:F005
;Machine Height:240
;Machine Width:220
;Machine Depth:220
;Material Type:PLA
;Material Name:Hyper PLA_1.75
;Number of Extruders:1
;ExtruderParams[0] Nozzle Diameter:1000
;----------Profile Config---------------
;Wall Thickness:0.87
;Top/Bottom Thickness:0.8
;Out Wall Line Width:0.5
;Inner Wall Line Width:0.5
;Inital Height:200
;Wall Line Count:2
;Infill Line Distance:10
;Infill Pattern:grid
;Infill Sparse Density:10
;Infill Wipe Distance:0.13
;Print Temperature:220
;Bed Temperature:60
;Support Enable:false
;Support Density:15
;Support Angle:60
;Adhesion Type:autobrim
;machine is belt:false
;machine belt offset:10
;machine belt offset Y:0
;Raft Base Line Spacing:1.6
;Wait Heatup Sync:true
;Enable Ironing:false
;Material Type:PLA
;Max volumetric speed:60.00
;Material Diameter:1.75
;Material Density:1.24
;Filament Cost:20
;Filament Weight:1000
;Preview Img Type:png
;Screen Size:Sermoon D3
;----------Shell Config----------------
;Outer Wall Wipe Distance:200
;Outer Inset First:false
;Infill Before Walls:false
;Infill Overlap:0.15
;Fill Gaps Between Walls:nowhere
;Minimum Infill Area:15
;Top Surface Skin Layer:0
;Top Layers:4
;Z Seam Alignment:sharpest_corner
;Seam Corner Preference:z_seam_corner_inner
;Z Seam X:110
;Z Seam Y:220
;Horizontal Expansion:0
;Top/Bottom Pattern:lines
;Ironing Pattern:zigzag
;Vase Model:false
;----------Support Config----------------
;Support Type:everywhere
;Support Pattern:zigzag
;Support Infill Layer Thickness:0.25
;Minimum Support Area:1
;Enable Support Roof:true
;Support Roof Thickness:0.8
;Support Roof Pattern:lines
;Connect Support Lines:0
;Connect Support ZigZags:1
;Minimum Support X/Y Distance:0.2
;Support Line Distance:1.33
; ---------PrintSpeed & Travel----------
;Enable Print Cool:true
;Avoid Printed Parts Traveling:false
;Enable Retraction:true
;Retraction Distance:0.8
;Retraction Speed:40
;Retraction Prime Speed:40
;Maximum Retraction Count:100
;Minimum Extrusion Distance Window:1
;Z Hop When Retracted:false
;Z Hop Height:0.1
;Retract Before Outer Wall:false

;Outer Wall Speed:300
;Inner Wall Speed:500
;Infill Speed:500
;Top/Bottom Speed:200
;Travel Speed:500
;Initial Layer Speed:200
;Skirt/Brim Speed:50
;Prime Tower Speed:500
;Outer Wall Acceleration:6000
;Inner Wall Acceleration:6000
;Infill Acceleration:8000
;Top/Bottom Acceleration:6000
;Travel Acceleration:8000
;Initial Layer Print Acceleration:2000
;Initial Layer Travel Acceleration:5000
;Skirt/Brim Acceleration:500
;Acceleration to decelerate:50
;Combing Mode:off
; --------SpecialModel&Mesh Fixes--------
;Union Overlapping Volum:true
;Remove All Holes:false
;Maximum Travel Resolution:0.25
;Maximum Deviation:0.05
;Maximum Model Angle:0.872665
;IS Mold Print:false
;Make Overhang Printable:false
;Enable Coasting:false
;Coasting Volumes:0.064
;Coasting Speed:0.9
;Raft AirGap:0.25
;Layer0 ZOverLap:0.13
;Adaptive Layers:0
;---------------------End of Head--------------------------
M140 S60
M105
M190 S60
M104 S220
M82 ;absolute extrusion mode
M220 S100 ;Reset Feedrate
M221 S100 ;Reset Flowrate

G28 ;Home

G92 E0 ;Reset Extruder
G1 Z2.0 F3000 ;Move Z Axis up
G1 X10.1 Y20 Z0.28 F5000.0 ;Move to start position
M109 S220.000000
G1 X10.1 Y145.0 Z0.28 F1500.0 E15 ;Draw the first line
G1 X10.4 Y145.0 Z0.28 F5000.0 ;Move to side a little
G1 X10.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line
G92 E0  ;Reset Extruder
G1 E-1.0000 F1800 ;Retract a bit
G1 Z2.0 F3000 ;Move Z Axis up
G1 E0.0000 F1800

M900 K0.045000
G92 E0
G92 E0
G1 F2400 E-0.8
;LAYER_COUNT:192

;LAYER:0
M106 S0
M204 S8000
SET_VELOCITY_LIMIT ACCEL_TO_DECEL=4000
M205 X60 Y60
;MESH:0_0
G0 F30000 X90.041 Y108.738 Z0.2
M204 S6000
SET_VELOCITY_LIMIT ACCEL_TO_DECEL=3000
M205 X50 Y50
;TYPE:WALL-INNER
G1 F2400 E0
G1 F28800 X90.35 Y108.937 E0.0191
G1 X90.818 Y109.004 E0.04367
G1 X91.069 Y109.003 E0.05671
G1 X91.319 Y108.967 E0.06984
G1 X91.327 Y109.702 E0.10804
G1 X91.325 Y110.696 E0.1597
G1 F27355.6 X91.29 Y111.363 E0.19624
G1 F23622 X91.224 Y111.623 E0.21324
G1 F21844.7 X91.239 Y111.966 E0.23676
G1 F22058.8 X91.195 Y112.436 E0.26879
G1 F24965.3 X91.323 Y112.785 E0.29108
G1 F28800 X91.444 Y113.169 E0.312
G1 X91.635 Y113.421 E0.32843
G1 X91.975 Y113.666 E0.35021
G1 X92.331 Y113.845 E0.37092
G1 X93.078 Y113.824 E0.40975
G1 X93.335 Y113.756 E0.42357
G1 X93.603 Y113.586 E0.44006
G1 X93.957 Y113.263 E0.46497
G1 X94.092 Y113.035 E0.47874
G1 X94.167 Y112.772 E0.49295
G1 X94.172 Y112.724 E0.49546

This compilation into layered slices is done by what is called a slicer program. Creality has its own, Creality Print, that I find easy enough to use and has versions for Windows, Mac and Linux. It’s a bit rough around the edges, with the occasional crash, bug or bit of Engrish but works well enough. Other popular options are Prusa Slicer and Cura. I find those harder to use, but want to get into them because of the limitations of Creality’s offer.

So a slicer takes the geometry info and “compiles” it into G-code, but what about the rest of the system? Can you monitor prints remotely? Can you SSH into the board and run your own code? Yes!

The KE in my printer’s model means Klipper Edition, and Klipper is one of the most used firmwares to drive printers. Being open-source, a lot of printer makers use it and there are contributions from all over the place. Creality has had a few run-ins with the GPL but I hear they’re better now. There are a bunch of add-ons available for printers running Klipper, my favorite being fluidd. It’s easy to expose on the internet (don’t forget authentication!) and you can monitor your prints from anywhere - I bought the camera just for that. It’s important to monitor them since if you spot a problem (model not adhering to the bed, etc.) you can stop it remotely and not waste filament, or damage your extruder.

screenshot of fluidd from their Github
fluidd is amazing

Installing fluidd and other components is made easier with this helper script that just needs a git clone on the printer, once you root it and SSH in. Rooting is an option on the official firmware, so no jailbreak or hack is needed but you do need to approve a special license basically taking responsibility for it.

screenshot of the helper script's menu, showing all the options
could not be easier

I’m super pleased with the stack, and how tweaks are made easier by the fact that it’s all open source. If you go the Bambu Lab route, and in keeping with their Apple aspirations, you’ll find it’s all closed source and you have to use their app and no other to control their printers. I myself use fluidd on the browser, or OctoApp on my phone. It requires a subscription for most cool features (€3.49 a month). Creality also has an app that you can bind the printer to, and even a cloud storage offering but I found it full of dark patterns and just very busy.

Creating your own models

There’s a ton of stuff out there to print on repositories, most of it free (this cool NAS case is not, but these are rare) but what if you want to design your own models?

CAD is something I’ve never had experience with, but the barrier for entry has never been lower apparently. The big name is Fusion 360 by Autodesk, but it’s been getting more and more expensive outside of their free tier, and more stuff has been moving out of said tier as well. A safer option long term might be FreeCAD which is free software, or Ondsel ES which is like a “version” of FreeCAD with better UI defaults. There’s also a free CAD add-on to Blender. OpenSCAD is super interesting, as it allows you to define your models as code! Here’s an example:

screenshot of OpenSCAD
OpenSCAD

The whole code for that box is:

BOX_WIDTH = 70;
BOX_DEPTH = 200;
BOX_HEIGHT = 40;

BOX_EDGE_RADIUS = 5;
BOX_WALL_THICKNESS = 2;
BOX_FLOOR_THICKNESS = BOX_WALL_THICKNESS;


///////////////////////////////////////////////////////////////////////////////
module layout_linear(length, min_separation) {
    if (length > min_separation) {
        count = floor(length / min_separation);
        separation = length / count;

        for (i = [1 : 1 : (count - 1)]) {
            translate([i * separation, 0, 0]) {
                children();
            }
        }
    }
}


///////////////////////////////////////////////////////////////////////////////
module shell(wall_thickness, floor_thickness) {
    difference() {
        children();
        translate([wall_thickness, wall_thickness, floor_thickness]) {
            resize([width - wall_thickness * 2, depth - wall_thickness * 2, height]) {
                children();
            }
        }
    }
}


///////////////////////////////////////////////////////////////////////////////
module rounded_edge_full_box(width, depth, height, edge_radius)
{
    if (edge_radius <= 0)
    {
        cube([width, depth, height]);
    }
    else
    {
        hull()
        {
            translate([edge_radius, edge_radius, 0])
                cylinder(h = height, r = edge_radius);
            translate([width - edge_radius, edge_radius, 0])
                cylinder(h = height, r = edge_radius);
            translate([edge_radius, depth - edge_radius, 0])
                cylinder(h = height, r = edge_radius);
            translate([width - edge_radius, depth - edge_radius, 0])
                cylinder(h = height, r = edge_radius);
        }
    }
}


///////////////////////////////////////////////////////////////////////////////
module rounded_edge_box(width, depth, height, edge_radius, wall_thickness)
{
    difference()
    {
        rounded_edge_full_box(width, depth, height, edge_radius);
        translate([wall_thickness, wall_thickness, wall_thickness])
            rounded_edge_full_box(
                width - wall_thickness * 2,
                depth - wall_thickness * 2,
                height,
                edge_radius - wall_thickness);
    }
}


///////////////////////////////////////////////////////////////////////////////
rounded_edge_box(BOX_WIDTH, BOX_DEPTH, BOX_HEIGHT, BOX_EDGE_RADIUS, BOX_WALL_THICKNESS);

The variables you declare become tweakable parameters, so you can just change them, re-render and then export as STL, ready to slice and print. That’s how I took the default file and created a dust cover for my external LTO drive, which is on Thingiverse too.

photo of my dust cover model
my first public model

I’m working on a more ambitious project now, involving a Raspberry Pi Zero and playing music. OpenSCAD won’t be able to help me as I think it’d be too complex to define in code, so I’ll need to learn FreeCAD or Ondsel. It’s been fun so far, let’s see how it goes from here 😅

Print gallery

Some examples of models I’ve printed so far (and yes, I’m a huge Terraforming Mars fan!)

screenshot of Terraforming Mars colonies tile holders
Terraforming Mars colony tile holders
screenshot of Terraforming Mars money tray
Terraforming Mars money tray (cubes have been used a lot, starting to shed their coating)
screenshot of Terraforming Mars player token holder
Terraforming Mars player tokens box
screenshot of Terraforming Mars tiles organizer
Terraforming Mars tiles organizer
screenshot of HyperPLA Benchy print
Benchy, in HyperPLA (0.2mm layer height)
screenshot of Killbot Mini print
Killbot Mini, articulated print-in-place model
screenshot of Killbot Mini print (different pose)
Killbot Mini, different pose

Parting words

Hope this intro to 3D printing was interesting! Let me know on this toot if you have any questions or comments.

Until next time! 🖖