File:Pseudogear-differential-workinprogress.gif
Pseudogear-differential-workinprogress.gif (480 × 270 pixels, file size: 1.81 MB, MIME type: image/gif, looped, 129 frames, 13 s)
Note: Due to technical limitations, thumbnails of high resolution GIF images such as this one will not be animated.
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:
