Просмотр исходного кода

Most of a carrier and animation

Zach Isbach 6 лет назад
Родитель
Сommit
d8dc7ec8b9
3 измененных файлов с 102 добавлено и 27 удалено
  1. 6 4
      Guillotine/assembly.scad
  2. 74 11
      Guillotine/blade.scad
  3. 22 12
      Guillotine/frame.scad

+ 6 - 4
Guillotine/assembly.scad

@@ -1,3 +1,7 @@
+clean_buffer = 0.01;
+$fs = 0.2;
+//$t = 0.0;
+
 include <blade.scad>;
 include <frame.scad>;
 
@@ -5,10 +9,8 @@ color([0,0.5,0.4,1]) {
 	frame();
 }
 
-color([0,0.5,0.7,1]) {
+translate([8 + ($t * 30), 4.5, frame_depth]) {
 	rotate(-15) {
-	translate([8, 2, frame_depth]) {
-		blade();
-	}
+		blade_on_sled();
 	}
 }

+ 74 - 11
Guillotine/blade.scad

@@ -1,13 +1,27 @@
-razor_carrier_width = 39.5;
+razor_carrier_width = 39.7;
 razor_carrier_depth = 1.0;
 razor_carrier_height = 7.0;
-razor_blade_width = 38.8;
+razor_blade_width = 38.9;
 razor_blade_depth = 0.3;
 razor_blade_height = 19.6 - razor_carrier_height;
-razor_notch_width = 32.0;
+razor_notch_width = (razor_blade_width - 32.0) / 2;
 razor_notch_radius = 2.9 / 2;
 razor_notch_height = 8.5;
 
+sled_razor_clearance = 0.2;
+sled_razor_inset = 4.0;
+sled_nib_width = (razor_notch_width * 1.0) - (0*sled_razor_clearance);
+sled_nib_height = razor_notch_radius * 0.75;
+sled_slot_width = razor_carrier_width + sled_razor_clearance;
+sled_slot_height = razor_notch_height + (sled_nib_height / 2) + razor_notch_radius - sled_razor_inset;
+sled_slot_depth = razor_carrier_depth + sled_razor_clearance;
+sled_header_height = 5;
+sled_header_width = sled_slot_height + 1;
+sled_side_width = 2.5;
+sled_height = sled_slot_height + sled_header_height;
+sled_width = sled_slot_width + sled_side_width * 2;
+sled_depth = razor_carrier_depth + 2;
+
 module blade() {
 	cube([razor_carrier_height, razor_carrier_width, razor_carrier_depth]);
 	translate([
@@ -19,16 +33,65 @@ module blade() {
 			cube([razor_blade_height, razor_blade_width, razor_blade_depth]);
 			translate([
 				razor_notch_radius + (razor_notch_height - razor_carrier_height),
-				razor_notch_radius / 2,
-				-(razor_blade_depth)
+				razor_notch_width - razor_notch_radius,
+				-razor_blade_depth
+			]) {
+				translate([-razor_notch_radius, -razor_notch_width, 0]) {
+					cube([razor_notch_radius * 2, razor_notch_width, razor_carrier_depth]);
+				}
+				cylinder(h = razor_carrier_depth,
+					r1 = razor_notch_radius, r2 = razor_notch_radius);
+			}
+			translate([
+				razor_notch_radius + (razor_notch_height - razor_carrier_height),
+				razor_blade_width - razor_notch_width + razor_notch_radius,
+				-razor_blade_depth
 			]) {
-					cylinder($fn = 36, h = razor_carrier_depth,
-						r1 = razor_notch_radius, r2 = razor_notch_radius);
-						translate([0, razor_blade_width - razor_notch_radius, 0]) {
-							cylinder($fn = 36, h = razor_carrier_depth,
-								r1 = razor_notch_radius, r2 = razor_notch_radius);
-						}
+				translate([-razor_notch_radius, 0, 0]) {
+					cube([razor_notch_radius * 2, razor_notch_width, razor_carrier_depth]);
+				}
+				cylinder(h = razor_carrier_depth,
+					r1 = razor_notch_radius, r2 = razor_notch_radius);
 			}
 		}
 	}
 }
+
+module sled() {
+	difference() {
+		cube([sled_header_height, sled_width, sled_depth]);
+		translate([
+			sled_header_height - sled_razor_inset,
+			sled_side_width, (sled_depth / 2) - (sled_slot_depth / 2)
+		]) {
+			cube([sled_razor_inset + clean_buffer, sled_slot_width, sled_slot_depth]);
+		}
+	}
+	translate([sled_header_height, 0, 0]) {
+		cube([sled_slot_height, sled_side_width, sled_depth]);
+		translate([sled_slot_height - sled_nib_height, sled_side_width, 0]) {
+			cube([sled_nib_height, sled_nib_width, sled_depth]);
+		}
+	}
+	translate([sled_header_height, sled_slot_width + sled_side_width, 0]) {
+		cube([sled_slot_height, sled_side_width, sled_depth]);
+		translate([sled_slot_height - sled_nib_height, -sled_nib_width, 0]) {
+			cube([sled_nib_height, sled_nib_width, sled_depth]);
+		}
+	}
+}
+
+module blade_on_sled() {
+	color([0, 0.3, 0.7, 1]) {
+		sled();
+	}
+	translate([
+		sled_height - sled_slot_height - sled_razor_inset,
+		(sled_width - razor_carrier_width) / 2,
+		(sled_depth / 2) - (razor_carrier_depth / 2)
+	]) {
+		color([0.6, 0.3, 0, 1]) {
+			blade();
+		}
+	}
+}

+ 22 - 12
Guillotine/frame.scad

@@ -1,16 +1,17 @@
-header_width = 32.0;
-header_height = 11.3;
-footer_width = 33.6;
-footer_height = 4.0;
-riser_width = 3.5;
-riser_height = 25.7;
-neck_radius = 11.0 / 2;
-stock_width = 23.0;
-stock_height = 15.2;
-stock_foot_height = 3.7;
 frame_depth = 3.3;
+stock_inset_height = 0.5;
+stock_inset_depth = 1.0;
 
-clean_buffer = 0.01;
+header_width = 42.0;
+header_height = header_width * 0.2;
+footer_width = header_width * 1.05;
+footer_height = footer_width * 0.1;
+riser_width = header_width * 0.1;
+riser_height = header_height * 4.5;
+stock_width = header_width * 0.67;
+stock_height = stock_width * 0.67;
+stock_foot_height = footer_height * 1.25;
+neck_radius = stock_width / 5;
 
 header_riser_offset = ((header_width - stock_width) / 2) - riser_width;
 
@@ -26,9 +27,18 @@ module frame() {
 		difference() {
 		cube([stock_height, stock_width, frame_depth]);
 		translate([stock_height / 2, stock_width / 2, -clean_buffer]) {
-			cylinder($fn = 36, h = frame_depth + (clean_buffer * 2),
+			cylinder(h = frame_depth + (clean_buffer * 2),
 				r1 = neck_radius, r2 = neck_radius);
 		}
+		translate([stock_height / 2, 0, frame_depth - stock_inset_depth]) {
+			cube([stock_inset_height, stock_width, stock_inset_depth + clean_buffer]);
+		}
+		translate([0, 0, frame_depth - stock_inset_depth]) {
+			cube([stock_height, stock_inset_height, stock_inset_depth + clean_buffer]);
+		}
+		translate([0, stock_width - stock_inset_height, frame_depth - stock_inset_depth]) {
+			cube([stock_height, stock_inset_height, stock_inset_depth + clean_buffer]);
+		}
 		}
 	}
 	translate([