File:Pseudogear-differential-workinprogress.gif: Difference between revisions
Jump to navigation
Jump to search
→Summary: added openscad code |
codeblock |
||
| Line 7: | Line 7: | ||
OpenSCAD code: | OpenSCAD code: | ||
<pre> | |||
/* | /* | ||
Title: Three-Way Pseudogear Differential | Title: Three-Way Pseudogear Differential | ||
| Line 343: | Line 343: | ||
} | } | ||
} | } | ||
</pre> | |||
== Licensing == | == Licensing == | ||
{{self|cc-by-sa-4.0}} | {{self|cc-by-sa-4.0}} | ||
Latest revision as of 05:15, 20 April 2025
Summary
Author: Lukas M. Süss aka mechadense
Title: Pseudogear differential (WIP)
Date: 2023-09-21
License: CC-BY-SA-4.0
OpenSCAD code:
/*
Title: Three-Way Pseudogear Differential
Author: Lukas M. Süss aka mechadense
Date: 2023-09-16
#######
someting is off here
there's no adding going on
was this all completely bogus ??
check later again ...
seems I have to couple out using
a astraight grooved red-rod
#######
This is not a good mechanism for
macroscale mechanics. It is specifically
meant for atomically precise crystolecules.
This is meant to be a proof of principle
The design should be improvable e.g. by
duplicating inputs to avert torsion loads
Note that this is just a three way differential.
The fourth output is just redundant and preesent for symmetry.
These can easily be put in series
for a multi way differential
(electrical analogy multy way junction)
TODO
- improve colors again (the yellow is ugly)
- fix the mismatch of the teeth
- what to do about the box now??
I guess I need a 90 turn after all??
teeth asymmetry ??
add in out asyymetry for intuition??
straight cutoff ugly ...
- >> add triangular side protrusions
at the end of the rods for grippability/connectibility
- make a printplate
-- make it 3d printable
- maybe improve cutouts
- break some edges a bit eventually maybe
- check existing clearings (needed only for box I guess)
*/
eps = 0.05;
// be careful
//the toothnumber and the rod lengths
// do not yet auto-adjust (prolong
maxtravel = 6; // 5
t0 = 2;
ttooth = 2;
t0floatplate = t0;
tfloatplate = ttooth + t0floatplate + ttooth;
// rack rod ??
t0rod = t0;
wrod = 10;
lrod = 100;
pitch0 = 4;
w0 = (maxtravel+wrod+maxtravel);
wfloatplate = 2*w0;
xfloatplate = wfloatplate;
yfloatplate = wfloatplate;
platebasecolor = "cyan";
plateteethcolor = "blue";
xboxin = xfloatplate +2*maxtravel;
yboxin = yfloatplate +2*maxtravel;
tboxwallz = 2;
tboxwallxy = 4;
clr = 0.1; // clearing to tune
zboxin = t0floatplate + 2*(ttooth+t0rod+clr);
// I'll leave implementations for
// rack angles different than 45° for later
// wild guesses for now
x1 = 0+sin($t*360*8)*maxtravel;
x2 = 0-sin($t*360*1)*maxtravel;
xplate = (x1+x2)/2; // = (y1-y2)/2
yplate = (x1-x2)/2; // = (y1+y2)/2
// y-position of y-rods
y1 = x1; // ??
y2 = -x2; // ??
/*
difference()
{
box();
translate([0,0,200/2])
color("black")
cube([200,200,200],center=true);
}*/
module box()
{
difference()
{
// basebody
color("grey")
cube([xboxin+tboxwallxy*2,
yboxin+tboxwallxy*2,
zboxin+tboxwallz*2],center=true);
color("pink")
cube([xboxin,yboxin,zboxin+clr*2],center=true);
// t0rod+ttooth
// y1 rod slotcut
translate([-xfloatplate/4,0,0])
cube([wrod+2*clr,yboxin*2,zboxin+clr*2-2*eps],center=true);
// y2 rod slotcut
translate([+xfloatplate/4,0,0])
cube([wrod+2*clr,yboxin*2,zboxin+clr*2-2*eps],center=true);
// cuts for the x-rods the lazy way
rotate(90,[0,0,1])
{
translate([-xfloatplate/4,0,0])
cube([wrod+2*clr,yboxin*2,zboxin+clr*2-2*eps],center=true);
translate([+xfloatplate/4,0,0])
cube([wrod+2*clr,yboxin*2,zboxin+clr*2-2*eps],center=true);
}
}
}
translate([xplate,yplate,0])
floatplate();
/*
// y rod - neg x - neg z
translate([0,+y1,0])
translate([-xfloatplate/4,0,0])
rotate(90,[0,0,1])
translate([0,0,-t0floatplate/2])
pseudogearrack("red");
// y rod - pos x - neg z
translate([0,+y2,0])
scale([-1,1,1])
translate([-xfloatplate/4,0,0])
rotate(90,[0,0,1])
translate([0,0,-t0floatplate/2])
pseudogearrack("red");
*/
// x rod - pos y - pos z
translate([+x2,0,0])
translate([0,+yfloatplate/4*2,0])
translate([0,0,+t0floatplate/2])
scale([1,1,-1])
pseudogearrack("black",text="in: x1");
// x rod - pos y - pos z
translate([+x1,0,0])
translate([0,-yfloatplate/4*2,0])
translate([0,0,+t0floatplate/2])
scale([1,1,-1])
pseudogearrack("black",text="in: x2",a=-45);
// TEETH WRONG DIRECTION ATM
// x rod output
translate([xplate,0,0])
//translate([-xfloatplate/4,0,0])
translate([0,0,+t0floatplate/2])
scale([1,1,-1])
pseudogearrack("grey",text="out: (x1+x2)/2",a=0);
// pseudogearrack();
module pseudogearrack(col,col2="white",text="",a=45)
{
//translate([0,0,-(t0rod+ttooth)/2-t0floatplate/2-0])
difference()
{
color(col)
translate([0,0,-t0rod])
cube([lrod,wrod,t0rod+ttooth],center=true);
// we'll do that on the plate instead
pitchshift = pitch0*0;
m=4;
color(col2)
translate([pitchshift,0,-ttooth/2])
for(i=[-m:m])
{
translate([i*pitch0*2,0,0])
pseudogeartoothcutter
(pitch0, angle=a, w=wrod);
}
// as an indent cut for printability
if(text != "")
{
color("white")
translate([0,0,-(ttooth + t0rod)])
text(text,size=5,halign="center",valign="center"); // ,align = "center"
}
}
}
// ############################
module floatplate()
{
intersection()
{
union()
{
color(platebasecolor)
//color([1,0,1]*0.85)
cube([xfloatplate,w0*3,t0floatplate],
center=true);
color(plateteethcolor)
floatplateteeth();
color(plateteethcolor)
// we want straigth teeth instead
rotate(0,[0,0,1]) scale([1,1,1])
floatplateteethstraight();
}
//b2cube(); // TODO
}
}
module floatplateteethstraight()
{
translate([0,0,ttooth/2+t0floatplate/2-eps])
pseudogearrackteeth
(5,0,pitch=pitch0,l=xfloatplate,w=w0);
}
module floatplateteeth()
{
translate([0,w0,ttooth/2+t0floatplate/2-eps])
pseudogearrackteeth(5,+45);
translate([0,-w0,ttooth/2+t0floatplate/2-eps])
pseudogearrackteeth(5,-45);
}
// ############################
module pseudogearrackteeth
(n,angle, pitch=pitch0, l=xfloatplate, w=yfloatplate/2)
{
difference()
{
pitchshift = pitch0*(1);
cube([l,w,ttooth],
center=true);
translate([pitchshift*1,0,0])
for(i=[-n:n])
{
translate([pitch*i*2,0,0])
pseudogeartoothcutter(pitch,angle); // angle has no effect here
}
}
}
module pseudogeartoothcutter
(pitch, angle=45, w=wfloatplate/2)
{ //angle == 0 ... straight-tooth-rack
shift = w * sin(angle);
translate([0,0,0])
hull()
{
translate([-shift,-w/2,0])
trapezohullcutter(pitch,ttooth/2);
translate([+shift,+w/2,0])
trapezohullcutter(pitch,ttooth/2);
}
}
// note higher angles
module trapezohullcutter
(pitch=10, amplitude=2, angle=30)
{ //angle == 0 ... vertical flanks square wave
shift = amplitude * sin(angle)*2; //*2??
eps = 0.05;
hull()
{
translate([+(pitch+shift)/2, 0, +amplitude])
cube([1,1,1]*eps,center=true);
translate([-(pitch+shift)/2, 0, +amplitude])
cube([1,1,1]*eps,center=true);
translate([+(pitch-shift)/2,0,-amplitude])
cube([1,1,1]*eps,center=true);
translate([-(pitch-shift)/2,0,-amplitude])
cube([1,1,1]*eps,center=true);
}
}
module b2cube(x,y,z,b1,b2)
{
hull()
{
cube([x-b1,y-b1,z-0 ],center=true);
cube([x-b1,y-0 ,z-b2],center=true);
cube([x-0 ,y-b1,z-b2],center=true);
}
}
Licensing
File history
Click on a date/time to view the file as it appeared at that time.
| Date/Time | Thumbnail | Dimensions | User | Comment | |
|---|---|---|---|---|---|
| current | 04:21, 20 April 2025 | 480 × 270 (1.81 MB) | Apm (talk | contribs) | Author: Lukas M. Süss aka mechadense <br> Title: Pseudogear differential (WIP) <br> Date: 2023-09-21 <br> License: CC-BY-SA-4.0 <br> |
You cannot overwrite this file.
File usage
The following page uses this file: