MakerBot Print is our newest print-prepration software, which supports native CAD files and STL assemblies,
allows you to interact with all your printers via the Cloud, and many other exciting new features.

Download Now

Hey! This thing is still a Work in Progress. Files, instructions, and other stuff might change!

Fully Parametric 3D Printer CoreXY "HyperQbert"

by projunk Nov 6, 2016
Download All Files

Thing Apps Enabled

Please Login to Comment

How many metres of 3030 will I need in total?

That of course depends on the size of the printer you are building.

  • for the "default" HyperQbert I used 7 pieces of 1 meter
  • for the big HyperQbert I used 11 pieces of 1 meter

im having issues with the x endstop can you either add an option to offset the mount for the switch on the xclamp further away from the bearing/rod or have the xstop extend further the same way? I am using a pcb mounted switch and it is too thick to mount towards the rod it just hits it, then if i flip it around it doesnt make contact with the stop

Please put in the comment a link to the endstop that you are using so that I know the dimensions of that product. After that I can have a look if I can implement that type of endstop.

Comments deleted.

There does not seem to be an endstop at that link. Can you please verify the link?

edited the comment and replaced the link

The link is still not pointing to any endstop. Perhaps better download the endstop information from that site and attach it as file to this comment.

well its the thickness that is the problem which is not described in the dimensions. i just need the x stop to extend further from the rod it is mounted to

probably the quickest "dirty" fix for you is to simply add some extra millimeters to following line and render the part by uncommenting line:

rotate([90,0,0]) drawXCarriageClamp(true);

so change

hXCarriageClamp = getRBearingOuter(BearingX)+tXCarriage-reductionXCarriageClamp;


hXCarriageClamp = getRBearingOuter(BearingX)+tXCarriage-reductionXCarriageClamp+5;

I know it is technically not the correct fix; i should change the model so that the value of "wMicroSwitch" is taken into account when calculating the part.(I might do that in the future when I have a bit more time available)

tysm for the help

  1. I can't "download all files"
  2. Somehow there is a zip (don't know how I got to it) but it only contains the STL files
  3. How do I open .inc files in OpenSCAD? It only shows scad files.
  4. I miss LM6UU or how ever it would be called with 6mm axis, outer 12mm, length 35mm, single. A bit complicated to add that ...
  5. If I add a single LM6UU with length 35 as y axis it will not be supported at its ends, only in the middle
  6. $fn=50 should be more than enough?

1) I have no idea why zip download does not work; perhaps there are currently issues with the web site
3) you need to install OpenSCAD on your computer. Then open the HyperQbert.scad file; the includes are taken automatically.
4) Adding LM6UU should be simple.(i have added them, I think they only could makes sense for very small printers
5) I think you are confusing LM6UU (length=19) and LML6UU (length =35)
6) I have defined a $fn=250 as global setting; but I overrule this setting per object (e.g. small holes get a smaller $fn; big holes a higher $fn, and for nutholes i use of course $fn=6)

I have updated bearings.inc file. It now also contains LM6UU and LM6LUU.

I think you intent to use LM6LUU (the long ones). The bearing property "useSelfAlignmentLM6LUU" determines the support for the axis. For the long bearings I have set that value to false.

  1. On other "things" it the "download all" button works ...
  2. (... the editor here automatically renumbers this list, how stupid!)
  3. OpenSCAD will only open "scad" and "csg" files, nothing else, for editing.
  4. Thanks, it looks good!
  5. I actually meant LM6LUU, yes.
    I think it doesn't make sense to use "useSelfAlignmentLM6LUU" with a single bearing, it should better be firm? Setting it to false makes it 12mm all the way which looks fine.

the endstop switch mounting for the x axis is giving me issue, when i set distMicroSwitchMountHoles = 15 the holes extend out of the actual part. i can probably get enough clamping force for secure mounting but its sketchy

The model has been updated. You of course need to render the part "XCarriageClampWithEndStopMount.stl"

so enable:

rotate([90,0,0]) drawXCarriageClamp(true);

and render the part

remark: if you have customized the HyperQbert.scad, you can also just copy the changed function "drawXCarriageClamp" into your customized HyperQbert.scad file.

I will have a look. I think I can make the model a bit smarter to allow for bigger distances between the micro switch holes.

thanks for the quick response!

why are the x carriage to extruder mounting nuts m4 size even when i select m3?

For those nuts/holes, you need to change variables:

see section:
// Extruder mount hole
distExtruderMountHoles = 30.0;
rExtruderMountHole = 4.0/2;
rExtruderNut = 7.6/2;
tExtruderNut = 5.0;
rExtruderCableHole = 9.0/2;

Comments deleted.

how could i modify the z rod and z motor mounts to be closer to the frame? they extend out seemingly too far, which requires more aluminum and smooth rod than necessary or decreases the build volume

You might be able to get away with reducing the value of "clearanceMovingParts". It is by default set to 10 mm. If you reduce that value, you will gain some build space. If I remember correctly, I aligned the ZRods and the Z leadscrew; this also means that the z-stepper motor size limits the space.

that's exactly what im looking for, this is amazing work and you're super helpful, thank you!

is there any way to make the xy idler screw hole spacing larger? the nuts im using are really long and are too big for the spacing here, and the spacing doesnt change when i change the hammer nut length and width

I am a bit puzzled of what the problem is that you are facing. Do you mean that the distance between the holes connecting the XYIdler to the Alu profile has to be bigger? (due to hammernuts not having enough space to turn in the correct position?

yes the hammernuts i am using are these https://8020.net/13041.html and they are too big for the hole spacing for the holes that would connect to the alu extrusion

Ok, I will have a look at it and update the model; I will add the length of the hammernut into the calculation of the XYIdler

The model has been updated to take into account the size of the hammernuts when calculating the XYIdler. It might be required to also recalculate the length of the XYIdler, but I think it should be fine without that. Of course you need to regenerate the XYIdler to get the updated STL.

thank you, i have one question, where can i find the length of the bolt for the z carriage to attach to the bed extrusion?

I have not printed the length of those bolts in the output (I indeed could have done that). I am using m6x25 bolts in my printers.

Comments deleted.

is there any way to make this work with 1.5" x 1.5" aluminum profiles? the ones i am thinking of using are here:https://www.airengr.com/store/1515-Lite.html is there any way i can get this to work? amazing work! thanks

Sure, should be very easy. Just create a file similar to ALU_PROFILE_40x40.inc (e.g. ALU_PROFILE_15inchx15inch.inc) and replace the values of the 4040 profile by the values of a 15"x15" profile (convert the inch values to metric of course).

After that select the new include by selecting it in following section (HyperQbert.scad):

// * Alu profile selection
// *****
Alu profile selection

Of course you need to render the parts after you made these modifications.

alright im making the new alu profile file, but idk what the wAlu3, tplastic and tAlu variables refer too and how do i render the parts, when i open the hyperqbert.scad file it just shows one part, how do i see the rest? and how do i change all the settings that say "USE_PROJUNK_PREFS"

wAlu3=.484 (according to your 1515 link)
tAlu=.160 (according to your 1515 link)

tPlastic = 6.0 (would be my recommendation; this value is the thickness of the plastic parts; so more thickness will make it stronger)

how do i compile all the parts i see the "drawTotalAssembly()" but i dont know where to input it, and how do i change all the settings that say "USE_PROJUNK_PREFS" thanks for the help

Set USE_PROJUNK_PREFS to false. They are my settings to generate one of my own printers. So do not use this option.

You have to generate each part separately and save it as stl file. Just comment out all parts except the one you want to render.

The drawtotalassembly is only meant to graphically verify the parts as a hole. Do not render it, only use the compile to verify if you want to.

thanks for the explanation this is awesome!

thank you for all your work. I have problems with the settings in the SCAD file (simple i dont understand all of it) I want to design a Printer with 30x30 Alu profile, LM8UU for x and y, LM12LUU for Z, bed 213x213 with a hight 300.
But the console message is this (extrusion length 121, bed length 321??):

ECHO: "getLBearing(BearingY)", 24
ECHO: "availableExtraLengthZCarriage", 30.625
ECHO: "recommendedExtrusionLengthBedX", 121
ECHO: "recommendedExtrusionLengthBedY", 321
ECHO: "extrusionLengthBedX", 121
ECHO: "extrusionLengthBedY", 321
ECHO: "availableExtraExtrusionLengthBedY", 0
ECHO: "distanceLeadScrewToZRod", 106.5
ECHO: "extrusionLengthY3", 0
ECHO: "recommendedExtrusionLengthX", 417
ECHO: "recommendedExtrusionLengthY", 364
ECHO: "recommendedExtrusionLengthZ", 478
ECHO: "extrusionLengthX", 417
ECHO: "extrusionLengthY", 364
ECHO: "extrusionLengthZ", 478
ECHO: "leadScrewLength", 393
ECHO: "XRodLength", 462
ECHO: "YRodLength", 362
ECHO: "ZRodLength", 413
ECHO: "xWidthFrame", 477
ECHO: "yWidthFrame", 424
ECHO: "zHeightFrame", 478
ECHO: "topPanelWidth", 477
ECHO: "topPanelHeight", 424
ECHO: "sidePanelWidth", 424
ECHO: "sidePanelHeight", 450.7
ECHO: "backPanelWidth", 477
ECHO: "backPanelHeight", 450.7
ECHO: "bottomPanelWidth", 477
ECHO: "bottomPanelHeight", 424
ECHO: "frontPanelWidth", 448.5
ECHO: "frontPanelHeight", 450.7
Compiling design (CSG Products generation)...

Whats wrong here?? (i speak German)


"extrusionLengthBedX", 121
"extrusionLengthBedY", 325

The values look okay to me. These extrusions are the ones that support the bed. You can verify the construction by "compiling" (not rendering): drawBedAssembly();

I would recommend using LM10UU (or even LM12UU) for x and using LM12UU for y. Of course the values you have chosen will also work, but might lead to slightly less accurate prints (due to more bending and more vibrations of the Rods)

Do NOT forget to render the parts (not use the stl's I have attached to this project) since you are not using the same parts as I used for building my printer (I did use different bearings)

Hello from Germany and thx for this nice Projekt.
1 thing. Have you plan to add rail holder?
Sorry for my bad English.
I have sample my printer with 4040 and a volume Form 300 x 300.
I hope my Projekt will fine xD

What do you mean by a rail holder? can you send a sample image?

If English is an issue for you in explaining, you can write it in the German language (no problem for me).

Gott sei dank auf deutsch xD
und zwar wahr ich am überlegen die Stangen für X und Y gegen Linear Führungen auszutauschen, mit der Hoffnung auf einer höhere Stabilität, da der Druckraum mit 300 x 300 mm schon ziemlich groß ist.
ich hoffe aus den bild ( was ich aus den Internet habe )weist du was ich meine.
auf den zweiten bild siehst du den aktuellen aufbau.

Ok, Ich verstehe was du meinst. Ich bin mir aber nicht sicher ob diese Linear Führungen qua Maße standarisiert sind und damit einfach zu modellieren sind. I habe sie selber bis jetzt noch nie verwendet. Ich werde mahl das Internet recherchieren nach diesen Linear Führungen.

Was Ich selber verwende für meinen ganz großen Drucker, sind 12 mm Achsen. Die sind stabil genug um sehr genaue Objekte zu drucken. Mein großer Drucker hat einem Druckraum von 480x280(x400 Höhe)

I have start the HyperQbert project by reusing all pieces buy for an aborted project of vulcanus V1.1 https://www.thingiverse.com/thing:1130016
I have a lot off part to recycle ex:

  • silicone bed 30X30 220v
  • a lot of extrusion type I 5mm (16X 490mm for xy+ 4X 600mm for Z + 405 bedX + 360 bedY)
  • 5X GT2-Timing-Pulley-20teeth
  • 30 X bearing 624ZZ (mix with and without flange)
  • 4 X LMK12LUU
  • 10 X 42BYGHM810 Nema-17-Stepper-Motor-4200g-cm-2
  • ramps + arduino + all the electronics
  • 2 x 120cm 10mm rods + 2 x 120cm 12mm rods
  • M5x25, M5x12, M5x10, m5 nuts (4mm height & 2,8 mm height)
    I need to order some missing pieces:
  • 2X leadScrew 8mm X 500
  • 2X Rods 8mm X 600
  • ...

heRe the state (what i have already done):
1X LeadScrewNutMount
1X XYMotorMountRight
1X XYMotorMountLeft
3X Zmotormount (1 time for wrong proile 30X30 in place of 20X20, 1 time with M3 in place of M5)
1X Zcarriage print ongoing but i see a problem with the size of the nuts

can i use the 624ZZ bearing ? (i have M5 bolt)
because i have multiple set of this:

for the moment i lose a lot of pla & printing time,
but i will get the feedback of my build so other user can reuse.

Vulcanus Max V1.1

The F623ZZ are flange bearings which do guide the timing belts. You probably can use F624ZZ flange bearings, but you need to change the values then in "FLANGE_BEARINGS.inc" and render the parts of course.

I am also not sure why you want to use M5 bolts; M3 or M4 are sufficiently strong.

To avoid wasting a lot of PLA and printing time I would recommend a tool like "3D-tool" (www.3D-tool.de) to open the generated STL files and use the Measuring options to verify your parts before printing.

Thanks, To avoid mistake I have ordered a set of f623Z.
For the Z bearing I will order this set http://s.aliexpress.com/Eb6BrmIV

I've used 16 tooth idler pulleys on my machine.
Tooth is a bit misleading, you also get them without tooth profile.
Those are the exact same size as the F623ZZ sandwich used in the original design.
I think I've used an M3 washer on both sides.

I am not entirely sure what your question is. But if you ask me whether you can use those profiles, I am quite sure you can. The outside dimensions of your profiles match the values in "ALU_PROFILE_20x20.inc". The only values you might have to change are the dimensions of the screw and the dimensions the hammer nuts.

rAluScrew = 4.0/2;
lAluHammerNut = 11.5;
wAluHammerNut = 5.7;
rAluWasher = 10.0/2;

The above dimensions you have the verify against parts you are intending to use.

sorry for my bad english,

thanks, you answer exactly to my question.
I am not sure how the radius Screw, lenght HammerNut, width HammerNut, radius Washer affect the pieces.
I think by changing this value the hole allignement change.
If i decide to go for this printer i will print some pieces and check wat is the change for other value.

I hesitate with the following printer https://www.thingiverse.com/thing:2452700 .

pro for Hypercube Evolution 2020:

pro for your design:

  • everithing is parametrable
  • minimalist
  • less pla
  • less printing time
  • i realy apreciate the effort you do to design all the pieces using openscad

do you see something else not listed ?

Hypercube Evolution 2020
HyperCube Evolution

Avoid the 5mm 2020 extrusions from Motedis.
Most nuts won't fit the 5mm slots, especially not the hammer head nuts.
Motedis also sells 2020 with 6mm slots, buy those.
I've made the mistake myself with an earlier project.

if you are a newcomer in the 3D printing world, it might be best to choose a design with a large community.

Coming back to the HyperQbert design:

  • the size of hammer nuts is important for the parts like the Z-Motormount.stl. For ease of assembly the plastic part(s) do contain hole(s) through which the hammer nut fits. So it would be best to measure the size of the hammer nuts and render the parts with the new sizes. (although most likely you would be able to fix this by post processing with a dremel like tool)
  • a second z-motor is already supported (just set the boolean useSecondZMotor=true). In fact I am currently building a very large HyperQbert with 2 z-axis motors.

In any case, i would check if with the other CoreXY designs you will be able to fully enclose the printer. Enclosure of the printer makes a huge difference when printing ABS. (both for warping and also for the smell). If you plan to enclose your printer in the future, then I would strongly recommend to print the plastic pieces in ABS (or at least PETG)

Even if you don't enclose your printer, at least print your bed mounts in PETG or ABS.
I have an Alucore bed and at 110°C it transfered enough heat into the mounts that it softened and got me into troubles.
Never had an issue with 60°C bed temperature on a fully PLA printed machine however.
My next printer will be printed fully in PETG nevertheless and it will get a second Z motor too.
My first one has a rocking problem with my 326x326mm bed.
Not a huge problem, but I would like to avoid it nonetheless.

If your current printer is capable of printing ABS, I would certainly go for that for all parts, to avoid any softening issues.

I am almost finished building my second HyperQbert bed size (500x300) which is using 2 Z-motors. (All parts printed in ABS 95% infill on my enclosed HyperQbert). So at the moment I do NOT know yet how well the second Z-motor will work.

fyi: My first HyperQbert I just updated with tmc2130 drivers for the XY motors. It makes a huge difference in noise level compared to my previously used 4988 drivers.

I don't think my printer is capable of printing ABS.
I almost always print ABS with 60°C and PETG with 70°C bed.
It was an accident and it was capable of heating up to 110°C.

500x300mm is a very decent size.
I would love to see pictures of that.
How are the motors arranged?
I plan on either using the original design with a second Z setup in front, because that's where I need more support.
Or do a left right arrangement, which will require more profiles when done with the original parts, but allows better access to the print surface.
No final decision yet.

I've tried different drivers on mine.
First it was DRV8825, but my heated bed wants 24V and I have 1.7A motors.
To keep it short: this combination won't match up with the default driver configuration on the modules.
Then I've tried TMC2100, but with chinese modules, which were silent, but not powerfull enough in the default configuration and the chinese clones are different, so required a bit of reverse engineering for the more powerfull mode.
Nevertheless, I had suspected that they won't match up very well with my 1.7A motors as well.
Now I'm using LV8729 with (IIRC 1A setting), but in another project I'm running them with 1.6A on the same motors.
I don't remember what microstep setup I'm using, either 16x or 32x.
128x was a bit to high, even with my 32bit board.
Unlike the Trinamic they don't interpolate, so more microstepping directly results in lower noise.
The TMC2130 are tempting and I already bough some, but on the other hand, the LV8729 work great for me.

Enclosing makes a big difference when printing ABS. I do NOT have a heated chamber, just a full enclosure. I heat up the bed to 100 C and use 3DLAC for better adhesion.

I did add some intermediate build pictures (build is almost ready, just need to wire it up everything), I think the Z axis in front will just work fine. (You can view my printer configuration for this printer by setting the USE_PROJUNK_PREFS=1). Since my print bed is very wide (500 mm), i do not think I will have issues accessing the print surface even if I fully enclose this printer.

I am using the tmc2130 in SPI mode (in my old HyperQbert), so everything is now configurable via marlin. The Marlin defaults for the tmc2130 just work out fine. I had to resolder these chinese drivers myself to get them in SPI mode, which is quite tricky, but there is a youtube video of how to do that.

For this new printer I did order some new chinese tmc2130 which should already be in SPI mode.

I tried to print the z motor mount.
Two fails :-)
First try:

  • printed the stl file => 30x30
    Second try:
  • generated the 20x20 version but the hole are m3

i tryed to add M5.inc

// screw m5
//rScrew = 4.0/2;
rScrew = 5.0/2;
rScrewHeadOuter = 6.8/2;
rScrewHeadInner = 3.3/2;
//tScrewHeadOuter = 4.0;
tScrewHeadOuter = 5.0;
tScrewHeadInner = 3.6;

// nut
//rNut = 8.0/2;
rNut = 10.0/2;
wNut = 6.8;
rNutHead = 6.4/2;
tNut = 3.6;
tNutHead = 1.4;
// washer
rWasherOuter = 8.8/2;
rWasherInner = 4.5/2;
tWasher = 1.7;


// profile dimensions
rAlu = 5.5/2; // radius of centerhole
wAlu1 = 20.0; // width/height of profile
wAlu2 = 6.0; // width of slot opening
wAlu3 = 5.5; // distance from outside till core
rAluScrew = 4.0/2; // thickness of outside alu slot
tAlu = 1.5;
lAluHammerNut = 11.5;
wAluHammerNut = 5.7;
//rAluWasher = 10.0/2;
rAluWasher = 12.0/2;
hAluCornerPiece = 18.0;

// related dimensions
tPlastic = 5.0;

but the diameter off the hole seems to be wrong.
Could you please add M5.inc(or post here the code) ?
I do not have the skills to addapt the m3 or m4

The small slotholes in the Z Motor mount are determined by the stepper motors you did select. For NEMA 17 motors the screw sizes are indeed M3 (see NEMA.inc, rScrewHoleNEMA17)

The big holes (the ones for connecting the Z Motor mount to the 2020 profile) are in your case M4 (rAluScrew)

The generic screw size (M3.inc or M4.inc) are in fact all the other holes in the plastic parts (but in case of the Z Motor mount, they are not used). The screw holes you are referring to in case of the Z Motor mount are the exceptions; These screw holes are determined by the stepper motor and the aluminum profile).

thanks the pieces juste finish to print,

I just created a new alu_profile_20X20i
// profile dimensions
rAlu = 5.5/2; // radius of centerhole
wAlu1 = 20.0; // width/height of profile
wAlu2 = 6.0; // width of slot opening
wAlu3 = 5.5; // distance from outside till core
//rAluScrew = 4.0/2; // thickness of outside alu slot
//rAluScrew = 6.0/2;
rAluScrew = 5.8/2;
tAlu = 1.5;
lAluHammerNut = 11.5;
wAluHammerNut = 5.7;
rAluWasher = 10.0/2;
//rAluWasher = 12.0/2;
hAluCornerPiece = 18.0;
// related dimensions
tPlastic = 5.0;

i am busy repairing the washing machine

Over the weekend, I modified you files to support LMxLUU bearings. While doing so I noticed you have an undefined variable in the drawXCarriageClamp function: when isMicroSwitchMount=true, the variable "correction_BearingRadius" is reported as undefined. Any help on how it should be defined would be a great help.

could you share the LMxLUU modified file ?

What do you mean with the modified LMxLUU file? The bearings LM8UU,LM10UU,LM12UU have been defined in the BEARINGS.inc file.

Do you want me to add a new bearing type to this file?

yes to avoid friction by using 2 bearing i prefer to use longer bearing like used by @goofdad
it's the same but bit longer https://fr.aliexpress.com/item/4pcs-lot-Free-Shipping-LM12LUU-12mm-long-type-linear-ball-bearing-12mmx21mmx57mm-for-12mm-shaft-cnc/32821953624.html

