RE: OpenSCAD: hull()

#51 von Sven , 11.07.2021 19:03

Hui Ulli,

das geht ja prima weiter...
Auch Deine Tante Edit hat eine feine Erweiterung gebracht (Bogensegment mit Arm).

In der Zwischenzeit habe ich die Arme seitlich mittels Zylindern gestaltet, der Kreisbogen zum Anschluß an die Grundplatte fehlt noch. Auch das mit dem Minimalmaß zum Überlappen habe ich begriffen und für die Federarme eine entsprechende Quaderscheibe im Kubus vorgesehen, damit das "verschmilzt". Zunächst dachte ich, das Geflacker gäbe sich mit dem Rendern und läge an der systematischen Darstellung derartiger Konstrukte von OpenSCAD. Dank Deiner Erklärung weiß ich nun, daß OpenSCAD bei sauberer Modellierung auch ohne zu Rendern die Bohrungen richtig zeigt.

Mit der Bohrung mußte ich aber experimentieren, ums Verrecken hat das immer oben oder unten geflackert. Zudrucken und nachher mit einer Feile dran herumdoktern will man ja auch nicht, wenn es anders gehen könnte.
Das Bauteil sieht nun so aus:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
 

/*
Kupplungshalter Maerklin TRAXX ER 20 optimiert
aehnlich Maerklin E345760
SER
v0.2
Stand: 11.07.2021
*/
 
/* Abmessungen */
/* Grundplatte in Einbauposition oben; ueberkopf */
GrundplatteDicke = 1.00; // Grundplatte Dicke
GrundplattePlus = 0.35; // Auffuettern TRAXX ER 20
 
SchachtBreiteInnen = 3.20; // NEM 362
SchachtHoeheInnen = 1.75; // NEM 362
SchachtLaengeInnen = 7.10; // NEM 362 ggf. 7,00 mm
SchachtLaengeUnten = 6.10; // Entriegelung
SchachtWandSeite = 1.00;
SchachtWandDecke = 1.00;
 
BohrungWeite = 3.85; // Drehzapfen Durchmesser
BohrungMitte = 10.80; // ab Vorderkante Schacht
OeseWand = 1.00; // Wanddicke Oese
OeseBreite = BohrungWeite + OeseWand + OeseWand;
OeseHoehe = GrundplatteDicke + GrundplattePlus;
 
FederBreite = 1.00; // Wanddicke, ggf. 0,75 mm
FederHoehe = GrundplatteDicke + GrundplattePlus;
FederWeite = 15.00; // Aussen an FederAbstandVorne
FederWeite2 = 10.00; // Aussen an FederAbstand2
FederAbstandVorne = 8.50; // Abstand Federenden ab Stirnseite Schacht
FederAbstand2 = BohrungMitte + BohrungWeite/2 + OeseWand; // X; Abstand ab Stirnseite Schacht
FederAnbauBreite = 2.00;
FederAnbauLaenge = 2.00;
 
Minimal = 0.001; // Hilfsbreite
Oberflaechenkosmetik = 320; // Entwurf 32, Final 320
 
/* Oberflaechenkosmetik */
$fn = Oberflaechenkosmetik;
 
/* Grundplatte */
GrundplatteLaenge = BohrungMitte + BohrungWeite/2;
GrundplatteBreite = SchachtWandSeite + SchachtBreiteInnen + SchachtWandSeite;
 
/* Grundplatte mit Bohrung */
difference ()
{
union() {
cube([BohrungMitte, GrundplatteBreite, GrundplatteDicke], $fn = Oberflaechenkosmetik, center = false);
translate([BohrungMitte, GrundplatteBreite/2, -Minimal ])
cylinder(h = (GrundplatteDicke + GrundplattePlus + Minimal), d = (BohrungWeite+OeseWand+OeseWand), $fn = Oberflaechenkosmetik);
translate([BohrungMitte, GrundplatteBreite/2, 0]);
}
translate([BohrungMitte, GrundplatteBreite/2, -2*Minimal ])
cylinder(h = (GrundplatteDicke + GrundplattePlus + 20*Minimal), d = (BohrungWeite), $fn = Oberflaechenkosmetik);
}
 
/* Schacht nach NEM 362 */
/* Wand vorne */
translate([0, 0, GrundplatteDicke])
cube([SchachtLaengeInnen, SchachtWandSeite, SchachtHoeheInnen + SchachtWandDecke], $fn = Oberflaechenkosmetik, center = false);
/* Wand hinten */
translate([0, (SchachtWandSeite + SchachtBreiteInnen), GrundplatteDicke])
cube([SchachtLaengeInnen, SchachtWandSeite, SchachtHoeheInnen + SchachtWandDecke], $fn = Oberflaechenkosmetik, center = false);
/* Decke */
translate([(SchachtLaengeInnen - SchachtLaengeUnten), 0, (GrundplatteDicke + SchachtHoeheInnen)])
cube([SchachtLaengeUnten, GrundplatteBreite, SchachtWandDecke], $fn = Oberflaechenkosmetik, center = false);
 
/* Feder */
/* Position Feder */
/* Links */
translate([ FederAbstandVorne, GrundplatteBreite/2 - FederWeite/2, 0])
cylinder(h = FederHoehe, d = 1.5*FederBreite, center = false);
hull()
{
translate([ FederAbstandVorne, GrundplatteBreite/2 - FederWeite/2, 0])
cylinder(h = FederHoehe, d = FederBreite, center = false);
translate([ FederAbstand2, GrundplatteBreite/2 - FederWeite2/2, 0])
cylinder(h = FederHoehe, d = FederBreite, center = false);
}
translate([ BohrungMitte + BohrungWeite/2 + OeseWand + FederAnbauLaenge - FederBreite, GrundplatteBreite/2 - FederAnbauBreite/2 + Minimal, 0 ])
cube([FederBreite, Minimal, FederHoehe], center = false);
 

/* Rechts */
translate([ FederAbstandVorne, GrundplatteBreite/2 + FederWeite/2, 0])
cylinder(h = FederHoehe, d = 1.5*FederBreite, center = false);
hull()
{
translate([ FederAbstandVorne, GrundplatteBreite/2 + FederWeite/2, 0])
cylinder(h = FederHoehe, d = FederBreite, center = false);
translate([ FederAbstand2, GrundplatteBreite/2 + FederWeite2/2, 0])
cylinder(h = FederHoehe, d = FederBreite, center = false);
}
translate([ BohrungMitte + BohrungWeite/2 + OeseWand + FederAnbauLaenge - FederBreite, GrundplatteBreite/2 + FederAnbauBreite/2 - Minimal, 0 ])
cube([FederBreite, Minimal, FederHoehe], center = false);
 
/* Feder Anbau */
 
translate([BohrungMitte + BohrungWeite/2, GrundplatteBreite/2 - FederAnbauBreite/2, 0])
cube([FederAnbauLaenge + OeseWand, FederAnbauBreite, GrundplatteDicke + GrundplattePlus], $fn = Oberflaechenkosmetik, center = false);
 
 


Jetzt muß ich mir das mit den Bogendingens mal antun...

Gruß
Sven


RReinehr hat sich bedankt!
Sven  
Sven
InterRegioExpress (IRE)
Beiträge: 270
Registriert am: 30.08.2018


Drecksfederbognglump

#52 von Sven , 12.07.2021 17:44

Servus miteinander,

das mit dem ausnahmslosen Rotieren nur um den Ursprung geht mir auf den Nerv.
Deswegen habe ich hilfsweise das Federchen ohne Kreisbogen gezeichnet.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
 

/*
___________________________________________________________________________
 
Kupplungshalter
aehnlich Maerklin E345760
fuer Maerklin H0 TRAXX ER 20 optimiert

SER
v0.3
 
Stand: 12.07.2021
 
___________________________________________________________________________
 
*/
 
Oberflaechenkosmetik = 32; // Entwurf 32, Final 320
 

/* Abmessungen */
 
/* Grundplatte in Einbauposition oben; ueberkopf */
GrundplatteDicke = 1.00;
 
SchachtBreiteInnen = 3.20; // NEM 362
SchachtHoeheInnen = 1.75; // NEM 362
SchachtLaengeInnen = 7.10; // NEM 362 ggf. 7,00 mm
SchachtLaengeUnten = 6.10; // Entriegelung
SchachtWandSeite = 1.00;
SchachtWandDecke = 1.00;
 
KupplungLaengeRast = 8.50; // Laenge der Steckpassung einer Kupplung mit ueber den Schacht hinaus ueberstehenden Rastnasen, wie Maerklin 7203
 
BohrungWeite = 3.85; // Durchmesser Drehzapfen an Schienenraeumer
BohrungMitte = 10.50; // ab Vorderkante Schacht, mindestens 10,5 mm, gemessen 10,8 mm
OeseWand = 1.00; // Wanddicke Oese
OeseBreite = BohrungWeite + OeseWand + OeseWand;
OeseHoehe = 1.35; // Mass fuer TRAXX ER 20
 
FederBreite = 1.00; // Wanddicke, ggf. 0,75 mm
FederEndstueck = 1.2 * FederBreite;
FederHoehe = 1.00;
FederWeite = 15.00; // Aussen an FederAbstandVorne
FederWeite2 = 10.00; // Aussen an FederAbstand2
FederAbstandVorne = 8.50; // Abstand Federenden ab Stirnseite Schacht
FederAbstand2 = BohrungMitte + BohrungWeite/2 ; // X; Abstand ab Stirnseite Schacht
FederAnbauBreite = 2.00;
FederAnbauLaenge = 2.00;
FederRadius = FederAnbauLaenge - OeseWand - BohrungWeite/2 - FederBreite/2; // Radius mit Mittelpunkt BohrungMitte
FederFlanschFaktor = 1.5; // Verbreiterung Flansch
/*
FederBogenLaenge =
*/
 
/* Sonstiges */
 
Minimal = 0.001; // Hilfsgroesse zur Ueberlappung fuer Verschmelzen der Bauteile
Durchbohrmass = 10 * Minimal;
 
/* Grundplatte Berechnungen */
 
GrundplatteLaenge = BohrungMitte + BohrungWeite/2;
/* Diese Erweiterung der Laenge der Grundplatte soll einen guten Anschluss der Grundplatte an die Rundung der Oese ergeben */
 
GrundplatteBreite = SchachtWandSeite + SchachtBreiteInnen + SchachtWandSeite;
 
/* Abmessungen Ende */
 
/*
___________________________________________________________________________
 
*/
 
/* Oberflaechenkosmetik */
$fn = Oberflaechenkosmetik;
 
/* Grundplatte mit Bohrung */
 
difference () {
/* Ausbuchtung fuer Rastnasen Kupplung */
 
difference () {
/* Bohrung fuer Drehzapfen an Schienenraeumer */
 
union() {
/* Grundplatte mit Rand fuer Bohrung */
/* Grundplatte */
cube([ BohrungMitte , GrundplatteBreite , GrundplatteDicke ], $fn = Oberflaechenkosmetik, center = false);
/* Rand fuer Bohrung */
translate([ BohrungMitte , GrundplatteBreite/2 , -Minimal ])
cylinder(h = (OeseHoehe+Minimal), d = (BohrungWeite+OeseWand+OeseWand), $fn = Oberflaechenkosmetik);
translate([ BohrungMitte , GrundplatteBreite/2 , 0]);
}
/* Bohrung fuer Drehzapfen */
translate([ BohrungMitte , GrundplatteBreite/2 , -Durchbohrmass ])
cylinder(h = (Durchbohrmass + OeseHoehe + Durchbohrmass ), d = (BohrungWeite), $fn = Oberflaechenkosmetik);
}
 
/* Ausbuchtung fuer Rastnasen Kupplung */
translate([0, 0, GrundplatteDicke + Minimal])
 
cube([KupplungLaengeRast, GrundplatteBreite, SchachtHoeheInnen]);
}
 
/* Schacht nach NEM 362 */
/* Wand vorne */
translate([0, 0, GrundplatteDicke])
cube([SchachtLaengeInnen, SchachtWandSeite, SchachtHoeheInnen + SchachtWandDecke], $fn = Oberflaechenkosmetik, center = false);
/* Wand hinten */
translate([0, (SchachtWandSeite + SchachtBreiteInnen), GrundplatteDicke])
cube([SchachtLaengeInnen, SchachtWandSeite, SchachtHoeheInnen + SchachtWandDecke], $fn = Oberflaechenkosmetik, center = false);
/* Decke */
translate([(SchachtLaengeInnen - SchachtLaengeUnten), 0, (GrundplatteDicke + SchachtHoeheInnen)])
cube([SchachtLaengeUnten, GrundplatteBreite, SchachtWandDecke], $fn = Oberflaechenkosmetik, center = false);
 
/* Feder */
/* Position Feder */
/* Links */
/* Feder Endstueck */
translate([ FederAbstandVorne, GrundplatteBreite/2 - FederWeite/2, 0])
cylinder(h = FederHoehe, d = FederEndstueck, center = false);
/* Feder Arm */
hull() {
translate([ FederAbstandVorne, GrundplatteBreite/2 - FederWeite/2, 0])
cylinder(h = FederHoehe, d = FederBreite, center = false);
translate([ FederAbstand2, GrundplatteBreite/2 - FederWeite2/2, 0])
cylinder(h = FederHoehe, d = FederBreite, center = false);
}
 
