mirror of
				https://github.com/revarbat/snappy-reprap.git
				synced 2025-10-30 15:16:44 -07:00 
			
		
		
		
	Centralized slop setting, and improved slop calibration model.
This commit is contained in:
		
							
								
								
									
										23
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										23
									
								
								Makefile
									
									
									
									
									
								
							| @@ -16,12 +16,31 @@ include $(wildcard *.deps) | ||||
| 	${OPENSCAD} -m make -o $@ -d $@.deps $< | ||||
|  | ||||
| clean: | ||||
| 	rm -f ${TARGETS} *.deps | ||||
| 	rm -f ${TARGETS} *.deps snappy_rot*.png | ||||
|  | ||||
| rendering: | ||||
| 	${OPENSCAD} -o wiki/snappy_full.png --imgsize=3200,3200 --projection=p --csglimit=100000 --camera=-100,200,150,65,0,120,3500 full_assembly.scad | ||||
| 	${OPENSCAD} -o wiki/snappy_full.png --imgsize=3200,3200 --projection=p --csglimit=100000 \ | ||||
| 	    --camera=0,0,160,65,0,120,3500 full_assembly.scad | ||||
| 	cp wiki/snappy_full.png wiki/snappy_small.png | ||||
| 	sips -Z 800 wiki/snappy_full.png | ||||
| 	sips -Z 200 wiki/snappy_small.png | ||||
|  | ||||
|  | ||||
| ROTFILES=$(shell seq -f 'snappy_rot%03g.png' 0 15 359.99) | ||||
|  | ||||
| ${ROTFILES}: full_assembly.scad | ||||
| 	${OPENSCAD} -o $@ --imgsize=1280,1280 --projection=p --csglimit=100000 \ | ||||
| 	    --camera=0,0,160,65,0,$(subst snappy_rot,,$(subst .png,,$@)),3500 \ | ||||
| 	    full_assembly.scad | ||||
| 	sips --deleteColorManagementProperties -Z 640 $@ | ||||
|  | ||||
| wiki/snappy_animated.gif: ${ROTFILES} | ||||
| 	convert -delay 33 -loop 0 ${ROTFILES} wiki/snappy_animated.gif | ||||
|  | ||||
| wiki/snappy_anim_small.gif: ${ROTFILES} | ||||
| 	convert -resize 200x200 -delay 33 -loop 0 ${ROTFILES} wiki/snappy_anim_small.gif | ||||
|  | ||||
| animation: wiki/snappy_animated.gif wiki/snappy_anim_small.gif | ||||
|  | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -1,3 +1,4 @@ | ||||
| include <config.scad> | ||||
| use <GDMUtils.scad> | ||||
|  | ||||
|  | ||||
| @@ -35,7 +36,7 @@ module acme_threaded_nut( | ||||
| 	h=10, | ||||
| 	threading=3.175, | ||||
| 	thread_depth=1, | ||||
| 	slop=0.25 | ||||
| 	slop=printer_slop | ||||
| ) { | ||||
| 	difference() { | ||||
| 		cylinder(r=od/2/cos(30), h=h, center=true, $fn=6); | ||||
|   | ||||
							
								
								
									
										11
									
								
								config.scad
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								config.scad
									
									
									
									
									
								
							| @@ -5,7 +5,6 @@ platform_length = 110; // mm.  Must be a multiple of rack_tooth_size. | ||||
| platform_width  = 150; // mm | ||||
| platform_height =  40; // mm | ||||
| platform_thick  =   7; // mm | ||||
| rack_tooth_size =   5; // mm per tooth. | ||||
|  | ||||
| rail_length  = 150;    // mm | ||||
| rail_height  =  50;    // mm | ||||
| @@ -21,7 +20,11 @@ roller_angle =  30;    // degrees | ||||
|  | ||||
| joiner_angle =  30;    // degrees | ||||
| joiner_width =  10;    // mm | ||||
| joiner_slop  =   0.5;  // mm | ||||
|  | ||||
| rack_tooth_size  =  5; // mm per tooth. | ||||
| set_screw_size   =  3; // mm size of set screw in drive gears, couplers, etc | ||||
| motor_shaft_size =  5; // mm | ||||
| motor_shaft_flatted = false;  // boolean | ||||
|  | ||||
| // Currently configured for 3/8" ACME threaded rod and matching 11/16" nut | ||||
| lifter_rod_diam   =   9.5; // mm | ||||
| @@ -30,6 +33,10 @@ lifter_nut_size   =  17.4; // mm | ||||
| lifter_nut_thick  =   9.3; // mm | ||||
| lifter_thread_size =  3.175; // mm lift per revolution | ||||
|  | ||||
| // This is the slop needed to make parts fit more exactly, and may be | ||||
| // printer dependant.  Printing a slop calibration plate should help | ||||
| // dial this setting in for your printer. | ||||
| printer_slop =   0.25; // mm | ||||
|  | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -5,14 +5,15 @@ use <publicDomainGearV1.1.scad> | ||||
|  | ||||
| module drive_gear() { | ||||
| 	h = 10; | ||||
| 	shaft = 5.4; | ||||
| 	shaft = motor_shaft_size + 2 * printer_slop; | ||||
|  | ||||
| 	color("Salmon") render(convexity=10) union() { | ||||
| 		difference() { | ||||
| 			// Herringbone gear | ||||
| 			mirror_copy([0, 0, 1]) { | ||||
| 				translate([0, 0, h/4]) { | ||||
| 					gear ( | ||||
| 						mm_per_tooth    = 5, | ||||
| 						mm_per_tooth    = rack_tooth_size, | ||||
| 						number_of_teeth = 9, | ||||
| 						thickness       = h/2, | ||||
| 						hole_diameter   = shaft, | ||||
| @@ -29,7 +30,7 @@ module drive_gear() { | ||||
| 		difference() { | ||||
| 			union() { | ||||
| 				// Fix up gear weirdness with solid center. | ||||
| 				cylinder(h=h, r=5.5, center=true); | ||||
| 				cylinder(h=h, r=shaft, center=true); | ||||
|  | ||||
| 				// Base | ||||
| 				translate([0, 0, -(h+11)/2]) | ||||
| @@ -40,23 +41,25 @@ module drive_gear() { | ||||
| 				// Shaft hole | ||||
| 				cylinder(h=(h+5)*3, r=shaft/2, center=true, $fn=16); | ||||
|  | ||||
| 				// Shaft flat side. | ||||
| 				translate([1.4*shaft, 0, 0]) | ||||
| 					cube(size=[shaft*2, shaft*2, (h+6)*3], center=true); | ||||
| 				if (motor_shaft_flatted) { | ||||
| 					// Shaft flat side. | ||||
| 					translate([1.4*shaft, 0, 0]) | ||||
| 						cube(size=[shaft*2, shaft*2, (h+6)*3], center=true); | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
| 			translate([5/2+1, 0, -(h/2+5+11)/2]) { | ||||
| 			translate([motor_shaft_size/2+1.5, 0, -(h/2+5+11)/2]) { | ||||
| 				yrot(90) { | ||||
| 					// Nut Slot | ||||
| 					scale([1.1, 1.1, 1.1]) hull() { | ||||
| 						metric_nut(size=3, hole=false); | ||||
| 						metric_nut(size=set_screw_size, hole=false); | ||||
| 						translate([5, 0, 0]) | ||||
| 							metric_nut(size=3, hole=false); | ||||
| 							metric_nut(size=set_screw_size, hole=false); | ||||
| 					} | ||||
|  | ||||
| 					// Set screw hole. | ||||
| 					translate([0, 0, 2]) | ||||
| 						cylinder(r=3.2/2, h=9, center=true, $fn=8); | ||||
| 						cylinder(r=(set_screw_size+printer_slop)/2, h=9, center=true, $fn=8); | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
|   | ||||
| @@ -188,7 +188,7 @@ module full_assembly() | ||||
|  | ||||
|  | ||||
|  | ||||
| full_assembly(); | ||||
| translate([0,-1.5*rail_length,0]) full_assembly(); | ||||
|  | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -2,7 +2,7 @@ include <config.scad> | ||||
| use <GDMUtils.scad> | ||||
|  | ||||
|  | ||||
| module joiner(h=40, w=10, l=10, a=30, screwsize=3, guides=true) | ||||
| module joiner(h=40, w=10, l=10, a=30, screwsize=3, guides=true, slop=printer_slop) | ||||
| { | ||||
| 	dmnd_height = h/2; | ||||
| 	dmnd_width = dmnd_height*tan(a); | ||||
| @@ -28,15 +28,15 @@ module joiner(h=40, w=10, l=10, a=30, screwsize=3, guides=true) | ||||
| 				// Make tab | ||||
| 				translate([0,0,dmnd_height/2]) { | ||||
| 					translate([0, -dmnd_width/4, 0]) | ||||
| 						cube(size=[w/3-joiner_slop, dmnd_width/2, dmnd_height], center=true); | ||||
| 					scale([w/3-joiner_slop, dmnd_width/2, dmnd_height/2]) xrot(45) | ||||
| 						cube(size=[w/3-slop*2, dmnd_width/2, dmnd_height], center=true); | ||||
| 					scale([w/3-slop*2, dmnd_width/2, dmnd_height/2]) xrot(45) | ||||
| 						cube(size=[1,sqrt(2),sqrt(2)], center=true); | ||||
| 				} | ||||
|  | ||||
| 				// Guide ridges. | ||||
| 				if (guides == true) { | ||||
| 					translate([0,0,dmnd_height/2]) { | ||||
| 						grid_of(xa=[-(w/6-joiner_slop/2), (w/6-joiner_slop/2)]) { | ||||
| 						grid_of(xa=[-(w/6-slop), (w/6-slop)]) { | ||||
| 							// Guide ridge. | ||||
| 							scale([0.75, 1, 2]) yrot(45) | ||||
| 								cube(size=[guide_size/sqrt(2), dmnd_width, guide_size/sqrt(2)], center=true); | ||||
|   | ||||
| @@ -6,8 +6,8 @@ use <joiners.scad> | ||||
| module lifter_rod_coupler() | ||||
| { | ||||
| 	h = 50; | ||||
| 	shaft = 5.2; | ||||
| 	setscrew = 3.2; | ||||
| 	set_screw_rad = set_screw_size/2 + printer_slop; | ||||
| 	shaft = motor_shaft_size + printer_slop; | ||||
|  | ||||
| 	color("Lavender") difference() { | ||||
| 		// Coupler cylinder. | ||||
| @@ -18,9 +18,11 @@ module lifter_rod_coupler() | ||||
| 				// Stepper shaft hole | ||||
| 				cylinder(h=h/2, r=shaft/2, center=true, $fn=16); | ||||
|  | ||||
| 				// Shaft flat side. | ||||
| 				translate([1.4*shaft, 0, 0]) | ||||
| 					cube(size=[shaft*2, shaft*2, h/2+1], center=true); | ||||
| 				if (motor_shaft_flatted == true) { | ||||
| 					// Shaft flat side. | ||||
| 					translate([1.4*shaft, 0, 0]) | ||||
| 						cube(size=[shaft*2, shaft*2, h/2+1], center=true); | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
| 			//Stepper set screw | ||||
| @@ -28,14 +30,14 @@ module lifter_rod_coupler() | ||||
| 				yrot(90) { | ||||
| 					// Nut Slot | ||||
| 					translate([0, 0, 1]) scale([1.1, 1.1, 1.1]) hull() { | ||||
| 						metric_nut(size=3, hole=false); | ||||
| 						metric_nut(size=set_screw_size, hole=false); | ||||
| 						translate([10, 0, 0]) | ||||
| 							metric_nut(size=3, hole=false); | ||||
| 							metric_nut(size=set_screw_size, hole=false); | ||||
| 					} | ||||
|  | ||||
| 					// Set screw hole. | ||||
| 					translate([0, 0, 2.5]) | ||||
| 						cylinder(r=setscrew/2, h=12, center=true, $fn=8); | ||||
| 						cylinder(r=set_screw_rad, h=12, center=true, $fn=8); | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| @@ -49,14 +51,14 @@ module lifter_rod_coupler() | ||||
| 				yrot(90) { | ||||
| 					// Nut Slot | ||||
| 					translate([0, 0, 1]) scale([1.1, 1.1, 1.1]) hull() { | ||||
| 						metric_nut(size=3, hole=false); | ||||
| 						metric_nut(size=set_screw_size, hole=false); | ||||
| 						translate([-10, 0, 0]) | ||||
| 							metric_nut(size=3, hole=false); | ||||
| 							metric_nut(size=set_screw_size, hole=false); | ||||
| 					} | ||||
|  | ||||
| 					// Set screw hole. | ||||
| 					translate([0, 0, 2.5]) | ||||
| 						cylinder(r=setscrew/2, h=10, center=true, $fn=8); | ||||
| 						cylinder(r=set_screw_rad, h=10, center=true, $fn=8); | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
|   | ||||
| @@ -1,6 +1,7 @@ | ||||
| include <config.scad> | ||||
| use <GDMUtils.scad> | ||||
|  | ||||
| module nut_capture(nut_size=17.4, nut_thick=9.5, offset=18, slop=0.25, wall=3) | ||||
| module nut_capture(nut_size=17.4, nut_thick=9.5, offset=18, slop=printer_slop, wall=3) | ||||
| { | ||||
| 	nut_rad = nut_size/cos(30)/2; | ||||
| 	base = (offset - nut_rad); | ||||
|   | ||||
| @@ -3,7 +3,7 @@ use <GDMUtils.scad> | ||||
|  | ||||
|  | ||||
|  | ||||
| module roller_cap(r=5.0, h=10, wall=3, cap=2, lip=1.5, shelf=2.4, slop=0.25) | ||||
| module roller_cap(r=5.0, h=10, wall=3, cap=2, lip=1.5, shelf=2.4, slop=printer_slop) | ||||
| { | ||||
| 	$fn = 16; | ||||
| 	color("Pink") difference() { | ||||
|   | ||||
| @@ -43,7 +43,7 @@ module float_seven_segment(val=0.0, decim=2, size=10, h=1, suppress=false) | ||||
| 	} | ||||
| 	for (p = [mag:-1:-decim]) { | ||||
| 		translate([-0.8*size*(p+0.5), 0, 0]) { | ||||
| 			assign(d = floor(abs(val)/pow(10, p)) % 10) { | ||||
| 			assign(d = floor(abs(val)/pow(10, p)+0.000001) % 10) { | ||||
| 				if (p == -1) { | ||||
| 					translate([-0.8*size/2, -size/2, 0]) | ||||
| 						cube(size=[size*0.1, size*0.1, h], center=true); | ||||
| @@ -57,29 +57,39 @@ module float_seven_segment(val=0.0, decim=2, size=10, h=1, suppress=false) | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| module tolerances_test_part() { // make me | ||||
| 	for (i = [0:5]) { | ||||
| 		translate([-20*i, 0, 0]) | ||||
| 			zrot(90) | ||||
| 				difference() { | ||||
| 					nut_capture( | ||||
| 						nut_size=lifter_nut_size, | ||||
| 						nut_thick=lifter_nut_thick, | ||||
| 						offset=lifter_nut_size/2+5, | ||||
| 						wall=3, | ||||
| 						slop=0.05*i | ||||
| 					); | ||||
| 					translate([lifter_nut_size/2+3, -6, 10]) { | ||||
| 						zrot(90) xrot(90) float_seven_segment(val=0.05*i, decim=2, size=8, h=1, suppress=true); | ||||
| module slop_calibration_parts() { // make me | ||||
| 	rows = 5; | ||||
| 	cols = 2; | ||||
| 	r = 10; | ||||
| 	h = 15; | ||||
| 	step = 0.05; | ||||
| 	spacing = r*2+10; | ||||
| 	for (col = [0:cols-1]) { | ||||
| 		translate([-col*spacing*1.25+(cols-1)*spacing*1.25/2, 0, h/2]) { | ||||
| 			difference() { | ||||
| 				cube(size=[spacing, rows*spacing, h], center=true); | ||||
| 				for (row = [0:rows-1]) { | ||||
| 					assign(slop = (step*rows*col)+step*row) { | ||||
| 						translate([0, spacing*row-(rows-1)*spacing/2, 0]) { | ||||
| 							cylinder(r=r+slop, h=h+1, center=true); | ||||
| 							translate([spacing/2, -7, 0]) { | ||||
| 								zrot(90) xrot(90) float_seven_segment(val=slop, decim=2, size=8, h=1, suppress=true); | ||||
| 							} | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	translate([(cols+1)*1.25*spacing/2, 0, h/2]) { | ||||
| 		cylinder(r=r, h=h, center=true); | ||||
| 		translate([0,0,-h/4]) cylinder(r=r+2, h=h/2, center=true); | ||||
| 	} | ||||
| 	translate([ 20, 0, 2]) yrot(180) zrot(90) lifter_nut_cap(); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| tolerances_test_part(); | ||||
| slop_calibration_parts(); | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| @@ -25,7 +25,7 @@ module lock_tab(h=30, wall=3, slop=0.0) | ||||
|  | ||||
|  | ||||
|  | ||||
| module lock_slot(h=30, wall=3, backing=0, slop=0.3) | ||||
| module lock_slot(h=30, wall=3, backing=0, slop=printer_slop) | ||||
| { | ||||
| 	s1 = 2*wall+slop/2; | ||||
| 	s2 = wall+slop/2; | ||||
|   | ||||
							
								
								
									
										2
									
								
								wiki
									
									
									
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								wiki
									
									
									
									
									
								
							 Submodule wiki updated: a5c942ebef...2b39ba4f5e
									
								
							
		Reference in New Issue
	
	Block a user