i think for the Z the LMK12LUU https://fr.aliexpress.com/item/4pcs-lot-Free-shipping-LMK12LUU-long-type-12mm-flange-linear-bearing-CNC-Linear-Bush/32324857932.html is the best option because it's maintened by the botom, like on the high end printer (ultimaker)
but it's a litle more expensive.

Which of the following do you mean?

1) replace two LM12UU bearings by a single LM12LUU bearing?
2) replace LM12UU bearing by LM12LUU bearing?

Option 2) is easy to implement of course, since it is just adding another bearing to the BEARING.inc file. Option 1) however also requires changing the openscad model.

Replacing by a single lm12luu.
So the option 1

The long bearing type has been added to the BEARINGS.INC file and the model has been changed to support these bearing types.
newly supported bearing types:

See release notes of 26 February for more details.

issue should be fixed, new source file has been uploaded.

I will have a look at the issue as soon as possible, thanks for reporting.

Hi. Share motor mount brackets OpenSCAD file? I use 4040 alu profile.

Not sure what you mean, everything is freely available. If you do not use the default design (like using 4040 alu profiles instead of the 3030 alu profiles), you of course need to render all parts using OpenSCAD.

Hypercube Xy Motor Mount For 4040 Profile

What size is the pulley you use on the motor shafts?
I guess either 16 or 20 tooth.
With the wrong size the belt between the motor and XY carriage wouldn't run in parallel.

