Welcome to MakerHome




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


Thursday, January 9, 2014

Day 136 - Six Handles Fancy

Today we took yesterday's TopMod model and created crusts along certain face loops to get a more open, fancy, swirly design:


STL file: http://www.geekhaus.com/makerhome/day136_sixhandlesfancy.stl
Thingiverse link: http://www.thingiverse.com/thing:223250

Settings: We used the same custom MakerWare settings from Day 110's knot, to minimize supports and support attachment to the model. Even so the supports are very difficult to remove and we broke the model while trying to clean it up (and then gave up trying to clean it up any more, as you can see from the picture).

Technical notes: The following steps will make this model, starting from the "Six Handles" model we made on Day 135:
  1. Use selection option "Select Face Loop" to choose some interesting curves around the model. Select any edge and TopMod will trace out a curve of faces in the direction imposed by the two faces on either side of your selected edge. It helps if the model has had a bit of Doo-Sabin remeshing so that you can take advantage of the regular geometry that Doo-Sabin generates, but not too much remeshing or the faces will be too tiny.
  2. Use selection option "Select Inverse" to select the complement of the face-loops you picked out; we are going to get rid of these complement faces.
  3. Under "Rind Modeling (Thickness Mode)", apply "Create Crust" to peel back the complement faces. You may want to fiddle with the thickness until you get the desired effect.
  4. I had some holes in the center top and bottom of the model that I wanted to fill in, and finally figured out how to do this with repeated and careful applications of "Insert Edge Mode". However, it would have been much easier if I had remembered to select a couple of key extra faces before selecting the face loops in the first step!
  5. Doo-Sabin once or twice - but not too much because when you export to STL, TopMod will have to convert your mesh to triangles, and this can take a *very* long time if your mesh is too fine.
Next step: Maybe Shapeways can print this! The model is up at the new Geekhaus store and you can order one yourself if you like. I'll update here with information about how my copy turned out once they send it to me.

Wednesday, January 8, 2014

Day 135 - Six Handles

Today's model is a sculpture made with the excellent and innovative mesh-wrangling software TopMod. Since my way-back math roots are in topology, TopMod is like coming home; everything about it speaks my language. Having said that, I'm just a TopMod beginner so my first sculpture is very simple: just six handles arranged around a cubical center and smoothed out with Doo-Sabin.



Settings: Makes a gift-quality print on MakerWare .15mm/high with raft and supports in about 2 hours and 13 minutes.

Technical notes: This model was made in TopMod which you can download for free here. Basic ReadMe and list of operations is here. To make the model I started with a cube and added handles connecting three adjacent pairs of faces. Then I applied the Doo-Sabin mesh subdivision, added three smaller, twisty handles anchored to the new mesh, and applied Doo-Sabin a couple more times. 

To get started with TopMod I suggest watching the following YouTube videos:
UPDATE: You can now order a print of this model from Shapeways at the new Geekhaus store!

MORE UPDATE: kitwallace has found a way to make this same shape by parametrizing with trigonometric functions.

Tuesday, January 7, 2014

Day 134 - Low-Poly Gollum

Today's print is a low-poly version of BorisBelocon's Gollum on Thingiverse.  We printed this for Tim Chartier of Davidson College, who created the low-poly version of BorisBelocon's model by using Quadratic Edge Collapse Decimation in MeshLab.  You can read more about Tim's work at his MathMovement site.


STL file: http://www.geekhaus.com/makerhome/day134_lowpolygollum.stl
Thingiverse link: http://www.thingiverse.com/make:61222

Settings: MakerWare .15mm/high in exactly two hours, to get a high-res but low-poly model :)

Monday, January 6, 2014

Day 133 - Broken Hearts

Today the holiday visits are over and we are back to designing. Something simple to start, and to get ahead for the next holiday: customizable easy-to-print broken hearts that you can string together. More importantly, this model is also a tutorial for printing designs based on mathematical parametric functions in OpenSCAD.


STL file: http://www.geekhaus.com/makerhome/day133_brokenhearts.stl
Thingiverse Customizer link: http://www.thingiverse.com/thing:220720

Settings: MakerWare .3mm/low in almost no time at all. The top indentation of each heart has a gap so that you can chain the hearts together.

Technical notes: This model was made in OpenSCAD using the following parametric equations that define a heart shape (equations obtained from Wolfram's HeartCurve page):
x = 16 sin^3 t
y = 13 cos t - 5 cos 2t - 2 cos 3t - cos 4t
The OpenSCAD code that makes the model is as follows. In the Customizer version we had to cut and paste the 2dgraph.scad code at the end of the file instead of using the "include" shown below, which calls the file 2dgraph.scad from the folder EXTENSIONS in my OpenSCAD working folder.

// mathgrrl broken heart - OpenSCAD parametric graph example

/////////////////////////////////////////////////////////////
// EXTENSIONS ///////////////////////////////////////////////

// curriculum.makerbot.com/daily_tutorial/openscad/openscad_05.html
// include <EXTENSIONS/2dgraph.scad>

/////////////////////////////////////////////////////////////
// PARAMETERS ///////////////////////////////////////////////

// Set the diameter of the heart, in mm
heart_diameter = 20;

// Set the thickness of the line, in mm
line_thickness = 1;

// Set the height of the model, in mm
line_height = 3;

// Choose low numbers for jagged, high for smooth
number_of_steps = 48;

scalefactor = heart_diameter*1.15/20;

/////////////////////////////////////////////////////////////
// RENDERS //////////////////////////////////////////////////

// broken heart parametric curve
// equation from http://mathworld.wolfram.com/HeartCurve.html
function x(t) = scalefactor*16*pow(sin(t),3);
function y(t) = scalefactor*(13*cos(t)-5*cos(2*t)-2*cos(3*t)-cos(4*t));

// make the graph and extrude it
linear_extrude(height=line_height)
2dgraph( [0, 350], // stop before 360 to make broken
line_thickness, // set line thickness
steps=number_of_steps, // choose low/high poly look
parametric=true); // use parametric grapher

Sunday, January 5, 2014

Day 132 - Stretchy Bands

To finish out the Thanxmas presents, today we printed some of walter's Customizable Stretchy Bands model from Thingiverse.


STL file: http://www.geekhaus.com/makerhome/day132_stretchybands.stl (but customize your own!)
Thingiverse link: http://www.thingiverse.com/make:61047

Settings: MakerWare .3mm/low on a Replicator 2, very fast to print.

Technical notes: The file above is for a 50mm interior diameter, which is about right for a typical 7-year-old girl. To make the stripes, we colored the filament with sharpie before it went into the extruder. There was some weirdness for the thin .4mm thickness, with a few parts of the model printing in two shells instead of one, but .3mm thickness was causing gaps in the model.  Experiment in the Customizer to find the settings that work for you, but here are the ones that worked the best for us (makes the first two bracelets in the picture):
insideDiameter = 50
thickness = .4
resolution = 60
radialCount = 15
outsideDiameter = 64
height = 6

Saturday, January 4, 2014

Day 131 - More Bowls

The past week of cleaning and family visits has meant a lot of reprints and Thingiverse designs, and today is no exception: we printed a bunch of bowls from the same model used in Day 64 and Day 65, petergross3's Condiment Bowl from Thingiverse.



Settings: Printed small versions at 60% size on .3mm/low with linear fill (see below). The one on the bottom is a little shorter; we cut off the top in Tinkercad to make a wider bowl. Not recommended, as that caused it to lose its nice top lip.

Technical notes: To get linear fill we made a custom profile in MakerWare based on "PLA Low" and changed "sparseInfillPattern" to "linear". I'm hoping that in future updates of MakerWare there will be an easy dropdown menu to change the fill pattern.

Friday, January 3, 2014

Day 130 - Trilobite articulatum

Today is Thanxmas for our family! For the festivities we have a celebratory Trilobite articulatum from AuntDaisy on Thingiverse in our faux fireplace.



Settings: MakerWare .3mm/low in about 4 hours.

Technical notes: We used the "tight" files from AuntDaisy, which worked perfectly on the Replicator 2 with a translucent filament. We recommend printing without raft or support for the body and tail, but with raft and support for the head. (Our initial support-less print of the head had trailing strings on the snaps that had to be cut off, after which the head snaps were too loose to stay on the model.)

Thursday, January 2, 2014

Day 129 - Estonian Kroon Coin Trap

Today's print is a Customized Coin Trap to hold an Estonian Kroon in the blue, black and white colors of the Estonian flag, for my father, who was born in Estonia.


STL file: http://www.geekhaus.com/day129_estoniankroontrap.stl
Thingiverse link: http://www.thingiverse.com/make:60610

Settings: MakerWare .3mm/low in about 15 minutes, with two filament swaps and a pause for the coin to go in.

Stuff to change next time: I now wish that I had changed filament a little sooner so that the black stripe would go all the way across the white at the bottom of the circle (and also later to go across the top before the blue). I had been trying to maximize the white and blue parts but keep filament changes away from the center, weaker part of the model.

Wednesday, January 1, 2014

Day 128 - Pile of Snaps

Today we printed a lot of colorful Poly-Snaps to give to Henry Segerman:


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

Technical notes: These were printed in two configurations, some with the default "compact" parameters on the Poly-Snaps customizer (see also Days 113 and 115-117) and some with the "light" parameters from Day 118, except with clearance increased to .14.

Tuesday, December 31, 2013

Day 127 - MakeyMakey Holder

Today this print-a-day project was featured on the MakerBot blog in the MakerBot Stories post Mathgrrl Makes a 3D print a Day, by Blake Eskin!

A year of 3D-printing-flavored making for me, and a new year of MakeyMakey-flavored making for my sister. Today we printed her jensa's MakeyMakey Gamepad case from Thingiverse/YouMagine, to go with her Thanxmas present:


Thingiverse link: http://www.thingiverse.com/make:60374
Download from YouMagine: https://www.youmagine.com/designs/makeymakey-gamepad

Settings: MakerWare .2mm/standard with supports to keep up the overhanging corners. We initially tried this on our usual .3mm/low setting but got a lot of loose diagonal threads on the flat base. Making the print finer solved the problem.

Monday, December 30, 2013

Day 126 - Dalek

I really hope my family isn't reading this blog, or they are finding out what all their Thanxmas presents are. To continue yesterday's theme, today we are printing guydebored's great Dalek model from Thingiverse.


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

Settings: We printed the body on .3mm/low without raft or supports, and the weapons on .15mm/high with both raft and supports (in the horizontal position). It was a little fiddly to remove the supports but was worth it in the end. We had to trim the ends of the weapons a bit to fit into the holes on the Dalek. It looks really great since you imagine it all printed in one piece with the impossible overhangs that the weapons would cause. Wonderfully done model, thank you guydebored!

Sunday, December 29, 2013

Day 125 - Tardi

My family is celebrating the holidays late with Thanxmas after the new year, and more presents are in order. Today, one large Tardis and two small, from Gossamer's wonderful Parametric Tardis model on Thingiverse:


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

Settings: As usual, MakerWare .3mm/low with the small version printing in 37 minutes and the large one taking much longer. The Replicator 2 makes an interesting whistling noise during the print, as the fan blows into the hole carved into the Tardis model. Prints wonderfully without support or raft; this is a really well-done design.

Saturday, December 28, 2013

Day 124 - Low-Poly Bear

What do you print for a person with minimalist tastes? I'm hoping a low-poly bear, like christophecaren's beautiful Bear model on Thingiverse.


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

Settings: MakerWare .3mm/low, with raft and supports. I printed the model upside-down to minimize those supports and then had some minimal cleanup to do on the head and back after removing those supports.

Friday, December 27, 2013

Day 123 - "Ticket to Ride" card holder

A couple of days ago on Day 120, we printed some train trays for the excellent game Ticket to Ride. That was all well and good until the cards seemed all out of order and falling out of their giant tall stacks. So we printed a card holder for train cards, ticket cards, and used train cards. The logo for the game was put in the bottom with Tinkercad and Inkscape using the method outlined in Steps 4-6 on Day 109, with a picture from the internet as the starting point.


STL file: http://www.geekhaus.com/makerhome/day123_tickettoridecards.stl
Tinkercad link: https://tinkercad.com/things/0CO8dupbHOI-day-123-ticket-to-ride-card-holder
Thingiverse link: http://www.thingiverse.com/thing:214204

Settings: MakerWare .3mm/low on a Replicator 2 using the MakerBot "warm gray" filament that I seem to use for everything these days.

Stuff to change later: I forgot to put little bridges to attach the insides of the letters o, R, and d. Next time!

Thursday, December 26, 2013

Day 122 - Menger Coaster Set, Part 2

Continuing from yesterday, here are the other four interesting slices of a Level 3 Menger Sponge:



STL files: http://www.geekhaus.com/makerhome/day122_mengercoaster5.stl (and 6 and 7 and 8)
Tinkercad link: https://tinkercad.com/things/auZS4Sd7vIe-day-122-menger-coaster-set-part-2
Thingiverse link: http://www.thingiverse.com/thing:213053

Settings: Like yesterday, we used Makerware .3mm/low,for a print time of about 30 minutes per coaster, with color swap just after 20 minutes or so.

Technical notes: See yesterday's post for hints about when to make the filament color swap. As you can see from the picture, the Replicator 2 is giving me some "stringy" behavior on the long traverses of black. I wonder if I could fix this with a temperature change or some other change? If anyone has any ideas please let me know.

UPDATE:  On Day 127 we figured out how to fix the "stringy" problem - change to .2mm/standard layer height. I imagine that change would also work for this model.

Wednesday, December 25, 2013

Day 121 - Menger Coaster Set, Part 1

Following up on Day 23's Menger-sponge-slice coaster, today we print four different slices of a Level 3 Menger Sponge.  There are four more interesting slices that we'll print tomorrow. These were constructed in Tinkercad after importing a Menger sponge that was created in Mathematica (although we could also have imported one built in Minecraft; see Day 108).


STL files: http://www.geekhaus.com/makerhome/day121_mengercoaster1.stl (and 2 and 3 and 4)
Tinkercad link: https://tinkercad.com/things/hTazkPXEpX8-day-121-menger-coaster-set-part-1
Thingiverse link: http://www.thingiverse.com/thing:213053

Settings: Makerware .3mm/low in about 30 minutes per coaster. The filament color swap takes place just after the 20 minute mark.

Technical notes: With the settings above, the first four layers will be black, but the last of those four will have outlines around the soon-to-be-white areas. Be sure not to stop too early; wait until you are sure the white part is being drawn before swapping the filament. Getting a little black under the white won't hurt, but getting any unwanted white over the black will be unacceptable.

Tuesday, December 24, 2013

Day 120 - "Ticket to Ride" trains tray

C's grandma gave us the game "Ticket to Ride" today, and it is great fun! The turns go by really quickly, making for a quick game that is fast-paced enough to hold everyone's attention even when it isn't their turn. However, each player has 45 trains to keep track of, which can get a bit messy. One of last year's Featured items on Thingiverse was a Ticket to Ride Locomotive Tray by princeofwands, which was updated and improved this year in HunterGreen's Ticket to Ride Rack design. However, both of those designs use a lot of plastic and take a long time to print. Today we designed a version in Tinkercad that uses far less material and prints in about half of the time, based loosely on the concept of our previous H-Tree Dish.


STL file: http://www.geekhaus.com/makerhome/day120_tickettoridetray.stl
Tinkercad link: https://tinkercad.com/things/cBtic9P91D4-day-120-ticket-to-ride-tray
Thingiverse link: http://www.thingiverse.com/thing:213031

Settings: MakerWare .3mm/low in just under an hour, without a raft. I added large "Helper Disks" (see under the MakerWare File menu, in the Examples category) to the corners to keep the model from peeling up, and cut off the disks after printing. Even with that I had to shift the model to the left of my build plate, since things always print funny for me in the bottom right corner for some reason, no matter how much re-leveling I do.  Maybe it is time to consider a glass build plate...

Technical notes: Now that I'm learning to use OpenSCAD I am starting to feel that things like this are a real pain to make in Tinkercad, especially if a lot of tweaking and re-aligning is involved. It's a lot like the difference between using LaTeX or Microsoft Word; as a LaTeX junkie I am definitely feeling the current pulling me a little bit more towards OpenSCAD every day.

Monday, December 23, 2013

Day 119 - DSi Stylus Holder

C recently finished saving up for his Nintendo DSi (see Day 18 and Day 19 from way back in September), and apparently it is necessary to have multiple styluses (styli?) so that you can change colors and lose them and things. Today we printed a small holder for them, designed in Tinkercad with their wonderful new "Extrusion" Shape Generator.



Settings: MakerWare custom profile to get a base and 2-layer sides but no top, in just a couple of minutes. Details on the profile are below.

Technical notes, Tinkercad flavor: The new "Extrusion" Shape Generator allows you to change the outline of a cylinder with a four-anchor Bezier curve. This is the first time it has been possible in Tinkercad to stretch a shape around by anchors and their tangent lines! Perhaps in the future we can get more handles and/or the ability to do this right on the workplane, add or remove handles, etc etc. This is a great step in the right direction for Tinkercad. Tinkercad also added a Ring Shape Generator and three types of Text, as they explain in this blog post.

Technical notes, MakerWare custom profile flavor: To get a solid base and just two layers around the outside of the shape, we started with the "Low PLA" profile in MakerWare 2.4.1.35 and changed the following lines in the profile:
"doRaft": false,
"infillDensity": 0,
 "roofThickness_disabled": 0,
 "roofLayerCount": 0,
 "floorThickness": 1.1,

Sunday, December 22, 2013

Day 118 - Poly-Snaps Icosahedron

I always find the icosahedron the most difficult polyhedron to assemble with modular tiles. It is so close to spherical that the angles make assembly difficult; putting something together on one side tends to dislodge something on the other side. If you've ever assembled modular origami polyhedra then you know what I mean. It's possible with the compact Poly-Snaps we've been using over the past few posts, but the result it not that pretty. After much trial and error we finally found a lighter, larger style of Poly-Snaps that easily makes an icosahedron without hurting your hands or requiring pliers to put together, yet stays together well until you want it to come apart. The key to the stability is the fact that the tiles have five snaps on each side instead of three. For a dynamic classroom setting I think these lighter tiles would work very well.


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

Settings: MakerWare .3mm/low.

Technical notes: These lighter, larger tiles were made with the Poly-Snap Customizer settings below.
Sides = 3
Snaps = 5
Side Length = 50
Thickness = 2
Border = 4
Clearance = .12
Lengthen = 1.5

Saturday, December 21, 2013

Day 117 - Poly-Snaps Icosiodecahedron

Our fifth Poly-Snap example is the Icosidodecahedron, a semi-regular polyhedron with twenty triangles and twelve pentagons. It's sort of like a mini-Buckyball with triangles in place of the hexagons. Today's new model looks nicer and fits together better than our old snap-tile model from Day 89, and in addition you don't have to worry at all about which types of pentagon or triangle tiles you have along the way, since the Poly-Snaps all have the same snap configuration.


Thingiverse link: http://www.thingiverse.com/thing:208591

Settings: MakerWare .3mm/low in two batches (to get the two colors).

Technical notes: We used the default sturdy tile setting in the Customizer again, as below. If you have sensitive hands or want to easily take apart and put together the model over and over again, then I recommend either a lower Thickness or a higher Clearance. Test things out with a couple of tiles and see what you like best.
Sides = 3 and 5
Snaps = 3
Side Length = 25
Thickness = 3.5
Border = 3.5
Clearance = .17
Lengthen = .3 

Friday, December 20, 2013

Day 116 - Poly-Snaps Snub Cube

A "snub polyhedron" is a model obtained by adding triangles between the faces of another polyhedron. For example the Snub Cube below is like a cube whose six square faces have been exploded outward, with 32 triangles filling in the gaps:


Thingiverse link: http://www.thingiverse.com/thing:208591

Settings: MakerWare .3mm/low in two batches (to get the two colors).

Technical notes: Again we used the standard "compact" customizer settings. A pair of needle-nose pliers was needed to get the model together the first time, as the tiles don't have much clearance with these settings. (Actually for some of these we probably used Clearance = .15, since for some reason tiles with fewer sides seem to require less clearance.)
Sides = 3 and 4
Snaps = 3
Side Length = 25
Thickness = 3.5
Border = 3.5
Clearance = .17
Lengthen = .3

Thursday, December 19, 2013

Day 115 - Poly-Snaps Truncated Octahedron

Today we "truncate" yesterday's octahedron. Truncating basically means that we slice off the corners of the object. The result here is semi-regular, meaning that each face is one of two regular polygons and that the same configuration of polygons surrounds each vertex. This Truncated Octahedron is composed of six squares (each the result of slicing off one of the six vertices of the octahedron) and eight hexagons (each the result of the original eight triangular faces of the octahedron getting sliced off at each corner). Compare to the model of this polyhedron we made in Day 88 with the old snap-tiles; notice here that on each side we have the same number of snaps, whereas in the older model we had various 2- and 3-snap configurations on the edges of the square and hexagon faces.


Thingiverse link: http://www.thingiverse.com/thing:208591

Settings: MakerWare .3mm/low in two batches (to get the two colors).

Technical notes: After yesterday's fiddly tiles we return to the compact, sturdy tiles from the day before, with the Customizer settings below.
Sides = 4 and 6
Snaps = 3
Side Length = 25
Thickness = 3.5
Border = 3.5
Clearance = .17
Lengthen = .3

Wednesday, December 18, 2013

Day 114 - Poly-Snaps Octahedron

Our second Poly-Snaps model is an Octahderon, with eight triangular faces. Compare with the Hinged Octahedron from Day 82, which is beautiful and prints in one piece, but has variable snap-numbers on its open edges and uses up a lot more material. Today's model makes use of the customizability of the Poly-Snaps, changing to very thin faces with large borders.


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

Settings: MakerWare .3mm/low in almost no time at all.

Technical notes: Our goal here was to make something very light and easy to print quickly in large quantities, to make classroom use easier. However this particular choice of settings was not good for larger models with more sides. Some tinkering and possibly a redesign is still necessary to find a way to print very thin Poly-Snaps that actually stay snapped together.  But for the record, here were the Customizer settings we used for this model:
Sides = 3
Snaps = 3
Side Length = 25
Thickness = 1
Border = 5
Clearance = 0
Lengthen = 1.0

Tuesday, December 17, 2013

Day 113 - Poly-Snaps Truncated Tetrahedron

Over the next six days we'll be posting polyhedra that we assembled using our new Poly-Snaps on Thingiverse. Our previous polyhedral models were made from Snap Tiles which had either two or three snaps on each side. This new type of modular polyhedra-builder has the same number of snaps on each side and is customizable in Thingiverse Customizer. Today's print is a Truncated Tetrahedron composed of four triangles and four hexagons:


Thingiverse link: http://www.thingiverse.com/thing:208591

Settings: MakerWare .3mm/low in two batches (to get the two colors).

Technical notes: We used the following settings in the Thingiverse Customizer, which makes a sturdy, compact model that can be difficult to put together but stays together well even when tossed around.
Sides = 3 and 6
Snaps = 3
Side Length = 25
Thickness = 3.5
Border = 3.5
Clearance = .17
Lengthen = .3 
Technical notes, OpenSCAD flavor: This is one of my first OpenSCAD designs so it is kind of a hack, but here is the code I wrote to make the Poly-Snap tiles:

// mathgrrl polysnap tiles

////////////////////////////////////////////////////////////////
// PARAMETERS //////////////////////////////////////////////////

/* [Shape] */

// Choose the number of sides for the tile
sides = 5; // [3,4,5,6,7,8,9,10,11,12]

// Choose the number of snaps on each side
snaps = 3; // [2,3,4,5,6,7,8]

/* [Size] */

// Set the length of each side, in mm
side_length = 25; 

// Set the thickness of the tile, in mm
thickness = 3.5;

// Set the border thickness, in mm
border = 3.5;

/* [Adjust Fit] */

// Add extra space between snaps, in mm
clearance = .17;

// Add extra length to the snaps, in mm
lengthen = .3;

//radius depends on side length
radius = side_length/(2*sin(180/sides)); 

//inside radius depends on the border thickness
inside = radius-border/(cos(180/sides)); 

//width of each snap depends on number of snaps
snapwidth = radius*sin(180/sides)/snaps;

////////////////////////////////////////////////////////////////
// RENDERS /////////////////////////////////////////////////////

union(){
//make the polygon base
poly_maker();

//make the snaps
snap_maker();
}

////////////////////////////////////////////////////////////////
// MODULES /////////////////////////////////////////////////////

//build the polygon shape of the tile
//shape is made up of n=sides wedges that are rotated around
module poly_maker(){

//subtract the smaller polygon from the larger polygon
difference(){

//extrude to thicken the polygon
linear_extrude(height=thickness,center=true){ 

//rotate the wedge n=sides times at angle of 360/n each time
for(i=[0:sides]){

//rotation is around the z-axis [0,0,1]
rotate(i*360/sides,[0,0,1])

//make triangular wedge with angle based on number of sides
polygon(

//the three vertices of the triangle
points = [[0-.1,0-.1], //tweaks fix CGAL errors
[radius,0-.01],
[radius*cos(360/sides)-.01,radius*sin(360/sides)+.01]],

//the order to connect the three vertices above
paths = [[0,1,2]]
);
}
}
//extrude to thicken the center polygon that will be the hole
linear_extrude(height=thickness+2,center=true){ 

//rotate the wedge n=sides times at angle of 360/n each time
for(i=[0:sides]){

//rotation is around the z-axis [0,0,1]
rotate(i*360/sides,[0,0,1])

//make triangular wedge with angle based on number of sides
polygon(

//the three vertices of the triangle
points = [[0-.2,0-.2], //tweaks fix CGAL errors
[inside,0-.01],
[inside*cos(360/sides)-.01,inside*sin(360/sides)+.01]],

//the order to connect the three vertices above
paths = [[0,1,2]]
);
}
}
}
}

//build the snaps around the tile
//try the commands alone with i=1 and i=2 to see how this works
//remember to read from the bottom to the top to make sense of this
module snap_maker(){

//rotate the side of snaps n=sides times at angle of 360/n each time
for(i=[0:sides]){ 

//rotation is around the z-axis [0,0,1]
rotate(i*360/sides,[0,0,1])

//build snaps for first side at the origin and move into positions
for(i=[0:snaps-1]){

//read the rest of the commands from bottom to top
//translate the snap to the first side
translate([radius,0,-thickness/2]) 

//rotate the snap to correct angle for first side
rotate(180/sides) 

//for i^th snap translate 2*i snapwidths over from origin
translate([0,2*i*snapwidth,0]) 

//rounded box for snap made from a box and cylinder
union(){

//cube part of snap shape at the origin
cube([thickness/2+lengthen,snapwidth-clearance,thickness]);

//post at back of snap to avoid loose teeth
//shifted a bit right to avoid overhangs when sides=3
translate([-.5,.5,0])
cube([thickness/2,snapwidth-clearance-.5,thickness]);

//round part of snap shape at the origin
//move cylinder to the end of the box
translate([thickness/2+lengthen,
                   snapwidth-clearance,
                   thickness/2])
//rotate cylinder to match box orientation
rotate(90,[0,1,0]) 
rotate(90,[1,0,0]) 

//cylinder of the correct size to match box
cylinder(
r=thickness/2,
h=snapwidth-clearance,
$fn=16  //number of sides
);
}
}
}


Update: These Poly-Snap triangle tiles were used by owens on Thingiverse to make a beautiful model of a toroidal polyhedron. So cool!

Monday, December 16, 2013

Day 112 - Tetris T's

I like the rounded and nicely-spaced design of 3DAndy's Pentominos on Thingiverse, but wanted to print some tetrominos instead, for math/puzzles (for example, polyomino packing problems) and for future Tetris-related art projects.  Since 3DAndy was nice enough to post his OpenSCAD code, it was easy to modify his pentomino-T into a tetromino-T.


STL file: http://www.geekhaus.com/makerhome/day112_tetrisT.stl
Thingiverse link: http://www.thingiverse.com/thing:212995

Settings: MakerWare .3mm/low, with 8 T's printing in 45 minutes and weighing only 16 grams. Tetris pieces is a great "stash-busting project" for those of you with lots of little scraps of filament that are too small for any normal print job.

Technical notes: Download the OpenSCAD code here or cut and paste from the below.

// mathgrrl tetrominos - example with Tetris "T"
// based directly on 3DAndy's pentominos

////////////////////////////////////////////////////////////
// PARAMETERS ////////////////////////////////////////////////////////////

//resolution
$fn=32;

//dimensions
length = 10;
radius = 1;
space = 0.2;

///////////////////////////////////////////////////////////////
// RENDERS ///////////////////////////////////////////////////////////////

//render an instance of the Tetris "T"
tetromino_T();

///////////////////////////////////////////////////////////////
// MODULES ///////////////////////////////////////////////////////////////

//define the blocks and connectors that make the Tetris "T"
module tetromino_T() {
union() {
// the blocks
translate([0,0,0]) 
myCube();
translate([length,0,0]) 
myCube();
translate([2*length,0,0]) 
myCube();
translate([length,length,0]) 
myCube();
// the connectors
translate([(0.5)*length,0,0]) 
myConnect();
translate([(1.5)*length,0,0]) 
myConnect();
translate([length,(0.5)*length,0]) 
myConnect();
}
}

//module for making the blocks
//eight spheres translated to the corners of the desired cube
//then convex hull of those spheres makes a rounded cube
module myCube() {
dist = length/2-radius-space;
hull() {
translate([dist,dist,dist]) 
sphere(r=radius);
translate([-dist,dist,dist]) 
sphere(r=radius);
translate([dist,-dist,dist])
sphere(r=radius);
translate([-dist,-dist,dist]) 
sphere(r=radius);
translate([dist,dist,-dist])
sphere(r=radius);
translate([-dist,dist,-dist]) 
sphere(r=radius);
translate([dist,-dist,-dist]) 
sphere(r=radius);
translate([-dist,-dist,-dist]) 
sphere(r=radius);
}
}

//smaller cubes used to connect adjacent blocks
//space between blocks is small enough that no support is needed to bridge the gap
//even though these hang in the air between the blocks they connect
module myConnect() {
translate([space+radius-length/2,space+radius-length/2,space+radius-length/2]) 
cube([length-2*space-2*radius,length-2*space-2*radius,length-2*space-2*radius]);
}

Sunday, December 15, 2013

Day 111 - One MetroTech Center

This is a model of the building that houses the MakerBot Headquarters in Brooklyn, with a hole in it for a couple of pens or whatnot.  The basic building shape was downloaded from Trimble 3D Warehouse, then resized and converted to STL in Sketchup, with windows added in Tinkercad.

Happy holidays, MakerBot!


STL file: http://www.geekhaus.com/makerhome/day111_metrotech.stl
Tinkercad link: https://tinkercad.com/things/gQtw7tgKg06-day-111-one-metrotech-center-in-brooklyn
Thingiverse link: http://www.thingiverse.com/thing:208623

Settings: MakerWare .3mm/low in 3-4 hours.

Technical notes, short version: Get the model from Trimble, open and resize in Sketchup, clean up and add features in Sketchup or Tinkercad, and download the .stl for printing.

Technical notes, step-by-step version:
  1. Download a Sketchup (.skp) model of a building from Google's Trimble 3D Warehouse.
  2. Open the model in Sketchup. In order to look around with your mouse you'll have to first press "Orbit" or "Pan" from the button menu.
  3. The building in this example had a flat ground-level piece attached to it. If this is true of your model then use the "Select" arrow to highlight that piece and delete it.
  4. Sketchup is for buildings so the scale is HUGE in there. You'll have to shrink down the model a lot. One easy way to do this is to use the "Tape Measure" button, clicking first at one corner of the front of the building, then at the other. At the bottom of the window is a text box where you can enter the new length for the line segment you just selected with the tape measure. In the example model this length started as 214' 10 1/2" and I shrunk it down to 10'.  Now, I know that doesn't make sense because I can't print a 10-foot model, but shrinking it down to inches made it too small in Tinkercad for some reason. Fiddle around and see what works for you in the next steps.
  5. Your model will now look really really tiny in Sketchup! You'll have to zoom in a lot if you want to find it, by using the scroll button on your mouse and pointing at the center of your desired zoom area. Hopefully your model is still near the origin. At this point you could modify your model in Sketchup but I think Tinkercad is easier so I'm going to do the rest over there.
  6. Sketchup doesn't automatically know how to do export to STL, so you will have to install this free STL export plugin from Sketchup. If you have install problems then scroll through the comments on that site, where most problems you might encounter are discussed and solved. Once you have the plugin set up you should have an "Export STL" option under the "File" menu in Sketchup. Export your file.
  7. Open this new .stl file in Tinkercad by using the "Import" tab at the top of the right menu column. Use inches as your unit of measurement, or at least give that a try and if it doesn't work then use millimeters. If your model is still too large or small you can change what you did in Step 4 with Sketchup, or you can just resize in Tinkercad. I have this weird feeling that extreme resizing in Tinkercad can cause problems, so if the size is way off then I would suggest going back to Sketchup to fix it.
  8. Clean up your model in Tinkercad by using rectangular shapes to fill in or hole off things that you don't want. The model may be aligned one or two degrees away from the axes, which in particular could make it not sit flat on the Workplane. Use a rectangular hole to shave off the bottom of the building and make it flat, and then move the model back down to the Workplane.
  9. If you want to add a hole to the building to make it a pen-holder or whatever then add a hole. I would advise doing that only after you have resized the building to the size that you will be printing at, so that you can control the size of the border around the hole accurately. 
  10. Add windows or other features using small holes. It will go fairly quickly if you are good with the Align, Copy/Paste, Workplane, and Control-D tools. You don't want to be placing the windows of a skyscraper one at a time, so this would be a good time to go through some of the corresponding Tinkercad Lessons if you haven't already.
  11. Download your finished .stl model and print! 

Saturday, December 14, 2013

Day 110 - Rocking knot

Today's print is a knot with a special property: No matter how the knot sits on the table, it never touches the table in more than two places. This property makes the knot rock back and forth easily, and roll down even very shallow inclines. It's a fun thing to have on your desk, and it's the knot that I usually print at demos and talks.


STL file for thicker knot: http://www.geekhaus.com/makerhome/day110_rockingknot1.stl
STL file for thinner knot: http://www.geekhaus.com/makerhome/day110_rockingknot2.stl
Thingiverse link: http://www.thingiverse.com/thing:205464

Settings: Custom MakerWare profile to control the supports and how they attach to the models; see below for details. The knots in the picture were printed at 50%, 25%, and 15% scale from the STL files above.

Technical notes, math flavor: The thicker model was created in Mathematica using the following code:
a = .8  
b = Sqrt[1 - a^2]
   
(* a and b have to be numbers with a^2 + b^2 = 1 *) 
ParametricPlot3D[  
     {a*Cos[3 t]/(1 - b*Sin[2 t]),     
      a*Sin[3 t]/(1 - b*Sin[2 t]), 
  
      1.8*b*Cos[2 t]/(1 - b*Sin[2 t])}, 
     {t, 0, 2 Pi+.01}, 
 
     PlotStyle -> Tube[0.25, PlotPoints -> 24], 
     PlotRange -> All] 
Export["tritangentless_thick.stl", %]
The parametric equation in this code comes from Morton's paper Trefoil Knots Without Tritangent Planes, Bull. London Math Soc. 23 (1991), 78-80. Changing 0.25 to 0.15 in "Tube" creates the thinner model. The "+.01" at the end of the t-range is to make sure that the knot connects back to itself again when it closes the loop. If you take that part out then you will be able to pull apart the model in that spot, which is useful if you want to put the knot around something but not so useful if you don't want your model to look a little broken.

Technical notes, custom slicing profile flavor: The standard MakerWare profiles work very well for nearly everything I print, but for these knots those profiles leave too much support inside the knots that is difficult to remove.  Here's what I changed from the "PLA standard" profile:
  • "roofThickness": 0.5,   (down from 0.8)
  • "floorThickness": 0.5,   (down from 0.8)
  • "sparseInfillPattern": "linear",  (instead of hexagonal, which shows through badly for these models when using translucent filament)
  • "infillDensity": 0.2,   (up from 0.1, to make sure the knots are sturdy since they curve around a lot)
  • "minSpurLength": 0.4,  (up from 0.34, but can't remember why i did this now – possibly because my knot models have bad mesh/slice problems sometimes and this was fixing the problem)
  • "doSupport": true,
  • "doSupportUnderBridges": true,
  • "supportDensity": 0.1,   (down fro 0.2 – this is the part that helps the most for these models)
  • "supportExtraDistance": 0.8,  (up from 0.5, since parts of the model can swing out far and need some extra support)
  • "supportModelSpacing": 0.5,  (up from 0.4, to make the support further away from the model and thus easier to remove)
Action video! Note that the very slight incline of the closed laptop is enough to make these knots roll.


UDPATE: You can now order a print of this model from Shapeways at the new Geekhaus store.