Dateien nach "Brompton_Urban_Bag" hochladen
This commit is contained in:
parent
4ca8ae0f83
commit
2df7195b5e
39
Brompton_Urban_Bag/Brompton_Urban_Bag_Magnet.scad
Normal file
39
Brompton_Urban_Bag/Brompton_Urban_Bag_Magnet.scad
Normal file
|
@ -0,0 +1,39 @@
|
|||
use <threads-library-by-cuiso-v1.scad>
|
||||
|
||||
// Screw
|
||||
translate([0,50,0]) difference(){
|
||||
union() {
|
||||
cylinder(d=40,h=3);
|
||||
translate ([0,0,9]) rotate([180,0,0]) thread_for_screw(diameter=10, length=6);
|
||||
}
|
||||
}
|
||||
|
||||
// Socket
|
||||
difference(){
|
||||
union() {
|
||||
cylinder(d=40, h =4);
|
||||
translate([0,0,1]) difference(){
|
||||
translate([0,0,3]) cylinder(d=19, h=4, d2=12);
|
||||
union(){
|
||||
translate([0,0,3]) cylinder(d=9, h=7);
|
||||
translate([-4.5,0,3]) rotate([0,0,0]) cube([9,9,9]);
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
translate([0,0,1]) union() {
|
||||
rotate([180,0,0]) translate([0,0,-9]) union() {
|
||||
cylinder(d=19, h=1);
|
||||
translate([0,0,1]) cylinder(d=10, h=1);
|
||||
translate([0,0,2]) cylinder(d=8.5, h=5.5);
|
||||
translate([0,0,7]) cylinder(d=11, h=1);
|
||||
}
|
||||
difference(){
|
||||
translate([-5.5,-6,3]) cube([11,25,2]);
|
||||
translate([-6.6,-7,5]) rotate([0,45,0]) cube([1.5,27,1.5]);
|
||||
translate([4.5,-7,5]) rotate([0,45,0]) cube([1.5,27,1.5]);
|
||||
}
|
||||
}
|
||||
translate ([0,0,0]) thread_for_nut(diameter=10, length=3);
|
||||
}
|
||||
|
BIN
Brompton_Urban_Bag/Brompton_Urban_Bag_Magnet.stl
Normal file
BIN
Brompton_Urban_Bag/Brompton_Urban_Bag_Magnet.stl
Normal file
Binary file not shown.
339
Brompton_Urban_Bag/threads-library-by-cuiso-v1.scad
Normal file
339
Brompton_Urban_Bag/threads-library-by-cuiso-v1.scad
Normal file
|
@ -0,0 +1,339 @@
|
|||
/*
|
||||
"OpenScad library. Threads for screws and nuts V1"
|
||||
by ANDRES ROMAN (AKA Cuiso) September 2018
|
||||
|
||||
-> V1.2 30/03/2021 Change Log:
|
||||
- Since OpenScad version 2021.01 version 1.1 of this library stopped with error.
|
||||
The necessary modifications have been made in this version 1.2
|
||||
so that it also works with OpenScad 2021.01.
|
||||
- Due to these necessary modifications, unfortunately now the preview
|
||||
time has increased slightly.
|
||||
- Remember that if necessary you can increase the speed for previewing and
|
||||
rendering using the functions with full parameters and specifying a
|
||||
smaller number of the "divs" parameter.
|
||||
If you prefer, you can also improve the speed at a
|
||||
general level by changing the variable "stddivs"
|
||||
located on line 167, increasing this variable increases the
|
||||
preview and rendering time (and increases the resolution),
|
||||
decreasing the value of this variable decreases the time
|
||||
preview and the resolution is lowered.
|
||||
The default value of 50 is generally adequate and in
|
||||
most cases you don't need to worry about this unless
|
||||
your computer is really slow, or you want to get really large diameter threads.
|
||||
This version continues to be compatible with OpenScad versions prior to 2021.01.
|
||||
- Some warnings that did not affect operation have been removed.
|
||||
- Some "echo" that did not affect operation have been removed.
|
||||
- This version is completely compatible with your projects made
|
||||
with previous versions, the name of the library "threads-library-by-cuiso-v1.scad"
|
||||
has been kept so you do not have to change anything in your source code, you only
|
||||
have to replace the old file "threads-library-by-cuiso-v1.scad" by the new
|
||||
"threads-library-by-cuiso-v1.scad" and you are ready to work with OpenScad 2021.01.
|
||||
- Happy designing !!!
|
||||
|
||||
-> V1.1 23/08/2019 Change Log:
|
||||
-Fixed bug. Using fullparms functions with "divs" no divider of 360 (200 for example) the thread could be incomplete. Now you can use any number of "divs" without problem.
|
||||
-A small improvement. Now the diameter reductions at the beginning of the screw for easy entry are created with the same level of detail as the rest of the screw.
|
||||
|
||||
* Copyright 2018 ANDRES ROMAN (AKA Cuiso)
|
||||
* Licensed under the Creative Commons - Attribution license.
|
||||
* This software is free software, you can Share and Adapt under the terms of Attribution
|
||||
(give appropriate credit).
|
||||
*
|
||||
* you can visit https://creativecommons.org/licenses/by/3.0/ for more details
|
||||
|
||||
* This software is distributed WITHOUT ANY WARRANTY.
|
||||
|
||||
*/
|
||||
|
||||
//For use this library you can put the file threads-library-by-cuiso-v1.scad in the same directory of your proyect and put the line use <threads-library-by-cuiso-v1.scad> in your own .scad file
|
||||
//You can see examples of use in file examples.scad
|
||||
|
||||
/*
|
||||
This is a library to include threads for screws and nuts in your own designs.
|
||||
|
||||
This library is focused to provide simple functions with preset parameters by default,
|
||||
and not to be too demanding in CPU consumption neither in previsualizacion nor in rendering
|
||||
|
||||
This library has been tested printing on PLA with 0.1 layer. Except for smaller diameter
|
||||
threads layers greater than 0.1 should work well.
|
||||
Diamaters tested between 3mm and 10mm, but you can use any diameter of your choice.
|
||||
|
||||
Shape of the threads are similar (but not equal) to ISO METRIC threads.
|
||||
Some tests have been done using screws and nuts printed with this library in
|
||||
combination with screws and nuts of metal with acceptable results. However, they have
|
||||
not been exhaustive tests.
|
||||
*/
|
||||
|
||||
/*
|
||||
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
||||
AVAILABLE FUNCTIONS:
|
||||
|
||||
BASIC FUNCTIONS (USING PREDEFINED PARAMETERS):
|
||||
|
||||
thread_for_screw(diameter, length);
|
||||
Generates a screw thread of the diameter indicated by the "diameter" parameter and of the length indicated by "length". This function uses standard pitch values depending on the diameter specified.
|
||||
diameter: Free value, in milimeters.
|
||||
length: Free value, in milimeters.
|
||||
|
||||
Example:
|
||||
thread_for_screw(diameter=10, length=30);
|
||||
|
||||
thread_for_nut(diameter, length, usrclearance=0);
|
||||
Generates a nut thread of the diameter indicated by the "diameter" parameter and of the length indicated by "length". This function uses standard pitch values depending on the diameter specified.
|
||||
The generated thread can be subtracted from any element of your design using the operator "difference()", thus obtaining a thread where a screw will fit.
|
||||
This function uses standard clearance for adjustment between screw and nut depending on the diameter specified.
|
||||
diameter: Free value, in milimeters.
|
||||
length: Free value, in milimeters.
|
||||
usrclearance: (optional) If the screw fits too tight on the nut you can specify a positive correction value (try 0.1 for example).
|
||||
If the screw fits too loose in the nut you can specify a negative correction value (try -0.1 for example).
|
||||
|
||||
Example:
|
||||
thread_for_nut(diameter=10, length=20);
|
||||
|
||||
|
||||
MORE AVAILABLE FUNCTIONS (WITH ADDITIONAL PARAMETERS):
|
||||
|
||||
thread_for_screw_fullparm(diameter, length, pitch, divs=50);
|
||||
Generates a screw thread of the diameter indicated by the "diameter" parameter and of the length indicated by "length", with pitch indicated by "pitch", and a resolution indicated by "divs".
|
||||
This function allows you to specify a non-standard "pitch" value.
|
||||
diameter: Free value, in milimeters.
|
||||
length: Free value, in milimeters.
|
||||
pitch: Pitch value.
|
||||
divs: (optional) you can obtain more or less resolution with parm. Higher values for more resolution (and more rendering time). Default value is 50.
|
||||
|
||||
Example:
|
||||
thread_for_screw_fullparm(diameter=10, length=30, pitch=2, divs=60);
|
||||
|
||||
thread_for_nut_fullparm(diameter, length, usrclearance=0, pitch, divs=50, entry=1);
|
||||
Generates a nut thread with additional parameters:
|
||||
diameter: Free value, in milimeters.
|
||||
length: Free value, in milimeters.
|
||||
usrclearance: (optional) If the screw fits too tight on the nut you can specify a positive correction value (try 0.1 for example).
|
||||
If the screw fits too loose in the nut you can specify a negative correction value (try -0.1 for example).
|
||||
pitch: Pitch value.
|
||||
divs: (optional) you can obtain more or less resolution with parm. Higher values for more resolution (and more rendering time). Default value is 50.
|
||||
entry: By default, the nut threads include a wider entrance area at the beginning and end to facilitate the introduction of the screw and minimize "elephant foot" problems.
|
||||
Specify 1 in entry to use these zones and 0 to not use them.
|
||||
|
||||
Example:
|
||||
thread_for_nut_fullparm(diameter=10,length=20,usrclearance=0.1,pitch=1.5,divs=60, entry=1);
|
||||
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
||||
*/
|
||||
|
||||
/*
|
||||
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
||||
SOME NOTES:
|
||||
- At first preview(F5) of the design may appear in console a lot of messages:
|
||||
"PolySet has nonplanar faces. Attempting alternate construction"
|
||||
simply ignore those messages, they are not a problem.
|
||||
In versión 1.2 these messages no longer appear.
|
||||
|
||||
- I have no lag problems in preview(F5) mode during the test of this library. If you are suffering lag problems in preview you can try to un-comment the "render()" al lines 286 and 293.
|
||||
You can also try decreasing the value of the stddivs variable on line 169 (50 is the default value).
|
||||
|
||||
- This library uses by default PITCH values:
|
||||
DIAMETER PITCH_VALUE
|
||||
3mm 0.5mm
|
||||
4mm 0.7mm
|
||||
5mm 0.8mm
|
||||
6mm 1.0mm
|
||||
8mm 1.25mm
|
||||
10mm 1.5mm
|
||||
...
|
||||
24mm 3.0mm
|
||||
(complete list defined at get_std_pitch(diam))
|
||||
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
||||
*/
|
||||
|
||||
|
||||
//EXAMPLE FOR CUSTOMIZER:
|
||||
//1 to draw rod, 0 to not draw rod
|
||||
drawrod=1;
|
||||
//1 to draw nut, 0 to not draw nut
|
||||
drawnut=1;
|
||||
diameter=8;
|
||||
lengthrod=15;
|
||||
lengthnut=7;
|
||||
//Example of USE, a rod SCREW:
|
||||
if(drawrod==1)thread_for_screw(diameter=diameter, length=lengthrod);
|
||||
//Example of USE, a FEMALE THREAD to be removed (with difference ()) from another figure:
|
||||
if(drawnut==1)
|
||||
translate([diameter,1.5*diameter,0]){
|
||||
thread_for_nut(diameter=diameter, length=lengthnut);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
||||
stddivs=50;
|
||||
|
||||
module thread_for_screw(diameter, length)
|
||||
{
|
||||
stdpitch=get_std_pitch(diameter);
|
||||
thread_for_screw_cuiso_tec(diameter,length,stdpitch,divdelta=stddivs);
|
||||
//echo(diameter);echo(stdpitch);
|
||||
}
|
||||
|
||||
module thread_for_nut(diameter, length, usrclearance=0)
|
||||
{
|
||||
stdpitch=get_std_pitch(diameter);
|
||||
stdclearance=get_std_clearance(diameter);
|
||||
|
||||
thread_for_nut_cuiso_tec
|
||||
(diameter+stdclearance+usrclearance,length,stdpitch,divdelta=stddivs,entry=1);
|
||||
|
||||
//echo(diameter);echo(stdpitch);echo(stdclearance+usrclearance);
|
||||
}
|
||||
|
||||
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
||||
module thread_for_screw_fullparm(diameter, length, pitch, divs=50)
|
||||
{
|
||||
if(divs<20) thread_for_screw_cuiso_tec(diameter,length,pitch,20);
|
||||
else if(divs>360) thread_for_screw_cuiso_tec(diameter,length,pitch,360);
|
||||
else thread_for_screw_cuiso_tec(diameter,length,pitch,divs);
|
||||
}
|
||||
|
||||
module thread_for_nut_fullparm(diameter, length, usrclearance=0, pitch, divs=50, entry=1)
|
||||
{
|
||||
stdclearance=get_std_clearance(diameter);
|
||||
|
||||
if(divs<20)thread_for_nut_cuiso_tec
|
||||
(diameter+stdclearance+usrclearance,length,pitch,20,entry=entry);
|
||||
else
|
||||
if(divs>360)thread_for_nut_cuiso_tec
|
||||
(diameter+stdclearance+usrclearance,length,pitch,360,entry=entry);
|
||||
else
|
||||
thread_for_nut_cuiso_tec
|
||||
(diameter+stdclearance+usrclearance,length,pitch,divs,entry=entry);
|
||||
}
|
||||
|
||||
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
||||
function get_std_pitch(diam) =
|
||||
lookup(diam,[[3,0.5],[4,0.7],[5,0.8],[6,1.0],[8,1.25],[10,1.5],
|
||||
[12,1.75],[14,2.0],[16,2.0],[18,2.5],[20,2.5],[22,2.5],[24,3.0]
|
||||
]);
|
||||
|
||||
function get_std_clearance(diam) =
|
||||
lookup(diam,[[3,0.4],[4,0.4],[5,0.5],[6,0.6],[8,0.6],[10,0.6],
|
||||
[12,0.7],[14,0.7],[16,0.7],[18,0.7],[20,0.8],[22,0.8],[24,0.8]
|
||||
]);
|
||||
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
||||
module thread_for_screw_cuiso_tec(diameter,lenght,pitch,divdelta){
|
||||
delta=360/divdelta;
|
||||
intersection(){
|
||||
cubointter(long=lenght,pitch=pitch,diameter=diameter,divdeltacube=divdelta);
|
||||
rosca(long=lenght,p=pitch,delta=delta,diameter=diameter);
|
||||
}
|
||||
//#cylinder(d=diameter,h=lenght,$fn=100);
|
||||
}
|
||||
|
||||
module thread_for_nut_cuiso_tec(diameter,lenght,pitch,divdelta,entry){
|
||||
delta=360/divdelta;
|
||||
translate([0,0,-0.001])
|
||||
intersection(){
|
||||
rosca(long=lenght+0.002,p=pitch,delta=delta,diameter=diameter,nut=1);
|
||||
cubointter_nut(lenght+0.002,pitch,diameter);
|
||||
}
|
||||
if(entry==1){translate([0,0,-0.001])cubointter_nut_entry(lenght+0.002,pitch,diameter,divdeltacube=divdelta);}
|
||||
//#cylinder(d=diameter,h=lenght,$fn=100);
|
||||
}
|
||||
|
||||
module cubointter(long,pitch,diameter,divdeltacube)
|
||||
{
|
||||
longcube=long-pitch;
|
||||
translate([0,0,longcube/2+pitch/2])cube([diameter,diameter,longcube],center=true);
|
||||
translate([0,0,longcube+pitch/2])
|
||||
cylinder(d1=diameter,d2=diameter-2*pitch*0.866,h=pitch/2, $fn=divdeltacube);
|
||||
cylinder(d2=diameter,d1=diameter-2*pitch*0.866,h=pitch/2, $fn=divdeltacube);
|
||||
}
|
||||
|
||||
module cubointter_nut(long,pitch,diameter)
|
||||
{
|
||||
longcube=long;
|
||||
translate([0,0,longcube/2])cube([diameter,diameter,longcube],center=true);
|
||||
}
|
||||
|
||||
module cubointter_nut_entry(long,pitch,diameter,divdeltacube)
|
||||
{
|
||||
longcube=long-0.6;
|
||||
translate([0,0,longcube])
|
||||
cylinder(d2=diameter+0.4,d1=diameter,h=0.6, $fn=divdeltacube);
|
||||
cylinder(d1=diameter+0.4,d2=diameter,h=0.6, $fn=divdeltacube);
|
||||
}
|
||||
|
||||
module rosca(long,p,delta,diameter,nut=0)
|
||||
{
|
||||
vueltas=round(long/p+0.5)+1;
|
||||
translate([0,0,-p/4])
|
||||
for(v = [0 : 1 : vueltas-1])
|
||||
translate([0,0,v*p])
|
||||
vuelta(p=p,delta=delta,diameter=diameter,nut=nut);
|
||||
}
|
||||
|
||||
module vuelta(p,delta,diameter,nut)
|
||||
{
|
||||
medio(p=p,delta=delta,diameter=diameter,nut=nut);
|
||||
|
||||
translate([0,0.001,0])
|
||||
rotate([0,180,180])
|
||||
medio(p=p,delta=delta,diameter=diameter,nut=nut);
|
||||
}
|
||||
|
||||
module medio(p,delta,diameter,nut)
|
||||
{
|
||||
if(nut==1)
|
||||
//render()
|
||||
hull(){
|
||||
for(k = [0 : delta : 180])
|
||||
translate([0,0,k*p/360])rotate([0,0,k])pieza_nut(diameter=diameter, p=p);
|
||||
translate([0,0,180*p/360])rotate([0,0,180])pieza_nut(diameter=diameter, p=p);
|
||||
}
|
||||
else
|
||||
//render()
|
||||
hull(){
|
||||
for(k = [0 : delta : 180])
|
||||
translate([0,0,k*p/360])rotate([0,0,k])pieza(diameter=diameter, p=p);
|
||||
translate([0,0,180*p/360])rotate([0,0,180])pieza(diameter=diameter, p=p);
|
||||
}
|
||||
}
|
||||
|
||||
module pieza(diameter, p)
|
||||
{
|
||||
r=diameter/2;
|
||||
h=p*0.866;
|
||||
pp=p/2;
|
||||
pm=-p/2;
|
||||
hh=r-h;
|
||||
g=0.001;
|
||||
|
||||
rotate([90,0,0])
|
||||
linear_extrude(height = g, center = true, convexity = 10){
|
||||
polygon([
|
||||
[0,pp],[hh,pp],[r-h/8,p/16],[r-h/8,-p/16],[hh,pm],[0,pm]
|
||||
],
|
||||
[
|
||||
[0,1,2,3,4,5]
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
module pieza_nut(diameter, p)
|
||||
{
|
||||
r=diameter/2;
|
||||
h=p*0.866;
|
||||
pp=p/2;
|
||||
pm=-p/2;
|
||||
hh=r-h;
|
||||
g=0.001;
|
||||
|
||||
rotate([90,0,0])
|
||||
linear_extrude(height = g, center = true, convexity = 10){
|
||||
polygon([
|
||||
[0,pp],[hh,pp],[r,0],[hh,pm],[0,pm]
|
||||
],
|
||||
[
|
||||
[0,1,2,3,4]
|
||||
]);
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue