| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- /* [OpenSCAD] */
- $fn=60; // [30:6:180]
- /* [Profil] */
- // Aluprofil (quadratisch)
- Raster = 20; // [20,30]
- // Gewindebohrung metrisch
- Schraube = 5; // [5,6,8]
- /* [Verbinder] */
- // Winkel der Verbindung
- Winkel = 90; // [30:5:180]
- // Schritte in der Unterteilung
- Steps = 6; // [1:1:60]
- // Ende-zu-Ende (an) oder Ende-in-Führungsnut (aus)
- End2End = true;
- // Fuehrungsnuten "inline" (an) oder "quer" (aus)
- F_Inline = true;
- // Fuehrungsnuten "T" Fuß in der Nuten
- F_TFoot = false;
- // Mit Bohrung zum Festschrauben?
- Bohrung = false;
- // Tiefe der Führung in den Nuten
- Nutentiefe = 3; // [2,3,4,5]
- // Modell für den Slicer auf die Seite legen
- Kippen = true;
- /* [Hidden] */
- Toleranz = 0.2;
- Fuehrung=1.5;
- module plate(height=2) {
- delta=Raster/2-1;
- hull() {
- for (i=[0,90,180,270]) {
- rotate([0,0,i]) translate([delta,delta,0]) cylinder(d=2, h=height);
- }
- }
- }
- module endcap() {
- // Grundplatte
- plate();
- // Führungsnupsis in den Nuten (Halbkreise)
- intersection() {
- for (i=[0,90,180,270]) {
- rotate([0,0,i]) translate([Raster/2,0,-Nutentiefe/2]) cylinder( d=Schraube, h=Nutentiefe, center=true );
- }
- cube(Raster, center=true);
- }
- // Innen-Nippel D=80% von Bohrung < M5 Kernloch, doppelt so lang wie die Führungen außen
- translate([0,0,-Nutentiefe]) cylinder(d=Schraube*4/5, h=2*Nutentiefe, center=true);
- }
- module nutenfuehrung() {
- if (F_TFoot==true) {
- // T Fuehrung in Nut mit 2.2mm Wandbreite des Profils.
- translate([(Raster-Schraube)/2,0,-1.1]) union() {
- cube( [Schraube,Schraube-Toleranz,2.2], center=true );
- translate([0,0,-2.2]) cube( [Schraube,Schraube-Toleranz+3,2.2], center=true );
- }
- }
- else {
- translate([(Raster-Schraube)/2,0,-Fuehrung/2]) cube( [Schraube,Schraube-Toleranz,Fuehrung], center=true );
- }
- }
- module nutencap() {
- plate();
- if (F_Inline==true) {
- for (i=[0,180]) {
- rotate([0,0,i]) nutenfuehrung();
- }
- }
- else {
- for (i=[90,270]) {
- rotate([0,0,i]) nutenfuehrung();
- }
- }
- }
- module fill_plate() {
- translate([10,0,0]) plate(0.01);
- }
- module fuellung(angle) {
- delta_angle = Winkel/Steps;
- hull() {
- rotate([0,-angle*delta_angle,0]) fill_plate();
- rotate([0,-(angle-1)*delta_angle,0]) fill_plate();
- }
- }
- // Auf die Seite legen, dann wird es beim Slicen einfacher
- turn90degree=(Kippen==true)?90:0;
- rotate([turn90degree,0,0])
- difference() {
- union() {
- color("red") translate([Raster/2,0,-2]) {
- if (End2End==true) {
- endcap();
- }
- else {
- nutencap();
- }
- }
- color("orange") rotate([0,-Winkel,0]) mirror([0,0,1]) translate([Raster/2,0,-2]) endcap();
- color("green") for ( i = [1:1:Steps] ) fuellung(i);
- }
- if (Bohrung==true && End2End==false && F_TFoot==false) {
- translate([Raster/2,0,0]) {
- mirror([0,0,1]) cylinder(d=Schraube+Toleranz, h=Schraube, center=true);
- translate([0,0,Toleranz]) cylinder(d=11, h=Raster);
- }
- }
- }
|