The XCarriageAssembly doesn't look plausible with the overlapping endstop extensions.

Amazing design and obviously a lot of work to get things configurable.

In my printer I make use of the 20 tooth GT2 pulley (this is the pulley that has been modeled in the OpenSCAD project)

// GT2 Pulley 20 teeth
rPulley1 = 9.75/2;
rPulley2 = 14.0/2;
rPulley3 = 12.0/2;
rPulley4 = 5.0/2;
hPulley1 = 8;
hPulley2 = 9;
hPulley3 = 16;
hPulley4 = 17;

Oversaw that.
Thank you.

Can you please upload the additional data for the x-axis.
For example the holder for the hotend and springloader?

These optional parts have now been added to this project (see also release notes).

How can I specify 3/8" for the X-Axis aluminum since I couldn't get the 10mm I wanted? Can I use the LBB6UU for the X-Axis bearings?

First of all: the rod sizes are determined by the bearing diameter. If you select a certain bearing, a corresponding rod diameter is required.

You need to change the file BEARINGS.inc

Since you do not seem to be using bearing LM10UU; the easiest way is to simply replace the dimensions of

lBearingLM10UU = 29.0;
rBearingOuterLM10UU = 19.0/2;
rBearingInnerLM10UU = 10.0/2;

by the dimensions of the LBB6UU bearing

I understood that but the issue was how does your modeling take in account the SAE size not metric. I have changed the sizes to be as close as I can to be metric but not sure what the ramifications would be.

Not sure what you mean. I would say, just convert the dimensions of LBB6UU to metric and render all the objects. Of course all resulting dimensions will be in metric (mm to be exact). Or do you mean you also have non-metric versions of screws and Nema's?

Comments deleted.

So I've gotten this to render and compile in OpenSCAD. How do I get JUST the printed parts to export as I've never really used this program?

  1. Set all the parameter the way you want to build your printer (I mean select the aluminum profile type, screw size, nema motor size, etc)
  2. Go to the section in the OpenSCad file starting with "// assemblies".
    comment out any line in that section
  3. Go to the section in the OpenSCad file starting with "// printed parts" (comment out
    comment out any line in that section, except for the one for which you want to generate the STL.
  4. Render the object
  5. Export the rendered object as STL

repeat this procedure for all the objects you want to render.

I just rendered the entire printer with this setting in the .scad file drawTotalAssembly(); uncommented. I am curious if the warning at the end of the console log is normal or there is something I need to look at or fix.

Compiling design (CSG Tree generation)...
ECHO: "availableExtraLengthZCarriage", 40.35
ECHO: "extrusionLengthBedX", 188.4
ECHO: "extrusionLengthBedY", 325.35
ECHO: "availableExtraExtrusionLengthBedY", 0
ECHO: "distanceLeadScrewToZRod", 135
ECHO: "extrusionLengthX", 494
ECHO: "extrusionLengthY", 367.85
ECHO: "extrusionLengthZ", 517.25
ECHO: "leadScrewLength", 431.95
ECHO: "XRodLength", 531.5
ECHO: "YRodLength", 365.85
ECHO: "ZRodLength", 454.85
ECHO: "xWidthFrame", 544
ECHO: "yWidthFrame", 417.85
ECHO: "zHeightFrame", 517.25
ECHO: "topPanelWidth", 544
ECHO: "topPanelHeight", 417.85
ECHO: "sidePanelWidth", 417.85
ECHO: "sidePanelHeight", 484.95
ECHO: "backPanelWidth", 544
ECHO: "backPanelHeight", 484.95
ECHO: "bottomPanelWidth", 544
ECHO: "bottomPanelHeight", 417.85
ECHO: "frontPanelWidth", 522.5
ECHO: "frontPanelHeight", 484.95
Rendering Polygon Mesh using CGAL...
Geometries in cache: 621
Geometry cache size in bytes: 23254032
CGAL Polyhedrons in cache: 4
CGAL cache size in bytes: 55566632
Total rendering time: 1 hours, 26 minutes, 30 seconds
Top level object is a 3D object:
Simple: no
Vertices: 118992
Halfedges: 358996
Edges: 179498
Halffacets: 118350
Facets: 59175
Volumes: 15
WARNING: Object may not be a valid 2-manifold and may need repair!
Rendering finished.

I am not surprised that "rendering" of the total assembly gives these errors. I can imagine it fails for example because the corner pieces do TOUCH the aluminum profile; they do not INTERSECT them; so it is not a "watertight" fit. This will be the case for most of the assembled parts;

So yes I think it is quite normal you get errors and it is NOT something to worry about. If you would get these errors when rendering the separate parts, then it would be certainly an issue for me to fix. I just rendered the total assembly myself for the first time; it gives indeed those errors, but the generated STL is good enough to import in the "3D-tool" program to verify dimensions in detail. (nice!, i did not expect that at all)

I only use the "Compile" option of the total assembly to verify how the parts fit. The "Rendering" option I only do for the separate parts in order to generate the STL's.

Thanks for the reply, I will use the compile option when I want to see how it all fits together then. As soon as I get the repair parts for my printer I can start printing the parts. I am getting all of the .gcode files prepared now so I can start printing as soon as I have an operational printer again. I am generating the STL's and slicing them with Simplify3D so I will be ready to print very soon.

Do not forget to verify your hammer nut dimensions belonging to the aluminum 2525 profile. Otherwise your slot/hole sizes might be wrong (though probably fixable with a drill and/or Dremel like tool).

I have not forgotten, I have been busy here on other things, I will verify the hammer nut specifications tomorrow morning here and send you the information. I most likely will be purchasing my 2525 extrusions from 80/20 on ebay. I quick look last night said they you m5 screws, I will verify that in the morning and send you the info on the nuts.

Nice work, the use of OpenSCAD sure makes it easy to change sizes. Is there an available include file for 25x25 aluminum extrusions? If not, where can I find the information to create one?

The include for the aluminum profile type 2525 has been added. However, I could not find information about the hammer nut dimensions to be used with this profile. I did choose the same hammer nuts that are also used for the 2020 profile (M4).

Please send me the correct dimensions of the hammer nut if M4 is not the correct size.Following dimensions you need to send me in that case:
rAluScrew = 4.0/2;
lAluHammerNut = 11.5;
wAluHammerNut = 5.7;

Thank you very much, I think I will be using 25x25 extrusions for my printer. I will look the appropriate hammer nuts up, I think they are m5.0 screws, up and send you the appropriate information as soon as I can, perhaps later today. I just used the new 2525 include file, there are two minor errors that cause the compile to fail. There are two lines with comments that do not have // preceding the comment. I fixed them in my copy.

hi, yes that is a mistake by me. I added those comments later on to all aluminum profiles.

Hi. Exists a version of x carriage to support MK8 extruder?

Not yet, the current x-carriage contains mounting holes for the Greg/Wade extruder.
If you give me the dimensions of the MK 8 mounting holes (location of holes and diameter), I can add that extruder as an option.

How would I generate the printer to use all lm8uu bearings?

// ***** Bearing selection
BearingX = LM8UU;
BearingY = LM8UU;
BearingZ = LM8UU;

Hi. Thanks a lot. I have another question. I am printing you printer for 4040 profile. I notice that there are flanges inside the x carriage where lm8uu stais. It is normal?


The flanges inside the bearing are intentional. If you do not want to use those, you could set PRINTABLE=0.

The reason for those narrow flanges is to give the bearing the possibility to self align. Suppose you disable this optimization, then your linear bearings will likely make quite some noise, unless you would we able to align the Rods and Bearings perfectly.

In my opinion it is better to use these small flanges (which will result in a point contact instead of a line contact).

remark: the XCarriageClamp, which is the counterpart, also has the small flange for the same reason.

Ok. Thanks a lot for reply. I try with flange. You done a good work. There is a video where the parametric 3d printer work?

A short video of the printer in action is on my to-do list. Yesterday I did add pictures of the completely finished printer, including lighting with aid of led strips.

I have printed so far PLA, ABS and Ninjaflex succesfully with this printer. Especially ABS is much easier to print with the HyperQbert compared with the Prusa I3 (which is an open printer with a moving bed)

Comments deleted.

Hi. If i select BearingZ = LM8UU; the hole in drawZBearingMount(); did not change. Why?


The Z bearing mount is not the part that you intend to change. The ZBearingMount is the part that contains the bearing to guide the Z lead screw at the top of the printer. It uses the flange bearing F608ZZ.

The part you most likely are trying to change that uses the BearingZ is the ZCarriage which you can generate using drawZCarriage.

Hi. Thanks for work. I am a noob, can you explain me how to draw and export the stl parts?

What bearings are compatible with the XY idlers? F864 ?

I use following combination as single bearing unit in XY idlers and Y-Carriages:

m3-washer + F623ZZ + F623ZZ + m3-washer

The dimensions can be found in the file "FLANGE_BEARINGS.inc"

I was running into a problem where part of the ZRodMount's cylinder would extend below the bottom of the part. My modified settings are:

include <ALU_PROFILE_15x15.inc>
include <M3.inc>
wExtruder = 110.0;
wHeatedBedX = 300;
maxBuildHeight = 285.0;

Adding the following to the end of the 2nd union of drawZRodMount solved my issue:

     translate([-wZRodMount/2,0,-tZRodMountThick]) cube([wZRodMount,distanceLeadScrewToAluProfile+1,tZRodMountThick]);

The issue with the ZRodMount should be fixed for aluminum 1515 profiles. Also fixed a similar issue for the ZBearingMount.

I notice there are more issues with the aluminum 1515 profiles. I will try to fix it in a generic way, as soon as I have I some time for it.

Comments deleted.

What would it take for this to support 1515 extrusions?

Aluminum profiles 1515 and 4040 have been added to the model (they have however NOT been tested)

This is a really cool project. I was looking at making the HyperCube, but was looking for options, like 3030 frames.
Is there an option to choose nema23 motors? (x/y only)?
Nice work!

NEMA14 and NEMA23 support has been added. To use NEMA23 for XY motors and NEMA17 for Z motor:
motorXY = NEMA23;
motorZ = NEMA17;

Oh dang, that was quick. Thanks!
This will help with planing on the new printer I've already ordered parts for :)

I will put this enhancement on my to-do list. It should not be too much work to add this feature. I implemented something similar for the Bearings/Rods per axis.

Hi Projunk,
Thank you SO much for putting in all the hard work to model this. It is fantastic work.
I have started building my Hypercube using your design having modified the Scad to use LM10UU bearings (and 10mm rods), 20mm aluminium extrusion and M3 nuts and bolts.
There is an issue with these parameters where the XY Idler makes contact with the Y Rod Clamp.
If you use these parameters and zoom in on the XY Idler you will see what I am talking about.
It could be fixed by putting a cutout into the Idler to clear the Rod clamp. I don't have the experience with OpenSCAD to make this change but did manage to do it in fusion 360.
I will post an STL once I am happy with the design but it might be worth it for you to implement a change within the OpenSCAD.
Once again, great work and thanks.

This XYIdler issue should now be fixed by adding a cutout in case it is required.


I will put the issue you mentioned on my to-do list.

Mechanically I almost finished my own HyperQbert printer (using 3030 aluminum profile and 10,12,12 rods for X,Y,Z). I had to fix only minor things so far and updated this project with those changes. So my first guess is that the issue you encountered must be related to use of the use of 2020 aluminum profile.

Hi Projunk,

thanks for the quick reply. I have solved the problem - I was using an older version of OpenSCAD - V2013.06. I have now updated to V2015.03 and all is well.

I am curious - did you measure the STL files from Tech2C's printer using some CAD software? How did you get your measurements etc. to create the OpenSCAD code dimensions?

I have just ordered a few hardware parts and aim to start printing some parts over Christmas - also calibrating my Mendel printer in the process. I like the idea of OpenSCAD parts as they can be easily tweaked if required, and it helps to keep my very basic coding skills in check! I have found that my slow iMAC (2011 model) does have trouble with the complete printer in OpenSCAD but individual parts can be viewed and edited fine.

Thanks for your help.


I did indeed verify some part dimensions of Tech2C's printer; I did use "3D-tool" for that:


But the dimensions of my printer are NOT compatible with Tech2C's printer. I designed all parts in a parametric way, so that a change of e.g a screw size, bearing size, etc will be fully taken into account into the parts. I think Tech2C did design his parts, just to be compatible with all the "fixed" components he selected to be used in his print design; nothing wrong with that of course.

So yes, I certainly got the inspiration from his design, but each part of my parametric design has been completely rethought.

So if you are planning to build the Tech2C printer, please use all HIS parts,

If you planning to build a printer based on this parametric build design, please keep in mind that I have NOT yet build the printer myself. I am currently sourcing all components to build it using the dimensions that are the default of this design. (213x213x300 build area, or a bit more dependent on the actual sizes of the 3030 extrusions that I ordered).

I will update the design soon with the enclosing parts (door + hinges + panels).

remark: I am printing all my parts in ABS, because I intend to enclose my printer and I expect the temperature within the enclosure to be rising quite high. (PETG might also be good enough, but I do not want to take the risk)


awesome project, I was actually going to have a go at creating the hypercube in openscad until I found you have done it already!

I have tried to F5 compile the openscad code and get the following error on line 701:

Parser error in line 701:syntax error

ERROR compilation failed!

Any ideas???



I just downloaded files from thingiverse to make sure nothing is corrupt. I could not find any issues, the downloaded files work fine. I am using OpenSCAD version 2016.05.12. (windows x64)

Awesome project! I love designs done in OpenSCAD, they are the easiest to customize.

One hint: Tech2C designed many parts to be "automatically aligned", you just need to install them touching the corner brackets. I think that's a nice feature that you might want to implement too.

To be honest, automatic alignment of some parts is nice, but not really that important and might just give the opposite effect. If a part is not perfectly according to spec, you might simply not able to achieve the intended alignment. Completely on purpose I defined "clearance" variables (like e.g. clearanceFixedParts) to make sure that also NON perfect parts can be aligned properly.

Also this printer is designed in such a way that ALL parts will be inside the cube, so that enclosing of the printer is possible (that will be the upcoming update to this project). That also forced me to put some parts at, from mechanical point of view, not the perfect place (e.g. the YRodMounts).