/* Linker Flansch fuer Federarm im Grundkoerper Feder Anbau. Der Flansch liegt um das Mass Minimal im Feder-Anbau, um beim 3D-Druckverfahren die Bauteile zu verschmelzen.
*/
translate([ BohrungMitte + BohrungWeite/2 + OeseWand + FederAnbauLaenge - FederBreite, GrundplatteBreite/2 - FederAnbauBreite/2 + Minimal, 0 ])
cube([FederBreite, Minimal, FederHoehe], center = false);
/* Der Feder-Flansch soll auf einem Kreisbogen mit dem Radius FederRadius nach links rotiert werden, bis der Zylinder am Punkt FederWeite2 erreicht wird.
*/
// hilfsweise hull mit verstaerktem Flansch
hull() {
translate([ BohrungMitte + BohrungWeite/2 + OeseWand + FederAnbauLaenge - FederFlanschFaktor*FederBreite, GrundplatteBreite/2 - FederAnbauBreite/2 + Minimal, 0 ])
cube([FederFlanschFaktor*FederBreite, Minimal, FederHoehe], center = false);
translate([ FederAbstand2, GrundplatteBreite/2 - FederWeite2/2, 0])
cylinder(h = FederHoehe, d = FederBreite, center = false);
}
 
/* Rechts */
/* Feder Endstueck */
translate([ FederAbstandVorne, GrundplatteBreite/2 + FederWeite/2, 0])
cylinder(h = FederHoehe, d = FederEndstueck, center = false);
/* Feder Arm */
hull() {
translate([ FederAbstandVorne, GrundplatteBreite/2 + FederWeite/2, 0])
cylinder(h = FederHoehe, d = FederBreite, center = false);
translate([ FederAbstand2, GrundplatteBreite/2 + FederWeite2/2, 0])
cylinder(h = FederHoehe, d = FederBreite, center = false);
}
 
/* Rechter Flansch fuer Federarm im Grundkoerper Feder Anbau. Der Flansch liegt um das Mass Minimal im Feder-Anbau, um beim 3D-Druckverfahren die Bauteile zu verschmelzen.
*/
// hilfsweise hull mit verstaerktem Flansch
hull() {
translate([ BohrungMitte + BohrungWeite/2 + OeseWand + FederAnbauLaenge - FederFlanschFaktor*FederBreite, GrundplatteBreite/2 + FederAnbauBreite/2 - Minimal, 0 ])
cube([FederFlanschFaktor*FederBreite, Minimal, FederHoehe], center = false);
translate([ FederAbstand2, GrundplatteBreite/2 + FederWeite2/2, 0])
cylinder(h = FederHoehe, d = FederBreite, center = false);
}
/* Der Feder-Flansch soll auf einem Kreisbogen mit dem Radius FederRadius nach rechts rotiert werden, bis der Zylinder am Punkt FederWeite2 erreicht wird.
*/
 
/* Feder Anbau */
translate([BohrungMitte + BohrungWeite/2, GrundplatteBreite/2 - FederAnbauBreite/2, 0])
cube([FederAnbauLaenge + OeseWand, FederAnbauBreite, FederHoehe], $fn = Oberflaechenkosmetik, center = false);
 
 



An den Größen "FederAbstandVorne", "FederWeite" und "FederWeite2" kann man noch etwas justieren, um die Feder an den Platz im Schienenräumer anzupassen.
Gedruckt ist's noch nicht, weil der Drucker noch nicht wieder funktioniert.

Gruß
Sven


RReinehr und Enkelbahner haben sich bedankt!
Sven  
Sven
InterRegioExpress (IRE)
Beiträge: 270
Registriert am: 30.08.2018


RE: Drecksfederbognglump

#53 von Enkelbahner , 13.07.2021 10:31

Hallo Sven,

ich glaube nicht das dieser Winkel richtig federt, eher wird er klemmen oder brechen, aber jetzt nicht aufgeben. Zu deinem Problem mit "vl" und der Bohrung: Setze mal "vl" (also Dein "Minimal") auf 10, dann siehst Du das Problem: nicht nur der Abzugskörper wird länger, sondern auch der Basiszylinder. Auch lange Variablennamen nützen nichts wenn sie in der falschen Zeile landen...

Zur Rotation:
Rotation im 3D-Raum ist immer ein Problem der Logik und Kopfsache, das hat nichts mit OpenSCAD zu tun. Blender z.B. nutzt nicht den Koordinatenmittelpunkt, sondern dreht um einen 3D-Cursor herum, das macht es aber nicht einfacher, denn den muss man ja auch immer passend setzen.

Zwei Lösungsansätze von mir für ein Bogenelement. Der erste mit hull(). Da hull() nur konvex kann muss ein Abzugskörper modelliert werden. Das führt aber Prinzip bedingt zu Geometriefehlern. Der Zweite ist sauber konstruiert. Man braucht für diese Art jedoch Winkel und Länge der Arme. Da wir diese nicht habe, sondern nur die Eckpunkte der Federenden müsste man das berechnen. Da mir das heute morgen zu kompliziert ist (Tangenten-Mathematik) und ich noch am Kaffeelevel arbeiten muss ermitteln wir das experimentell mit eine Boundingbox. Die Abweichung vom Sollwert wird in der Konsole ausgegeben.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
 

// OpenSCAD-Tutorial
// Federelement mit hull()
 
// F5 - Abzugskörper wird angezeigt
// F6 - Normale Ansicht
 
//================================
// ACHTUNG - KEINE RICHTIGE
// KONSTRUKTION - DIESER WEG
// ERZEUGT EINEN GEOMETRIEFEHLER
//================================
 
$fn=90; // make it Rund
r1=10; // Aussenradius
r2=1; // Breite
r3=2; // Radius Bommel am Ende
fb=40; // Federbreite ohne "Bommel"
fl=50; // Federlänge
wd=1; // Wanddicke der Feder
// bischen Rechnen
wd3=wd*3;
 

// Rechter und linker Abrollpunkt (Bommel)
translate([fb/2,r2/2,0])
cylinder(wd,r=r3);
translate([fb/-2,r2/2,0])
cylinder(wd,r=r3);
 
difference()
{
hull() // Grundkörper aus 3 Punkten erzeugen
{
translate([0,fl-r1,0]) //oberer Radius
cylinder(wd,r=r1);
 
translate([fb/2,r2/2,0]) // 2 x unten
cylinder(wd,r=r2);
 
translate([fb/-2,r2/2,0])
cylinder(wd,r=r2);
}
 

// Abzugskörper aus 3 Punkten erzeugen
translate([0,-r2*3,-wd])
#hull()
{
translate([0,fl-r1,0]) //oberer Radius
scale([1,r1/(r1-r2*2),1]) // Geometriefehler kompensieren
cylinder(wd3,r=r1-r2);
 
translate([fb/2-r2,0,0]) //2 x unten
cylinder(wd3,r=r2);
 
translate([fb/-2+r2,0,0])
cylinder(wd3,r=r2);
}
}
 
 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
 

// OpenSCAD-Tutorial
// Bogensegment
 
// F5 - "Boundingbox" wird angezeigt
// F6 - Normale Ansicht

$fn=90; // make it Rund
d1=30; // Durchmesser aussen
d2=d1-2; // und innen
wd=1; // Wanddicke
vl=0.01; // sehr wenig
vl2=0.02; // doppelt sowenig
w=158.55; // Winkel
a_l=28.29; // Armlänge
a_b=(d1-d2)/2; // Armdicke
 
// "bounding box"
// als Hilfskonstruktion
// berechnung ist mir für diesen Fall zu
// komplex (Tangentendreieck)
bb_l=40; // für Federlänge
bb_h=40; // für Federbreite
translate([bb_l/-2,0,0])
%cube([bb_l,bb_h,2]);
 
translate([0,bb_h-d1/2,0])
{
difference()
{
cylinder(wd,d=d1); // Basisbogen
translate([0,0,-vl]) //Loch
cylinder(wd+vl2,d=d2);

// linkes Segment schneiden
translate([0,0,-vl])
rotate([0,0,w/-2])
cube([d1*2,d1*2,wd+vl2]);
 
// rechtes Segment schneiden
translate([0,0,-vl])
rotate([0,0,90+w/2])
cube([d1*2,d1*2,wd+vl2]);

// unten alles säubern
translate([-d1*2,d1*-2,-vl])
cube([d1*4,d1*2,wd+vl2]);
}
 
//==================================
// beide Arme ankoppeln
// und per Annährung einsetzen
//==================================
 
x1=sin(w/2)*d1; // Kreisbogenansatz
y1=cos(w/2)*d1; // errechnen
 
// links an den Bogen schieben
color("pink")
translate([x1/-2-vl,y1/2,0])
rotate([0,0,w/2])
translate([-a_l,-a_b,0])
cube([a_l,a_b,wd]);
 
// rechts an den Bogen schieben
color("green")
translate([x1/2-vl,y1/2,0])
rotate([0,0,w/-2])
translate([0,-a_b,0])
cube([a_l,a_b,wd]);
 
// Ifo-Konsolausgabe:
// Wo ist der Endpunkt ?
// Vektorrechnung
x2=x1/2+cos(w/2)*a_l;
y2=y1/2-sin(w/2)*a_l+bb_h-d1/2;
 
// ausgabe
echo("");
echo("============================");
echo("Justagegenauigkeit Boundingbox");
echo("Sollwert: :",20,0);
echo("Istwert :",x2,y2);
echo("Abweichung :",x2-20,y2);
echo("============================");
echo("");
}
 
 


Disclaimer:
Meine Aussagen zu den CAD-Systemen beziehen sich auf meine Art zu Arbeiten und meine Hardware. Der Austausch von Rechner oder der Person vor dem Rechner kann entscheidende Verbesserungen bringen. Und ich habe nicht immer Recht...


Gruss aus dem Bergischen Land,
Ulli


(M)ein bisschen 3D-Druck : etwas bergisches...


Sven und RReinehr haben sich bedankt!
Enkelbahner  
Enkelbahner
InterRegioExpress (IRE)
Beiträge: 322
Registriert am: 09.04.2020


RE: Drecksfederbognglump

#54 von Sven , 13.07.2021 12:44

Hallo Ulli,

Danke für die Hilfestellung, Klasse.
Tja, das mit dem "Minimal", hehe. Gut, ich habe mir das nochmal angesehen und hoffentlich korrigiert und nicht verschlimmbessert.
Gewollt habe ich eigentlich, den "Bohrer" bzw. "Abzugszylinder" mit "Minimal" in Z-Achse tiefer anzusetzen als das Bauteil "Ring" und mit etwas mehr (genauer einmal Minimal unten, um das tiefer ansetzen wieder auszugleichen, und einmal oben, um durch den Ring durchzubohren) zu durchbohren. Gemacht habe ich wohl etwas anderes ...

Daß die eckigen Federn nicht wirklich federn und womöglich brechen werden, habe ich bereits befürchtet und deswegen den "Ansatz" am Federanbau in der Länge etwas breiter ausgeführt. Aber Murks bleibt Murks, auch wenn er breiter wird, da gebe ich Dir Recht. Aber mit Deinen Lösungsansätzen scheine ich ein Licht am Ende des Tunnels zu erkennen

und hoffe nur, daß das nicht der entgegenkommende Zug ist.

Nicht nur Du arbeitest am Kaffeelevel, mir ist der Level - ähm- Löffel aus dem Gesicht bzw. der Hand gefallen, als ich Deine beiden Lösungsansätze sah. Zumindest imaginär gefallen, weil ich eigentlich keinen Löffel im Kaffee brauche. Die Milch ist ja linksdrehend und mit genug Schwung zum Kaffee dazugegeben, braucht's den Löffel nicht (es sei denn, ich schäume mir die Milch auf, dann braucht was zum Reste aus der Tasse rauslöffeln... Egal.).
Allerdings befürchte ich, daß ich den erforderlichen Kaffeelevel nicht erreichen werde, um das rasch zu verstehen.

Den "Geometriefehler" der Lösung mit "hull()" erkenne ich leider nicht. Eigentlich gefällt mir das mit "hull()" doch sehr gut.

Näherungslösungen haben mir noch nie geschmeckt, aber wenn die "sauber" die Geometrie definieren.

OK. Dann werde ich mir die Lösungen nochmals intensiver ansehen müssen.

Der Vollständigkeit halber noch einmal meinen bezüglich "Minimal" korrigierten Versuch von gestern, mangels Verständnis noch ohne die Bogen an der Feder.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
 

/*
___________________________________________________________________________
 
Kupplungshalter
aehnlich Maerklin E345760
fuer Maerklin H0 TRAXX ER 20 optimiert

SER
v0.3b
 
Stand: 13.07.2021
 
___________________________________________________________________________
 
*/
 
Oberflaechenkosmetik = 32; // Entwurf 32, Final 320
 

/* Abmessungen */
 
/* Grundplatte in Einbauposition oben; ueberkopf */
GrundplatteDicke = 1.00;
 
SchachtBreiteInnen = 3.20; // NEM 362
SchachtHoeheInnen = 1.75; // NEM 362
SchachtLaengeInnen = 7.10; // NEM 362 ggf. 7,00 mm
SchachtLaengeUnten = 6.10; // Entriegelung
SchachtWandSeite = 1.00;
SchachtWandDecke = 1.00;
 
KupplungLaengeRast = 8.50; // Laenge der Steckpassung einer Kupplung mit ueber den Schacht hinaus ueberstehenden Rastnasen, wie Maerklin 7203
 
BohrungWeite = 3.85; // Durchmesser Drehzapfen an Schienenraeumer
BohrungMitte = 10.50; // ab Vorderkante Schacht, mindestens 10,5 mm, gemessen 10,8 mm
OeseWand = 1.00; // Wanddicke Oese
OeseBreite = BohrungWeite + OeseWand + OeseWand;
OeseHoehe = 1.35; // Mass fuer TRAXX ER 20
 
FederBreite = 1.00; // Wanddicke, ggf. 0,75 mm
FederEndstueck = 1.2 * FederBreite;
FederHoehe = 1.00;
FederWeite = 15.00; // Aussen an FederAbstandVorne
FederWeite2 = 10.00; // Aussen an FederAbstand2
FederAbstandVorne = 8.50; // Abstand Federenden ab Stirnseite Schacht
FederAbstand2 = BohrungMitte + BohrungWeite/2 ; // X; Abstand ab Stirnseite Schacht
FederAnbauBreite = 2.00;
FederAnbauLaenge = 2.00;
FederRadius = FederAnbauLaenge - OeseWand - BohrungWeite/2 - FederBreite/2; // Radius mit Mittelpunkt BohrungMitte
FederFlanschFaktor = 1.5; // Verbreiterung Flansch
/*
FederBogenLaenge =
*/
 
/* Sonstiges */
 
Minimal = 0.001; // Hilfsgroesse zur Ueberlappung fuer Verschmelzen der Bauteile
//Durchbohrmass = 10 * Minimal;
 
/* Grundplatte Berechnungen */
 
GrundplatteLaenge = BohrungMitte + BohrungWeite/2;
/* Diese Erweiterung der Laenge der Grundplatte soll einen guten Anschluss der Grundplatte an die Rundung der Oese ergeben */
 
GrundplatteBreite = SchachtWandSeite + SchachtBreiteInnen + SchachtWandSeite;
 
/* Abmessungen Ende */
 
/*
___________________________________________________________________________
 
*/
 
/* Oberflaechenkosmetik */
$fn = Oberflaechenkosmetik;
 
/* Grundplatte mit Bohrung */
 
difference () {
/* Ausbuchtung fuer Rastnasen Kupplung */
 
difference () {
/* Bohrung fuer Drehzapfen an Schienenraeumer */
 
union() {
/* Grundplatte mit Rand fuer Bohrung */
/* Grundplatte */
cube([ BohrungMitte , GrundplatteBreite , GrundplatteDicke ]);
/* Rand fuer Bohrung */
translate([ BohrungMitte , GrundplatteBreite/2 , 0 ])
cylinder(h = (OeseHoehe), d = (BohrungWeite+OeseWand+OeseWand));
translate([ BohrungMitte , GrundplatteBreite/2 , 0]);
}
/* Bohrung fuer Drehzapfen */
translate([ BohrungMitte , GrundplatteBreite/2 , -Minimal ])
cylinder(h = (OeseHoehe + 2*Minimal ), d = (BohrungWeite));
}
 
/* Ausbuchtung fuer Rastnasen Kupplung */
translate([SchachtLaengeInnen, 0, GrundplatteDicke ])
 
cube([KupplungLaengeRast - SchachtLaengeInnen, GrundplatteBreite, SchachtHoeheInnen ]);
}
 
/* Schacht nach NEM 362 */
/* Wand vorne */
translate([0, 0, GrundplatteDicke])
cube([SchachtLaengeInnen, SchachtWandSeite, SchachtHoeheInnen + SchachtWandDecke]);
/* Wand hinten */
translate([0, (SchachtWandSeite + SchachtBreiteInnen), GrundplatteDicke])
cube([SchachtLaengeInnen, SchachtWandSeite, SchachtHoeheInnen + SchachtWandDecke]);
/* Decke */
translate([(SchachtLaengeInnen - SchachtLaengeUnten), 0, (GrundplatteDicke + SchachtHoeheInnen)])
cube([SchachtLaengeUnten, GrundplatteBreite, SchachtWandDecke]);
 
/* Feder */
/* Position Feder */
/* Links */
/* Feder Endstueck */
translate([ FederAbstandVorne, GrundplatteBreite/2 - FederWeite/2, 0])
cylinder(h = FederHoehe, d = FederEndstueck);
/* Feder Arm */
hull() {
translate([ FederAbstandVorne, GrundplatteBreite/2 - FederWeite/2, 0])
cylinder(h = FederHoehe, d = FederBreite);
translate([ FederAbstand2, GrundplatteBreite/2 - FederWeite2/2, 0])
cylinder(h = FederHoehe, d = FederBreite);
}
 
/* Linker Flansch fuer Federarm im Grundkoerper Feder Anbau. Der Flansch liegt um das Mass Minimal im Feder-Anbau, um beim 3D-Druckverfahren die Bauteile zu verschmelzen.
*/
translate([ BohrungMitte + BohrungWeite/2 + OeseWand + FederAnbauLaenge - FederBreite, GrundplatteBreite/2 - FederAnbauBreite/2 + Minimal, 0 ])
cube([FederBreite, Minimal, FederHoehe]);
/* Der Feder-Flansch soll auf einem Kreisbogen mit dem Radius FederRadius nach links rotiert werden, bis der Zylinder am Punkt FederWeite2 erreicht wird.
*/
// hilfsweise hull mit verstaerktem Flansch
hull() {
translate([ BohrungMitte + BohrungWeite/2 + OeseWand + FederAnbauLaenge - FederFlanschFaktor*FederBreite, GrundplatteBreite/2 - FederAnbauBreite/2 + Minimal, 0 ])
cube([FederFlanschFaktor*FederBreite, Minimal, FederHoehe]);
translate([ FederAbstand2, GrundplatteBreite/2 - FederWeite2/2, 0])
cylinder(h = FederHoehe, d = FederBreite);
}
 
/* Rechts */
/* Feder Endstueck */
translate([ FederAbstandVorne, GrundplatteBreite/2 + FederWeite/2, 0])
cylinder(h = FederHoehe, d = FederEndstueck);
/* Feder Arm */
hull() {
translate([ FederAbstandVorne, GrundplatteBreite/2 + FederWeite/2, 0])
cylinder(h = FederHoehe, d = FederBreite);
translate([ FederAbstand2, GrundplatteBreite/2 + FederWeite2/2, 0])
cylinder(h = FederHoehe, d = FederBreite);
}
 
/* Rechter Flansch fuer Federarm im Grundkoerper Feder Anbau. Der Flansch liegt um das Mass Minimal im Feder-Anbau, um beim 3D-Druckverfahren die Bauteile zu verschmelzen.
*/
// hilfsweise hull mit verstaerktem Flansch
hull() {
translate([ BohrungMitte + BohrungWeite/2 + OeseWand + FederAnbauLaenge - FederFlanschFaktor*FederBreite, GrundplatteBreite/2 + FederAnbauBreite/2 - Minimal, 0 ])
cube([FederFlanschFaktor*FederBreite, Minimal, FederHoehe]);
translate([ FederAbstand2, GrundplatteBreite/2 + FederWeite2/2, 0])
cylinder(h = FederHoehe, d = FederBreite);
}
/* Der Feder-Flansch soll auf einem Kreisbogen mit dem Radius FederRadius nach rechts rotiert werden, bis der Zylinder am Punkt FederWeite2 erreicht wird.
*/
 
/* Feder Anbau */
translate([BohrungMitte + BohrungWeite/2, GrundplatteBreite/2 - FederAnbauBreite/2, 0])
cube([FederAnbauLaenge + OeseWand, FederAnbauBreite, FederHoehe]);
 

 



Des Weiteren habe ich angesichtes des Federbogenscheiterns schon ein weiteres Bauteil zusammengefrickelt, um einen Spannungspuffer in eine H0 TRAXX ER 20 zu legen, ohne das Getriebe zu berühren. Eine Art "Brücke" bzw. Plattform. Hierbei sind die Durchbrüche ohne Geflacker, zumindest hier habe ich wohl das mit "Minimal" nicht nur gewollt, sondern auch umgesetzt. Es sei denn, das mit "Minimal" habe ich immer noch nicht verstanden.
Allerdings sind die Maße gestern Abend zwischen Tür und Angel und im Zuge des Pfiffs der Chefin auf dem Kochlöffel genommen worden und dementsprechend nur als ein Entwurf zu sehen...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
 

 
/*
___________________________________________________________________________
 
Plattformtraeger innen FS1
fuer Maerklin H0 TRAXX ER 20

SER
v0.01
 
Stand: 13.07.2021
 
___________________________________________________________________________
 
*/
 
Oberflaechenkosmetik = 320; // Entwurf 32, Final 320
 

/* Abmessungen */
 
/* Plattform Lok Seite 1 PLS1 Fuehrerstand 1 FS1 */
PLS1Laenge = 60.00; // X mm max. wg FS Inneneinrichtung
PLS1Breite = 27.50; // Y mm
PLS1Dicke = 1.00; // Z mm
PLS1LichteWeite = 5.00; // Z mm Lichte Weite fuer Kardanwelle
PLS1MotorFlanschLaenge = 5.00; // X mm
PLS1MotorFlanschBreite = 15.00; // Y mm
PLS1GetriebeOeffnungAbtand = 22.00; // X mm
PLS1GetriebeOeffnungLaenge = 25.00; // X mm
PLS1GetriebeOeffnungBreite = 20.00; // Y mm
PLS1RastnaseD = 1.50;
PLS1RastnaseHoehe = 1.00; // Z mm
PLS1RastnaseAbstand1 = 28.50;
PLS1RastnaseAbstandLaengs = 23.50;
PLS1RastnaseAbstand2 = PLS1RastnaseAbstand1 + PLS1RastnaseAbstandLaengs;
// = 51.50;
PLS1RastnaseAbstandQuer = 25.30;
PLS1RastnaseAbstandSeite = (PLS1Breite - PLS1RastnaseAbstandQuer)/2;
PLS1Wandstaerke = PLS1RastnaseD + PLS1RastnaseAbstandSeite;
 
/* Sonstiges */
 
Minimal = 0.001; // Hilfsgroesse zur Ueberlappung fuer Verschmelzen der Bauteile
Durchbohrmass = 10 * Minimal;
 

/* Abmessungen Ende */
 
/*
___________________________________________________________________________
 
*/
 
/* Oberflaechenkosmetik */
$fn = Oberflaechenkosmetik;
 

 
/* Plattform Lok Seite 1 PLS1 */
/* Ausschnitt Getriebe */
difference() {
/* Ausschnitt Motorflansch */
difference() {
/* Grundplatte */
cube([ PLS1Laenge , PLS1Breite , PLS1Dicke ]);
/* Ausschnitt Getriebe */
translate([ -Minimal , ( PLS1Breite - PLS1MotorFlanschBreite )/2 , -Minimal ]) {
cube([ PLS1MotorFlanschLaenge + Minimal , PLS1MotorFlanschBreite , ( PLS1Dicke + 2*Minimal ) ]);
}
}
translate([ PLS1GetriebeOeffnungAbtand , ( PLS1Breite - PLS1GetriebeOeffnungBreite )/2 , -Minimal ]) {
cube([ PLS1GetriebeOeffnungLaenge , PLS1GetriebeOeffnungBreite , ( PLS1Dicke + 2*Minimal ) ]);
}
}
/* Seitenwand rechts */
translate([ 0 , 0 , PLS1Dicke ]) {
cube([PLS1Laenge , PLS1Wandstaerke , PLS1LichteWeite ]);
}
/* Seitenwand links */
translate([ 0 , PLS1Breite - PLS1Wandstaerke , PLS1Dicke ]) {
cube([PLS1Laenge , PLS1Wandstaerke , PLS1LichteWeite ]);
}
/* Rastnasen */
/* Rastnasen rechts */
translate([ PLS1RastnaseAbstand1 , PLS1RastnaseAbstandSeite , ( PLS1Dicke + PLS1LichteWeite ) ]) {
cylinder( h = PLS1RastnaseHoehe , d = PLS1RastnaseD );
}
translate([ PLS1RastnaseAbstand2 , PLS1RastnaseAbstandSeite , ( PLS1Dicke + PLS1LichteWeite ) ]) {
cylinder( h = PLS1RastnaseHoehe , d = PLS1RastnaseD );
}
/* Rastnasen links */
translate([ PLS1RastnaseAbstand1 , PLS1RastnaseAbstandSeite + PLS1RastnaseAbstandQuer , ( PLS1Dicke + PLS1LichteWeite ) ]) {
cylinder( h = PLS1RastnaseHoehe , d = PLS1RastnaseD );
}
translate([ PLS1RastnaseAbstand2 , PLS1RastnaseAbstandSeite + PLS1RastnaseAbstandQuer , ( PLS1Dicke + PLS1LichteWeite ) ]) {
cylinder( h = PLS1RastnaseHoehe , d = PLS1RastnaseD );
}
 

 



Ziemlich viel zu lernen und zu verarbeiten, aber irgendwie sind die visuellen Erfolge rasch greifbar. Da habe ich mir mit FreeCAD schwerer getan.

Gruß
Sven


RReinehr hat sich bedankt!
Sven  
Sven
InterRegioExpress (IRE)
Beiträge: 270
Registriert am: 30.08.2018


RE: Drecksfederbognglump

#55 von Sven , 13.07.2021 14:19

Hallo Ulli,

meinst Du mit "Geometriefehler" die Verdickung im Bogen im Vergleich zu den Federarmen?
Ich habe mal "hull()" auskommentiert und geguckt, was und wo die "Zeltstangen" sind. Dabei ist mir dann der angeschnittene Kreis bzw. Ring aufgefallen. Wenn man genau hinguckt und entsprechend viel vergrößert, sieht man, daß der Ring ein bisschen dicker ist, als es die Federarme mit "hull()" sind.

Eigentlich wäre die Verdickung im Federbogen für den Kupplungshalter nicht schädlich, oder?
Oder befürchtest Du, daß an den Verbindungsstellen zwischen Federarmen und Ring die Chose brechen wird? Das sollte doch aufgrund der Konstruktion mit "hull()" und entsprechendem Abzugskörper nicht passieren. Oder verstehe ich da etwas anderes nicht?


Gruß
Sven


Sven  
Sven
InterRegioExpress (IRE)
Beiträge: 270
Registriert am: 30.08.2018


RE: Drecksfederbognglump

#56 von Enkelbahner , 13.07.2021 16:04

Hallo Sven,

im Source habe ich die Stelle markiert wo ich das "wegfusche" (Zeile 51). Ich habe es als Geometriefehler markiert weil es immer und überall Leute gibt die sagen: DAS IST NICHT RICHTIG!. Recht haben sie, aber es funktioniert aus meiner Sicht ausreichend.

Es geht nicht primär um die Feder, sondern um die Art so etwas mit OpenSCAD zu konstruieren. Ein Problem dieser Feder ist, dass ich den Winkel nicht kenne. Den kann ich errechnen, aber der Weg ist lang und damit für mich sinnlos (oder ich sehe gerade den Wald vor lauter Bäumen nicht). Mit der Näherung bin ich nach wenigen Sekunden des Herantasten in der Toleranz von wenigen tausendstel, das reicht locker für den Drucker und hull() errechnet den Winkel zwar genau, verrät ihn aber nicht. Um das korrekt mit hull() auszuschneiden muss ich im Schneidekörper oben r1-r2 nehmen und unten die Kugeln um 90° zur Längskante versetzen, auf diesen Versatz um 90° nach unten gehen und da fehlt mir der Winkel wieder.

Ich habe noch eine 2te hull()-Version die das besser hinbekommt, aber der Aufwand wird deutlich größer und birgt immer noch einen kleinen Geometriefehler und der Weg ist schwer zu erklären (Ich bin da nicht so gut wie Claus). Man kann diese Probleme mit OpenSCAD genau lösen, dann steht man nur manchmal vor einem Formelberg der für einen 3D-Druck nichts an Genauigkeit bringt.

Noch ein kleiner Tip: Wenn du mit CURA druckst kann es Probleme mit dem Aufstapeln von Körpern geben (Der Druck zerfällt dann in seine Einzelteile) Besser ist es mit Durchdringung zu arbeiten.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
 

// OpenSCAD-Tutorial
//Rastnasen
 
gp_h=5; // Höhe Grundplatte
r_h=5; // Höhe Rand
n_h=3; // Höhe Rastnase
$fn=90;
// Schlecht:
 
color("red",0.5)
translate([5,1.5,gp_h+r_h])
cylinder(n_h,d=2); //Rastnase
 

color("yellow",0.5)
cube([10,10,gp_h]); // Grundplatte
 
color("orange",0.5)
translate([0,0,gp_h])
cube([10,3,r_h]); // Rand
 
// Besser:
translate([-15,0,0])
{
color("red",0.5)
translate([5,1.5,0])
cylinder(n_h+r_h+gp_h,d=2); //Rastnase
 
color("yellow",0.5)
cube([10,10,gp_h]); // Grundplatte
 
color("orange",0.5)
translate([0,0,0])
cube([10,3,r_h+gp_h]); // Rand
}
 


Disclaimer:
Meine Aussagen zu den CAD-Systemen beziehen sich auf meine Art zu Arbeiten und meine Hardware. Der Austausch von Rechner oder der Person vor dem Rechner kann entscheidende Verbesserungen bringen. Und ich habe nicht immer Recht...


Gruss aus dem Bergischen Land,
Ulli


(M)ein bisschen 3D-Druck : etwas bergisches...


RReinehr und Sven haben sich bedankt!
Enkelbahner  
Enkelbahner
InterRegioExpress (IRE)
Beiträge: 322
Registriert am: 09.04.2020


RE: Drecksfederbognglump

#57 von Sven , 13.07.2021 16:54

Hallo Ulli,

vielen Dank für Deine Anmerkungen.

Dann tüftele ich mir mal die "hull()"-Version der Federarme an die Kupplungshalterung dran...

Zu der Durchdringung habe ich noch eine Frage:
Genügt es, die Körper in der Form eines "Geometriezuschlags" wie der Größe "Minimal" miteinander zu "verschmelzen", oder wäre ein noch größerer Wert sinnvoll?
An dem Kupplungshalter hatte ich den Ring / Bohrung mit der Grundplatte überlappend konstruiert und die Decke des Schachtes mit den Seiten. Die Seiten sind auf die Grundplatte "gestapelt", hier wäre ein Verschmelzen auch durch die Grundplatte hindurch möglich, indem nicht in Z translatiert und die Seite entsprechend der Dicke der Grundplatte höher aufgebaut wird. Die Federseiten / -arme werden hinten an den Befestigungskörper um "Minimal" nach innen versetzt angebracht. Noch. Wenn der Bogen der Feder nach der von Dir vorgeschlagenen Methode "hull()" gestaltet wird, geht er nach meiner Vorstellung durch und durch, das wäre dann ohnehin Durchdringung.

Ultimaker CURA habe ich zwar, aber da hänge ich nicht zwingend dran. Wenn mal ein anderer Drucker ins Haus käme, der womöglich nicht mit CURA daherkommt, sondern vielleicht mit Slic3r oder Prusaslicer, dann sollten die Konstrukte nicht für die Katz' gewesen sein. Insofern bin ich über Tips und Hinweise zu von vorneherein universeller Konstruktion natürlich aufgeschlossen.

Gruß
Sven


Sven  
Sven
InterRegioExpress (IRE)
Beiträge: 270
Registriert am: 30.08.2018


RE: Drecksfederbognglump

#58 von Enkelbahner , 13.07.2021 17:26

Hallo Sven,

minimal reicht. Wie der Fehler aussieht und mehr Hintergründe dazu: Fehldruck Es war übrigens nur eine Seite betroffen, obwohl beide Seiten gleich in der Konstruktion waren.


Disclaimer:
Meine Aussagen zu den CAD-Systemen beziehen sich auf meine Art zu Arbeiten und meine Hardware. Der Austausch von Rechner oder der Person vor dem Rechner kann entscheidende Verbesserungen bringen. Und ich habe nicht immer Recht...


Gruss aus dem Bergischen Land,
Ulli


(M)ein bisschen 3D-Druck : etwas bergisches...


Sven hat sich bedankt!
Enkelbahner  
Enkelbahner
InterRegioExpress (IRE)
Beiträge: 322
Registriert am: 09.04.2020


RE: Drecksfederbognglump

#59 von Sven , 13.07.2021 17:32

Hallo Ulli,

vielen Dank.

Bin grade dabei, den Puffer umzustricken und habe einen Parameter "Verbindung" eingebaut, der beim Translatieren abgezogen und beim Aufsetzen in der Länge addiert wird. Derzeit mit 0,5 mm und dann kann man schön mit dem Transparenzzeichen "#" vor dem "hull()", "cube()" oder "cylinder()" sehen, wie die Verbindung, Überlappung, Durchdringung bzw. Verschmelzung wirkt.



Das wäre ja besonders blöd, wenn da die Prallplatte abfiele...


Ggruß
Sven


Enkelbahner hat sich bedankt!
Sven  
Sven
InterRegioExpress (IRE)
Beiträge: 270
Registriert am: 30.08.2018


RE: Drecksfederbognglump

#60 von Sven , 13.07.2021 21:39

Guten Abend Ulli,

daß die Feder mit Bogen anhand eines "einfachen" großen Zylinders und zwei Endpunkten aufgespannt werden kann, ist mir erst beim Umsetzen bewußt geworden.
Das mit dem Geometriefehler beseitigen mit scale usw. habe ich dann wieder nicht begriffen.
Unglücklich beim "Übernehmen" Deiner Lösung war auch, daß Du mit der Federlänge die Abrollpunkte in Ihrer X-Position beläßt und dafür den Kreismittelpunkt des Federbogens verschiebst. Der wiederum muß bei meiner Konstruktion an seiner Position bleiben und dafür können die Federenden sich verändern. Außerdem ist bei mir unglücklicherweise der Kreismittelpunkt der Bohrung und damit der Kreismittelpunkt des Federzylinders nicht der Ursprung. Das hätte womöglich einiges vereinfacht.
Dennoch habe ich einen Federbogen in meine Konstruktion hineingewurschtelt. Wie gesagt, ohne scale() und ohne Geometriefehlerkorrektur und mit einem weiteren eingesparten translate(). Diese nicht verwendeten Komponenten aus Deiner Lösung habe ich zwar eingetragen, aber mangels Verwendung auskommentiert. Vielleicht weißt Du aus dem Stehgreif, was ich falsch gemacht habe und weshalb das bei mir nicht funktionierte.
Diese höhere Mathematik war dann doch zu hoch für das alte kranke Hirn...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
 

/*
___________________________________________________________________________
 
Kupplungshalter
aehnlich Maerklin E345760
fuer Maerklin H0 TRAXX ER 20 optimiert

SER
v0.5 Feder gebogen mit hull() und Abzugskoerper
 
Stand: 13.07.2021
 
___________________________________________________________________________
 
*/
 
Oberflaechenkosmetik = 32; // Entwurf 32, Final 320
 

/* Abmessungen */
 
/* Grundplatte in Einbauposition oben; ueberkopf */
GrundplatteDicke = 1.00;
 
SchachtBreiteInnen = 3.20; // NEM 362
SchachtHoeheInnen = 1.75; // NEM 362
SchachtLaengeInnen = 7.10; // NEM 362 ggf. 7,00 mm
SchachtLaengeUnten = 6.10; // Entriegelung
SchachtWandSeite = 1.00;
SchachtWandDecke = 1.00;
 
KupplungLaengeRast = 8.50; // Laenge der Steckpassung einer Kupplung mit ueber den Schacht hinaus ueberstehenden Rastnasen, wie Maerklin 7203
 
BohrungWeite = 3.85; // Durchmesser Drehzapfen an Schienenraeumer
BohrungMitte = 10.50; // ab Vorderkante Schacht, mindestens 10,5 mm, gemessen 10,8 mm
OeseWand = 1.00; // Wanddicke Oese
OeseBreite = BohrungWeite + OeseWand + OeseWand;
OeseHoehe = 1.35; // Mass fuer TRAXX ER 20
 
FederBreite = 0.50; // Wanddicke, ggf. 0,75 mm
FederHoehe = 1.00;
FederHoeheAbzug = FederHoehe*3;
FederWeite = 15.00; // Aussen an FederLaenge
// FederLaenge=5.00; // Feder Laenge
FederLaenge = BohrungMitte - 5.00;
// FederAbstandVorne = 8.50; // Abstand Federenden ab Stirnseite Schacht
FederAnbauBreite = 2.00;
FederAnbauLaenge = 2.00;
FederRadiusAussen = BohrungWeite/2 + OeseWand + FederAnbauLaenge; // Radius aussen mit Mittelpunkt BohrungMitte
FederrolleRadius = 0.5; // Radius Federrolle Abrollpunkt am Ende der Federarme
 

/* Sonstiges */
 
Geometriezuschlag = 0.01; // Hilfsgroesse Geometrie
Verbindung = 0.50; // Ueberlappung fuer Verschmelzen der Bauteile
 

/* Grundplatte Berechnungen */
 
GrundplatteLaenge = BohrungMitte + BohrungWeite/2;
/* Diese Erweiterung der Laenge der Grundplatte soll einen guten Anschluss der Grundplatte an die Rundung der Oese ergeben */
 
GrundplatteBreite = SchachtWandSeite + SchachtBreiteInnen + SchachtWandSeite;
 
/* Abmessungen Ende */
 
/*
___________________________________________________________________________
 
*/
 
/* Oberflaechenkosmetik */
$fn = Oberflaechenkosmetik;
 

/* Federkonstruktion zuerst */
 
// Rechter und linker Abrollpunkt (Federrolle)
translate([ FederLaenge , GrundplatteBreite/2 - FederWeite/2 , 0 ]) { cylinder( h = FederHoehe , r = FederrolleRadius );
}
translate([ FederLaenge , GrundplatteBreite/2 + FederWeite/2 , 0 ]) {cylinder( h = FederHoehe , r = FederrolleRadius );
}
 
difference() {
// Grundkoerper aus 3 Punkten erzeugen
hull() {
translate([ BohrungMitte , GrundplatteBreite/2 , 0 ]) {
cylinder( h = FederHoehe , r = FederRadiusAussen );
}
translate([ FederLaenge , GrundplatteBreite/2 - FederWeite/2 , 0 ]) {
cylinder( h = FederHoehe , r = FederBreite/2 );
}
translate([ FederLaenge , GrundplatteBreite/2 + FederWeite/2 , 0 ]) {
cylinder( h = FederHoehe , r = FederBreite/2 );
}
}

 
// Abzugskoerper aus 3 Punkten erzeugen
//translate([ BohrungMitte-FederBreite , GrundplatteBreite/2 , -FederHoehe ]) {
hull() {
translate([ BohrungMitte - Geometriezuschlag , GrundplatteBreite/2 , -Geometriezuschlag ]) { //oberer Radius
//scale([ FederRadiusAussen / ( FederRadiusAussen - FederBreite/2 ) , 1 , 1 ]) // Geometriefehler kompensieren
cylinder( h = FederHoeheAbzug , r = FederRadiusAussen - FederBreite );
}
 
translate([ FederLaenge - Geometriezuschlag , GrundplatteBreite/2 -FederWeite/2 + FederBreite , 0 ]) {
cylinder( h = FederHoeheAbzug , r = FederBreite/2 );
}
translate([ FederLaenge - Geometriezuschlag , GrundplatteBreite/2 +FederWeite/2 - FederBreite , 0 ]) {
cylinder( h = FederHoeheAbzug , r = FederBreite/2 );
}
}
}
//}
 

/* Grundplatte mit Bohrung */
 
difference () {
/* Ausbuchtung fuer Rastnasen Kupplung */
 
difference () {
/* Bohrung fuer Drehzapfen an Schienenraeumer */
 
union() {
/* Grundplatte mit Rand fuer Bohrung */
/* Grundplatte */
cube([ BohrungMitte , GrundplatteBreite , GrundplatteDicke ]);
/* Rand fuer Bohrung */
translate([ BohrungMitte , GrundplatteBreite/2 , 0 ])
cylinder(h = OeseHoehe, d = ( BohrungWeite + OeseWand + OeseWand ));
translate([ BohrungMitte , GrundplatteBreite/2 , 0]);
}
/* Bohrung fuer Drehzapfen */
translate([ BohrungMitte , GrundplatteBreite/2 , -Geometriezuschlag ])
cylinder(h = ( OeseHoehe + 2*Geometriezuschlag ), d = BohrungWeite );
}
 
/* Ausbuchtung fuer Rastnasen Kupplung */
translate([ SchachtLaengeInnen , 0 , GrundplatteDicke ])
 
#cube([ ( KupplungLaengeRast - SchachtLaengeInnen ) , GrundplatteBreite , SchachtHoeheInnen ]);
}
 
/* Feder Anbau */
translate([ BohrungMitte + BohrungWeite/2 , GrundplatteBreite/2 - FederAnbauBreite/2 , 0 ]) {
cube([ FederAnbauLaenge + OeseWand/2 , FederAnbauBreite , FederHoehe ]);
}
 

/* Schacht nach NEM 362 */
/* Wand vorne */
translate([ 0 , 0 , GrundplatteDicke - Verbindung ])
cube([ SchachtLaengeInnen , SchachtWandSeite , SchachtHoeheInnen + SchachtWandDecke + Verbindung ]);
/* Wand hinten */
translate([0, ( SchachtWandSeite + SchachtBreiteInnen), GrundplatteDicke - Verbindung ])
cube([ SchachtLaengeInnen , SchachtWandSeite , SchachtHoeheInnen + SchachtWandDecke + Verbindung]);
/* Decke */
translate([(SchachtLaengeInnen - SchachtLaengeUnten), 0, (GrundplatteDicke + SchachtHoeheInnen)])
cube([SchachtLaengeUnten, GrundplatteBreite, SchachtWandDecke]);
 

 



Eigentlich sieht der Kupplungshalter nun doch ganz passabel aus, oder?

Viele Grüße
Sven


Sven  
Sven
InterRegioExpress (IRE)
Beiträge: 270
Registriert am: 30.08.2018


RE: Drecksfederbognglump

#61 von Sven , 14.07.2021 06:37

Guten Morgen Ulli, guten Morgen zusammen

erstens war es gestern schon "spät" und ich habe sozusagen vor lauter Hüllkörpern und Federn die Zylinder nicht mehr gesehen, und zweitens mag ich es ja auch zukünftig mal wieder verstehen. Deswegen habe ich ein paar Kommentare eingepflegt. Auch kann Ulli so leichter nachvollziehen, was ich gemacht - und vor allem, was ich falsch gemacht - habe und mir so vielleicht leichter Fehler aufzeigen, aus denen ich lernen kann.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
 
/*
___________________________________________________________________________
 
Kupplungshalter
aehnlich Maerklin E345760
fuer Maerklin H0 TRAXX ER 20 optimiert

SER
v0.5a Feder gebogen mit hull() und Abzugskoerper, kommentiert
 
Stand: 14.07.2021
 
___________________________________________________________________________
 
*/
 
Oberflaechenkosmetik = 32; // Entwurf 32, Final 320
 

/* Abmessungen */
 
/* Grundplatte in Einbauposition oben; ueberkopf */
GrundplatteDicke = 1.00;
 
SchachtBreiteInnen = 3.20; // NEM 362
SchachtHoeheInnen = 1.75; // NEM 362
SchachtLaengeInnen = 7.10; // NEM 362 ggf. 7,00 mm
SchachtLaengeUnten = 6.10; // Entriegelung
SchachtWandSeite = 1.00;
SchachtWandDecke = 1.00;
 
KupplungLaengeRast = 8.50; // Laenge der Steckpassung einer Kupplung mit ueber den Schacht hinaus ueberstehenden Rastnasen, wie Maerklin 7203
 
BohrungWeite = 3.85; // Durchmesser Drehzapfen an Schienenraeumer
BohrungMitte = 10.50; // ab Vorderkante Schacht, mindestens 10,5 mm, gemessen 10,8 mm
OeseWand = 1.00; // Wanddicke Oese
OeseBreite = BohrungWeite + OeseWand + OeseWand;
OeseHoehe = 1.35; // Mass fuer TRAXX ER 20
 
FederBreite = 0.50; // Wanddicke, ggf. 0,75 mm
FederHoehe = 1.00;
FederHoeheAbzug = FederHoehe*3;
FederWeite = 15.00; // Tangential aussen an FederLaenge, Weite im Schienenraeumer
FederLaenge = BohrungMitte - 5.00; // Federenden Abstand von vorne
/* FederLaenge ist die Laenge der Feder gemessen parallel zu X bis zur Position FederLaenge der Federenden, nicht die Bauteillaenge der Federarme in Richtung des Winkels! Der Abstand der Enden der Feder von der Stirnseite des Schachtes in X-Richtung gemessen. Die FederLaenge darf nicht groesser werden, als die zu Y parallele Tangente am Zylinder mit Radius FederRadiusAussen zum Schacht, sonst bildet hull() keine dreieckige V-Form, sondern ein unerwuenschtes Viereck. */
FederAnbauBreite = 2.00;
FederAnbauLaenge = 2.00;
FederRadiusAussen = BohrungWeite/2 + OeseWand + FederAnbauLaenge; // Radius aussen mit Mittelpunkt BohrungMitte
FederrolleRadius = 0.50; // Radius Federrolle Abrollpunkt am Ende der Federarme
 

/* Sonstiges */
 
Geometriezuschlag = 0.01; // Hilfsgroesse Geometrie
Verbindung = 0.50; // Ueberlappung fuer Verschmelzen der Bauteile
 

/* Grundplatte Berechnungen */
 
GrundplatteLaenge = BohrungMitte + BohrungWeite/2;
/* Diese Erweiterung der Laenge der Grundplatte soll einen guten Anschluss der Grundplatte an die Rundung der Oese ergeben. Das Uebermass "Verbindung" genuegt aufgrund der Rundung der Oese nicht. */
 
GrundplatteBreite = SchachtWandSeite + SchachtBreiteInnen + SchachtWandSeite;
 
/* Abmessungen Ende */
 
/*
___________________________________________________________________________
 
*/
 
/* Oberflaechenkosmetik */
$fn = Oberflaechenkosmetik;
 

/* Federkonstruktion zuerst */
 
/* Rechter und linker Abrollpunkt (Federrolle) */
translate([ FederLaenge , GrundplatteBreite/2 - FederWeite/2 , 0 ]) { cylinder( h = FederHoehe , r = FederrolleRadius );
}
translate([ FederLaenge , GrundplatteBreite/2 + FederWeite/2 , 0 ]) {cylinder( h = FederHoehe , r = FederrolleRadius );
}
 
difference() {
/* Grundkoerper aus 3 Punkten erzeugen */
hull() {
translate([ BohrungMitte , GrundplatteBreite/2 , 0 ]) {
cylinder( h = FederHoehe , r = FederRadiusAussen );
}
translate([ FederLaenge , GrundplatteBreite/2 - FederWeite/2 , 0 ]) {
cylinder( h = FederHoehe , r = FederBreite/2 );
}
translate([ FederLaenge , GrundplatteBreite/2 + FederWeite/2 , 0 ]) {
cylinder( h = FederHoehe , r = FederBreite/2 );
}
}

 
/* Abzugskoerper aus 3 Punkten erzeugen */
//translate([ BohrungMitte-FederBreite , GrundplatteBreite/2 , -FederHoehe ]) {
hull() {
translate([ BohrungMitte - Geometriezuschlag , GrundplatteBreite/2 , -Geometriezuschlag ]) { //oberer Radius
//scale([ FederRadiusAussen / ( FederRadiusAussen - FederBreite/2 ) , 1 , 1 ]) // Geometriefehler kompensieren
cylinder( h = FederHoeheAbzug , r = FederRadiusAussen - FederBreite );
}
 
translate([ FederLaenge - Geometriezuschlag , GrundplatteBreite/2 -FederWeite/2 + FederBreite , 0 ]) {
cylinder( h = FederHoeheAbzug , r = FederBreite/2 );
}
translate([ FederLaenge - Geometriezuschlag , GrundplatteBreite/2 +FederWeite/2 - FederBreite , 0 ]) {
cylinder( h = FederHoeheAbzug , r = FederBreite/2 );
}
}
}
//}
 

/* Grundplatte mit Bohrung */
 
difference () {
/* Ausbuchtung fuer Rastnasen Kupplung */
 
difference () {
/* Bohrung fuer Drehzapfen an Schienenraeumer */
 
union() {
/* Grundplatte mit Rand fuer Bohrung verschmelzen */
/* Bauteil Grundplatte erstellen */
cube([ BohrungMitte , GrundplatteBreite , GrundplatteDicke ]);
/* Bauteil Rand fuer Bohrung erstellen */
translate([ BohrungMitte , GrundplatteBreite/2 , 0 ])
cylinder(h = OeseHoehe, d = ( BohrungWeite + OeseWand + OeseWand ));
translate([ BohrungMitte , GrundplatteBreite/2 , 0]);
}
/* Bohrung fuer Drehzapfen in Rand fuer Bohrung erstellen */
translate([ BohrungMitte , GrundplatteBreite/2 , -Geometriezuschlag ])
cylinder(h = ( OeseHoehe + 2*Geometriezuschlag ), d = BohrungWeite );
}
 
/* Ausbuchtung fuer Rastnasen der Kupplung aus Ring aussparen, sonst passt die Kupplung nicht in den Schacht */
translate([ SchachtLaengeInnen , 0 , GrundplatteDicke ])
 
#cube([ ( KupplungLaengeRast - SchachtLaengeInnen ) , GrundplatteBreite , SchachtHoeheInnen ]);
}
 
/* Feder Anbau */
translate([ BohrungMitte + BohrungWeite/2 , GrundplatteBreite/2 - FederAnbauBreite/2 , 0 ]) {
cube([ FederAnbauLaenge + OeseWand/2 , FederAnbauBreite , FederHoehe ]);
}
 

/* Schacht nach NEM 362 */
/* Seitenwand eins */
translate([ 0 , 0 , GrundplatteDicke - Verbindung ])
cube([ SchachtLaengeInnen , SchachtWandSeite , SchachtHoeheInnen + SchachtWandDecke + Verbindung ]);
/* Seitenwand zwei */
translate([0, ( SchachtWandSeite + SchachtBreiteInnen), GrundplatteDicke - Verbindung ])
cube([ SchachtLaengeInnen , SchachtWandSeite , SchachtHoeheInnen + SchachtWandDecke + Verbindung]);
/* Decke, stellt in Einbauposition dann den Boden Richtung Gleis dar */
translate([(SchachtLaengeInnen - SchachtLaengeUnten), 0, (GrundplatteDicke + SchachtHoeheInnen)])
cube([SchachtLaengeUnten, GrundplatteBreite, SchachtWandDecke]);
 

 



Gruß
Sven


Sven  
Sven
InterRegioExpress (IRE)
Beiträge: 270
Registriert am: 30.08.2018


Kupplungshalter mit Fünf-Punkt-Abzugskörper

#62 von Sven , 14.07.2021 07:28

Servus miteinander,

die nächste Optimierung folgt...
Wurde am Kupplungshalter der Abstand der Federenden, von der Stirnseite des Schachtes gemessen, sehr weit gewählt, wurden die Federenden so weit zurückgenommen, daß der Abzugskörper seltsamerweise nicht mehr zuverlässig alle unerwünschten Stellen erreicht hat. Um dies zu umgehen, habe ich einen Abzugskörper mit fünf Punkten eingebaut, der nun zuverlässig bis zur X-Achse alle Überbleibsel abzieht.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
 

/*
___________________________________________________________________________
 
Kupplungshalter
aehnlich Maerklin E345760
fuer Maerklin H0 TRAXX ER 20 optimiert

SER
v0.6 Feder gebogen mit hull() und 5-Punkt-Abzugskoerper, kommentiert
 
Stand: 14.07.2021
 
___________________________________________________________________________
 
*/
 
Oberflaechenkosmetik = 320; // Entwurf 32, Final 320
 

/* Abmessungen */
 
/* Grundplatte in Einbauposition oben; ueberkopf */
GrundplatteDicke = 1.00;
 
SchachtBreiteInnen = 3.20; // NEM 362
SchachtHoeheInnen = 1.75; // NEM 362
SchachtLaengeInnen = 7.10; // NEM 362 ggf. 7,00 mm
SchachtLaengeUnten = 6.10; // Entriegelung
SchachtWandSeite = 1.00;
SchachtWandDecke = 1.00;
 
KupplungLaengeRast = 8.40; // Laenge der Steckpassung einer Kupplung mit ueber den Schacht hinaus ueberstehenden Rastnasen, wie Maerklin 7203
 
BohrungWeite = 3.85; // Durchmesser Drehzapfen an Schienenraeumer
BohrungMitte = 10.50; // ab Vorderkante Schacht, mindestens 10,5 mm, gemessen 10,8 mm
OeseWand = 1.00; // Wanddicke Oese
OeseBreite = BohrungWeite + OeseWand + OeseWand;
OeseHoehe = 1.35; // Mass fuer TRAXX ER 20
 
FederBreite = 0.50; // Wanddicke, ggf. 0,75 mm
FederHoehe = 1.00;
FederHoeheAbzug = FederHoehe*3;
FederWeite = 15.00; // Tangential aussen an FederLaenge, Weite im Schienenraeumer
FederLaenge = BohrungMitte - 5.00; // Federenden Abstand von vorne
/* FederLaenge ist die Laenge der Feder gemessen parallel zu X bis zur Position FederLaenge der Federenden, nicht die Bauteillaenge der Federarme in Richtung des Winkels! Der Abstand der Enden der Feder von der Stirnseite des Schachtes in X-Richtung gemessen. Die FederLaenge darf nicht groesser werden, als die zu Y parallele Tangente am Zylinder mit Radius FederRadiusAussen zum Schacht, sonst bildet hull() keine dreieckige V-Form, sondern ein unerwuenschtes Viereck. */
FederAnbauBreite = 2.00;
FederAnbauLaenge = 2.00;
FederRadiusAussen = BohrungWeite/2 + OeseWand + FederAnbauLaenge; // Radius aussen mit Mittelpunkt BohrungMitte
FederrolleRadius = 0.50; // Radius Federrolle Abrollpunkt am Ende der Federarme
 

/* Sonstiges */
 
Geometriezuschlag = 0.01; // Hilfsgroesse Geometrie
Verbindung = 0.50; // Ueberlappung fuer Verschmelzen der Bauteile
 

/* Grundplatte Berechnungen */
 
GrundplatteLaenge = BohrungMitte + BohrungWeite/2;
/* Diese Erweiterung der Laenge der Grundplatte soll einen guten Anschluss der Grundplatte an die Rundung der Oese ergeben. Das Uebermass "Verbindung" genuegt aufgrund der Rundung der Oese nicht. */
 
GrundplatteBreite = SchachtWandSeite + SchachtBreiteInnen + SchachtWandSeite;
 
/* Abmessungen Ende */
 
/*
___________________________________________________________________________
 
*/
 
/* Oberflaechenkosmetik */
$fn = Oberflaechenkosmetik;
 

/* Federkonstruktion zuerst */
 
/* Rechter und linker Abrollpunkt (Federrolle) */
translate([ FederLaenge , GrundplatteBreite/2 - FederWeite/2 , 0 ]) { cylinder( h = FederHoehe , r = FederrolleRadius );
}
translate([ FederLaenge , GrundplatteBreite/2 + FederWeite/2 , 0 ]) {cylinder( h = FederHoehe , r = FederrolleRadius );
}
 
difference() {
/* Grundkoerper aus 3 Punkten erzeugen */
hull() {
translate([ BohrungMitte , GrundplatteBreite/2 , 0 ]) {
cylinder( h = FederHoehe , r = FederRadiusAussen );
}
translate([ FederLaenge , GrundplatteBreite/2 - FederWeite/2 , 0 ]) {
cylinder( h = FederHoehe , r = FederBreite/2 );
}
translate([ FederLaenge , GrundplatteBreite/2 + FederWeite/2 , 0 ]) {
cylinder( h = FederHoehe , r = FederBreite/2 );
}
}

 
/* Abzugskoerper aus 5 Punkten erzeugen */
/* Mit fuenf Punkten werden zuverlaessig alle ueberstehenden Teile ausgeschnitten, auch wenn die FederLaenge unguenstige Masse erreicht. */
//translate([ BohrungMitte-FederBreite , GrundplatteBreite/2 , -FederHoehe ]) {
hull() {
translate([ BohrungMitte - Geometriezuschlag , GrundplatteBreite/2 , -Geometriezuschlag ]) { //oberer Radius
//scale([ FederRadiusAussen / ( FederRadiusAussen - FederBreite/2 ) , 1 , 1 ]) // Geometriefehler kompensieren
cylinder( h = FederHoeheAbzug , r = FederRadiusAussen - FederBreite );
}
 
translate([ FederLaenge - Geometriezuschlag , GrundplatteBreite/2 -FederWeite/2 + FederBreite , 0 ]) {
cylinder( h = FederHoeheAbzug , r = FederBreite/2 );
}
 
translate([ 0 , GrundplatteBreite/2 -FederWeite/2 + FederBreite , 0 ]) {
cylinder( h = FederHoeheAbzug , r = FederBreite/2 );
}
 
translate([ FederLaenge - Geometriezuschlag , GrundplatteBreite/2 +FederWeite/2 - FederBreite , 0 ]) {
cylinder( h = FederHoeheAbzug , r = FederBreite/2 );
}
 
translate([ 0 , GrundplatteBreite/2 +FederWeite/2 - FederBreite , 0 ]) {
cylinder( h = FederHoeheAbzug , r = FederBreite/2 );
}
}
}
//}
 

/* Grundplatte mit Bohrung */
 
difference () {
/* Ausbuchtung fuer Rastnasen Kupplung */
 
difference () {
/* Bohrung fuer Drehzapfen an Schienenraeumer */
 
union() {
/* Grundplatte mit Rand fuer Bohrung verschmelzen */
/* Bauteil Grundplatte erstellen */
cube([ BohrungMitte , GrundplatteBreite , GrundplatteDicke ]);
/* Bauteil Rand fuer Bohrung erstellen */
translate([ BohrungMitte , GrundplatteBreite/2 , 0 ])
cylinder(h = OeseHoehe, d = ( BohrungWeite + OeseWand + OeseWand ));
translate([ BohrungMitte , GrundplatteBreite/2 , 0]);
}
/* Bohrung fuer Drehzapfen in Rand fuer Bohrung erstellen */
translate([ BohrungMitte , GrundplatteBreite/2 , -Geometriezuschlag ])
cylinder(h = ( OeseHoehe + 2*Geometriezuschlag ), d = BohrungWeite );
}
 
/* Ausbuchtung fuer Rastnasen der Kupplung aus Ring aussparen, sonst passt die Kupplung nicht in den Schacht */
translate([ SchachtLaengeInnen , 0 , GrundplatteDicke ])
 
#cube([ ( KupplungLaengeRast - SchachtLaengeInnen ) , GrundplatteBreite , SchachtHoeheInnen ]);
}
 
/* Feder Anbau */
translate([ BohrungMitte + BohrungWeite/2 , GrundplatteBreite/2 - FederAnbauBreite/2 , 0 ]) {
cube([ FederAnbauLaenge + OeseWand/2 , FederAnbauBreite , FederHoehe ]);
}
 

/* Schacht nach NEM 362 */
/* Seitenwand eins */
translate([ 0 , 0 , GrundplatteDicke - Verbindung ])
cube([ SchachtLaengeInnen , SchachtWandSeite , SchachtHoeheInnen + SchachtWandDecke + Verbindung ]);
/* Seitenwand zwei */
translate([0, ( SchachtWandSeite + SchachtBreiteInnen), GrundplatteDicke - Verbindung ])
cube([ SchachtLaengeInnen , SchachtWandSeite , SchachtHoeheInnen + SchachtWandDecke + Verbindung]);
/* Decke, stellt in Einbauposition dann den Boden Richtung Gleis dar */
translate([(SchachtLaengeInnen - SchachtLaengeUnten), 0, (GrundplatteDicke + SchachtHoeheInnen)])
cube([SchachtLaengeUnten, GrundplatteBreite, SchachtWandDecke]);
 

 



Gruß
Sven


Enkelbahner hat sich bedankt!
Sven  
Sven
InterRegioExpress (IRE)
Beiträge: 270
Registriert am: 30.08.2018


Federkörper mit hull()

#63 von Enkelbahner , 14.07.2021 11:32

Hallo Sven,

was Du falsch gemacht hast? Nix - sieht doch gut aus.

Zu den von Dir auskommentierten Zeilen von meiner Feder:

Meine Feder ist leider ein Opfer ihrer eigenen Evolution geworden. Die Abrollnasen waren ja am Anfang nicht dabei. Um das Gebilde gefälliger zu machen habe ich 2 kleine Radien an die Federarme gesetzt. Beim Abzugskörper habe ich das per copy/paste gelassen und um zu vermeiden das Reste beim Abzug stehenbleiben habe ich das Dreieck um den Radius dieser Ecken nach unten geschoben. Aber dann fehlt es natürlich oben, dazu habe ich den oberen Zylinder per scale von rund auf "EI" gezogen, sodass der Abstand zur oben Kante wieder passt. Eine komplette Überarbeitung mit dem Eckenradius "vl" wäre richtig gewesen, genauso wie die Verschiebung der unteren Ecken im richtigen Winkel. Aber 2 x Pythagoras und 2 x Winkelfunktionen waren mir für das Prinzip eines Federkörpers etwas zu viel "Overengineering". Naja - man kann auch sagen dass ich zu faul war.

Zum Problem das bei mir der obere Zylinder wandert - es ist egal. Du kannst in OpenSCAD ganze Baugruppen verschieben. In Praxis für deine Kupplung kommentierst Du mit /* und */ den Kupplungskörper aus, konstruierst in aller Ruhe die Feder auf dem Nullpunkt (Dann benötigt man nicht permanent das Maß "GrundplatteBreite" usw ). Wenn alles zur Zufriedenheit aussieht
geschweifte Klammern um den ganzen Block und dann mit vorangestelltem translate() an die gewünschte Stelle schieben.Danach gibst Du den auskommentierten Block wieder frei.

So, wenn der Kaffelevel stimmt, stimmt auch die Konstruktion:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
 

// OpenSCAD-Tutorial
// Federelement mit hull()
 
// F5 - Abzugskörper wird angezeigt
// F6 - Normale Ansicht
 

$fn=90; // make it Rund
r1=10; // Aussenradius
r2=1; // Breite
r3=1.5; // Radius Bommel am Ende
fb=40; // Federbreite ohne "Bommel"
fl=50; // Federlänge
wd=1; // Wanddicke der Feder
// bischen Rechnen
wd3=wd*3;
vl=0.001; // sehr wenig
 
//===============================
// Rechenblock
// Tangente an Kreis und Punkt
//===============================
// Namensgebung
// "l_" - Streckenlänge
// "w_" - winkel zu Punkten
// k - Punkt Kreismitte
// t - Punkt Tangente/Kreis
// p - Punkt Tangentenstart
// h - Hilfspunkt
 
// Punkte mit x,y - Kordinaten versehen
kx=0;
ky=fl-r1;
 
px=-fb/2;
py=0;
 
hx=-fb/2;
hy=fl-r1;
 
// Bekannte Strecken vermassen
l_kt=r1;
l_hp=hy;
l_hk=px;
 
// Phytagoras über Hilfspunktedreieck
l_pk=sqrt(l_hp*l_hp+l_hk*l_hk);
// Phytagoras über Innendreieck
l_pt=sqrt(l_pk*l_pk-l_kt*l_kt);
 
// Jetzt sind alle Längen bekannt
// Die Winkel
//
// Winkel Hilfsdreieck
w_hk=asin(l_hp/l_pk);
w_pt=asin(l_pt/l_pk);
//===============================
 
// Rechter und linker Abrollpunkt (Bommel)
translate([fb/2,0,0])
cylinder(wd,r=r3);
translate([fb/-2,0,0])
cylinder(wd,r=r3);
 
difference()
{
hull() // Grundkörper aus 3 Zylinder erzeugen
{
translate([0,fl-r1,0]) //oberer Radius
cylinder(wd,r=r1);
 
translate([fb/2,vl,0]) // 2 x unten
cylinder(wd,r=vl);
 
translate([fb/-2,vl,0])
cylinder(wd,r=vl);
}
 

// Abzugskörper aus 3 Zylinder erzeugen
#hull()
{
 
translate([0,fl-r1,-wd]) //oberer Radius
cylinder(wd3,r=r1-r2);
 
// Berechnug der Federdicke zum Winkel
// Der offset ist r2
off=r2;
yr=cos(90-w_pt+w_hk)*off;
xr=sin(90-w_pt+w_hk)*-off;
 

// Punkt rechts unten
translate([fb/2+xr,vl/2-yr,-wd]) // 2 x unten
cylinder(wd3,d=vl);
 
//Punkt links unten
translate([fb/-2-xr,vl/2-yr,-wd])
cylinder(wd3,d=vl);
}
}
 
 



Disclaimer:
Meine Aussagen zu den CAD-Systemen beziehen sich auf meine Art zu Arbeiten und meine Hardware. Der Austausch von Rechner oder der Person vor dem Rechner kann entscheidende Verbesserungen bringen. Und ich habe nicht immer Recht...


Gruss aus dem Bergischen Land,
Ulli


EDIT: Smilies vergessen..... und oops falsche Version der SCAD-Datei


(M)ein bisschen 3D-Druck : etwas bergisches...


Sven hat sich bedankt!
Enkelbahner  
Enkelbahner
InterRegioExpress (IRE)
Beiträge: 322
Registriert am: 09.04.2020

zuletzt bearbeitet 14.07.2021 | Top

RE: Federkörper mit hull()

#64 von Sven , 14.07.2021 12:58

Hallo Ulli,

Danke für Deine Anmerkungen und Erläuterungen.
Mir ist noch nicht klar, warum Du Dich mit den pummeligen Federenden beim Ausschneiden mit dem guten alten Pythagoras herummühst. Laß' die Dinger doch vor dem Ausschneiden weg. Wenn doch die Feder ohne weiteres mit der Punkten aufgezogen werden kann und darf, dann hast Du mit "hull()" doch eine äußere Federhülle. Um den Betrag der gewünschten horizontalen Federdicke wird der Abzugskörpger kleiner gestaltet und abgezogen. Dann bleibt die Feder in der gewünschten Form übrig. Daß bei mir "seltsamerweise" nicht alles abgezogen wurde, ist ja nicht wirklich seltsam, sondern dem um die gewünschte Federdicke reduzierten Zylinder im Federbogen geschuldet. Ohne die Reduzierung spannt er eben bei unglücklicher Abmessung der Federenden kein Dreieck mehr auf, sondern "beult" es an der Fußseite aus, der Abzugskörper ist entsprechend der Federdicke gewollt kleiner und kann es eben um den Betrag nicht ausschneiden. Deswegen wird das mit dem Abzugsdreieck nix, sondern bedarf eines Fünfecks, das eben gewollt größer wird, als der Grundkörper bei einer vernünftigen Parameterwahl sein wird. Wenn man mit dem Abzugskörper fertig ist, sind ja nach wie vor die Positionen der kleineren Zylinder bekannt, die den Fuß der Dreiecksseite für "hull()" aufspannen. An deren Position werden erneut Zylinder gesetzt mit größerem Radius und damit die Abrollpunkte dargestellt. Mit dem Ausschneiden ist man dann ja bereits fertig.

Die Notwendigkeit mit den Winkelfunktionen erkenne ich noch nicht. Das ist zwar mathematisch dann sauber beschrieben, aber meines Erachtens doch nur die Funktion von "hull()" nachgebildet oder bewiesen. Womöglich ist der Ansatz mit der Winkelberechnung zielführend, wenn die Feder in anderer Position im Raum stehen soll. Doch dann könnten die Grund- und Abzugskörper doch ebenfalls so in den Raum gestellt werden. Oder übersehe ich da etwas?
Ich möchte als Laie nicht Deinen Ansatz kritisieren, ich möchte nur verstehen, warum das mit Winkelfunktionen berechnet werden soll, wenn "hull()" das doch korrekt umspannt. *AmKopfKratzSmiley* *UnterlippeVorschieb*

Gruß
Sven


Sven  
Sven
InterRegioExpress (IRE)
Beiträge: 270
Registriert am: 30.08.2018


RE: Federkörper mit hull()

#65 von Enkelbahner , 14.07.2021 14:16

Hallo Sven,

eine gleichbleibende Armdicke ist oben einfach durch die konzentrischen Ringe der Zylinder gegeben, aber unten? Ein Versatz in X-Richtung sieht zwar aus als wenn das funktioniert, aber das Versatzmaß ist Winkelabhängig. Setzt man den Versatz im Winkel von 90° zum Armwinkel an, bleibt die Armdicke immer gleich.


SCAD-Datei zum Darstellen: Die Maße sind für ein "fb" von 80 ausgelegt (rot). Setzt man "fb" auf 120 bleibt die echte Strebendicke erhalten, der offset in der X-Achse ändert sich jedoch von 1.33 nach 1.73 (blau). Je breiter die Feder wird, um so stärker der Effekt.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
 

// OpenSCAD-Tutorial
// @Sven - Dickeproblem durch scheren
 
// fb=80 rotes Maß
// fb=120 blaues Maß
 

$fn=90; // make it Rund
r1=10; // Aussenradius
r2=1; // Breite
r3=1.5; // Radius Bommel am Ende
fb=80; // Federbreite ohne "Bommel"
fl=40; // Federlänge
wd=1; // Wanddicke der Feder
// bischen Rechnen
wd3=wd*3;
vl=0.001; // sehr wenig
 

 
// Rechenblock
// Tangente an Kreis und Punkt
// Namensgebung
// "l_" - Streckenlänge
// "w_" - winkel zu punkten
// k - Punkt Kreismitte
// t - Punkt Tangente/Kreis
// p - Punkt Tangentenstart
// h - Hilfspunkt
 
// Punkte mit x,y - Kordinaten versehen
kx=0;
ky=fl-r1;
 
px=-fb/2;
py=0;
 
hx=-fb/2;
hy=fl-r1;
 
// Bekannte Strecken vermassen
l_kt=r1;
l_hp=hy;
l_hk=px;
 
// Phytagoras über Hifspunktdreieck
l_pk=sqrt(l_hp*l_hp+l_hk*l_hk);
// Phytagoras über Innendreieck
l_pt=sqrt(l_pk*l_pk-l_kt*l_kt);
 
// Jetzt sind alle Längen bekannt
// Die Winkel
//
// Winkel Hilfsdreieck
w_hk=asin(l_hp/l_pk);
w_pt=asin(l_pt/l_pk);
 

// Demo für richtige Dicke am Armende
 
$vpt=[ 0.72, 0.57, -11.22 ];
$vpr=[ 0, 0.00, 360 ];
$vpd=17.91;
translate([fb/2,0,0])
{
bogen();
 
translate([fb/-2,0,0])
rotate([0,0,-w_pt+w_hk])
translate([fb/-2,0,0])
bogen();
 
color("red")
size_x(fb/-2,0,1.33,-1);
 
color("red")
size_x(fb/-2-1,5,1,-6);

translate([0,0,-vl])
 
color("blue")
 
{
size_x(fb/-2,0,1.73,-2);
size_x(fb/-2-1,5,1,-7);
}

}
 

 
module bogen()
{
difference()
{
hull() // Grundkörper aus 3 Punkten erzeugen
{
translate([0,fl-r1,0]) //oberer Radius
cylinder(wd,r=r1);
 
translate([fb/2,vl,0]) // 2 x unten
cylinder(wd,r=vl);
 
translate([fb/-2,vl,0])
cylinder(wd,r=vl);
}
 

// Abzugskörper aus 3 Punkten erzeugen
hull()
{
 
translate([0,fl-r1,-wd]) //oberer Radius
cylinder(wd3,r=r1-r2);
 
// Berechnug der Federdick zum Winkel
// Der offset ist r1-r2
off=r2;
yr=cos(90-w_pt+w_hk)*off*1;
xr=sin(90-w_pt+w_hk)*-off*1;

echo("off:",off);
echo(xr);
// Punkt rechts unten
translate([fb/2+xr,vl/2-yr,-wd]) // 2 x unten
cylinder(wd3,d=vl);
 
//Punkt links unten
translate([fb/-2-xr,vl/2-yr,-wd])
cylinder(wd3,d=vl);
}
}
}
 

 

 
// Bemasungsmodul für x-achse
// Grösse der Schrift passt sich automatisch an
module size_x(x,y,l,off=0)
{
r=0.0051*$vpd;
lx=r*3;
ro=r/4;
 
if(off>0)
{
translate([x,y,0])
rotate([-90,0,0])
cylinder(abs(off)+lx,ro,ro);
 
translate([x+l,y,0])
rotate([-90,0,0])
cylinder(abs(off)+lx,ro,ro);
 

}
 
// Hilfslienien
if(off<0)
{
translate([x,y+off-lx,0])
rotate([-90,0,0])
cylinder(abs(off)+lx,ro,ro);
 
translate([x+l,y+off-lx,0])
rotate([-90,0,0])
cylinder(abs(off)+lx,ro,ro);
 
}
 
// Bemassungslinie
// mit Pfeilen
translate([0,off,0])
{
translate([x+lx,y,0])
rotate([0,90,0])
cylinder(l-(2*lx),r/2,r/2);
 
translate([x,y,0])
rotate([0,90,0])
cylinder(lx,0,r*1.7);
 
translate([x+l-lx,y,0])
rotate([0,90,0])
cylinder(lx,r*1.7,0);
 
// Texteintrag
// Font Linux-System
translate([x+(l/2),y-(r*3),0])
linear_extrude(height = 0.3) {
text(str(l), size = r*3,
font = "Century Schoolbook",
halign = "center", valign = "center", $fn = 16);
}
}
}
 

 

 



Disclaimer:
Meine Aussagen zu den CAD-Systemen beziehen sich auf meine Art zu Arbeiten und meine Hardware. Der Austausch von Rechner oder der Person vor dem Rechner kann entscheidende Verbesserungen bringen. Und ich habe nicht immer Recht...


Gruss aus dem Bergischen Land,
Ulli


(M)ein bisschen 3D-Druck : etwas bergisches...


Sven hat sich bedankt!
Enkelbahner  
Enkelbahner
InterRegioExpress (IRE)
Beiträge: 322
Registriert am: 09.04.2020

zuletzt bearbeitet 14.07.2021 | Top

Tutorial Stromlinienlok mit hull() Teil 1

#66 von Enkelbahner , 30.07.2021 14:52

Hallo in die Runde,

da es ja hier etwas ruhig geworden ist und Claus seine Fortsetzung im OpenSCAD-Tutorial an seine Bauberichte gekoppelt hat, möchte ich nochmals ein Tutorial hereinstellen.

Wir bauen den Body einer Stromlienienlok. Alles was man dazu in OpenSCAD können muss hat Claus hier im Trööt oder bei seinem Packwagenprojekt bereits erklärt, hinzu kommt noch von mir das hull() (Spannbetttuch) aus #46. Da der Maststab 1:1 ist muss man die Größenanpassung (drittes Icon von links unter der 3D-Ansicht, Symbol Lupe mit drei Winkeln) im 3D-Fenster von OpenSCAD häufig bemühen, sonst bleibt der Bildschirm leer. Es wird mehrere Teile geben:

1 - der Maschinenraum.
2 - Grundform des Führerstandes sehr einfach gehalten
3 - Das Ei - eine Betrachtung in OpenScad
4 - Grundform des Führerstandes jetzt mit der richtigen Eierform
4a - EXTRA: Wie höhlt man eine Eierform aus ?
5 - Fenster + Zusammenbau

bei weiterem Interesse:
?? - Details wie Lüfter, Türen usw.

Zum Modell:
Es wird kein Finescale-Modell und auch nur mit groben Massen versehen, aber es geht ja um das "wie setzt man sowas in OpenSCAD um". Die Grundmasse sind aus dem Internet, die Ei-Form habe ich per in OpenSCAD eingeblendetem Foto abgestimmt. Den Winkel für die obere Dachlüfterreihe habe ich auf 10° gesetzt. Das Model ist nicht hohl, die Arbeit spare ich mir, aber wenn man die Form außen hinbekommt kann man auch eine Abzugsform für Innen konstruieren. Wie man das angehen kann zeige ich in einem Extra. Der OpenSCAD Text baut pro Bau-Abschnitt nicht zu 100% auf dem Vorgängertext auf, da ich für die Glasmodelle leichte Abwandlungen brauche. Es gibt auch keinen 3D-Druck (Bei 1:1 ist das ja ein echter Job), also hier nur die reine Konstruktion. Ich hoffe ich habe pro Abschnitt genug Erklärungen in den Text gesetzt, so das alle folgen können.

Nun geht es aber los:

1 - der Maschinenraum
Bild entfernt (keine Rechte)
Der Maschinenraum besteht nur aus 3 Elementen: 2 Zylindern(Rot) und einem großen Kubus(Blau). Mit hull (Gelb) wird daraus der Grundkörper, einfacher geht das nicht.

Bild entfernt (keine Rechte)

Disclaimer:
Meine Aussagen zu den CAD-Systemen beziehen sich auf meine Art zu Arbeiten und meine Hardware. Der Austausch von Rechner oder der Person vor dem Rechner kann entscheidende Verbesserungen bringen. Und ich habe nicht immer Recht...


Gruss aus dem Bergischen Land,
Ulli


...und das ganze zum Nachbasteln:


(M)ein bisschen 3D-Druck : etwas bergisches...

Dateianlage:
Sie haben nicht die nötigen Rechte, um die angehängten Dateien zu sehen

RReinehr und derOlli haben sich bedankt!
Enkelbahner  
Enkelbahner
InterRegioExpress (IRE)
Beiträge: 322
Registriert am: 09.04.2020


Tutorial Stromlinienlok mit hull() Teil 2

#67 von Enkelbahner , 30.07.2021 15:02

Hallo in die Runde,

und weiter geht es mit dem Führerstand
Bild entfernt (keine Rechte)

2 - Grundform des Führerstandes - sehr einfach gehalten
Der Führerstand besteht in der Grundform aus einem oberen Torus (Ring, hier rot), einer unteren Ellipse (grün) und der Rückwand (blau) in Form des Maschinenbodies. Die Rückwand erzeugen wir in dem wir den Maschinenraum per scale()-Befehl zu einer Folie pressen, hier müssen wir nichts konstruieren, den Maschinenraum gibt es ja schon.
Bild entfernt (keine Rechte)
Da Runde Teile in OpenSCAD in der Regel ein Vollkreis sind, schneiden wir ab der Rückwand alles überschüssige ab. Das ist der dicke, rote Kubus.
Bild entfernt (keine Rechte)


Disclaimer:
Meine Aussagen zu den CAD-Systemen beziehen sich auf meine Art zu Arbeiten und meine Hardware. Der Austausch von Rechner oder der Person vor dem Rechner kann entscheidende Verbesserungen bringen. Und ich habe nicht immer Recht...


Gruss aus dem Bergischen Land,
Ulli


(M)ein bisschen 3D-Druck : etwas bergisches...

Dateianlage:
Sie haben nicht die nötigen Rechte, um die angehängten Dateien zu sehen

RReinehr, Claus60, derOlli, hubedi und Bodo haben sich bedankt!
Enkelbahner  
Enkelbahner
InterRegioExpress (IRE)
Beiträge: 322
Registriert am: 09.04.2020


Tutorial Stromlinienlok mit hull() Teil 3

#68 von Enkelbahner , 31.07.2021 12:28

Hallo in die Runde,
nun zum kompliziertesten Teil der Konstruktion:

3 - Das Ei ( eine Betrachtung in OpenSCAD )
Hier stellen sich zwei Fragen: Wie kommt man zu einem CAD-Ei und wie passt man das an das Führerhaus an. Ein Ei ist scheinbar einfach: eine Kugel wird in der Mitte geteilt und beide Hälften in der Länge unterschiedlich mit scale() vergrößert. Aber es gibt auch ein "korrektes CAD-Ei" (): Das "ovus". Manche 3D-Systeme kennen das als Grundkörper, bei OpenSCAD gibt es das nicht. Eier aus sphere() haben immer die gleiche Form da Ober- und Unterhälfte den gleichen Radius haben. Ovus-Eier werden durch 2 Radien und deren Abstand definiert, so hat man mehr Parameter in der Formgestaltung als beim Spheren-Ei (nur 1 Radius und 1 scale()-Faktor).
Hier einmal der Unterschied der Form (blau sind ovus-Eier, orange das Ei aus der sphere):
Bild entfernt (keine Rechte)

Die Konstruktion des Ovus ist in OpenScad auch recht kompliziert, deshalb besteht meine Eiform aus zwei Kugelhälften.
Mein einfaches Ei sieht so aus:
Bild entfernt (keine Rechte)
Es wird durch eine untere und obere Hälfte erzeugt, die noch gekappt werden muss damit es nicht in die Dachrundung rutscht. Per scale()-Befehl wird die Breite angeglichen.
Bild entfernt (keine Rechte)
Disclaimer:
Meine Aussagen zu den CAD-Systemen beziehen sich auf meine Art zu Arbeiten und meine Hardware. Der Austausch von Rechner oder der Person vor dem Rechner kann entscheidende Verbesserungen bringen. Und ich habe nicht immer Recht...


Gruss aus dem Bergischen Land,
Ulli

EDIT: Anhang vergessen ...


(M)ein bisschen 3D-Druck : etwas bergisches...

Dateianlage:
Sie haben nicht die nötigen Rechte, um die angehängten Dateien zu sehen

RReinehr, derOlli und hubedi haben sich bedankt!
Enkelbahner  
Enkelbahner
InterRegioExpress (IRE)
Beiträge: 322
Registriert am: 09.04.2020

zuletzt bearbeitet 31.07.2021 | Top

Tutorial Stromlinienlok mit hull() Teil 4

#69 von Enkelbahner , 01.08.2021 13:15

Hallo in die Runde,

da wir ja jetzt wissen wie ein Ei geht, bauen wir das in den Führerstand ein.

4 - Grundform des Führerstandes jetzt mit der richtigen Eierform
Unser Ei aus dem Kapitel davor passen wir jetzt in den Führerstand ein. Die Qualität der Rundungen hängt stark von $fn ab, da es hier um eine komplexe Fläche geht, die mit wachsender Facettenzahl natürlich deutlich besser berechnet wird. Jedoch sollte man sich vorsichtig an höhere Werte herantasten, da es sich um eine Kugel handelt wird der Rechenbedarf durch $fn quadratisch wachsen. Bei mir ergeben $fn=128 schon eine gute Rundung bei erträglicher Rechenzeit, aber das hängt sehr stark vom Rechner ab.
Zuerst einmal die Lage der Stützkörper für hull():
Bild entfernt (keine Rechte)
und so sollte es aussehen dann Aussehen:
Bild entfernt (keine Rechte)
Die Fensterfläche sieht jetzt unförmig aus, aber wer hat schon mal eine Lok mit zu gespachtelten Fenstern gesehen? Das richtige "Gesicht" kommt erst mit Fenster und Lampen im nächsten Teil.


Bild entfernt (keine Rechte)

Disclaimer:
Meine Aussagen zu den CAD-Systemen beziehen sich auf meine Art zu Arbeiten und meine Hardware. Der Austausch von Rechner oder der Person vor dem Rechner kann entscheidende Verbesserungen bringen. Und ich habe nicht immer Recht...


Gruss aus dem Bergischen Land,
Ulli


(M)ein bisschen 3D-Druck : etwas bergisches...

Dateianlage:
Sie haben nicht die nötigen Rechte, um die angehängten Dateien zu sehen

hubedi, RReinehr und Bodo haben sich bedankt!
Enkelbahner  
Enkelbahner
InterRegioExpress (IRE)
Beiträge: 322
Registriert am: 09.04.2020


RE: Tutorial Stromlinienlok mit hull() Teil 4

#70 von RReinehr , 03.08.2021 21:09

Hallo in die Runde,

ich habe das ganze mal zusammengebaut als Gehäuse für E-Lok oder Diesellok!!
War nicht besonders schwierig, etwas rotieren und verschieben, dann hats gepasst!Bild entfernt (keine Rechte)

Dateianlage:
Sie haben nicht die nötigen Rechte, um die angehängten Dateien zu sehen

Enkelbahner hat sich bedankt!
RReinehr  
RReinehr
RegionalExpress (RE)
Beiträge: 75
Registriert am: 14.05.2020
Spurweite H0
Stromart DC


RE: Tutorial Stromlinienlok mit hull() Teil 4

#71 von derOlli , 03.08.2021 21:13

Na da bin ich mal gespannt wie das Teil gedruckt aussieht.


Gruß von Olli


Über einen Besuch in meinem Kellerland würde ich mich freuen:
viewtopic.php?f=64&t=110273


 
derOlli
Metropolitan (MET)
Beiträge: 3.620
Registriert am: 14.01.2014
Ort: Berlin
Spurweite H0
Steuerung OpenDCC
Stromart DC, Digital


RE: Tutorial Stromlinienlok mit hull() Teil 4

#72 von RReinehr , 03.08.2021 21:28

Hi, Olli!
das wird wohl noch ne Weile dauern, da ich erst eine Halle bauen muss um den passenden Drucker unterzubringen!!

Bauplan, Bauantrag und Genehmigung dauern halt etwas länger!

ne, werde vielleicht versuchen, das ganze mal auf H0 umzumodeln

Gruß RReinehr


Enkelbahner hat sich bedankt!
RReinehr  
RReinehr
RegionalExpress (RE)
Beiträge: 75
Registriert am: 14.05.2020
Spurweite H0
Stromart DC


RE: Tutorial Stromlinienlok mit hull() Teil 4

#73 von derOlli , 03.08.2021 21:30

Zitat von RReinehr im Beitrag #72
ne, werde vielleicht versuchen, das ganze mal auf H0 umzumodeln


Ich dachte das ist H0


Gruß von Olli


Über einen Besuch in meinem Kellerland würde ich mich freuen:
viewtopic.php?f=64&t=110273


 
derOlli
Metropolitan (MET)
Beiträge: 3.620
Registriert am: 14.01.2014
Ort: Berlin
Spurweite H0
Steuerung OpenDCC
Stromart DC, Digital


Tutorial Stromlinienlok mit hull() Teil 4a

#74 von Enkelbahner , 06.08.2021 17:57

Hallo in die Runde,

weiter geht es mit einem EXTRA zur Lok.

4a - EXTRA: Wie höhlt man eine Eierform aus ?

Ein komplexes Thema, deshalb auch als Extra. Bisher war das alles recht einfach: Mit nur ca. 12 Grundkörper, die wir gedreht, gestreckt und verschoben haben entstand die Rohkarosse einer Lok. 12 Grundkörper sind nichts in OpenSCAD (Der Servohalter von Claus hatte ca. genau so viele). Auch die noch fehlenden Fenster sind nur weitere 8 Grundkörper die dazu kommen. Also vom Aufwand her eine Konstruktion die mit etwas Routine unter 30 Minuten zu erledigen ist (ohne Abmassermittlung !). Das Schreiben des Tutorials und die Erzeugung der DEMO-Files und Bilder ist da deutlich mehr Arbeit.

Für das Aushöhlen gibt es generell zwei Ansätze: den praktischen, aber nicht ganz korrekten Weg und den aufwändigen, aber dafür korrekten Weg. Ich zeige beide auf und lasse die Entscheidung beim Leser: Funktionierender Pfusch, der schnell erstellt ist, oder korrektes CAD mit dem dazu gehörenden Aufwand. Der Lösungsweg per minkowski() ist extrem abstrakt, deshalb keine Panik wenn er nicht direkt verstanden wird, sondern einfach weiterlesen. Der minkowski() Befehl benötigt immer viel Kopfkino um zu verstehen was da passiert. Ich habe ihn nur der Vollständigkeit halber hier eingefügt.

Hier mal einige Möglichkeiten:
1) Konstruktion eines Abzugskörpers - viel Arbeit, liefert jedoch ein 100% exaktes Ergebnis, bedeutet aber doppelte Arbeit bei der Konstruktion.

2) Verkleinerung des Körpers auf Masse des Abzugskörpers mit minkowski(). Bei richtiger Formgebung des Minkowskikörpers ergibt auch das eine 100% korrekte Lösung - eine eher theoretische Möglichkeit bei dieser komplexen Form kann die Berechnung eine Ewigkeit dauern. Abhilfe schafft den Abzugskörper mit extrem niedrigem $fn zu generieren (hier $fn=16), das wird dann aber im Innenraum eine kantige Angelegenheit. Obwohl ich persönlich kein Freund von der minkowski() Funktion bin (einfach zu langsam und Speicher fressend), habe ich die Konstruktion mit "negativen" minkowski() im Anhang dabei. Da es kein "negatives minkowski()" im OpenSCAD gibt, dürfen wir es selbst bauen. Der Weg für ein "negatives minkowski()" ist im groben folgender:

- von der mit minkowski() zu bearbeitende Form (blau) wird ein Negativ (grün) erstellt (so etwas wie eine Gussform).
Bild entfernt (keine Rechte)
- dieses Negativ (grün) wird dann per minkowski() mit dem Wert der Wandstärke (gelbe Kugel) aufgepolstert und ergibt eine neue Gussform (rot)
Bild entfernt (keine Rechte)
- aus der aufgepolsterten Gussform (rot) und der Ursprungsform (blau) wird dann wieder ein Positiv (braun) erstellt, das um den minkowski()-Wert (die Wanddicke) gleichmäßig verkleinert wurde.
Bild entfernt (keine Rechte)
- dieser Körper dient dann als Abzugskörper für den Innenraum.
Bild entfernt (keine Rechte)
3) oder Verkleinerung des Grundkörpers durch scale() auf die Masse eines Abzugskörpers:

Um für einen Druck auf eine einigermaßen gleiche Wanddicke zu kommen muss man die Schrumpfung der x,y und z-Achse einzeln Berechnen. Der resultierende Körper hat nicht unbedingt überall eine konstante Wanddicke, das hält sich in unserem Fall aber in Grenzen von ca. 10%. Ich habe das mal mit einem Schnitt dargestellt und die Schnittkante rot eingefärbt. Die blauen Kreise stellen die gewünschte Wanddicke dar. Während im oberen Bereich diese genau getroffen wird sackt sie links unten leicht ab. Hier muss am Ende jeder selbst entscheiden, welche Genauigkeit benötigt wird und ob sich der Arbeitsaufwand für einen konstruierten Abzugkörper lohnt. Im Bereich des Mittelteils der Lok (Maschinenraum) tritt das Problem aufgrund der einfachen Geometrie nicht auf, hier kann man problemlos mit einem geschrumpften Körper arbeiten. Für Führerstand und Maschinenraum gilt jedoch, dass die Wand am Dachradius dicker wird.
Bild entfernt (keine Rechte)

Disclaimer:
Meine Aussagen zu den CAD-Systemen beziehen sich auf meine Art zu Arbeiten und meine Hardware. Der Austausch von Rechner oder der Person vor dem Rechner kann entscheidende Verbesserungen bringen. Und ich habe nicht immer Recht...
Gruss aus dem Bergischen Land,

Ulli


(M)ein bisschen 3D-Druck : etwas bergisches...

Dateianlage:
Sie haben nicht die nötigen Rechte, um die angehängten Dateien zu sehen

RReinehr, hubedi, derOlli und Kriwatsch haben sich bedankt!
Enkelbahner  
Enkelbahner
InterRegioExpress (IRE)
Beiträge: 322
Registriert am: 09.04.2020


RE: Tutorial Stromlinienlok mit hull() Teil 4a

#75 von RReinehr , 10.08.2021 21:31

Hallo, guten Abend in die Runde

Ich habe den Führerstand und den Motorraum mal zusammengebaut und ausgehöhlt, damit man Platz für Maschinen und sonstige Einbauten hat!

Bild entfernt (keine Rechte)

Gruß RReinehr

Dateianlage:
Sie haben nicht die nötigen Rechte, um die angehängten Dateien zu sehen

hubedi hat sich bedankt!
RReinehr  
RReinehr
RegionalExpress (RE)
Beiträge: 75
Registriert am: 14.05.2020
Spurweite H0
Stromart DC


   

Universal- Loklaterne für Standard 3mm LED
Advent, Advent (OpenSCAD)

  • Ähnliche Themen
    Antworten
    Zugriffe
    Letzter Beitrag
Xobor Einfach ein eigenes Forum erstellen
Datenschutz