diff --git a/vitamins/ball_bearings.scad b/vitamins/ball_bearings.scad index 9e1596a..05a095c 100644 --- a/vitamins/ball_bearings.scad +++ b/vitamins/ball_bearings.scad @@ -34,6 +34,7 @@ BBMR93 = ["MR93", 3, 9, 4, "silver", 0.5, 0.5, 0, 0]; BBMR95 = ["MR95", 5, 9, 3, "silver", 0.5, 0.5, 0, 0]; BBF623 = ["F623", 3, 10, 4, "black", 0.6, 0.7, 11.5, 1]; BBF693 = ["F693", 3, 8, 3, "silver", 0.5, 0.7, 9.5, 0.7]; +BBF625 = ["F625", 5, 16, 5, "silver", 1.0, 1.0, 18, 1]; BBF695 = ["F695", 5, 13, 4, "silver", 1.0, 1.0, 15, 1]; ball_bearings = [BBF693, BBF623, BBF695, BBMR63, BBMR83, BBMR93, BBSMR95, BB624, BB686, BB696, BB608, BB6200, BB6201, BB6808]; diff --git a/vitamins/nut.scad b/vitamins/nut.scad index f803a3d..dcba1ea 100644 --- a/vitamins/nut.scad +++ b/vitamins/nut.scad @@ -245,6 +245,39 @@ module sliding_t_nut(type) { //! Draw a sliding T nut, T nut with a spring loade extrusionSlidingNut(size, tab[0], tab[1], tabSizeZ, holeRadius, 0, hammerNut); } +module weld_nut(type) { + thread_d = nut_size(type); + hole_rad = thread_d / 2; + nut_neck_rad = nut_radius(type); + // top_rad = type[4] / 2; + thickness = nut_thickness(type); + base_rad = type[7]/2; + base_thickness= type[8]; + + + vitamin(str("weld nut(", type[0], "): Weld Nut M", nut_size(type))); + colour = silver; + explode(-20) { + color(colour) { + + rotate_extrude() + polygon([ + [hole_rad, -base_thickness], + [base_rad, -base_thickness], + [base_rad, 0], + [hole_rad, 0], + [nut_neck_rad, 0], + [nut_neck_rad, thickness], + [hole_rad, thickness] + ]); + } + + if(show_threads) + female_metric_thread(thread_d, metric_coarse_pitch(thread_d), thickness, center = false, colour = colour); + } + +} + module extrusionSlidingNut(size, tabSizeY1, tabSizeY2, tabSizeZ, holeRadius, holeOffset = 0, hammerNut = false) { // center section stem_h = size.z - tabSizeZ; diff --git a/vitamins/nuts.scad b/vitamins/nuts.scad index 2fff4f5..b0933d3 100644 --- a/vitamins/nuts.scad +++ b/vitamins/nuts.scad @@ -49,7 +49,9 @@ M6_half_nut = ["M6_half_nut", 6, 11.5, 3, 8, M6_washer, 3, M8_nut = ["M8_nut", 8, 15, 6.5, 8, M8_washer, M8_nut_depth, 0, [15, 11.35]]; toggle_nut = ["toggle_nut", 6.1, 9.2, 1.5, 1.5, M6_washer, 1.5, inch(1/40)]; -M4_wingnut = ["M4_wingnut", 4, 10, 3.75,8, M4_washer, 0, 22, 10, 6, 3]; +M4_wingnut = ["M4_wingnut", 4, 10, 3.75,8, M4_washer, 0, 22, 10, 6, 3]; +M4_weld_nut = ["M4_weld_nut", 4, 5.3, 6.3, 8, M4_washer, 0, 18, 0.8, 6, 3]; +M6_weld_nut = ["M6_weld_nut", 6, 7.7, 7.9, 8, M6_washer, 0, 19.1, 1.2, 6, 3]; // sx ty1 ty2 hammer M3_sliding_t_nut = ["M3_sliding_t_nut", 3, 6, 3.0, 4.0, false, 0, 10, 10, 6, false]; M4_sliding_t_nut = ["M4_sliding_t_nut", 4, 6, 3.7, 4.7, false, 0, 11, 10, 6, false]; diff --git a/vitamins/pulleys.scad b/vitamins/pulleys.scad index e7f9628..0f9f6d1 100644 --- a/vitamins/pulleys.scad +++ b/vitamins/pulleys.scad @@ -18,26 +18,34 @@ // include // -// n t o b w h h b f f s s s s -// a e d e i u u o l l c c c c -// m e l d b b r a a r r r r -// e t t t e n n e e e e -// h h d l g g w w w w -// e e s -// l z -// d t -// -T5x10_pulley = ["T5x10_pulley", "T5", 10, 15, T5x6, 11.6, 7.9, 7, 5, 19.3, 1.7, 3, 10.7, M3_grub_screw, 1]; -T2p5x16_pulley = ["T2p5x16_pulley", "T2.5", 16, 12.16, T2p5x6, 8, 16, 5.7, 5, 16.0, 1.0, 6, 3.75, M4_grub_screw, 1]; -GT2x20um_pulley = ["GT2x20um_pulley", "GT2UM", 20, 12.22, GT2x6, 7.5, 18, 6.5, 5, 18.0, 1.0, 6, 3.75, M3_grub_screw, 2]; //Ultimaker -GT2x20ob_pulley = ["GT2x20ob_pulley", "GT2OB", 20, 12.22, GT2x6, 7.5, 16, 5.5, 5, 16.0, 1.0, 6, 3.25, M3_grub_screw, 2]; //Openbuilds -GT2x16_pulley = ["GT2x16_pulley", "GT2", 16, 9.75, GT2x6, 7.0, 13, 5, 5, 13.0, 1.0,4.5,3.0, M3_grub_screw, 2]; -GT2x12_pulley = ["GT2x12_pulley", "GT2RD", 12, 7.15, GT2x6, 6.5, 12, 5.5, 4, 12.0, 1.0, 4, 3.0, M3_grub_screw, 2]; //Robotdigg -GT2x20_toothed_idler = ["GT2x20_toothed_idler", "GT2", 20, 12.22, GT2x6, 6.5, 18, 0, 4, 18.0, 1.0, 0, 0, false, 0]; -GT2x20_plain_idler = ["GT2x20_plain_idler", "GT2", 0, 12.0, GT2x6, 6.5, 18, 0, 4, 18.0, 1.0, 0, 0, false, 0]; -GT2x16_toothed_idler = ["GT2x16_toothed_idler", "GT2", 16, 9.75, GT2x6, 6.5, 14, 0, 3, 14.0, 1.0, 0, 0, false, 0]; -GT2x16_plain_idler = ["GT2x16_plain_idler", "GT2", 0, 9.63, GT2x6, 6.5, 13, 0, 3, 13.0, 1.0, 0, 0, false, 0]; -GT2x16x7_plain_idler = ["GT2x16x7_plain_idler", "GT2", 0, 9.63, GT2x6, 7.0, 13, 0, 3, 13.0, 1.0, 0, 0, false, 0]; +// n t o b w h h b f f s s s s +// a e d e i u u o l l c c c c +// m e l d b b r a a r r r r +// e t t t e n n e e e e +// h h d l g g w w w w +// e e s +// l z +// d t +// +T5x10_pulley = ["T5x10_pulley", "T5", 10, 15, T5x6, 11.6, 7.9, 7, 5, 19.3, 1.7, 3, 10.7, M3_grub_screw, 1]; +T2p5x16_pulley = ["T2p5x16_pulley", "T2.5", 16, 12.16, T2p5x6, 8, 16, 5.7, 5, 16.0, 1.0, 6, 3.75, M4_grub_screw, 1]; +GT2x20um_pulley = ["GT2x20um_pulley", "GT2UM", 20, 12.22, GT2x6, 7.5, 18, 6.5, 5, 18.0, 1.0, 6, 3.75, M3_grub_screw, 2]; //Ultimaker +GT2x20ob_pulley = ["GT2x20ob_pulley", "GT2OB", 20, 12.22, GT2x6, 7.5, 16, 5.5, 5, 16.0, 1.0, 6, 3.25, M3_grub_screw, 2]; //Openbuilds +GT2x16_pulley = ["GT2x16_pulley", "GT2", 16, 9.75, GT2x6, 7.0, 13, 5, 5, 13.0, 1.0,4.5,3.0, M3_grub_screw, 2]; +GT2x12_pulley = ["GT2x12_pulley", "GT2RD", 12, 7.15, GT2x6, 6.5, 12, 5.5, 4, 12.0, 1.0, 4, 3.0, M3_grub_screw, 2]; //Robotdigg +GT2x20_toothed_idler = ["GT2x20_toothed_idler", "GT2", 20, 12.22, GT2x6, 6.5, 18, 0, 4, 18.0, 1.0, 0, 0, false, 0]; +GT2x20_plain_idler = ["GT2x20_plain_idler", "GT2", 0, 12.0, GT2x6, 6.5, 18, 0, 4, 18.0, 1.0, 0, 0, false, 0]; +GT2x16_toothed_idler = ["GT2x16_toothed_idler", "GT2", 16, 9.75, GT2x6, 6.5, 14, 0, 3, 14.0, 1.0, 0, 0, false, 0]; +GT2x16_plain_idler = ["GT2x16_plain_idler", "GT2", 0, 9.63, GT2x6, 6.5, 13, 0, 3, 13.0, 1.0, 0, 0, false, 0]; +GT2x16x7_plain_idler = ["GT2x16x7_plain_idler", "GT2", 0, 9.63, GT2x6, 7.0, 13, 0, 3, 13.0, 1.0, 0, 0, false, 0]; + +GT2x80_pulley = ["GT2x80_pulley", "GT2", 80, 50.42, GT2x6, 7, 35, 9, 5, 55, 1.0, 6, 4.5, M5_grub_screw, 2]; // Powge branded from West3D +GT2x16_toothed_idler_9 = ["GT2x16_toothed_idler_9", "GT2", 16, 9.75, GT2x9, 10, 14, 0, 3, 14.0, 1.0, 0, 0, false, 0];//Robotdigg +GT2x16_pulley_9 = ["GT2x16_pulley_9", "GT2", 16, 9.65, GT2x9, 9.5, 14, 6.5, 5, 14.0, 1.0, 6, 3.5, M3_grub_screw, 2]; +GT2x20_pulley_9 = ["GT2x20_pulley_9", "GT2", 20, 12.22, GT2x9, 11, 16, 7, 5, 16.0, 1.0, 6, 3.25, M4_grub_screw, 2];//Powge +GT2x20_toothed_idler_9 = ["GT2x20_toothed_idler_9", "GT2", 20, 12.22, GT2x9, 10, 18, 0, 5, 18.0, 1.0, 0, 0, false, 0]; + + pulleys = [T5x10_pulley, T2p5x16_pulley, @@ -49,6 +57,8 @@ pulleys = [T5x10_pulley, GT2x20_plain_idler, GT2x16_toothed_idler, GT2x16_plain_idler, - GT2x16x7_plain_idler]; + GT2x16x7_plain_idler + + ]; use diff --git a/vitamins/rod_end.scad b/vitamins/rod_end.scad new file mode 100644 index 0000000..9c4cfae --- /dev/null +++ b/vitamins/rod_end.scad @@ -0,0 +1,144 @@ +include +include + + +function rod_end_bearing_bore(type) =type[1]; // radius of the bore hole in the bearing +function rod_end_bearing_od(type) =type[2]; // Outer diameter of the bearing +function rod_end_bore_width(type) = type[3]; //! Width +function rod_end_bearing_width(type) = type[4]; //! Width +function rod_end_bearing_shield_colour(type) = type[5]; //! Shield colour, "silver" for metal +function rod_end_screw_radius(type) =type[6]/2; // radius of the screw end, not the bore +// function screw_pitch(type) =type[6]; // pitch of the screw end, not the bore +function rod_end_sphere_seg_width(type) = type[7]; // the width of the pivoting part, effectively a (sphere - sphereCaps - center bore) +function rod_end_sphere_radius(type) = type[8]; +function rod_end_screw_length(type) =type[9]; // length of the screw from eye center, not the bore +function rod_end_thread_length(type) =type[10]; // length of the threads +function rod_end_overall_length(type) = type[11]; +function rod_end_bearing_rim(type) = type[12]; //! Outer rim thickness guesstimate + +// function screw_thread_radius(type) = //! Thread radius +// let(d = screw_thread_diameter(type)) is_undef(d) ? rod_end_screw_radius(type) : d / 2; + + +module rod_end_bearing(type) { + + bb_bore = rod_end_bearing_bore(type); + bb_od=rod_end_bearing_od(type); + bb_rim=rod_end_bearing_rim(type); + + bb_width=rod_end_bearing_width(type); + bb_shield_colour = rod_end_bearing_shield_colour(type); + length = rod_end_screw_length(type); + sphere_rad = rod_end_sphere_radius(type)/2; + rod_end_sphere_seg_width= rod_end_sphere_seg_width(type); + shaft_rad = rod_end_screw_radius(type) - eps; + thread_rad = rod_end_screw_radius(type); + thread = rod_end_thread_length(type); //length - bb_od/2; + // thread = length - bb_od/2; + thread_offset = 0; + thread_d = 2 * thread_rad; + pitch = metric_coarse_pitch(thread_d); + colour = grey(80); + shield_width=bb_width - (bb_width < 5 ? 0.5 : 1); + chamfer = bb_rim / 6; + +description = str("Rod End Bearing ", type[1], length < 10 ? " x " : " x ", length, "mm"); + vitamin(str("Rod End Bearing(", type[0], length, "): ", description)); + + // show_threads=true; + + module shaft(socket = 0, headless = false) { + // point = screw_nut(type) ? 0 : 3 * shaft_rad; + shank = length; + + if(show_threads && pitch) + translate_z(-length - thread_offset) + male_metric_thread(thread_d, pitch, thread, false, top = headless ? -1 : 0, solid = !headless, colour = colour); + else + color(colour * 0.9) + rotate_extrude() { + translate([0, -length - thread_offset]) + square([thread_rad - eps, thread ]); + + // if(point) + // polygon([ + // [0.4, -length], [0, point - length], [shaft_rad, point - length] + // ]); + } + + + // if(shank > 0) + // color(colour) + // translate_z(-shank - socket) + // cylinder(r = shaft_rad + eps, h = shank); + } + + module bearingEye(){ + rotate_extrude() + { + difference() { + circle(r = sphere_rad); + translate(v = [0,-sphere_rad]) + square(size = sphere_rad*2); + + for(i=[0,1]) + mirror(v = [0,i]) + translate(v = [-sphere_rad,rod_end_sphere_seg_width/2]) + square(size = sphere_rad*2); + + square([bb_bore,rod_end_sphere_seg_width+1], center=true); + } + } + + color(bb_shield_colour) + rotate_extrude() + { + difference() { + translate([0,-shield_width/2]) + square([bb_od/2-bb_rim,shield_width]); + circle(r = sphere_rad); + } + } + + // rotate_extrude() + // { + // translate([0,-bb_width/2]) + // difference() { + // square([(bb_od)/2,bb_width]); + // square([bb_od/2-bb_rim,bb_width]); + // } + // } + + rotate_extrude() + hull() { + // rim= bb_rim; + or= bb_od/2; + h = bb_width; + translate([or - bb_rim, -h / 2 + chamfer]) + square([bb_rim, h - 2 * chamfer]); + + translate([or - bb_rim, -h / 2]) + square([bb_rim - chamfer, h]); + } + translate([0,0,-bb_width/2+chamfer]) + linear_extrude(bb_width-chamfer*2){ + difference() { + + hull(){ + circle(r = bb_od/2); + translate([length-thread,-shaft_rad]) + square([0.5,shaft_rad*2]); + } + circle(r = bb_od/2-bb_rim); + } + } + } + + + + shaft(); + rotate([0,90,0]) + bearingEye(); + + // square() +} \ No newline at end of file diff --git a/vitamins/rod_ends.scad b/vitamins/rod_ends.scad new file mode 100644 index 0000000..10ed3cd --- /dev/null +++ b/vitamins/rod_ends.scad @@ -0,0 +1,5 @@ +RE_m5_bearing = ["rodEndBearingM5", 5, 16, 8, 6, "gold", 5, 8, 11.11, 33, 21, 41, 2.0, 2.0, 0, 0]; // uxcell M5x0.8 Right Hand Thread, Self-Lubricating Joint Rod Ends + +rod_ends= [ RE_m5_bearing]; + +use \ No newline at end of file diff --git a/vitamins/screw.scad b/vitamins/screw.scad index befca53..7023f53 100644 --- a/vitamins/screw.scad +++ b/vitamins/screw.scad @@ -237,21 +237,25 @@ module screw(type, length, hob_point = 0, nylon = false) { //! Draw specified sc } if(head_type == hs_dome) { - lift = 0.38; - h = head_height - lift; - r = min(2 * head_height, (sqr(head_rad) + sqr(h)) / 2 * h); // Special case for M2 - y = sqrt(sqr(r) - sqr(head_rad)); + R_minus_h = head_height; // h would be the height of the sphere cap that's cut off of the top of the screw dome + a= socket_rad; + // this is the trig way to do this, + // alpha=atan(R_minus_h/a); + // R = R_minus_h/sin(alpha); //Radius if the cap was a perfect unscaled sphere + // this is mathematcially equivalent, but may run faster computationally with sqrt and ^2 instead of trig + R= a*sqrt((R_minus_h^2/a^2)+1); // Radius if the cap was a perfect unscaled sphere + dome_height_scaling_factor= R/head_rad; color(colour) { rotate_extrude() { difference() { intersection() { - translate([0, -y + lift]) - circle(r); + scale([1,dome_height_scaling_factor]) + circle(r=head_rad); square([head_rad, head_height]); } translate([0, head_height - socket_depth]) - square([socket_rad, 10]); + square([socket_rad, 20]); } } linear_extrude(head_height) diff --git a/vitamins/screws.scad b/vitamins/screws.scad index 152361c..6fd2b7d 100644 --- a/vitamins/screws.scad +++ b/vitamins/screws.scad @@ -87,6 +87,8 @@ M2p5_dome_screw = ["M2p5_dome", "M2.5 dome", hs_dome,2.5, 5.35,1.6, 0.8, 2.0 M3_dome_screw = ["M3_dome", "M3 dome", hs_dome, 3, 5.7, 1.65, 1.04,2.0, 18, M3_washer, M3_nut, M3_tap_radius, M3_clearance_radius]; M4_dome_screw = ["M4_dome", "M4 dome", hs_dome, 4, 7.6, 2.2, 1.3, 2.5, 20, M4_washer, M4_nut, M4_tap_radius, M4_clearance_radius]; M5_dome_screw = ["M5_dome", "M5 dome", hs_dome, 5, 9.5, 2.75, 1.56,3.0, 22, M5_washer, M5_nut, M5_tap_radius, M5_clearance_radius]; +M6_dome_screw = ["M6_dome", "M6 dome", hs_dome, 6, 10.5, 3.3, 2.5,4.0, 24, M6_washer, M6_nut, M6_tap_radius, M6_clearance_radius]; +M8_dome_screw = ["M8_dome", "M8 dome", hs_dome, 8, 14, 4.4, 3,5.0, 30, M8_washer, M8_nut, M8_tap_radius, M8_clearance_radius]; M2p5_pan_screw = ["M2p5_pan", "M2.5 pan", hs_pan, 2.5, 4.7, 1.7, 0, 0, 0, M2p5_washer, M2p5_nut, M2p5_tap_radius, M2p5_clearance_radius]; M3_pan_screw = ["M3_pan", "M3 pan", hs_pan, 3, 5.4, 2.0, 0, 0, 0, M3_washer, M3_nut, M3_tap_radius, M3_clearance_radius]; @@ -122,7 +124,7 @@ screw_lists = [ [ 0, 0, M3_low_cap_screw], [ 0, 0, M3_shoulder_screw, M4_shoulder_screw], [ M2_cs_cap_screw, 0, M3_cs_cap_screw, M4_cs_cap_screw, M5_cs_cap_screw, M6_cs_cap_screw, M8_cs_cap_screw], -[ M2_dome_screw, M2p5_dome_screw,M3_dome_screw, M4_dome_screw, M5_dome_screw], +[ M2_dome_screw, M2p5_dome_screw,M3_dome_screw, M4_dome_screw, M5_dome_screw, M6_dome_screw, M8_dome_screw], [ 0, 0, M3_hex_screw, M4_hex_screw, M5_hex_screw, M6_hex_screw, M8_hex_screw], [ 0, M2p5_pan_screw, M3_pan_screw, M4_pan_screw, M5_pan_screw, M6_pan_screw, No632_pan_screw], [ No2_screw, 0, No4_screw, No6_screw, No8_screw, No6_cs_screw], diff --git a/vitamins/springs.scad b/vitamins/springs.scad index 2972c24..004e425 100644 --- a/vitamins/springs.scad +++ b/vitamins/springs.scad @@ -17,9 +17,11 @@ // If not, see . // -peg_spring = ["peg_spring", 6.4, 0.9, 15.5, 8, 1, false, 0, "silver"]; -batt_spring = ["batt_spring", 5, 0.5, 8, 5, 1, false, 6, "silver"]; +// name OD wireG len #trns clsd flat OD2 color +peg_spring = ["peg_spring", 6.4, 0.9, 15.5, 8, 1, false, 0, "silver"]; +yellow_bed_spring = ["yellow_bed_spring", 8, 0.9, 20, 10, 1, false, 0, "yellow"]; +batt_spring = ["batt_spring", 5, 0.5, 8, 5, 1, false, 6, "silver"]; -springs = [peg_spring, batt_spring]; +springs = [peg_spring, batt_spring, yellow_bed_spring]; use diff --git a/vitamins/stepper_motor.scad b/vitamins/stepper_motor.scad index 57b6ad4..3cbc862 100644 --- a/vitamins/stepper_motor.scad +++ b/vitamins/stepper_motor.scad @@ -80,7 +80,7 @@ module NEMA(type, shaft_angle = 0, jst_connector = false) { //! Draw specified N shaft_rad = NEMA_shaft_dia(type) / 2; cap = NEMA_cap_heights(type)[1]; cap2 = NEMA_cap_heights(type)[0]; - vitamin(str("NEMA(", type[0], "): Stepper motor NEMA", round(NEMA_width(type) / 2.54), " x ", length, "mm")); + vitamin(str("NEMA(", type[0], "): Stepper motor NEMA", round(NEMA_width(type) / 2.54), " x ", length, "mm (", type[7],"x",type[8], " shaft)")); thread_d = NEMA_thread_d(type); corner_r = 0.9; bore = NEMA_shaft_bore(type); diff --git a/vitamins/stepper_motors.scad b/vitamins/stepper_motors.scad index 48cd6b2..c333a36 100644 --- a/vitamins/stepper_motors.scad +++ b/vitamins/stepper_motors.scad @@ -26,6 +26,7 @@ NEMA8_30 = ["NEMA8_30", 20, 30, 30/2, 20, 7.5, 1.6, 4, 6, 16, [8, 8], 2, true, true, 0, 0]; NEMA8_30BH = ["NEMA8_30BH", 20, 30, 30/2, 20, 7.5, 1.6, 5, 12, 16, [8, 8], 2, true, true, 7, 2.8]; NEMA17_47 = ["NEMA17_47", 42.3, 47, 53.6/2, 25, 11, 2, 5, 24, 31, [11.5, 9], 3, false, false, 0, 0]; +NEMA17_47L80 = ["NEMA17_47L80", 42.3, 47, 53.6/2, 25, 11, 2, 5, 80, 31, [11.5, 9], 3, false, true, 0, 0]; NEMA17_40 = ["NEMA17_40", 42.3, 40, 53.6/2, 25, 11, 2, 5, 20, 31, [12.5, 11], 3, false, false, 0, 0]; NEMA17_40L280 = ["NEMA17_40L280", 42.3, 40, 53.6/2, 25, 11, 2, 8, [280, 8, 4], 31, [12.5, 11], 3, false, false, 0, 0]; NEMA17_34 = ["NEMA17_34", 42.3, 34, 53.6/2, 25, 11, 2, 5, 24, 31, [8, 8], 3, false, false, 0, 0]; @@ -34,7 +35,7 @@ NEMA16_19 = ["NEMA16_19", 39.5, 19.2, 50.6/2, 50.6/2, 11, 2, 5 NEMA14_36 = ["NEMA14_36", 35.2, 36, 46.4/2, 21, 11, 2, 5, 21, 26, [8, 8], 3, false, false, 0, 0]; NEMA23_51 = ["NEMA23_51", 56.4, 51.2, 75.7/2, 35, 38.1/2, 1.6, 6.35, 24, 47.1, [8, 8], 3, false, false, 0, 0]; -stepper_motors = [NEMA8_30, NEMA8_30BH, NEMA14_36, NEMA16_19, NEMA17_27, NEMA17_34, NEMA17_40, NEMA17_47, NEMA23_51]; +stepper_motors = [NEMA8_30, NEMA8_30BH, NEMA14_36, NEMA16_19, NEMA17_27, NEMA17_34, NEMA17_40, NEMA17_47,NEMA17_47L80, NEMA23_51]; small_steppers = []; use