Welcome to MakerHome




We've completed our yearlong print-a-day project!
All new material is now at Hacktastic: www.mathgrrl.com


Friday, February 28, 2014

Day 186 - Friday Fail

One thing I love about 3D printing is that it teaches you how to deal with failure. Lots and lots of failure. Every design I make ends with a pretty picture but starts with a stack of failed prints, and each one of those failed prints tells me how to redesign my model to be a little bit better. Printing a model to see how it is working is cheap, fast, and easy when you have a 3D printer, so you can literally "design to fail", that is, make a design that you know isn't quite right but then print it, learn from it, and fix your model or print settings accordingly. Failure is actually an active part of my design process.

The process of try/fail/try again is something that many of my math students have difficulty with; they can remember and repeat tasks but they often have trouble being creative and solving problems. For the calculus geeks out there, consider the difference between differentiation and anti-differentiation. Differentiation is simple for most functions and it would not be hard to write a computer program to do it; the process doesn't require much creativity. Anti-differentiation is another story; for example, the functions 1/(3x^2+2), x/(3x^2+2), and (3x^2+2)/x are fairly similar, but their antiderivatives are wildly different (one involves arctan, one involves logarithms, and one is a polynomial). Finding these anti-derivatives requires a willingness to make a guess, test out the guess, and then re-guess accordingly, and students have a lot of trouble doing that when they first encounter anti-derivatives. A lot of them don't like to try things that they aren't sure will work, and in addition are reluctant to try again when they fail the first time.

I hope that the use of 3D printing and modeling in K-12 schools will help my future students learn to fail. And how to pick themselves up, dust themselves off, and fail all over again. And again, and again!

So in celebration of failure, I'll stop hiding my catastrophes and put them up here for all to see. This week's Friday Fail is a collection of hinge tests for a project we will be posting later this week. The design is based off our old Print-in-Place Fidget Cube model, written in OpenSCAD. Some of the modules in the new design have angles of much less than 90 degrees that need to have hinges, and this causes a problem with stability and reliability. So we've been testing, retesting, coding, and recoding until we get it working just the way we want. Here are some of the failures that helped us on our way today:

Thursday, February 27, 2014

Day 185 - Wishbone

Easy mashup time: Today we printed SimplusDesign's Wishbone Cookie Cutter Set on Thingiverse and Eckerput's Rolling Pin Spacer on Thingiverse so we can make some cookies! Also, a bonus: The rolling pin spacer can be resized into a really simple bracelet to use as a reward for winning the wishbone-breaking competitions that will ensue.


Thingiverse link for wishbone cutter: http://www.thingiverse.com/make:68121
Thingiverse link for rolling pin spacer: http://www.thingiverse.com/make:68122

Settings: MakerWare .3mm/low on a Replicator 2, with no raft and no support.

Technical notes: Eckerput made his rolling pin spacer in OpenSCAD, which makes it easily customizable to different rolling pin sizes and dough thicknesses. It's a great example of simple OpenSCAD code; if you're a beginner you could start with this example and then work on extending and modifying it into other projects:

// Rolling Pin Spacers
// all measurements are in mm

// by Eckerput
// http://www.thingiverse.com/thing:38943

// Diameter of rolling pin in mm (best if slightly smaller than actual)
pin = 46;
pinr=pin/2;

// How thick you want the dough to be in mm
Dough = 5;

difference () {
   cylinder (h=7,r=pinr+Dough, $fn = 200);
   translate ([0,0,-2]) cylinder (h=14,r=pinr, $fn = 200);
   translate ([0,0,-2]) cube([pinr+Dough+2,2,14]);
}

The code is probably fairly self-explanatory except for the "difference" command. This command works by creating the first object that is listed and then subtracting all objects listed after that. In this case, Eckerput is making a solid cylinder that it is 7 mm high and whose radius is enough to get around the rolling pin and make room for the desired thickness of dough.  The "$fn" part tells OpenSCAD to use 200 fragments to make the round part of the cylinder; this controls how smooth the cylinder will be. Using a value as high as $fn=200 can slow your code down significantly in more complicated examples, so when working with rough code I suggest using $fn=12 or not including any $fn directives. There are two things that have to be removed from the cylinder that was created on the first line of the difference command: first, the center of the cylinder, to allow room inside for your rolling pin; second, a small slit in the resulting annulus to give the ring some flexibility to enclose and grip the rolling pin. Note that in each of these objects to be removed, Eckerput made the height 14 instead of 7; this is so that those objects extend well past the original cylinder and do not share any faces with the original cylinder. Failing to do this can cause strange errors in OpenSCAD. For more information on how to get started with OpenSCAD, see the OpenSCAD User Manual.


Wednesday, February 26, 2014

Day 184 - Mystery pyramids

Today we made a lot of little pyramids and a box. Why? Can't tell you that right now, it's for a friend and we'll follow up later on this year with a reason.


Settings: As usual, MakerWare .3mm/low on a Replicator 2. We printed the pyramids three at a time at 80% and the box at 81% to add a little clearance that was missing in our first trial run. You could probably print more pyramids at a time but our build plate is a little warpy so we are currently trying to keep our prints small and near the center of the plate.

Technical notes: The OpenSCAD code is really simple; the only part to think about is how to find the height of a square-based pyramid with sides all of equal length. Get out your trigonometry hat: Given that the sides of the square are 30mm (based on our coordinates for those vertices in the code below), the Pythagorean theorem tells us that the diagonal of the base is 30*sqrt(2). Then the height of the pyramid is one leg of a right triangle whose other leg is length 30*sqrt(2)/2 (halfway across the diagonal) and whose hypotenuse is 30 (one of the slanted sides of the pyramid), so another application of the Pythagorean theorem gives us a height of 30/sqrt(2). Or you could just memorize that the height of an equilateral square pyramid is the side length divided by sqrt(2).

// mathgrrl packing problem

////////////////////////////////////////////////////////////////////
// renders
////////////////////////////////////////////////////////////////////

the_box();

//square_pyramid();

////////////////////////////////////////////////////////////////////
// module for square pyramid 
// from OpenSCAD manual example
// http://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Primitive_Solids
////////////////////////////////////////////////////////////////////

module square_pyramid(){
polyhedron(
 points= [[15,15,0], [15,-15,0], [-15,-15,0], [-15,15,0], 
          [0,0,30/sqrt(2)] // top point
],                                 
 triangles=[ [0,1,4],[1,2,4],[2,3,4],[3,0,4], // each triangle side
             [1,0,3],[2,1,3] ] // two triangles for square base
);
}

////////////////////////////////////////////////////////////////////
// module for the box
////////////////////////////////////////////////////////////////////

module the_box(){
translate([0,0,76])
difference(){
cube([92,92,92],center=true);
translate([0,0,6]) cube([90,90,100],center=true);
}
}

Tuesday, February 25, 2014

Day 183 - Hiroshima University

To celebrate today's visit to the JMU 3-SPACE classroom from a group of students from Hiroshima University, we them made a nameplate logo design in Tinkercad.



Settings: MakerWare .3mm/low on a Replicator 2 with no raft and no support, oriented so the nameplate was face-down.

Technical notes: To import the logo into Tinkercad we opened a .jpg of the design in Inkscape, converted to bitmap, and then saved in .svg format. 

You can see pictures from the Hiroshima University visit at the JMU 3-SPACE blog.

Cool fact: Today marks the halfway point on our journey to 3D print and post about something every day for a year!

Monday, February 24, 2014

Day 182 - Voronoi die

Today we printed a copy of sirmakesalot's clever Bone Die on Thingiverse using our loaner Afinia H-Series:


Thingiverse link: http://www.thingiverse.com/make:67307

Settings: Afinia .3mm/low on "fast" with "only base" supports.

Sunday, February 23, 2014

Day 181 - Hexagonal Borromean rings that print without support

Printing Borromean rings in three pieces minimizes support because the first two pieces need no support at all. In this model we've used a hexagonal ring shape with sides beveled so as to allow printing in one assembled piece with no support or raft needed! The "chain" demo file by sal on Thingiverse that comes with the Replicator 2's SD card was the inspiration for this beveled hex design. Although not as pretty as the three-color prints, when you need a quick set of Borromean rings you can't beat a print-in-place support-less model. But in case you want to try a three-color model, I've included files for that as well.


STL file, horizontal ring: http://www.geekhaus.com/makerhome/day181_borr_hex_piece12.stl
STL file, vertical ring: http://www.geekhaus.com/makerhome/day181_borr_hex_piece3.stl
STL file, together: http://www.geekhaus.com/makerhome/day181_borr_hex_together.stl
Thingiverse link: http://www.thingiverse.com/make:67202

Settings: MakerWare .3mm/low on a Replicator 2 with no raft and no supports, all in one piece!

Technical notes: Like yesterday, use the ellipse function and tubify module from Day 179 and then comment in the part you want to use from the code below.

////////////////////////////////////////////////////////////
// Borromean hexagons - all together (no supports needed!)
////////////////////////////////////////////////////////////

// set faces
$fn=6;

difference(){
// make the three rings
union(){
rotate([0,0,0]) rotate([45,45,0])
color("red") tubify(r=3.5,step=45,end=360);
rotate([0,0,120]) rotate([45,45,0])
color("yellow") tubify(r=3.5,step=45,end=360);
rotate([0,0,240]) rotate([45,45,0])
color("blue") tubify(r=3.5,step=45,end=360);
}
// hack to shave off base for good platform adhesion
translate([0,0,-45.4])
cube(50,center=true);
}

////////////////////////////////////////////////////////////
// Borromean hexagons - one at a time
////////////////////////////////////////////////////////////

/*
// set faces
$fn=6;

// hexagon ring
// print two of these
tubify(r=3.5,step=45,end=360);

// final hexagon ring
// print standing up and pause to assemble
// rotate([0,90,0]) tubify(r=3.5,step=45,end=360);
*/

Saturday, February 22, 2014

Day 180 - Diamond Borromean

Same as Day 179 but with diamonds instead of ellipses! This version of the Borromean rings has more limited mobility but that restricted movement makes it naturally sit on your desk in a beautiful star shape:


STL file, horizontal diamond: http://www.geekhaus.com/makerhome/day180_borr_dia_piece12.stl
STL file, vertical diamond: http://www.geekhaus.com/makerhome/day180_borr_dia_piece3.stl
STL file, all together: http://www.geekhaus.com/makerhome/day180_borr_dia_together.stl
Thingiverse link: http://www.thingiverse.com/make:67201

Settings: MakerWare .3mm/low with no raft or support for the first two pieces, and both raft and support for the vertical piece. The vertical piece is oriented in such a way to need to support on its interior, while forcing support in a small area at its base for stability.

Technical notes: Using the ellipse function and tubify module from Day 179, uncomment the code below to get the type of model you want (single diamonds or all together).

////////////////////////////////////////////////////////////
// Borromean diamonds - all together
////////////////////////////////////////////////////////////

/*
// set faces
$fn=4;

// make the three rings
rotate([0,0,0]) rotate([56.6,56.6,0])
color("red") tubify(r=3,step=90,end=360);
rotate([0,0,120]) rotate([56.6,56.6,0])
color("yellow") tubify(r=3,step=90,end=360);
rotate([0,0,240]) rotate([56.6,56.6,0])
color("blue") tubify(r=3,step=90,end=360);
*/

////////////////////////////////////////////////////////////
// Borromean diamonds - do one at a time and then assemble
////////////////////////////////////////////////////////////

// set faces
$fn=4;

// diamond ring
// print two of these
scale(1.3) tubify(r=3.5,step=90,end=360);

// diamond ring
// print two of these
// scale(1.3) rotate([35,0,0]) rotate([0,90,0]) tubify(r=3.5,step=90,end=360);


Friday, February 21, 2014

Day 179 - Tricolor Borromean rings

Yesterday we mentioned that you could print a three-color model of the Borromean rings by printing the rings separately and placing the first and second in and around the third right before it closed up. We did that today, using more elliptical rings to make the assembly easier:


STL file, horizontal ring: http://www.makerhome.blogspot.com/day179_borr_ellipse_piece12.stl
STL file, vertical ring: http://www.makerhome.blogspot.com/day179_borr_ellipse_piece3.stl
Thingiverse link: http://www.thingiverse.com/make:67200

Settings: MakerWare .3mm/low on a Replicator 2 with the first two rings laying flat with no support or raft, and the third ring printing vertically with both raft and support. We used the custom slicing profile from Day 110, which made a very thin one-layer sheet up the center of the interior of the vertical ring. When we added the first two rings near the end of the print, this support sheet had to come out, which led to a few stray threads in subsequent rows that had to be removed. Files for the horizontal and vertical files are separately here because in later models, the orientation of the third piece will be important.

Technical notes, OpenSCAD flavor: The code is very simple; much like it was for Day 178, but with a less circular function for the rings. Remove the comments for the piece you want to print.

// mathgrrl Borromean 
// thanks to kitwallace for tubify module!

// an ellipse
function f(t) = 
[ 25*cos(t),
 15*sin(t),
 0
];

module tubify(r,step,end) {
for (t=[0: step: end+step]) {
hull() {
translate(f(t)) sphere(r);
translate(f(t+step)) sphere(r);
       }
   }
};


////////////////////////////////////////////////////////////
// Borromean ellipses - all together
////////////////////////////////////////////////////////////

/*
// set faces
$fn=36;

// make the three rings
rotate([0,0,0]) rotate([45,45,0])
color("red") tubify(r=3.5,step=10,end=360);
rotate([0,0,120]) rotate([45,45,0])
color("yellow") tubify(r=3.5,step=10,end=360);
rotate([0,0,240]) rotate([45,45,0])
color("blue") tubify(r=3.5,step=10,end=360);
*/

////////////////////////////////////////////////////////////
// Borromean ellipses - one at a time
////////////////////////////////////////////////////////////

// set faces
$fn=36;

// ellipse ring
// print two of these
tubify(r=3.5,step=10,end=360);

// final ellipse ring
// print one standing up and pause to assemble
//rotate([0,90,0]) tubify(r=3.5,step=10,end=360);

Thursday, February 20, 2014

Day 178 - Borromean rings

When I give talks about 3D printing and knot theory, I often tell the story of my student Olivia who created and printed a 3D model of the Borromean rings as her first project in my class.  The Borromean rings consist of three rings arranged in such a way that no two of the rings are linked to each other, but the three together are linked and cannot come apart. Olivia's model came out beautifully, but she had a confession: no matter how hard she tried, she could not make the Borromean rings model out of circles. She reported to the class that she had to resort to using slightly elliptical rings instead of circles, and that in fact, she wasn't even sure that it was possible to construct the darn thing out circles. She had independently discovered what Linstrom and Zetterstrom proved in 1991 in their paper Borromean circles are impossible (American Mathematical Monthly, Vol. 98, Issue 4)! What's more, when you hold the 3D model in your hand it is immediately obvious why constructing the Borromean rings out of circles doesn't work.

Although I've told this story many, many times, it always ends on a lame note - with me realizing that I don't own a copy of Olivia's model to show! Today, I fixed that problem and made a model of the Borromean rings in OpenSCAD:


The rings don't touch each other and you can flatten them to get a braid link conformation of the form AbAbAb, or in other words, the spiral link S(3,3,(1,-1)).


STL file: http://www.geekhaus.com/makerhome/day178_borr_regular_together.stl
Thingiverse link: http://www.thingiverse.com/make:67199

Settings: MakerWare with our custom knot-slicing profile from Day 110 to minimize support. Only very thin sheets of support were generated, which worked wonderfully.

Technical notes: Using the parametric equations for an ellipse and kitwallace's tubify code, we get the following OpenSCAD code:

// mathgrrl Borromean

// nearly a circle
function f(t) = 
[ 25*cos(t),
 20*sin(t),
 0
];

module tubify(r,step,end) {
for (t=[0: step: end+step]) {
hull() {
translate(f(t)) sphere(r);
translate(f(t+step)) sphere(r);
       }
   }
};

// set faces
$fn=36;

// make the three rings
rotate([0,0,0]) rotate([45,45,0])
color("red") tubify(r=2.2,step=5,end=360);
rotate([0,0,120]) rotate([45,45,0])
color("yellow") tubify(r=2.2,step=5,end=360);
rotate([0,0,240]) rotate([45,45,0])
color("blue") tubify(r=2.2,step=5,end=360);

Stuff to change: If you printed these rings one at a time then you could slip the first two around/inside the third just before it finished printing. In that way you could make a cool three-color model! Here are the necessary files for a horizontal ring and a vertical ring.

Pictures of Olivia's original Borromean rings, which she constructed in Tinkercad, can be found at an old post of this story at jmumakerlab.blogspot.com.

Wednesday, February 19, 2014

Day 177 - Valentine tags

C's classroom Valentine's celebration was cancelled last week due to snow, and rescheduled for today. Stranded at home for a couple of days with no car and no Valentine's candy to bring to school, we decided to make nametags for the students in his class. A lot of C's classmates have very unique names so possibly they've never been able to get a nametag pencil, ruler, or trinket from one of those tourist trap displays. Hope they like these!



Settings: MakerWare .3mm/low, as usual. The stencil letters held together very well despite the small attaching lines.

Technical notes: These were very easy to make using Tinkercad's "MajorSnafu Text" shape script and Oliver's Tinkrecad "Chamfered and Rounded" community shape script. Follow the Tinkercad link and customize your own!

Tuesday, February 18, 2014

Day 176 - Geologhedra samples

Today we printed a small handful of polyhedra that represent crystal mineral models for geologist Amy Thompson at Bridgewater College. We used nischi's Crystal Structures Models on Thingiverse to start; in the future we hope to make OpenSCAD versions of a much large collection of crystal models, for example those cataloged by Cochise College or found in the Manual of Mineralogy and Petrology.


Thingiverse link: http://www.thingiverse.com/make:66462

Settings: MakerWare .3mm/low on a Replicator 2.

Monday, February 17, 2014

Day 175 - Metro wallet

I don't have a NYC Metro Card, but I hope to in the future. When I do, dadhoc's Slim Wallet with Metro Card Sliding Compartment on Thingiverse is where I want to keep it!


Thingiverse link: http://www.thingiverse.com/make:66460

Settings: Printed perfectly on a Replicator 2 with MakerWare on .3mm/low, no raft and no supports. The middle divider is just one path thick, and the overhang clip printed with no problems. Excellent design, dadhoc!

Stuff to change: Later I'd like to modify this design to make a Metro Card and small cash compartment that I can clip to the inside of my messenger bag.

Sunday, February 16, 2014

Day 174 - MAA icosahedron

In a couple of days I'll be speaking at the Carriage House, the headquarters of the Mathematical Association of America. Since the MAA's logo is an icosahedron, I'll be bringing them one as a present:



STL file: http://www.geekhaus.com/makerhome/day174_MAAisosahedron.stl
OpenSCAD file: http://www.geekhaus.com/makerhome/day174_MAAisosahedron.scad
Thingiverse link: http://www.thingiverse.com/thing:252515

Settings: MakerWare .3mm/low with 5% infill (half as much as usual), on a Replicator 2, in about an hour. The black was added after printing with a Sharpie.

Technical notes: We printed hollow icosahedra on Day 32 and Day 100, but used a Community Shape Script file from Tinkercad that needed rotating to print on a flat face. Since I don't know how to rotate by non-integer degrees in Tinkercad, the rotation was not exact and some flat triangles had to be added to the top and base in order for the model to print correctly.  Today we finally got off our Keister and made a new icosahedron, constructing the triangle faces explicitly using the polyhedron command in OpenSCAD.  We used Harlan Martin's write.scad code from Thingiverse to add the text.

// mathgrrl MAA icosahedron

use <write.scad>

////////////////////////////////////////////////////////////////////
// parameters
////////////////////////////////////////////////////////////////////

$fn=12;
phi = (sqrt(5)-1)/2; 
scalefactor = 50; // 15 for small

////////////////////////////////////////////////////////////////////
// renders
////////////////////////////////////////////////////////////////////

// MAA logo sized for scalefactor 50
translate([1,-5,35])
color("red")
write("MAA",t=30,h=32,center=true);

icosahedron(scalefactor);

// uncomment this to see the vertices
//showvertices(scalefactor);

////////////////////////////////////////////////////////////////////
// module for icosahedron 
// vertex coords from Wikipedia
// http://en.wikipedia.org/wiki/Icosahedron#Cartesian_coordinates
////////////////////////////////////////////////////////////////////

module icosahedron(thescale){
scale(thescale)
// rotate to have flat top and base
rotate(-atan(1-phi),[1,0,0])
polyhedron(
// list the vertices in some order
points=[
[0,1,phi], //vx 0
[0,1,-phi], //vx 1
[0,-1,phi], //vx 2
[0,-1,-phi], //vx 3
[1,phi,0], //vx 4
[1,-phi,0], //vx 5
[-1,phi,0], //vx 6
[-1,-phi,0], //vx 7
[phi,0,1], //vx 8
[-phi,0,1], //vx 9
[phi,0,-1], //vx 10
[-phi,0,-1], //vx 11
],  
// define faces, each oriented counter-clockwise
triangles=[
// top face
[8,9,2],
// faces with edges incident with top face
[8,2,5],
[2,9,7],
[9,8,0],
// faces next row down
[8,4,0],
[8,5,4],
[2,3,5],
[2,7,3],
[9,6,7],
[9,0,6],
// faces another row down
[0,1,6],
[0,4,1],
[5,10,4],
[5,3,10],
[7,11,3],
[7,6,11],
// and one more down, with edges incident to bottom face
[4,10,1],
[3,11,10],
[6,1,11],
// bottom face
[10,11,1]
]
); 
}  

OpenSCAD's polyhedron command takes a list of vertices as inputs, followed by a list of triples of those vertices that determine oriented triangle faces. We got the coordinates for the vertices from Wikipedia's icosahedron page, and wrote a vertex visualizer to keep track of the twelve vertices and determine how to construct and orient the triangles. In case you want to use the same trick, here is the code for that vertex visualizer:

////////////////////////////////////////////////////////////////////
// vertex visualizer module 
// use for constructing oriented faces
////////////////////////////////////////////////////////////////////
module showvertices(thescale){
scale(thescale)
// rotate to have flat top and base
rotate(-atan(1-phi),[1,0,0])
union(){
// vertices in yz-plane
color("red") translate([0,1,phi]) sphere(.1); //vx 0
color("red") translate([0,1,-phi]) sphere(.2); //vx 1
color("red") translate([0,-1,phi]) cube(.1); //vx 2
color("red") translate([0,-1,-phi]) cube(.2); //vx 3
// vertices in xy-plane
color("blue") translate([1,phi,0]) sphere(.1); //vx 4
color("blue") translate([1,-phi,0]) sphere(.2); //vx 5
color("blue") translate([-1,phi,0]) cube(.1); //vx 6
color("blue") translate([-1,-phi,0]) cube(.2); //vx 7
// vertices in xz-plane
color("yellow") translate([phi,0,1]) sphere(.1); //vx 8
color("yellow") translate([-phi,0,1]) sphere(.2); //vx 9
color("yellow") translate([phi,0,-1]) cube(.1); //vx 10
color("yellow") translate([-phi,0,-1]) cube(.2); //vx 11
}
}

Saturday, February 15, 2014

Day 173 - LEGO ring

Thank you, tart2000, for making this lovely LEGO Ring on Thingiverse. My son had a great time adding the bling!


Thingiverse link: http://www.thingiverse.com/make:65858

Settings: MakerWare .3mm/low on a Replicator 2, with no raft or supports.

Technical notes: We made this from tart2000's "less chunky" demo file without any changes or customizations. At first we thought the 2x2 LEGO plate was not going to fit in the ring, but a set of pliers told us differently. The tight design makes the ring really secure, and it is easy to add and remove things from the ring without the plate falling out. A simple, elegant design that just works!

Friday, February 14, 2014

Day 172 - Mobius Heart

Happy Valentine's Day!  In celebration, today we made a Möbius strip in the shape of a heart. The OpenSCAD code was kindly provided by kitwallace.


From the side you can more clearly see its Möbius-ness:


Thingiverse link: http://www.thingiverse.com/thing:249696
OpenSCAD code: http://www.geekhaus.com/makerhome/day172_kitwallace_mobiusheart.scad

Settings: MakerWare .3mm/low with no raft and no supports in 26 minutes.

Technical notes: Below is kitwallace's OpenSCAD code, in case you want to change any of the parameters for your own print.  The heart equations are the same ones we used in Day 133, with a sine curve thrown in on the z-coordinate for curviness.

// Mobius heart by kitwallace

//Radius of strip
Radius = 20;
//Width of Strip
Width = 7;
//Thickness of strip
Thickness=1.2;
//Half twists 0 is a collar, 1 is the mobius strip, 2 = full twist
Halftwist=1;
//Start Angle - important if Halftwist = 0
Start=90;
//Step size in degrees
Step = 2;

function f(t) =
[ 16*pow(sin(t),3),
  13*cos(t)-5*cos(2*t)-2*cos(3*t)-cos(4*t),
  5*sin(2*t)
];

module mobius_strip(radius,width,thickness,step=3,halftwist=3,start=90) {
  for (i = [0:step:360])
   hull() {
    translate(f(i))
     rotate([0,start+i * halftwist * 0.5, 0])
       cube([width,Delta,thickness], center=true);
    translate(f(i+step))
     rotate([0,start+(i+step)* halftwist * 0.5 , 0])
       cube([width,Delta,thickness], center=true);
  }
}

Delta= 0.1;
mobius_strip(Radius,Width,Thickness,Step,Halftwist,Start);

Thursday, February 13, 2014

Day 171 - Sliced Menger 3: Triangles

The Menger slices from Day 169 and Day 170 each divided the cube into two identical pieces. Today we make a a slice parallel to the Starmaker from the first day, but higher up. What will the slice look like? Don't peek until you've tried to draw it!


This piece is interesting because makes the largest possible hole on the inside; a triangle that goes all the way to three of the edges of the cube.


Settings: MakerWare .2mm/standard on a Replicator 2 with no support and no raft, using owens' disposable Menger-printing stand.

Wednesday, February 12, 2014

Day 170 - Sliced Menger 2: Rhomboidal

Lots of people know what the inside of a sliced Menger cube looks like, at least the way we sliced it yesterday. But there are infinitely many ways to slice a cube into two identical pieces, and each one will make a different cross-section with different interior markings inherited from the Menger cube's holes. For example, what does this slice look like? Don't peek at the second picture until you've had a chance to guess!


The slice itself is a rhombus, with some nice four-fold symmetry inside:


Settings: MakerWare .2mm/standard on a Replicator 2, with no supports and no raft (using owens' stand as part of the model).

Thingiverse link: http://www.thingiverse.com/make:65847

Tuesday, February 11, 2014

Day 169 - Sliced Menger 1: Starmaker

Today we made a white stand and slice illustrator to accompany the diagonally sliced Level 2 Menger sponge we printed on Day 155.  Don't look at the second picture until you try to guess what the white slice looks like!


My God, it's full of stars!


Thingiverse link: http://www.thingiverse.com/make:65825

Settings: MakerWare .2mm/standard on a Replicator 2 with no support and no raft, thanks to owens' great disposable stand that prints with the model (see Day 157).

Technical notes, Kinks flavor: This model Starmaker is named after the first song on the Kinks' concept album Soap Opera.  I can take the most ordinary cube in the world and make it a star!

Monday, February 10, 2014

Day 168 - Mobius Trefoil

Using the same OpenSCAD code of kitwallace's from yesterday, today we made a Mobius-like solid whose cross-sections are triangles and whose boundary is the trefoil knot - that is, the knot that wraps three times around the outside of a torus while wrapping twice around its handle.


STL file: http://www.geekhaus.com/makerhome/day168_trefoilmobius.stl
Thingiverse link: http://www.thingiverse.com/make:65700

Settings: MakerWare .3mm/low with the custom knot support described in Day 110.

Sunday, February 9, 2014

Day 167 - Umbilic torus

Today we did not print an umbilic torus.  But we did print a triangular-cross-section mobius strip, which is very close. In yesterday's post we wished for a way to remesh Mathematica output, and it turns out that at least for this kind of object, kitwallace had already posted a way to make seamless mobius bands with OpenSCAD on his blog The Wallace Line. And even better, kitwallace's code allows for different numbers of sides, which makes for some beautiful objects. This one is posing in such a way to mimic the iconic umbilic torus that graces the covers of Larson's calculus textbooks:



Settings: MakerWare .3mm/low using the custom knot support described in Day 110.

UPDATE 2/20/2014: I got to see Helaman Ferguson's beautiful umbilic torus sculpture in person at the MAA Carriage house in DC today! You can even touch it, and feel the Peano curve (see Day 61) carved into its surface. It's beautiful.


You can much read more about this beautiful art piece as well as a much larger version of the piece at Ivars Peterson's Mathematical Tourist blog.

Saturday, February 8, 2014

Day 166 - Mobius

Today I spoke with jamesford007, a student at SUNY Geneseo who is spearheading efforts there to bring 3D printing into the study of mathematics. He shared with me his technique for creating thickened parametric surfaces in Mathematica that can be exported as STL files, and posted a lovely Mobius strip on Thingiverse which is our 3D print for the day:



Settings: MakerWare with the custom slicing profile that we use for printing knots (see Day 110), to minimize support. We printed this vertically, standing on the flat side to the right in the picture above. In that orientation the only support that is printed is a small amount at the base and a very thin sheet of support that supports the top of the model through the center.

Technical notes: Here is the Mathematica code that James wrote to generate this model:

F[u_, v_] := {(Cos[u] + v*Cos[u/2]*Cos[u]), (Sin[u] + v*Cos[u/2]*Sin[u]), v*Sin[u/2]} 
MobiusStrip = ParametricPlot3D[{F[u, v]}, {u, 0, 2 Pi}, {v, -.3, .3}, 
PlotStyle -> Thickness[.1]]

This works beautifully when exported to STL from Mathematica, with one problem: A seam is printed where the parametrization closes up at 2pi. On my printer the model did not split at this seam, but it was visible. Trying to cheat by extending the parametrization to 2pi+.1 just increases the problem with an even more noticeable seam.  I had the same seam problem with the rocking knot from Day 110, and didn't resolve it for that model until the OpenSCAD redesign in Day 151. There must be a way to remesh objects like these in MeshLab or some other program, but I don't know it yet. Please let me know if you do!

Friday, February 7, 2014

Day 165 - One-piece catapult

A student in my GSCI 104: 3D Printing class built a catapult that prints in one piece! Inspired by zheng's multi-piece Seej Catapult on Thingiverse, zackowen built a new Print in Place Catapult in Tinkercad that requires no assembly. We printed it successfully with no raft or supports at all!


Thingiverse link: http://www.thingiverse.com/make:64946

Settings: MakerWare .3mm/low with no raft and no support. The movable piece worked perfectly with no obstruction or weaknesses. The base of the firing arm was a little bit above the platform and printed with some sagging, but it was easy to cut off the loose threads.