Loading
hutch914

Spring Form Customiser

by hutch914 Oct 28, 2015
Download All Files

Thing Apps Enabled

Please Login to Comment

Awesome and handy tool to use. Making the spring without question burns your fingers, but it works. PLA springs surprisingly have alot of spring force. I used a cup filled with water to the brim and heated in the microwave for a minute with the length of filament inside. i rolled it out as close to the heated water as I could tolerate.

Instead of using water and a microwave oven to heat the filament prior to winding it, I have been using a heat gun set to around 125C being careful not to burn my fingers while blowing the hot air onto the filament one bit at a time.
I should add I am using these 'springs' to hold bunches of cables together on my 3D printer.

not too sure how you got it to work, within seconds of removing from hot water, the pla is hard and not able to wrap, also the holes are too small, any ideas

Doesn't work for me, I keep getting an error when I goto the queue

Made this mold to make PLA springs for a bump-contact bar. Springs are actually surprisingly stiff, and exactly what i needed! Awesome! :D

In the customizer, is the "spring diameter" internal or external?

You may want to try the module screw_extrude() that I wrote for the threads of my customizable round box:
http://www.thingiverse.com/thing:1648580

customizable round box with threaded lid

This inspired me to write my own spring generating script, using a different method.
http://www.thingiverse.com/thing:1098806

You are welcome to use it in your design if you prefer.

Parametric Helical Coil (Spring)
by thehans

I love your script, the only issue I have found with actually printing springs is that they don't end up very strong, that is part of the reason I persisted with this.

Many Thanks, as previously stated I can not take ANY credit for this, didn't write the script just trying to make a customiser for it, I will attempt to intergrate this script now and see what happens.

Here's a start:
In your start section you make 90 small cylinders to approx the corner. You could step using resolution here also to make less geo.
I refactored it slightly and put the straight section outside but obviously this doesn;t matter - I just did it when I was trying to understand your code.

I also took out the excess spiral on the corner and chain hulled instead of making overlapping chopped up cylinder geo. Try commenting out my hull() and the i+resolution cylinder to see what it looks like without the chain hull approach

module start() {
    translate(v = [-epsilon, outerRadius - filamentRadius*2, padLength] ) {
        rotate([0,-270,0]) {
            // the curved corner
            for (i = [0:resolution:90-resolution] ) {
                hull() {
                    rotate([i, 0, 0])
                    translate([0, filamentRadius * 2, 0] )
                        cylinder(h = 1, 
                                 r = filamentRadius, 
                                 $fn = resolution, 
                                 center = true);
                    rotate([i+resolution, 0, 0])
                    translate([0, filamentRadius * 2, 0] )
                        cylinder(h = 1, 
                                 r = filamentRadius, 
                                 $fn = resolution, 
                                 center = true);
                }
            }
            // straight section
            translate([0,0,filamentRadius*2])
            rotate([90,0,0])
                cylinder(h = 2 * outerRadius, 
                         r = filamentRadius, 
                         $fn = resolution, 
                         center = false);
        }
    }
}

Now looking at spring

Same trick doesn't quite work with spring because there is no Y rotation to angle each cylinder up.

module spring() {
    for (j = [0:(springWindings - 1)] ) {
        translate(v = [0, 0, j * step + padLength] ) {
            rotate(a = 270, v = [0, 1, 0] ) {   // flip it to basis plane[x,y]
                for (i = [0:resolution:360] )
                    hull() {
                        rotate(a = i, v = [1, 0, 0] )
                        translate(v = [(i / (360 * windingHeight)), outerRadius, 0] )
                            cylinder(h = 1, 
                                     r = filamentRadius, 
                                     $fn = resolution, 
                                     center = true);
                        rotate(a = i+resolution, v = [1, 0, 0] )
                        translate(v = [(i / (360 * windingHeight)), outerRadius, 0] )
                            cylinder(h = 1, 
                                     r = filamentRadius, 
                                     $fn = resolution, 
                                     center = true);
                }
            }
        }
    }
}

A quick note, this line:
for (i = [0:resolution:360] )
should be:
for (i = [0:360 / resolution:360])

but now < 100 elements in CSG tree instead of over 3000.
Good luck.