Initial commit
This commit is contained in:
157
config.scad
Normal file
157
config.scad
Normal file
@@ -0,0 +1,157 @@
|
||||
|
||||
use <./models/common/metric_bolt_functions.scad>;
|
||||
use <./models/brake/brake_assembly_functions.scad>;
|
||||
use <./models/fixings/tube_clamp_round_tee_long_104_functions.scad>;
|
||||
use <./models/fixings/tube_clamp_round_3_way_through_116_functions.scad>;
|
||||
use <./models/fixings/tube_clamp_round_base_plate_132_functions.scad>;
|
||||
use <./models/fixings/tube_clamp_square_base_plate_132_functions.scad>;
|
||||
|
||||
// Configuration
|
||||
R_BED = [400, 1200, 18];
|
||||
T_WHEEL = 100;
|
||||
D_WHEEL = 400;
|
||||
D_WHEEL_BORE = 25;
|
||||
|
||||
T_PLATE = 8;
|
||||
T_CLAMP = 20;
|
||||
|
||||
// D_AXIS = 25;
|
||||
D_AXLE_FRONT = 42;
|
||||
D_AXLE_REAR = 27;
|
||||
Y_POS_AXLE_FRONT = R_BED[1] / 2 - D_WHEEL / 2;
|
||||
Y_POS_AXLE_REAR = -R_BED[1] / 2 + D_WHEEL / 2;
|
||||
X_POS_WHEEL_CENTRE = R_BED[0] / 2 + T_WHEEL / 2;
|
||||
|
||||
SPACING_XY_BED_BORDER = 10;
|
||||
Z_OVERLAP_TEE_CLAMP_ROUND = 80;
|
||||
Z_OFFSET_WHEEL_TO_BED_BASE = 5;
|
||||
Z_OFFSET_BED_TO_AXLE = D_WHEEL / 2 + Z_OFFSET_WHEEL_TO_BED_BASE;
|
||||
M_TOTAL = 160;
|
||||
|
||||
L_BOLT_EXTENSION = 10;
|
||||
SIZE_BOLT = 25; // M25
|
||||
SIZE_BOLT_REAR_WHEEL_POSITIONING = 10;
|
||||
T_WASHER_BOLT_REAR_WHEEL_POSITIONING = 1.5;
|
||||
D_WASHER_BOLT_REAR_WHEEL_POSITIONING = 30; // get_metric_bolt_washer_diameter_safe_working_clearance(SIZE_BOLT_REAR_WHEEL_POSITIONING);
|
||||
T_WASHER_AXLE_REAR_WHEEL_POSITIONING = 4;
|
||||
D_WASHER_AXLE_REAR_WHEEL_POSITIONING = 50;
|
||||
SPACING_WASHER_AXLE_REAR_WHEEL_POSITIONING = 1;
|
||||
|
||||
R_FIXING_AXLE_LEG_REAR_TO_BED = get_R_plate_round_base_plate_132(D_AXLE_REAR);
|
||||
L_SHAFT_AXLE_FIXING_AXLE_REAR_TO_LEG = get_L_shaft_long_round_tee_long_104(D_AXLE_REAR);
|
||||
X_POS_AXLE_LEG_REAR = min(X_POS_WHEEL_CENTRE - T_WHEEL / 2 - SPACING_WASHER_AXLE_REAR_WHEEL_POSITIONING - T_WASHER_AXLE_REAR_WHEEL_POSITIONING - D_WASHER_BOLT_REAR_WHEEL_POSITIONING - L_SHAFT_AXLE_FIXING_AXLE_REAR_TO_LEG / 2, R_BED[0] / 2 - SPACING_XY_BED_BORDER - R_FIXING_AXLE_LEG_REAR_TO_BED[0] / 2);
|
||||
|
||||
// BRAKE
|
||||
// THICKNESS_SHELL_BRAKE_BEAM = 5;
|
||||
// L_BEAM_BRAKE_BELT_TENSION_FIXING = 150;
|
||||
D_BEAM_BRAKE = 40;
|
||||
T_BEAM_BRAKE = 5;
|
||||
D_BRAKE_BALLSCREW_AXLE = 16; // M16 pitch 1.5
|
||||
L_BRAKE_BALLSCREW_AXLE = 700;
|
||||
D_BRAKE_BALLSCREW_POWER_WHEEL = 120;
|
||||
T_BRAKE_BALLSCREW_POWER_WHEEL = get_metric_bolt_head_height(D_BRAKE_BALLSCREW_AXLE);
|
||||
D_WASHER_BRAKE_BALLSCREW_POWER_WHEEL = 50; // get_metric_bolt_washer_diameter_safe_working_clearance(D_BRAKE_BALLSCREW_AXLE);
|
||||
T_WASHER_BRAKE_BALLSCREW_POWER_WHEEL = 3;
|
||||
Z_OFFSET_BALLSCREW_AXLE_TO_BED_BASE = 125; // D_BRAKE_BALLSCREW_POWER_WHEEL / 2 + 25;
|
||||
Y_OFFSET_BALLSCREW_LEG_REAR_FIXING_FROM_END = 100;
|
||||
Y_OFFSET_BALLSCREW_LEG_FRONT_FIXING_FROM_END = Y_OFFSET_BALLSCREW_LEG_REAR_FIXING_FROM_END + 100;
|
||||
// L_BEAM_FIXING_BALLSCREW_TO_BED = D_BRAKE_BALLSCREW_AXLE + D_WASHER_FIXING_BALLSCREW_TO_BED * 2; // beam lying along bed, not perpendicular to bed
|
||||
R_BASE_PLATE_FIXING_LEG_BRAKE_BALLSCREW_TO_BED = get_R_plate_square_base_plate_132(D_BEAM_BRAKE);
|
||||
L_LEG_FIXING_BRAKE_BALLSCREW_TO_BED = Z_OFFSET_BALLSCREW_AXLE_TO_BED_BASE - R_BASE_PLATE_FIXING_LEG_BRAKE_BALLSCREW_TO_BED[2] + D_BEAM_BRAKE / 2;
|
||||
R_LEAD_FIXING_BRAKE_BALLSCREW_TO_BRAKE_ARMS = [100, 10, D_BEAM_BRAKE];
|
||||
X_OFFSET_FIXING_BRAKE_ARM_TO_LEAD_PLATE = D_BEAM_BRAKE;
|
||||
ANGLE_BRAKE_ROD_MIN = 50; // angle between ballscrew axle and brake rod radius about pivot
|
||||
ANGLE_BRAKE_ROD_MAX = 60; // atan((X_POS_AXLE_LEG_REAR - X_OFFSET_FIXING_BRAKE_ARM_TO_LEAD_PLATE) / Y_OFFSET_LEAD_FIXING_TO_AXLE_REAR_MIN);
|
||||
SIZE_BOLT_FIXING_BRAKE_ARM_TO_BRAKE_PAD = 6; // M6
|
||||
L_BOLT_FIXING_BRAKE_ARM_TO_BRAKE_PAD = 20; // 20-25mm
|
||||
D_WASHER_BOLT_FIXING_BRAKE_ARM_TO_BRAKE_PAD = 25; // get_metric_bolt_washer_diameter_safe_working_clearance(SIZE_BOLT_FIXING_BRAKE_ARM_TO_BRAKE_PAD);
|
||||
T_WASHER_BOLT_FIXING_BRAKE_ARM_TO_BRAKE_PAD = 1.5;
|
||||
R_BRAKE_PAD = [10, 75, 10];
|
||||
T_FIXING_BRAKE_ARM_TO_BRAKE_PAD = 4.8;
|
||||
W_FIXING_BRAKE_ARM_TO_BRAKE_PAD = 25.4;
|
||||
R_BRAKE_ARM = [240, 75, 5]; // (X_POS_WHEEL_CENTRE - T_WHEEL / 2 - R_BRAKE_PAD[0] - T_WASHER_BOLT_FIXING_BRAKE_ARM_TO_BRAKE_PAD - X_OFFSET_FIXING_BRAKE_ARM_TO_LEAD_PLATE + tan(90 - ANGLE_BRAKE_ROD_MAX) * 75 / 2) / sin(ANGLE_BRAKE_ROD_MAX) // TOO SHORT?
|
||||
L_FIXING_BRAKE_ARM_TO_BRAKE_PAD = D_WASHER_BOLT_FIXING_BRAKE_ARM_TO_BRAKE_PAD * 3; // R_BRAKE_PAD[1];
|
||||
L_BRAKE_ARM_TOTAL = R_BRAKE_ARM[0] + R_BRAKE_PAD[0] + L_BOLT_FIXING_BRAKE_ARM_TO_BRAKE_PAD;
|
||||
// Y_OFFSET_LEAD_FIXING_TO_AXLE_REAR_MIN = 50;
|
||||
X_OFFSET_FIXING_BRAKE_ARM_TO_BRAKE_PAD_FROM_END = R_BRAKE_ARM[1] / 2 * tan(ANGLE_BRAKE_ROD_MAX);
|
||||
// X_OFFSET_HOLE_AXLE_FROM_BRAKE_ARM_END_INNER = (X_POS_AXLE_LEG_REAR - X_OFFSET_FIXING_BRAKE_ARM_TO_LEAD_PLATE) / tan(ANGLE_BRAKE_ROD_MAX);
|
||||
DELTA_L_SPRING_BALLSCREW_MAX = get_y_pos_lead_fixing_ballscrew_to_brake_arms(ANGLE_BRAKE_ROD_MIN, Y_POS_AXLE_REAR, X_POS_AXLE_LEG_REAR, X_OFFSET_FIXING_BRAKE_ARM_TO_LEAD_PLATE) - get_y_pos_lead_fixing_ballscrew_to_brake_arms(ANGLE_BRAKE_ROD_MAX, Y_POS_AXLE_REAR, X_POS_AXLE_LEG_REAR, X_OFFSET_FIXING_BRAKE_ARM_TO_LEAD_PLATE);
|
||||
SIZE_BOLT_FIXING_BRAKE_ARM_TO_REAR_AXLE_LEG = 10;
|
||||
D_WASHER_BOLT_FIXING_BRAKE_ARM_TO_REAR_AXLE_LEG = 30; // get_metric_bolt_washer_diameter_safe_working_clearance(SIZE_BOLT_FIXING_BRAKE_ARM_TO_REAR_AXLE_LEG);
|
||||
T_WASHER_BOLT_FIXING_BRAKE_ARM_TO_REAR_AXLE_LEG = 1.5;
|
||||
D_WASHER_AXLE_FIXING_BRAKE_ARM_TO_REAR_AXLE_LEG = 50;
|
||||
T_WASHER_AXLE_FIXING_BRAKE_ARM_TO_REAR_AXLE_LEG = 4;
|
||||
|
||||
// ANGLE_INCLINE_TILLER = 20; // [-20:5:135]
|
||||
ANGLE_INCLINE_TILLER_MAX = 101;
|
||||
L_TILLER = R_BED[1] / 2 - Y_POS_AXLE_FRONT + D_AXLE_FRONT / 2 + Z_OFFSET_BED_TO_AXLE * tan(ANGLE_INCLINE_TILLER_MAX - 90);
|
||||
// T_WASHER_UNIVERSAL_JOINT = 2; // Deprecated
|
||||
L_TILLER_EXTENSION = 1000;
|
||||
L_JOINT_TILLER_EXTENSION = 85;
|
||||
SIZE_BOLT_JOINT_TILLER_EXTENSION = SIZE_BOLT_REAR_WHEEL_POSITIONING; // 6;
|
||||
D_WASHER_TILLER_JOINT = D_WASHER_BOLT_REAR_WHEEL_POSITIONING; // 25;
|
||||
T_WASHER_TILLER_JOINT = T_WASHER_BOLT_REAR_WHEEL_POSITIONING; // 3;
|
||||
OFFSET_BOLT_JOINT_TILLER_EXTENSION_AXIAL = SIZE_BOLT_JOINT_TILLER_EXTENSION * 3 / 2;
|
||||
|
||||
D_HANDLE_BAR = 27;
|
||||
W_HANDLE_BAR = 300;
|
||||
|
||||
SIZE_BOLT_FRONT_AXLE_BEARING = 20;
|
||||
DEPTH_BOLT_FRONT_AXLE_BEARING = get_metric_bolt_head_height(SIZE_BOLT_FRONT_AXLE_BEARING);
|
||||
T_JOINT_FRONT_AXLE_TO_TILLER = get_thickness_round_3_way_through_116(D_AXLE_FRONT);
|
||||
T_WASHER_JOINT_FRONT_AXLE_TO_TILLER = 3;
|
||||
D_WASHER_JOINT_FRONT_AXLE_TO_TILLER = 39; // get_metric_bolt_washer_diameter_safe_working_clearance(SIZE_BOLT_FRONT_AXLE_BEARING);
|
||||
COUNT_WASHERS_JOINT_FRONT_AXLE_TO_TILLER = 3;
|
||||
L_BOLT_FRONT_AXLE_BEARING = T_JOINT_FRONT_AXLE_TO_TILLER + 2 * DEPTH_BOLT_FRONT_AXLE_BEARING + D_AXLE_FRONT + COUNT_WASHERS_JOINT_FRONT_AXLE_TO_TILLER * T_WASHER_JOINT_FRONT_AXLE_TO_TILLER;
|
||||
|
||||
T_WASHER_BASE_PLATE = T_WASHER_BOLT_REAR_WHEEL_POSITIONING;
|
||||
D_WASHER_BASE_PLATE = D_WASHER_BOLT_REAR_WHEEL_POSITIONING;
|
||||
|
||||
L_SHAFT_TOP_CRATE = 333;
|
||||
D_SHAFT_TOP_CRATE = 16;
|
||||
D_WASHER_SHAFT_TOP_CRATE = 50; // get_metric_bolt_washer_diameter_safe_working_clearance(D_SHAFT_TOP_CRATE);
|
||||
T_WASHER_SHAFT_TOP_CRATE = 3;
|
||||
COUNT_SHAFTS_TOP_CRATE_X = 2;
|
||||
COUNT_SHAFTS_TOP_CRATE_Y = 3;
|
||||
COUNT_WASHERS_SHAFT_TOP_CRATE_EACH_END = 3;
|
||||
|
||||
|
||||
// Constants
|
||||
SAFETY_FACTOR = 2;
|
||||
PI = 3.1415926536;
|
||||
G = 9.81;
|
||||
|
||||
COLOUR_ROD_THREADED = "Gray";
|
||||
COLOUR_BEAM_ALUMINIUM = "DarkGray";
|
||||
COLOUR_FILAMENT_3D_PRINTER = "HotPink";
|
||||
|
||||
|
||||
// Engineering analysis
|
||||
W_TOTAL_SAFE = M_TOTAL * G * SAFETY_FACTOR;
|
||||
|
||||
SHEAR_STRESS_YIELD_STAINLESS_STEEL = 200 * 10 ^ 6;
|
||||
SHEAR_STRESS_YIELD_ALUMINIUM = 200 * 10 ^ 6;
|
||||
|
||||
/*
|
||||
T_BOLT_MAX = PI * (D_AXLE_FRONT / 1000) ^ 3 / 16 * SHEAR_STRESS_YIELD_ALUMINIUM;
|
||||
|
||||
T_BOLT_ACTUAL = W_TOTAL_SAFE * (3 * T_BEAM / 1000);
|
||||
*/
|
||||
|
||||
T_FRONT_WHEEL_AXIS_CENTRE_Y = W_TOTAL_SAFE * (R_BED[1] / 2 + T_WHEEL / 2) / 1000;
|
||||
T_FRONT_WHEEL_AXIS_X = W_TOTAL_SAFE * (D_WHEEL / 2) / 1000;
|
||||
|
||||
F_FRONT_WHEEL_AXIS_INTERSECTION_Z_MAX = SHEAR_STRESS_YIELD_ALUMINIUM * PI * (SIZE_BOLT / 1000) ^ 3 / 32 / ((R_BED[0] + T_WHEEL) / 1000);
|
||||
|
||||
T_REAR_WHEEL_AXIS_Y_MAX = PI * (D_AXLE_REAR / 1000) ^ 3 / 16 * SHEAR_STRESS_YIELD_ALUMINIUM;
|
||||
// T_REAR_WHEEL_AXIS_Y_ACTUAL = W_TOTAL_SAFE * (T_WHEEL / 2 + SPACING_XY_BED_BORDER + R_FIXING_ROUND[0] / 2) / 1000;
|
||||
|
||||
/* output
|
||||
// echo("L_TILLER: ", L_TILLER, "mm");
|
||||
echo("load safe max: ", W_TOTAL_SAFE, "N");
|
||||
echo("T_front_wheel_axis_centre_y: ", T_FRONT_WHEEL_AXIS_CENTRE_Y, "Nm");
|
||||
echo("T_front_wheel_axis_x: ", T_FRONT_WHEEL_AXIS_X, "Nm - fully dispersed by wheel");
|
||||
echo("F_front_wheel_axis_intersection_z_max: ", F_FRONT_WHEEL_AXIS_INTERSECTION_Z_MAX, "N");
|
||||
echo("T_rear_wheel_axis_y_max: ", T_REAR_WHEEL_AXIS_Y_MAX, "Nm");
|
||||
echo("T_rear_wheel_axis_y_actual: ", T_REAR_WHEEL_AXIS_Y_ACTUAL, "Nm");
|
||||
*/
|
||||
1
docs/.~lock.UBOM.ods#
Normal file
1
docs/.~lock.UBOM.ods#
Normal file
@@ -0,0 +1 @@
|
||||
,teddy,lord-T-1024,20.02.2025 13:01,file:///home/teddy/.config/libreoffice/4;
|
||||
BIN
docs/UBOM.ods
Normal file
BIN
docs/UBOM.ods
Normal file
Binary file not shown.
7
main.json
Normal file
7
main.json
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"parameterSets": {
|
||||
"ANGLE": ""
|
||||
},
|
||||
"parameterSets": "",
|
||||
"fileFormatVersion": "1"
|
||||
}
|
||||
22
main.scad
Normal file
22
main.scad
Normal file
@@ -0,0 +1,22 @@
|
||||
// Molly Dog Towing Cart
|
||||
echo("Shopping");
|
||||
|
||||
include <./config.scad>;
|
||||
use <./models/dog_cart/dog_cart.scad>;
|
||||
|
||||
// Customisable parameters
|
||||
angle_incline_tiller = 20; // [-20:5:135]
|
||||
angle_brake_rod = 60; // [45:5:60]
|
||||
|
||||
$fn = 100;
|
||||
|
||||
// output
|
||||
dog_cart(angle_incline_tiller, angle_brake_rod);
|
||||
|
||||
/*
|
||||
Shopping
|
||||
Components
|
||||
|
||||
Tools
|
||||
M10 tap (HSS) - size change, check spreadsheet
|
||||
*/
|
||||
41
models/bed/bed.scad
Normal file
41
models/bed/bed.scad
Normal file
@@ -0,0 +1,41 @@
|
||||
include <../../config.scad>;
|
||||
use <../fixings/tube_clamp_round_base_plate_132.scad>;
|
||||
|
||||
module bed() {
|
||||
offset_hole_y_front = get_offset_hole_y_round_base_plate_132(D_AXLE_FRONT);
|
||||
d_hole_front = get_diameter_hole_round_base_plate_132(D_AXLE_FRONT);
|
||||
offset_hole_y_rear = get_offset_hole_y_round_base_plate_132(D_AXLE_REAR);
|
||||
d_hole_rear = get_diameter_hole_round_base_plate_132(D_AXLE_REAR);
|
||||
count_shafts_y = 3;
|
||||
color("burlywood") difference() {
|
||||
cube(R_BED, center = true);
|
||||
// front axle leg holes
|
||||
translate([0, Y_POS_AXLE_FRONT, 0]) for (index_side_y = [0 : 1 : 1]) {
|
||||
mirror([0, index_side_y, 0]) {
|
||||
translate([0, offset_hole_y_front, 0]) cylinder(R_BED[2], d_hole_front / 2, d_hole_front / 2, center = true);
|
||||
}
|
||||
}
|
||||
// rear axle leg holes
|
||||
translate([0, Y_POS_AXLE_REAR, 0]) for (index_side_x = [0 : 1 : 1]) {
|
||||
mirror([index_side_x, 0, 0]) {
|
||||
translate([X_POS_AXLE_LEG_REAR, 0, 0]) for (index_side_y = [0 : 1 : 1]) {
|
||||
mirror([0, index_side_y, 0]) {
|
||||
translate([0, offset_hole_y_rear, 0]) cylinder(R_BED[2], d_hole_rear / 2, d_hole_rear / 2, center = true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// top crate perimeter shaft holes
|
||||
for (index_side_x = [0 : 1 : 1]) {
|
||||
mirror([index_side_x, 0, 0]) {
|
||||
translate([R_BED[0] / 2 - D_WASHER_SHAFT_TOP_CRATE / 2, 0, 0]) for (index_shaft_y = [0 : 1 : count_shafts_y]) {
|
||||
translate([0, -R_BED[1] / 2 + D_WASHER_SHAFT_TOP_CRATE / 2 + index_shaft_y * (R_BED[1] - D_WASHER_SHAFT_TOP_CRATE) / (count_shafts_y - 1), 0]) cylinder(R_BED[2], D_SHAFT_TOP_CRATE / 2, D_SHAFT_TOP_CRATE / 2, center = true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// Shopping
|
||||
echo(str("Bed: MDF board ", R_BED[1], "mm x ", R_BED[0], "mm x ", R_BED[2], "mm - x1"));
|
||||
}
|
||||
|
||||
bed();
|
||||
10
models/brake/beam_leg_ballscrew_to_bed.scad
Normal file
10
models/brake/beam_leg_ballscrew_to_bed.scad
Normal file
@@ -0,0 +1,10 @@
|
||||
include <../../config.scad>;
|
||||
use <../common/beam_hollow_square.scad>;
|
||||
|
||||
module beam_leg_ballscrew_to_bed() {
|
||||
color(COLOUR_BEAM_ALUMINIUM) beam_hollow_square(L_LEG_FIXING_BRAKE_BALLSCREW_TO_BED, D_BEAM_BRAKE, T_BEAM_BRAKE);
|
||||
// Shopping
|
||||
// Beam leg ballscrew to bed
|
||||
}
|
||||
|
||||
beam_leg_ballscrew_to_bed();
|
||||
16
models/brake/brake_arm.scad
Normal file
16
models/brake/brake_arm.scad
Normal file
@@ -0,0 +1,16 @@
|
||||
include <../../config.scad>;
|
||||
|
||||
|
||||
module brake_arm() {
|
||||
L_big = 2 * max(R_BRAKE_ARM);
|
||||
color(COLOUR_BEAM_ALUMINIUM) difference() {
|
||||
// body
|
||||
cube(R_BRAKE_ARM, center = true);
|
||||
// chamfer across end face for wheel overlap
|
||||
translate([R_BRAKE_ARM[0] / 2 - R_BRAKE_ARM[1] / 2 * tan(ANGLE_BRAKE_ROD_MAX), 0, 0]) rotate([0, 0, 90 - ANGLE_BRAKE_ROD_MAX]) translate([0, -L_big / 2, -L_big / 2]) cube(L_big, center = false);
|
||||
}
|
||||
// Shopping
|
||||
echo(str("Brake arm: Aluminium sheet ", R_BRAKE_ARM[1], "mm x ", R_BRAKE_ARM[0], "mm x ", R_BRAKE_ARM[2], "mm - x1"));
|
||||
}
|
||||
|
||||
brake_arm();
|
||||
76
models/brake/brake_assembly.scad
Normal file
76
models/brake/brake_assembly.scad
Normal file
@@ -0,0 +1,76 @@
|
||||
include <../../config.scad>;
|
||||
use <../common/metric_bolt.scad>;
|
||||
use <../common/metric_bolt_functions.scad>;
|
||||
use <../common/washer.scad>;
|
||||
use <../fixings/tube_clamp_square_base_plate_132.scad>;
|
||||
use <../fixings/tube_clamp_square_base_plate_132_functions.scad>;
|
||||
use <./brake_assembly_functions.scad>;
|
||||
use <./fixing_ballscrew_to_bed.scad>;
|
||||
use <./power_wheel_assembly.scad>;
|
||||
use <./fixing_brake_ballscrew_to_brake_arms.scad>;
|
||||
use <./brake_arm.scad>;
|
||||
use <./fixing_brake_arm_to_brake_pad.scad>;
|
||||
use <./brake_pad.scad>;
|
||||
use <./fixing_brake_arm_to_rear_axle_leg.scad>;
|
||||
use <./brake_spring_load_assembly.scad>;
|
||||
|
||||
|
||||
|
||||
module brake_assembly(angle_brake_rod) {
|
||||
echo("Brake assembly:");
|
||||
// Y_POS_LEAD_FIXING_BALLSCREW_TO_BRAKE_ARMS
|
||||
y_pos_lead_fixing_ballscrew_to_brake_arms = get_y_pos_lead_fixing_ballscrew_to_brake_arms(angle_brake_rod, Y_POS_AXLE_REAR, X_POS_AXLE_LEG_REAR, X_OFFSET_FIXING_BRAKE_ARM_TO_LEAD_PLATE);
|
||||
y_pos_ballscrew_end_front = -R_BED[1] / 2 + L_BRAKE_BALLSCREW_AXLE;
|
||||
union() {
|
||||
// ballscrew axle
|
||||
color(COLOUR_ROD_THREADED) translate([0, y_pos_ballscrew_end_front, -Z_OFFSET_BALLSCREW_AXLE_TO_BED_BASE]) rotate([90, 0, 0]) cylinder(L_BRAKE_BALLSCREW_AXLE, D_BRAKE_BALLSCREW_AXLE / 2, D_BRAKE_BALLSCREW_AXLE / 2, center = false);
|
||||
// fixing ballscrew to bed front
|
||||
translate([0, y_pos_ballscrew_end_front - Y_OFFSET_BALLSCREW_LEG_FRONT_FIXING_FROM_END, 0]) fixing_ballscrew_to_bed();
|
||||
// fixing ballscrew to bed rear
|
||||
translate([0, -R_BED[1] / 2 + Y_OFFSET_BALLSCREW_LEG_REAR_FIXING_FROM_END, 0]) fixing_ballscrew_to_bed();
|
||||
// ballscrew power wheel
|
||||
translate([0, -R_BED[1] / 2 + Y_OFFSET_BALLSCREW_LEG_REAR_FIXING_FROM_END - D_BEAM_BRAKE / 2 - T_WASHER_BRAKE_BALLSCREW_POWER_WHEEL - T_BRAKE_BALLSCREW_POWER_WHEEL / 2, -Z_OFFSET_BALLSCREW_AXLE_TO_BED_BASE]) power_wheel_assembly();
|
||||
// ballscrew power wheel washer
|
||||
translate([0, -R_BED[1] / 2 + Y_OFFSET_BALLSCREW_LEG_REAR_FIXING_FROM_END - D_BEAM_BRAKE / 2 - T_WASHER_BRAKE_BALLSCREW_POWER_WHEEL / 2, -Z_OFFSET_BALLSCREW_AXLE_TO_BED_BASE]) rotate([90, 0, 0]) washer(T_WASHER_BRAKE_BALLSCREW_POWER_WHEEL, D_WASHER_BRAKE_BALLSCREW_POWER_WHEEL, D_BRAKE_BALLSCREW_AXLE);
|
||||
// fixing ballscrew to brake rod
|
||||
translate([0, y_pos_lead_fixing_ballscrew_to_brake_arms, -Z_OFFSET_BALLSCREW_AXLE_TO_BED_BASE]) {
|
||||
fixing_brake_ballscrew_to_brake_arms();
|
||||
|
||||
for (index_side_x = [0:1:1]) {
|
||||
mirror([index_side_x, 0, 0]) {
|
||||
translate([X_OFFSET_FIXING_BRAKE_ARM_TO_LEAD_PLATE, 0, 0]) rotate([0, 0, -(90 - angle_brake_rod)]) {
|
||||
// brake arm
|
||||
translate([R_BRAKE_ARM[0] / 2, 0, 0]) brake_arm();
|
||||
// fixing brake arm to brake pad
|
||||
translate([R_BRAKE_ARM[0] - X_OFFSET_FIXING_BRAKE_ARM_TO_BRAKE_PAD_FROM_END, 0, R_BRAKE_ARM[2] / 2]) rotate([0, 0, 90 - ANGLE_BRAKE_ROD_MAX]) fixing_brake_arm_to_brake_pad();
|
||||
// brake pad
|
||||
translate([R_BRAKE_ARM[0] - X_OFFSET_FIXING_BRAKE_ARM_TO_BRAKE_PAD_FROM_END, 0, R_BRAKE_ARM[2] / 2 + T_FIXING_BRAKE_ARM_TO_BRAKE_PAD + (W_FIXING_BRAKE_ARM_TO_BRAKE_PAD - T_FIXING_BRAKE_ARM_TO_BRAKE_PAD) / 2]) rotate([0, 0, 90 - ANGLE_BRAKE_ROD_MAX]) translate([T_FIXING_BRAKE_ARM_TO_BRAKE_PAD, 0, 0]) brake_pad();
|
||||
}
|
||||
// fixing brake arm to rear axle leg
|
||||
translate([X_POS_AXLE_LEG_REAR, -y_pos_lead_fixing_ballscrew_to_brake_arms + Y_POS_AXLE_REAR, 0]) fixing_brake_arm_to_rear_axle_leg();
|
||||
}
|
||||
}
|
||||
}
|
||||
// Spring-loading assembly
|
||||
translate([0, y_pos_ballscrew_end_front - Y_OFFSET_BALLSCREW_LEG_FRONT_FIXING_FROM_END + D_BEAM_BRAKE / 2, -Z_OFFSET_BALLSCREW_AXLE_TO_BED_BASE]) brake_spring_load_assembly();
|
||||
}
|
||||
|
||||
// Shopping
|
||||
echo(str("Ballscrew axle: Threaded Steel rod M", D_BRAKE_BALLSCREW_AXLE, " x ", L_BRAKE_BALLSCREW_AXLE, " - x1"));
|
||||
// Fixing ballscrew to bed front
|
||||
// Fixing ballscrew to bed rear
|
||||
// Ballscrew power wheel
|
||||
// Ballscrew power wheel washer
|
||||
// Fixing ballscrew to brake arms
|
||||
// Brake arms
|
||||
// Fixings brake arm to brake pad
|
||||
// Brake pads
|
||||
// fixing brake arm to rear axle leg
|
||||
// Spring-load assembly
|
||||
}
|
||||
|
||||
|
||||
angle_brake_rod = ANGLE_BRAKE_ROD_MAX;
|
||||
|
||||
brake_assembly(angle_brake_rod);
|
||||
|
||||
3
models/brake/brake_assembly_functions.scad
Normal file
3
models/brake/brake_assembly_functions.scad
Normal file
@@ -0,0 +1,3 @@
|
||||
// include <../../config.scad>; // circular reference!
|
||||
|
||||
function get_y_pos_lead_fixing_ballscrew_to_brake_arms(angle_brake_rod, y_pos_axle_rear, x_pos_axle_leg_rear, x_offset_fixing_brake_arm_to_lead_plate) = y_pos_axle_rear + (x_pos_axle_leg_rear - x_offset_fixing_brake_arm_to_lead_plate) / tan(angle_brake_rod); // (X_POS_AXLE_LEG_REAR - X_OFFSET_FIXING_BRAKE_ARM_TO_LEAD_PLATE)
|
||||
13
models/brake/brake_pad.scad
Normal file
13
models/brake/brake_pad.scad
Normal file
@@ -0,0 +1,13 @@
|
||||
include <../../config.scad>;
|
||||
|
||||
|
||||
module brake_pad() {
|
||||
union() {
|
||||
color("black") cube(R_BRAKE_PAD, center = true);
|
||||
color("gray") translate([-R_BRAKE_PAD[0] / 2 - L_BOLT_FIXING_BRAKE_ARM_TO_BRAKE_PAD / 2, 0, 0]) rotate([0, 90, 0]) cylinder(L_BOLT_FIXING_BRAKE_ARM_TO_BRAKE_PAD, SIZE_BOLT_FIXING_BRAKE_ARM_TO_BRAKE_PAD / 2, SIZE_BOLT_FIXING_BRAKE_ARM_TO_BRAKE_PAD / 2, center = true);
|
||||
}
|
||||
// Shopping
|
||||
echo(str("Brake pad: Bike V-brake pad - x1"));
|
||||
}
|
||||
|
||||
brake_pad();
|
||||
43
models/brake/brake_spring_load_assembly.scad
Normal file
43
models/brake/brake_spring_load_assembly.scad
Normal file
@@ -0,0 +1,43 @@
|
||||
include <../../config.scad>;
|
||||
use <../common/metric_bolt_functions.scad>;
|
||||
use <../common/metric_nut.scad>;
|
||||
use <../common/compression_spring.scad>;
|
||||
use <../common/washer.scad>;
|
||||
|
||||
|
||||
module brake_spring_load_assembly() {
|
||||
echo("Brake spring-load assembly:");
|
||||
/* design variables
|
||||
echo(str("DELTA_L_SPRING_BALLSCREW_MAX: ", DELTA_L_SPRING_BALLSCREW_MAX, "mm")); = 19
|
||||
*/
|
||||
L_spring_free = 110;
|
||||
d_spring_outer = 21.6;
|
||||
d_spring_wire = 1.6;
|
||||
pitch = L_spring_free / 8;
|
||||
|
||||
h_nut = get_metric_bolt_head_height(D_BRAKE_BALLSCREW_AXLE);
|
||||
d_nut = get_metric_bolt_head_diameter(D_BRAKE_BALLSCREW_AXLE);
|
||||
|
||||
union() {
|
||||
// washer rear
|
||||
rotate([-90, 0, 0]) washer(T_WASHER_BRAKE_BALLSCREW_POWER_WHEEL, D_WASHER_BRAKE_BALLSCREW_POWER_WHEEL, D_BRAKE_BALLSCREW_AXLE, false);
|
||||
// spring
|
||||
translate([0, T_WASHER_BRAKE_BALLSCREW_POWER_WHEEL + L_spring_free / 2, 0]) rotate([-90, 0, 0]) compression_spring(L_spring_free, d_spring_outer, d_spring_outer - d_spring_wire * 2, pitch);
|
||||
// washer front
|
||||
translate([0, T_WASHER_BRAKE_BALLSCREW_POWER_WHEEL + L_spring_free, 0]) rotate([-90, 0, 0]) washer(T_WASHER_BRAKE_BALLSCREW_POWER_WHEEL, D_WASHER_BRAKE_BALLSCREW_POWER_WHEEL, D_BRAKE_BALLSCREW_AXLE, false);
|
||||
// nut(s)
|
||||
color("gray") for (index_nut = [0 : 1 : 1]) {
|
||||
translate([0, T_WASHER_BRAKE_BALLSCREW_POWER_WHEEL * 2 + L_spring_free + index_nut * h_nut, 0]) rotate([-90, 0, 0]) rotate([0, 0, index_nut * 30]) metric_nut(D_BRAKE_BALLSCREW_AXLE, centre = false); // cylinder(h_nut, d_nut / 2, d_nut / 2, center = false);
|
||||
}
|
||||
}
|
||||
// Shopping
|
||||
// spring
|
||||
// https://uk.rs-online.com/web/p/compression-springs/0121242
|
||||
// washers
|
||||
// nuts
|
||||
}
|
||||
|
||||
// $fn = 20;
|
||||
brake_spring_load_assembly();
|
||||
|
||||
|
||||
42
models/brake/fixing_ballscrew_to_bed.scad
Normal file
42
models/brake/fixing_ballscrew_to_bed.scad
Normal file
@@ -0,0 +1,42 @@
|
||||
include <../../config.scad>;
|
||||
use <../common/metric_bolt.scad>;
|
||||
use <../common/metric_bolt_functions.scad>;
|
||||
use <../common/washer.scad>;
|
||||
use <../fixings/tube_clamp_square_base_plate_132.scad>;
|
||||
use <../fixings/tube_clamp_square_base_plate_132_functions.scad>;
|
||||
use <./beam_leg_ballscrew_to_bed.scad>;
|
||||
|
||||
|
||||
module fixing_ballscrew_to_bed() {
|
||||
echo("Fixing ballscrew to bed: ");
|
||||
y_offset_hole_bed_fastener = get_offset_hole_x_square_base_plate_132(D_BEAM_BRAKE);
|
||||
d_hole_fastener = get_diameter_hole_square_base_plate_132();
|
||||
h_head_fastener = get_metric_bolt_head_height(d_hole_fastener);
|
||||
L_fastener = R_BED[2] + 2 * (T_WASHER_BASE_PLATE + h_head_fastener) + R_BASE_PLATE_FIXING_LEG_BRAKE_BALLSCREW_TO_BED[2] + L_BOLT_EXTENSION;
|
||||
// d_washer_outer = get_metric_bolt_washer_diameter_safe_working_clearance(d_hole_fastener);
|
||||
union() {
|
||||
// fixing tube clamp
|
||||
rotate([0, 180, 90]) tube_clamp_square_base_plate_132(D_BEAM_BRAKE);
|
||||
|
||||
for (index_side_y = [0:1:1]) {
|
||||
mirror([0, index_side_y, 0]) translate([0, y_offset_hole_bed_fastener, 0]) {
|
||||
// fastener bolt
|
||||
translate([0, 0, -L_fastener / 2 + R_BED[2] + T_WASHER_BASE_PLATE + h_head_fastener]) metric_bolt(d_hole_fastener, L_fastener, true, L_BOLT_EXTENSION);
|
||||
// fastener washers
|
||||
// bed side
|
||||
translate([0, 0, R_BED[2] + T_WASHER_BASE_PLATE / 2]) washer(T_WASHER_BASE_PLATE, D_WASHER_BASE_PLATE, d_hole_fastener);
|
||||
// axle side
|
||||
translate([0, 0, -R_BASE_PLATE_FIXING_LEG_BRAKE_BALLSCREW_TO_BED[2] - T_WASHER_BASE_PLATE / 2]) washer(T_WASHER_BASE_PLATE, D_WASHER_BASE_PLATE, d_hole_fastener);
|
||||
}
|
||||
}
|
||||
// leg
|
||||
translate([0, 0, -R_BASE_PLATE_FIXING_LEG_BRAKE_BALLSCREW_TO_BED[2] - L_LEG_FIXING_BRAKE_BALLSCREW_TO_BED / 2]) beam_leg_ballscrew_to_bed();
|
||||
}
|
||||
// Shopping
|
||||
// Fixing leg to bed
|
||||
// Fixing fasteners
|
||||
// Fixing fastener washers
|
||||
// Leg
|
||||
}
|
||||
|
||||
fixing_ballscrew_to_bed();
|
||||
50
models/brake/fixing_brake_arm_to_brake_pad.scad
Normal file
50
models/brake/fixing_brake_arm_to_brake_pad.scad
Normal file
@@ -0,0 +1,50 @@
|
||||
include <../../config.scad>;
|
||||
use <../common/angle_beam.scad>;
|
||||
use <../common/metric_bolt.scad>;
|
||||
use <../common/metric_bolt_functions.scad>;
|
||||
use <../common/washer.scad>;
|
||||
|
||||
|
||||
module fixing_brake_arm_to_brake_pad() {
|
||||
echo("Fixing brake arm to brake pad:");
|
||||
h_head_fastener = get_metric_bolt_head_height(SIZE_BOLT_FIXING_BRAKE_ARM_TO_BRAKE_PAD);
|
||||
L_fastener = 2 * (h_head_fastener + T_WASHER_BOLT_FIXING_BRAKE_ARM_TO_BRAKE_PAD) + R_BRAKE_ARM[2] + T_FIXING_BRAKE_ARM_TO_BRAKE_PAD + L_BOLT_EXTENSION;
|
||||
union() {
|
||||
// fixing
|
||||
color(COLOUR_BEAM_ALUMINIUM) difference() {
|
||||
// body
|
||||
rotate([90, 0, 180]) translate([0, 0, -L_FIXING_BRAKE_ARM_TO_BRAKE_PAD / 2]) angle_beam(L_FIXING_BRAKE_ARM_TO_BRAKE_PAD, W_FIXING_BRAKE_ARM_TO_BRAKE_PAD, T_FIXING_BRAKE_ARM_TO_BRAKE_PAD, false);
|
||||
// brake pad fastener hole
|
||||
translate([0, 0, T_FIXING_BRAKE_ARM_TO_BRAKE_PAD + (W_FIXING_BRAKE_ARM_TO_BRAKE_PAD - T_FIXING_BRAKE_ARM_TO_BRAKE_PAD) / 2]) rotate([0, 90, 0]) cylinder(W_FIXING_BRAKE_ARM_TO_BRAKE_PAD * 2, SIZE_BOLT_FIXING_BRAKE_ARM_TO_BRAKE_PAD / 2, SIZE_BOLT_FIXING_BRAKE_ARM_TO_BRAKE_PAD / 2, center = true);
|
||||
// brake arm fastener holes
|
||||
for (index_side_y = [0:1:1]) {
|
||||
mirror([0, index_side_y, 0]) {
|
||||
translate([-T_FIXING_BRAKE_ARM_TO_BRAKE_PAD - (W_FIXING_BRAKE_ARM_TO_BRAKE_PAD - T_FIXING_BRAKE_ARM_TO_BRAKE_PAD) / 2, D_WASHER_BOLT_FIXING_BRAKE_ARM_TO_BRAKE_PAD, 0]) cylinder(W_FIXING_BRAKE_ARM_TO_BRAKE_PAD * 2, SIZE_BOLT_FIXING_BRAKE_ARM_TO_BRAKE_PAD / 2, SIZE_BOLT_FIXING_BRAKE_ARM_TO_BRAKE_PAD / 2, center = true);
|
||||
}
|
||||
}
|
||||
}
|
||||
// fasteners to brake arm
|
||||
for (index_side_y = [0:1:1]) {
|
||||
mirror([0, index_side_y, 0]) {
|
||||
translate([-T_FIXING_BRAKE_ARM_TO_BRAKE_PAD - (W_FIXING_BRAKE_ARM_TO_BRAKE_PAD - T_FIXING_BRAKE_ARM_TO_BRAKE_PAD) / 2, D_WASHER_BOLT_FIXING_BRAKE_ARM_TO_BRAKE_PAD, 0]) {
|
||||
// bolt
|
||||
translate([0, 0, -L_fastener / 2 + T_FIXING_BRAKE_ARM_TO_BRAKE_PAD + T_WASHER_BOLT_FIXING_BRAKE_ARM_TO_BRAKE_PAD + h_head_fastener]) metric_bolt(SIZE_BOLT_FIXING_BRAKE_ARM_TO_BRAKE_PAD, L_fastener, true, L_BOLT_EXTENSION);
|
||||
// washers
|
||||
// upper
|
||||
translate([0, 0, T_WASHER_BOLT_FIXING_BRAKE_ARM_TO_BRAKE_PAD / 2 + T_FIXING_BRAKE_ARM_TO_BRAKE_PAD]) washer(T_WASHER_BOLT_FIXING_BRAKE_ARM_TO_BRAKE_PAD, D_WASHER_BOLT_FIXING_BRAKE_ARM_TO_BRAKE_PAD, SIZE_BOLT_FIXING_BRAKE_ARM_TO_BRAKE_PAD);
|
||||
// lower
|
||||
translate([0, 0, -T_WASHER_BOLT_FIXING_BRAKE_ARM_TO_BRAKE_PAD / 2 - R_BRAKE_ARM[2]]) washer(T_WASHER_BOLT_FIXING_BRAKE_ARM_TO_BRAKE_PAD, D_WASHER_BOLT_FIXING_BRAKE_ARM_TO_BRAKE_PAD, SIZE_BOLT_FIXING_BRAKE_ARM_TO_BRAKE_PAD);
|
||||
}
|
||||
}
|
||||
}
|
||||
// fastener to brake pad
|
||||
// washer
|
||||
translate([-T_FIXING_BRAKE_ARM_TO_BRAKE_PAD - T_WASHER_BOLT_FIXING_BRAKE_ARM_TO_BRAKE_PAD / 2, 0, T_FIXING_BRAKE_ARM_TO_BRAKE_PAD + (W_FIXING_BRAKE_ARM_TO_BRAKE_PAD - T_FIXING_BRAKE_ARM_TO_BRAKE_PAD) / 2]) rotate([0, 90, 0]) washer(T_WASHER_BOLT_FIXING_BRAKE_ARM_TO_BRAKE_PAD, D_WASHER_BOLT_FIXING_BRAKE_ARM_TO_BRAKE_PAD, SIZE_BOLT_FIXING_BRAKE_ARM_TO_BRAKE_PAD);
|
||||
}
|
||||
// Shopping
|
||||
// Angle beam
|
||||
// Fasteners
|
||||
// Washers
|
||||
}
|
||||
|
||||
fixing_brake_arm_to_brake_pad();
|
||||
35
models/brake/fixing_brake_arm_to_rear_axle_leg.scad
Normal file
35
models/brake/fixing_brake_arm_to_rear_axle_leg.scad
Normal file
@@ -0,0 +1,35 @@
|
||||
include <../../config.scad>;
|
||||
use <../common/metric_bolt.scad>;
|
||||
use <../common/metric_bolt_functions.scad>;
|
||||
use <../common/washer.scad>;
|
||||
|
||||
|
||||
module fixing_brake_arm_to_rear_axle_leg() {
|
||||
echo("Fixing brake arm to rear axle leg:");
|
||||
count_washers_each_end = 3;
|
||||
h_nut = get_metric_bolt_head_height(SIZE_BOLT_FIXING_BRAKE_ARM_TO_REAR_AXLE_LEG);
|
||||
L_bolt = D_AXLE_REAR + 2 * (T_WASHER_BOLT_FIXING_BRAKE_ARM_TO_REAR_AXLE_LEG * count_washers_each_end + h_nut) + L_BOLT_EXTENSION;
|
||||
rotate([0, 0, ANGLE_BRAKE_ROD_MAX]) for (index_side_z = [0 : 1 : 1]) {
|
||||
mirror([0, 0, index_side_z]) translate([0, 0, R_BRAKE_ARM[2] / 2]) {
|
||||
// axle washer
|
||||
translate([0, 0, 0]) washer(T_WASHER_AXLE_FIXING_BRAKE_ARM_TO_REAR_AXLE_LEG, D_WASHER_AXLE_FIXING_BRAKE_ARM_TO_REAR_AXLE_LEG, D_AXLE_REAR, centre = false);
|
||||
// bolt
|
||||
translate([0, -L_bolt / 2 + D_AXLE_REAR / 2 + T_WASHER_BOLT_FIXING_BRAKE_ARM_TO_REAR_AXLE_LEG + h_nut, T_WASHER_AXLE_FIXING_BRAKE_ARM_TO_REAR_AXLE_LEG + D_WASHER_BOLT_FIXING_BRAKE_ARM_TO_REAR_AXLE_LEG / 2]) rotate([-90, 0, 0]) metric_bolt(SIZE_BOLT_FIXING_BRAKE_ARM_TO_REAR_AXLE_LEG, L_bolt, true, L_BOLT_EXTENSION);
|
||||
// bolt washer
|
||||
for (index_washer = [0 : 1 : count_washers_each_end]) {
|
||||
// front
|
||||
translate([0, D_AXLE_REAR / 2 + index_washer * T_WASHER_BOLT_FIXING_BRAKE_ARM_TO_REAR_AXLE_LEG, T_WASHER_AXLE_FIXING_BRAKE_ARM_TO_REAR_AXLE_LEG + D_WASHER_BOLT_FIXING_BRAKE_ARM_TO_REAR_AXLE_LEG / 2]) rotate([-90, 0, 0]) washer(T_WASHER_BOLT_FIXING_BRAKE_ARM_TO_REAR_AXLE_LEG, D_WASHER_BOLT_FIXING_BRAKE_ARM_TO_REAR_AXLE_LEG, SIZE_BOLT_FIXING_BRAKE_ARM_TO_REAR_AXLE_LEG, centre = false);
|
||||
// rear
|
||||
translate([0, -D_AXLE_REAR / 2 - index_washer * T_WASHER_BOLT_FIXING_BRAKE_ARM_TO_REAR_AXLE_LEG, T_WASHER_AXLE_FIXING_BRAKE_ARM_TO_REAR_AXLE_LEG + D_WASHER_BOLT_FIXING_BRAKE_ARM_TO_REAR_AXLE_LEG / 2]) rotate([90, 0, 0]) washer(T_WASHER_BOLT_FIXING_BRAKE_ARM_TO_REAR_AXLE_LEG, D_WASHER_BOLT_FIXING_BRAKE_ARM_TO_REAR_AXLE_LEG, SIZE_BOLT_FIXING_BRAKE_ARM_TO_REAR_AXLE_LEG, centre = false);
|
||||
}
|
||||
}
|
||||
}
|
||||
// Shopping
|
||||
// Axle washers
|
||||
// Bolts
|
||||
// Bolt washers front
|
||||
// Bolt washers rear
|
||||
}
|
||||
|
||||
fixing_brake_arm_to_rear_axle_leg();
|
||||
|
||||
29
models/brake/fixing_brake_ballscrew_to_brake_arms.scad
Normal file
29
models/brake/fixing_brake_ballscrew_to_brake_arms.scad
Normal file
@@ -0,0 +1,29 @@
|
||||
include <../../config.scad>;
|
||||
use <../common/metric_nut.scad>;
|
||||
use <../common/washer.scad>;
|
||||
|
||||
module fixing_brake_ballscrew_to_brake_arms() {
|
||||
h_nut = get_metric_bolt_head_height(D_BRAKE_BALLSCREW_AXLE);
|
||||
count_nuts_each_side = 2;
|
||||
union() {
|
||||
// ballscrew positioning plate
|
||||
color(COLOUR_FILAMENT_3D_PRINTER) cube(R_LEAD_FIXING_BRAKE_BALLSCREW_TO_BRAKE_ARMS, center = true);
|
||||
|
||||
for (index_side_y = [0:1:1]) {
|
||||
mirror([0, index_side_y, 0]) {
|
||||
// washers
|
||||
translate([0, R_LEAD_FIXING_BRAKE_BALLSCREW_TO_BRAKE_ARMS[1] / 2 + T_WASHER_BRAKE_BALLSCREW_POWER_WHEEL / 2, 0]) rotate([-90, 0, 0]) washer(T_WASHER_BRAKE_BALLSCREW_POWER_WHEEL, D_WASHER_BRAKE_BALLSCREW_POWER_WHEEL, D_BRAKE_BALLSCREW_AXLE);
|
||||
// nuts
|
||||
for (index_nut = [0 : 1 : count_nuts_each_side - 1]) {
|
||||
translate([0, R_LEAD_FIXING_BRAKE_BALLSCREW_TO_BRAKE_ARMS[1] / 2 + T_WASHER_BRAKE_BALLSCREW_POWER_WHEEL + h_nut * index_nut, 0]) rotate([-90, 0, 0]) rotate([0, 0, 30 * index_nut]) metric_nut(D_BRAKE_BALLSCREW_AXLE, centre = false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// Shopping
|
||||
echo("Fixing brake ballscrew to brake arms: 3D printed component - x1");
|
||||
// Axle fastener washers
|
||||
// Axle fastener nuts
|
||||
}
|
||||
|
||||
fixing_brake_ballscrew_to_brake_arms();
|
||||
39
models/brake/power_wheel_assembly.scad
Normal file
39
models/brake/power_wheel_assembly.scad
Normal file
@@ -0,0 +1,39 @@
|
||||
include <../../config.scad>;
|
||||
use <../common/beam_hexagonal.scad>
|
||||
use <../common/metric_nut.scad>;
|
||||
use <../common/metric_bolt_functions.scad>;
|
||||
use <../common/washer.scad>
|
||||
|
||||
|
||||
module power_wheel_assembly() {
|
||||
echo("Power wheel assembly:");
|
||||
d_nut = get_metric_bolt_head_diameter(D_BRAKE_BALLSCREW_AXLE);
|
||||
h_nut = get_metric_bolt_head_height(D_BRAKE_BALLSCREW_AXLE);
|
||||
union() {
|
||||
// power wheel
|
||||
rotate([90, 0, 0]) {
|
||||
color(COLOUR_FILAMENT_3D_PRINTER) difference() {
|
||||
// body
|
||||
cylinder(T_BRAKE_BALLSCREW_POWER_WHEEL, D_BRAKE_BALLSCREW_POWER_WHEEL / 2, D_BRAKE_BALLSCREW_POWER_WHEEL / 2, center = true);
|
||||
// nut slot
|
||||
beam_hexagonal(h_nut, d_nut, centre = true, suppress_shopping_outputs = true); // cylinder(T_BRAKE_BALLSCREW_POWER_WHEEL, d_nut / 2, d_nut / 2, center = true);
|
||||
}
|
||||
// ballscrew bearing (nut)
|
||||
/*
|
||||
color("gray") difference() {
|
||||
// body
|
||||
cylinder(T_BRAKE_BALLSCREW_POWER_WHEEL, d_nut / 2, d_nut / 2, center = true);
|
||||
// hole
|
||||
cylinder(T_BRAKE_BALLSCREW_POWER_WHEEL, D_BRAKE_BALLSCREW_AXLE / 2, D_BRAKE_BALLSCREW_AXLE / 2, center = true);
|
||||
}
|
||||
*/
|
||||
metric_nut(D_BRAKE_BALLSCREW_AXLE);
|
||||
}
|
||||
}
|
||||
// Shopping
|
||||
echo("Power wheel: 3D printed component - x1");
|
||||
// Power wheel bearing (nut)
|
||||
}
|
||||
|
||||
power_wheel_assembly();
|
||||
|
||||
13
models/common/angle_beam.scad
Normal file
13
models/common/angle_beam.scad
Normal file
@@ -0,0 +1,13 @@
|
||||
|
||||
module angle_beam(L, w, t, centre = true) {
|
||||
R_offset_centre = [-w / 2, -w / 2, -L / 2];
|
||||
translate(centre ? R_offset_centre : [0, 0, 0]) union() {
|
||||
cube([w, t, L], center = false);
|
||||
cube([t, w, L], center = false);
|
||||
}
|
||||
// Shopping
|
||||
echo(str("Rectangular Aluminium angle beam: Rectangular Aluminium angle beam ", L, "mm x ", w, "mm x ", t, "mm - x1"));
|
||||
// https://www.metals4u.co.uk/materials/aluminium/aluminium-angle/aa25-4x25-4x4-8-p
|
||||
}
|
||||
|
||||
angle_beam(500, 50, 5);
|
||||
51
models/common/ball_socket_joint.scad
Normal file
51
models/common/ball_socket_joint.scad
Normal file
@@ -0,0 +1,51 @@
|
||||
include <../../config.scad>;
|
||||
|
||||
/*
|
||||
function get_universal_joint_length() = 40;
|
||||
function get_universal_joint_d_bore_hole() = 6;
|
||||
function get_universal_joint_d_hole() = 4;
|
||||
function get_universal_joint_d() = 11;
|
||||
function get_universal_joint_thickness() = (get_universal_joint_d() - get_universal_joint_d_bore_hole()) / 2;
|
||||
function get_universal_joint_joint_axial_offset() = get_universal_joint_thickness() * 2;
|
||||
function get_universal_joint_pin_axial_offset() = get_universal_joint_thickness() + get_universal_joint_d_hole() / 2;
|
||||
|
||||
module ball_socket_joint() {
|
||||
L = get_universal_joint_length();
|
||||
t = get_universal_joint_thickness();
|
||||
joint_axial_offset = get_universal_joint_joint_axial_offset();
|
||||
translate([L / 2, 0, 0]) mirror([1, 0, 0]) universal_joint_half();
|
||||
translate([L / 2 - joint_axial_offset, 0, 0]) rotate([90, -ANGLE_INCLINE_TILLER, 0]) translate([-joint_axial_offset, 0, 0]) universal_joint_half();
|
||||
}
|
||||
|
||||
module universal_joint_half() {
|
||||
d_hole_bore = get_universal_joint_d_bore_hole();
|
||||
d_hole = get_universal_joint_d_hole();
|
||||
d = get_universal_joint_d();
|
||||
L = get_universal_joint_length();
|
||||
t = get_universal_joint_thickness();
|
||||
joint_axial_offset = get_universal_joint_joint_axial_offset();
|
||||
pin_axial_offset = get_universal_joint_pin_axial_offset();
|
||||
color("orange") union() {
|
||||
difference() {
|
||||
// body
|
||||
rotate([0, 90, 0]) cylinder(L / 2, d / 2, d / 2, center = false);
|
||||
// threaded hole
|
||||
translate([L - pin_axial_offset, 0, 0]) cylinder(d, d_hole / 2, d_hole / 2, center = true);
|
||||
// bore hole
|
||||
rotate([0, 90, 0]) cylinder(L / 2, d_hole / 2, d_hole / 2, center = false);
|
||||
// joint slot
|
||||
translate([L / 8, 0, 0]) cube([L / 4, d - t * 2, d], center = true);
|
||||
}
|
||||
// joint
|
||||
translate([joint_axial_offset, 0, 0]) rotate([90, 0, 0]) cylinder(d, t, t, center = true);
|
||||
}
|
||||
}
|
||||
|
||||
// output
|
||||
translate([100, 0, 0]) universal_joint_half();
|
||||
universal_joint();
|
||||
|
||||
*/
|
||||
|
||||
// shopping
|
||||
// https://www.amazon.co.uk/HiPicco-Universal-M5-Automotive-Cupboard/dp/B0BK28WXY8/ref=sr_1_21?crid=6A6OMRNKNXFR&dib=eyJ2IjoiMSJ9.e8gSWrg3UPxR5gMbATNC91I6qERE0rN5FCcOtnZJmGbFIHW9Rz6Rtq02WZj_C2CYgbwA8KHdd1W1xyOxZrH60UtwiGKd9MkmAbd09h9ACi4yGnbOLjhWb-Iboe0IZ_tvxh3XFdo4ygZ-iV98DODCXzl1WdVpTyUg3N4bok5qGtTP2CWfzPOmUFwyTe7_snV4fb7jlTGHK_ks3tR4FSDiUtCwEnuzxJUqdZSRNp4EhGo.2_e9Kal7A7FfEcIzWVEzQXH2zOWiECkGj9UqjIb_8XQ&dib_tag=se&keywords=metric%2Bball%2BJOINT&qid=1739814661&sprefix=metric%2Bball%2Bjoint%2Caps%2C99&sr=8-21&th=1
|
||||
13
models/common/beam_hexagonal.scad
Normal file
13
models/common/beam_hexagonal.scad
Normal file
@@ -0,0 +1,13 @@
|
||||
// include <../../config.scad>;
|
||||
|
||||
module beam_hexagonal(L, d, centre = true, suppress_shopping_outputs = false) {
|
||||
radius = d / 2;
|
||||
linear_extrude(L, center = centre) polygon([[radius, 0], [radius * cos(60), radius * sin(60)], [radius * cos(120), radius * sin(120)], [radius * cos(180), radius * sin(180)], [radius * cos(240), radius * sin(240)], [radius * cos(300), radius * sin(300)]]);
|
||||
// Shopping
|
||||
if (!suppress_shopping_outputs) {
|
||||
echo(str("Hexagonal beam: Hexagonal beam Φ", d, "mm x ", L, "mm - x1"));
|
||||
}
|
||||
}
|
||||
|
||||
// $fn = 200;
|
||||
beam_hexagonal(500, 50);
|
||||
13
models/common/beam_hollow_rectangular.scad
Normal file
13
models/common/beam_hollow_rectangular.scad
Normal file
@@ -0,0 +1,13 @@
|
||||
|
||||
module beam_hollow_rectangular(L, w, d, t, suppress_shopping_outputs = false) {
|
||||
difference() {
|
||||
cube([w, d, L], center = true);
|
||||
cube([w - t * 2, d - t * 2, L], center = true);
|
||||
}
|
||||
// Shopping
|
||||
if (!suppress_shopping_outputs) {
|
||||
echo(str("Rectangular Aluminium hollow beam: Rectangular Aluminium hollow beam ", L, "mm x ", w, "mm x ", d, "mm x ", t, "mm - x1"));
|
||||
}
|
||||
}
|
||||
|
||||
beam_hollow_rectangular(500, 50, 30, 5);
|
||||
10
models/common/beam_hollow_square.scad
Normal file
10
models/common/beam_hollow_square.scad
Normal file
@@ -0,0 +1,10 @@
|
||||
include <../../config.scad>;
|
||||
use <./beam_hollow_rectangular.scad>;
|
||||
|
||||
module beam_hollow_square(L, D, T) {
|
||||
color(COLOUR_BEAM_ALUMINIUM) beam_hollow_rectangular(L, D, D, T, suppress_shopping_outputs = true);
|
||||
// Shopping
|
||||
echo(str("Square Aluminium hollow beam: Square Aluminium hollow beam ", L, "mm x ", D, "mm x ", D, "mm x ", T, "mm - x1"));
|
||||
}
|
||||
|
||||
beam_hollow_square(L, D, T);
|
||||
7
models/common/compression_spring.json
Normal file
7
models/common/compression_spring.json
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"parameterSets": {
|
||||
"ANGLE": ""
|
||||
},
|
||||
"parameterSets": "",
|
||||
"fileFormatVersion": "1"
|
||||
}
|
||||
23
models/common/compression_spring.scad
Normal file
23
models/common/compression_spring.scad
Normal file
@@ -0,0 +1,23 @@
|
||||
// include <../../config.scad>;
|
||||
|
||||
module compression_spring(L_free, d_outer, d_inner, pitch) {
|
||||
r_wire = (d_outer - d_inner) / 2;
|
||||
r_mean = (d_outer + d_inner) / 4;
|
||||
angle_rotation = 360 * L_free / pitch;
|
||||
color("DimGray") union() {
|
||||
difference() {
|
||||
// spiral
|
||||
linear_extrude(height = L_free - r_wire * 2, center = true, convexity = 10, twist = angle_rotation) translate([r_mean, 0, 0]) scale([1, 3, 1]) circle(r_wire);
|
||||
// end blocks
|
||||
}
|
||||
// ring top
|
||||
translate([0, 0, L_free / 2 - r_wire]) rotate_extrude(angle = 360) translate([r_mean, 0, 0]) circle(r_wire);
|
||||
// ring bottom
|
||||
translate([0, 0, -L_free / 2 + r_wire]) rotate_extrude(angle = 360) translate([r_mean, 0, 0]) circle(r_wire);
|
||||
}
|
||||
// Shopping
|
||||
echo(str("Compression spring: Compression spring Φ", d_outer, "mm x ", d_inner, "mm x ", L_free, "mm - x1"));
|
||||
}
|
||||
|
||||
// $fn = 20;
|
||||
compression_spring(100, 25, 20, 10);
|
||||
12
models/common/hollow_cuboid.scad
Normal file
12
models/common/hollow_cuboid.scad
Normal file
@@ -0,0 +1,12 @@
|
||||
// include <../../config.scad>;
|
||||
|
||||
module hollow_cuboid(R, t) {
|
||||
difference() {
|
||||
cube(R, center = true);
|
||||
cube([R[0] - t * 2, R[1] - t * 2, R[2] - t * 2], center = true);
|
||||
}
|
||||
// Shopping
|
||||
echo(str("Hollow cuboid: Hollow cuboid ", R[0], "mm x ", R[1], "mm x ", R[2], "mm x ", R[3], "mm - x1"));
|
||||
}
|
||||
|
||||
hollow_cuboid([100, 200, 300], 5);
|
||||
28
models/common/metric_bolt.scad
Normal file
28
models/common/metric_bolt.scad
Normal file
@@ -0,0 +1,28 @@
|
||||
// include <../../config.scad>;
|
||||
use <./beam_hexagonal.scad>;
|
||||
use <./metric_bolt_functions.scad>;
|
||||
use <./metric_nut.scad>;
|
||||
|
||||
module metric_bolt(size, length, has_nut = true, offset_nut_from_end = 0) {
|
||||
echo("Metric bolt assembly:");
|
||||
head_height = get_metric_bolt_head_height(size);
|
||||
head_diameter = get_metric_bolt_head_diameter(size);
|
||||
head_radius = head_diameter / 2;
|
||||
color("gray") union() {
|
||||
// Stem
|
||||
cylinder(length, size / 2, size / 2, center = true);
|
||||
// Head
|
||||
translate([0, 0, length / 2 - size / 2]) beam_hexagonal(head_height, head_diameter, centre = true, suppress_shopping_outputs = true);
|
||||
if (has_nut) {
|
||||
// Nut
|
||||
translate([0, 0, -(length / 2 - size / 2) + offset_nut_from_end]) metric_nut(size);
|
||||
}
|
||||
}
|
||||
// Shopping
|
||||
echo(str("Bolt: Bolt M", size, " x ", length, "mm - x1"));
|
||||
}
|
||||
|
||||
// $fn = 200;
|
||||
metric_bolt(12, 100);
|
||||
translate([30, 0, 0]) metric_bolt(12, 100, false);
|
||||
translate([60, 0, 0]) metric_bolt(12, 100, true, 5);
|
||||
9
models/common/metric_bolt_functions.scad
Normal file
9
models/common/metric_bolt_functions.scad
Normal file
@@ -0,0 +1,9 @@
|
||||
|
||||
function get_metric_bolt_head_height(size) = size;
|
||||
function get_metric_bolt_head_diameter(size) = size * 2;
|
||||
function get_metric_bolt_washer_diameter_safe_working_clearance(size) =
|
||||
(size < 20) ?
|
||||
4 * size
|
||||
:
|
||||
3 * size
|
||||
;
|
||||
7
models/common/metric_nut.json
Normal file
7
models/common/metric_nut.json
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"parameterSets": {
|
||||
"ANGLE": ""
|
||||
},
|
||||
"parameterSets": "",
|
||||
"fileFormatVersion": "1"
|
||||
}
|
||||
20
models/common/metric_nut.scad
Normal file
20
models/common/metric_nut.scad
Normal file
@@ -0,0 +1,20 @@
|
||||
// include <../../config.scad>;
|
||||
use <./beam_hexagonal.scad>;
|
||||
use <./metric_bolt_functions.scad>;
|
||||
|
||||
module metric_nut(size, centre = true) {
|
||||
height = get_metric_bolt_head_height(size);
|
||||
diameter = get_metric_bolt_head_diameter(size);
|
||||
radius = diameter / 2;
|
||||
color("gray") difference() {
|
||||
// body
|
||||
beam_hexagonal(height, diameter, centre = centre, suppress_shopping_outputs = true);
|
||||
// hole
|
||||
cylinder(height, size / 2, size / 2, center = centre);
|
||||
}
|
||||
// Shopping
|
||||
echo(str("Nut: Nut M", size, " - x1"));
|
||||
}
|
||||
|
||||
// $fn = 200;
|
||||
metric_nut(12);
|
||||
49
models/common/universal_joint.scad
Normal file
49
models/common/universal_joint.scad
Normal file
@@ -0,0 +1,49 @@
|
||||
include <../../config.scad>;
|
||||
|
||||
function get_universal_joint_length() = 40;
|
||||
function get_universal_joint_d_bore_hole() = 6;
|
||||
function get_universal_joint_d_hole() = 4;
|
||||
function get_universal_joint_d() = 11;
|
||||
function get_universal_joint_thickness() = (get_universal_joint_d() - get_universal_joint_d_bore_hole()) / 2;
|
||||
function get_universal_joint_joint_axial_offset() = get_universal_joint_thickness() * 2;
|
||||
function get_universal_joint_pin_axial_offset() = get_universal_joint_thickness() + get_universal_joint_d_hole() / 2;
|
||||
|
||||
module universal_joint() {
|
||||
echo("Universal joint assembly: ERROR MISSING");
|
||||
L = get_universal_joint_length();
|
||||
t = get_universal_joint_thickness();
|
||||
joint_axial_offset = get_universal_joint_joint_axial_offset();
|
||||
translate([L / 2, 0, 0]) mirror([1, 0, 0]) universal_joint_half();
|
||||
translate([L / 2 - joint_axial_offset, 0, 0]) rotate([90, -ANGLE_INCLINE_TILLER, 0]) translate([-joint_axial_offset, 0, 0]) universal_joint_half();
|
||||
}
|
||||
|
||||
module universal_joint_half() {
|
||||
d_hole_bore = get_universal_joint_d_bore_hole();
|
||||
d_hole = get_universal_joint_d_hole();
|
||||
d = get_universal_joint_d();
|
||||
L = get_universal_joint_length();
|
||||
t = get_universal_joint_thickness();
|
||||
joint_axial_offset = get_universal_joint_joint_axial_offset();
|
||||
pin_axial_offset = get_universal_joint_pin_axial_offset();
|
||||
color("orange") union() {
|
||||
difference() {
|
||||
// body
|
||||
rotate([0, 90, 0]) cylinder(L / 2, d / 2, d / 2, center = false);
|
||||
// threaded hole
|
||||
translate([L - pin_axial_offset, 0, 0]) cylinder(d, d_hole / 2, d_hole / 2, center = true);
|
||||
// bore hole
|
||||
rotate([0, 90, 0]) cylinder(L / 2, d_hole / 2, d_hole / 2, center = false);
|
||||
// joint slot
|
||||
translate([L / 8, 0, 0]) cube([L / 4, d - t * 2, d], center = true);
|
||||
}
|
||||
// joint
|
||||
translate([joint_axial_offset, 0, 0]) rotate([90, 0, 0]) cylinder(d, t, t, center = true);
|
||||
}
|
||||
}
|
||||
|
||||
// output
|
||||
translate([100, 0, 0]) universal_joint_half();
|
||||
universal_joint();
|
||||
|
||||
// shopping
|
||||
//https://www.amazon.co.uk/Ohamtes-diameter-universal-coupling-Rotatable/dp/B09NXCKJY7/ref=sr_1_1_sspa?crid=3DS7BH7WHYTF4&dib=eyJ2IjoiMSJ9.qTSAOeHpLAIx1plz8THvnJuCvLh8y4zf-H37BRTvT5TTF4M6kqHBg50e-40C5hjdmTAPJLEgHg0Jx5cbB8m_wQM7WCaEibSQJBNZnTwHBZ3w0jHw-znfaRDSaMRP0xlHOblYtwBc9XbF5-KNpHR9dtRmXPDooHcnFM8vchBOqGp-5rR5c6o9Nh0TCq9APO-csslNPAa4bTVjWtniflkcqc39VaQL55CghNaz2NQGdQRrifAgcEqwIM5BpJODfEizqzlotNlbrk6F1gdAZw2clQOw5dIVvjbKLGTCgXnK2xI.vL2JYm04p6ohOn9Jf1OMaPuo9PoqjzItE0AQg2irL0E&dib_tag=se&keywords=UNIVERSAL%2BJOINT&qid=1739725484&sprefix=universal%2Bjoint%2Caps%2C66&sr=8-1-spons&sp_csd=d2lkZ2V0TmFtZT1zcF9hdGY&th=1
|
||||
7
models/common/washer.json
Normal file
7
models/common/washer.json
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"parameterSets": {
|
||||
"ANGLE": ""
|
||||
},
|
||||
"parameterSets": "",
|
||||
"fileFormatVersion": "1"
|
||||
}
|
||||
15
models/common/washer.scad
Normal file
15
models/common/washer.scad
Normal file
@@ -0,0 +1,15 @@
|
||||
include <../../config.scad>;
|
||||
|
||||
module washer(t, d_outer, d_inner, centre = true) {
|
||||
r_outer = d_outer / 2;
|
||||
r_inner = d_inner / 2;
|
||||
color("silver") difference() {
|
||||
cylinder(t, r_outer, r_outer, center = centre);
|
||||
cylinder(t, r_inner, r_inner, center = centre);
|
||||
}
|
||||
// Shopping
|
||||
echo(str("Washer: Washer Φ", d_outer, "mm x ", d_inner, "mm x ", t, "mm - x1"));
|
||||
}
|
||||
|
||||
// $fn = 200;
|
||||
washer(3, 10, 40);
|
||||
12
models/common/wheel.scad
Normal file
12
models/common/wheel.scad
Normal file
@@ -0,0 +1,12 @@
|
||||
include <../../config.scad>;
|
||||
|
||||
module wheel() {
|
||||
r_wheel = D_WHEEL / 2;
|
||||
r_wheel_bore = D_WHEEL_BORE / 2;
|
||||
color("red") rotate([0, 90, 0]) difference() {
|
||||
cylinder(T_WHEEL, r_wheel, r_wheel, center = true);
|
||||
cylinder(T_WHEEL, r_wheel_bore, r_wheel_bore, center = true);
|
||||
}
|
||||
// Shopping
|
||||
echo("Wheel: Wheel - x1");
|
||||
}
|
||||
31
models/dog_cart/dog_cart.scad
Normal file
31
models/dog_cart/dog_cart.scad
Normal file
@@ -0,0 +1,31 @@
|
||||
// Molly Dog Towing Cart
|
||||
|
||||
include <../../config.scad>;
|
||||
use <../bed/bed.scad>;
|
||||
use <../top_crate/top_crate_shaft_assembly.scad>;
|
||||
use <../rear_drive/rear_drive_assembly.scad>;
|
||||
use <../brake/brake_assembly.scad>;
|
||||
use <../front_drive/front_drive_assembly.scad>;
|
||||
|
||||
module dog_cart(angle_incline_tiller, angle_brake_rod) {
|
||||
echo("Dog cart assembly:");
|
||||
// bed
|
||||
bed();
|
||||
// top crate shaft assembly
|
||||
top_crate_shaft_assembly();
|
||||
// rear drive assembly
|
||||
rear_drive_assembly();
|
||||
// brake assembly
|
||||
translate([0, 0, -R_BED[2] / 2]) brake_assembly(angle_brake_rod);
|
||||
// front drive assembly
|
||||
front_drive_assembly(angle_incline_tiller);
|
||||
|
||||
// Shopping
|
||||
// bed
|
||||
// top crate shaft assembly
|
||||
// rear drive assembly
|
||||
// front drive assembly
|
||||
}
|
||||
|
||||
// output
|
||||
dog_cart(20);
|
||||
39
models/fixings/tube_clamp_round_3_way_outlet_tee_176.scad
Normal file
39
models/fixings/tube_clamp_round_3_way_outlet_tee_176.scad
Normal file
@@ -0,0 +1,39 @@
|
||||
include <../../config.scad>;
|
||||
|
||||
function get_L_shaft_long_round_3_way_outlet_tee_176(tube_diameter) =
|
||||
(tube_diameter == 27) ?
|
||||
85
|
||||
: (tube_diameter == 42) ?
|
||||
122
|
||||
: 25
|
||||
;
|
||||
function get_L_shaft_short_round_3_way_outlet_tee_176(tube_diameter) =
|
||||
(tube_diameter == 27) ?
|
||||
42
|
||||
: (tube_diameter == 42) ?
|
||||
61
|
||||
: 10
|
||||
;
|
||||
|
||||
module tube_clamp_round_3_way_outlet_tee_176(tube_diameter) {
|
||||
t = 7;
|
||||
L_shaft_long = get_L_shaft_long_round_3_way_outlet_tee_176(tube_diameter);
|
||||
L_shaft_short = get_L_shaft_short_round_3_way_outlet_tee_176(tube_diameter);
|
||||
color("LightGrey") difference() {
|
||||
union() {
|
||||
// long edge
|
||||
cylinder(L_shaft_long, tube_diameter / 2 + t, tube_diameter / 2 + t, center = true);
|
||||
// short perpendicular section
|
||||
translate([L_shaft_short / 2, 0, 0]) rotate([0, 90, 0]) cylinder(L_shaft_short, tube_diameter / 2 + t, tube_diameter / 2 + t, center = true);
|
||||
}
|
||||
cylinder(L_shaft_long, tube_diameter / 2, tube_diameter / 2, center = true);
|
||||
translate([L_shaft_short / 2, 0, 0]) rotate([0, 90, 0]) cylinder(L_shaft_short, tube_diameter / 2, tube_diameter / 2, center = true);
|
||||
rotate([90, 0, 0]) cylinder(L_shaft_long, tube_diameter / 2, tube_diameter / 2, center = true);
|
||||
}
|
||||
// Shopping
|
||||
echo("Round 3-way outlet tee 176: Tube clamp - x1");
|
||||
}
|
||||
|
||||
// test output
|
||||
tube_clamp_round_3_way_outlet_tee_176(27);
|
||||
translate([200, 0, 0]) tube_clamp_round_3_way_outlet_tee_176(42);
|
||||
27
models/fixings/tube_clamp_round_3_way_through_116.scad
Normal file
27
models/fixings/tube_clamp_round_3_way_through_116.scad
Normal file
@@ -0,0 +1,27 @@
|
||||
include <../../config.scad>;
|
||||
use <./tube_clamp_round_3_way_through_116_functions.scad>;
|
||||
|
||||
module tube_clamp_round_3_way_through_116(tube_diameter) {
|
||||
t = get_thickness_round_3_way_through_116(tube_diameter);
|
||||
L_shaft_long = get_L_shaft_long_round_3_way_through_116(tube_diameter);
|
||||
L_shaft_short = get_L_shaft_short_round_3_way_through_116(tube_diameter);
|
||||
color("LightGrey") difference() {
|
||||
union() {
|
||||
// short horizontal section
|
||||
rotate([0, 90, 0]) cylinder(L_shaft_short, tube_diameter / 2 + t, tube_diameter / 2 + t, center = true);
|
||||
// long vertical section
|
||||
translate([0, 0, L_shaft_long / 2]) rotate([0, 0, 0]) cylinder(L_shaft_long, tube_diameter / 2 + t, tube_diameter / 2 + t, center = true);
|
||||
// long horizontal section
|
||||
translate([0, L_shaft_long / 2, 0]) rotate([90, 0, 0]) cylinder(L_shaft_long, tube_diameter / 2 + t, tube_diameter / 2 + t, center = true);
|
||||
}
|
||||
rotate([0, 90, 0]) cylinder(L_shaft_short, tube_diameter / 2, tube_diameter / 2, center = true);
|
||||
translate([0, 0, L_shaft_long / 2]) rotate([0, 0, 0]) cylinder(L_shaft_long, tube_diameter / 2, tube_diameter / 2, center = true);
|
||||
translate([0, L_shaft_long / 2, 0]) rotate([90, 0, 0]) cylinder(L_shaft_long, tube_diameter / 2, tube_diameter / 2, center = true);
|
||||
}
|
||||
// Shopping
|
||||
echo("Round 3-way through 116: Tube clamp - x1");
|
||||
}
|
||||
|
||||
// test output
|
||||
tube_clamp_round_3_way_through_116(27);
|
||||
translate([200, 0, 0]) tube_clamp_round_3_way_through_116(42);
|
||||
@@ -0,0 +1,10 @@
|
||||
|
||||
function get_L_shaft_long_round_3_way_through_116(tube_diameter) =
|
||||
(tube_diameter == 27) ?
|
||||
42
|
||||
: (tube_diameter == 42) ?
|
||||
60
|
||||
: 25
|
||||
;
|
||||
function get_thickness_round_3_way_through_116(tube_diameter) = 7;
|
||||
function get_L_shaft_short_round_3_way_through_116(tube_diameter) = tube_diameter + 2 * get_thickness_round_3_way_through_116();
|
||||
29
models/fixings/tube_clamp_round_base_plate_132.scad
Normal file
29
models/fixings/tube_clamp_round_base_plate_132.scad
Normal file
@@ -0,0 +1,29 @@
|
||||
include <../../config.scad>;
|
||||
use <./tube_clamp_round_base_plate_132_functions.scad>;
|
||||
|
||||
module tube_clamp_round_base_plate_132(tube_diameter) {
|
||||
L_shaft_with_base_plate = get_L_shaft_with_base_plate_round_base_plate_132(tube_diameter);
|
||||
R_plate = get_R_plate_round_base_plate_132(tube_diameter);
|
||||
t = R_plate[2];
|
||||
offset_hole_y = get_offset_hole_y_round_base_plate_132(tube_diameter);
|
||||
d_hole_bolt_round_base_plate_132 = get_diameter_hole_round_base_plate_132(tube_diameter);
|
||||
color("LightGrey") union() {
|
||||
// cylinder section
|
||||
translate([0, 0, L_shaft_with_base_plate / 2]) difference() {
|
||||
cylinder(L_shaft_with_base_plate, tube_diameter / 2 + t, tube_diameter / 2 + t, center = true);
|
||||
cylinder(L_shaft_with_base_plate, tube_diameter / 2, tube_diameter / 2, center = true);
|
||||
}
|
||||
// base plate
|
||||
translate([0, 0, R_plate[2] / 2]) difference() {
|
||||
cube(R_plate, center = true);
|
||||
translate([0, offset_hole_y, 0]) cylinder(R_plate[2], d_hole_bolt_round_base_plate_132 / 2, d_hole_bolt_round_base_plate_132 / 2, center = true);
|
||||
translate([0, -offset_hole_y, 0]) cylinder(R_plate[2], d_hole_bolt_round_base_plate_132 / 2, d_hole_bolt_round_base_plate_132 / 2, center = true);
|
||||
}
|
||||
}
|
||||
// Shopping
|
||||
echo("Round base plate 132: Tube clamp - x1");
|
||||
}
|
||||
|
||||
// test output
|
||||
tube_clamp_round_base_plate_132(27);
|
||||
translate([200, 0, 0]) tube_clamp_round_base_plate_132(42);
|
||||
@@ -0,0 +1,23 @@
|
||||
|
||||
function get_L_shaft_with_base_plate_round_base_plate_132(tube_diameter) =
|
||||
(tube_diameter == 27) ?
|
||||
85
|
||||
: (tube_diameter == 42) ?
|
||||
122
|
||||
: 25
|
||||
;
|
||||
function get_R_plate_round_base_plate_132(tube_diameter) =
|
||||
(tube_diameter == 27) ?
|
||||
[64, 114, 7]
|
||||
: (tube_diameter == 42) ?
|
||||
[80, 140, 10]
|
||||
: [10, 20, 1]
|
||||
;
|
||||
function get_offset_hole_y_round_base_plate_132(tube_diameter) =
|
||||
(tube_diameter == 27) ?
|
||||
38
|
||||
: (tube_diameter == 42) ?
|
||||
50
|
||||
: 10
|
||||
;
|
||||
function get_diameter_hole_round_base_plate_132(tube_diameter) = 10;
|
||||
24
models/fixings/tube_clamp_round_tee_long_104.scad
Normal file
24
models/fixings/tube_clamp_round_tee_long_104.scad
Normal file
@@ -0,0 +1,24 @@
|
||||
include <../../config.scad>;
|
||||
use <./tube_clamp_round_tee_long_104_functions.scad>;
|
||||
|
||||
module tube_clamp_round_tee_long_104(tube_diameter) {
|
||||
t = 7;
|
||||
L_shaft_long = get_L_shaft_long_round_tee_long_104(tube_diameter);
|
||||
L_shaft_short = get_L_shaft_short_round_tee_long_104(tube_diameter);
|
||||
color("LightGrey") difference() {
|
||||
union() {
|
||||
// long edge
|
||||
cylinder(L_shaft_long, tube_diameter / 2 + t, tube_diameter / 2 + t, center = true);
|
||||
// short perpendicular section
|
||||
translate([L_shaft_short / 2, 0, 0]) rotate([0, 90, 0]) cylinder(L_shaft_short, tube_diameter / 2 + t, tube_diameter / 2 + t, center = true);
|
||||
}
|
||||
cylinder(L_shaft_long, tube_diameter / 2, tube_diameter / 2, center = true);
|
||||
translate([L_shaft_short / 2, 0, 0]) rotate([0, 90, 0]) cylinder(L_shaft_short, tube_diameter / 2, tube_diameter / 2, center = true);
|
||||
}
|
||||
// Shopping
|
||||
echo("Round tee long 104: Tube clamp - x1");
|
||||
}
|
||||
|
||||
// test output
|
||||
tube_clamp_round_tee_long_104(27);
|
||||
translate([200, 0, 0]) tube_clamp_round_tee_long_104(42);
|
||||
16
models/fixings/tube_clamp_round_tee_long_104_functions.scad
Normal file
16
models/fixings/tube_clamp_round_tee_long_104_functions.scad
Normal file
@@ -0,0 +1,16 @@
|
||||
// include <../../config.scad>;
|
||||
|
||||
function get_L_shaft_long_round_tee_long_104(tube_diameter) =
|
||||
(tube_diameter == 27) ?
|
||||
85
|
||||
: (tube_diameter == 42) ?
|
||||
122
|
||||
: 25
|
||||
;
|
||||
function get_L_shaft_short_round_tee_long_104(tube_diameter) =
|
||||
(tube_diameter == 27) ?
|
||||
42
|
||||
: (tube_diameter == 42) ?
|
||||
61
|
||||
: 10
|
||||
;
|
||||
28
models/fixings/tube_clamp_square_base_plate_132.scad
Normal file
28
models/fixings/tube_clamp_square_base_plate_132.scad
Normal file
@@ -0,0 +1,28 @@
|
||||
include <../../config.scad>;
|
||||
use <./tube_clamp_square_base_plate_132_functions.scad>;
|
||||
|
||||
module tube_clamp_square_base_plate_132(beam_width) {
|
||||
L_shaft_with_base_plate = get_L_shaft_with_base_plate_square_base_plate_132(beam_width);
|
||||
R_plate = get_R_plate_square_base_plate_132(beam_width);
|
||||
t = get_thickness_square_base_plate_132(beam_width);
|
||||
offset_hole_x = get_offset_hole_x_square_base_plate_132(beam_width);
|
||||
d_hole_bolt_square_base_plate_132 = get_diameter_hole_square_base_plate_132(beam_width);
|
||||
color("LightGrey") union() {
|
||||
// shaft section
|
||||
translate([0, 0, L_shaft_with_base_plate / 2]) difference() {
|
||||
cube([beam_width + t * 2, beam_width + t * 2, L_shaft_with_base_plate], center = true);
|
||||
cube([beam_width, beam_width, L_shaft_with_base_plate], center = true);
|
||||
}
|
||||
// base plate
|
||||
translate([0, 0, R_plate[2] / 2]) difference() {
|
||||
cube(R_plate, center = true);
|
||||
translate([offset_hole_x, 0, 0]) cylinder(R_plate[2], d_hole_bolt_square_base_plate_132 / 2, d_hole_bolt_square_base_plate_132 / 2, center = true);
|
||||
translate([-offset_hole_x, 0, 0]) cylinder(R_plate[2], d_hole_bolt_square_base_plate_132 / 2, d_hole_bolt_square_base_plate_132 / 2, center = true);
|
||||
}
|
||||
}
|
||||
// Shopping
|
||||
echo("Square base plate 132: Tube clamp - x1");
|
||||
}
|
||||
|
||||
// test output
|
||||
tube_clamp_square_base_plate_132(42);
|
||||
@@ -0,0 +1,21 @@
|
||||
|
||||
function get_L_shaft_with_base_plate_square_base_plate_132(beam_width) =
|
||||
// (beam_width == 40) ?
|
||||
75
|
||||
;
|
||||
function get_R_plate_square_base_plate_132(beam_width) =
|
||||
// (beam_width == 40) ?
|
||||
[143, 75, 18.5]
|
||||
;
|
||||
function get_thickness_square_base_plate_132(beam_width) =
|
||||
// (beam_width == 40) ?
|
||||
8
|
||||
;
|
||||
function get_offset_hole_x_square_base_plate_132(beam_width) =
|
||||
// (beam_width == 40) ?
|
||||
100 / 2
|
||||
;
|
||||
function get_diameter_hole_square_base_plate_132(beam_width) =
|
||||
// (beam_width == 40) ?
|
||||
10
|
||||
;
|
||||
80
models/front_drive/front_drive_assembly.scad
Normal file
80
models/front_drive/front_drive_assembly.scad
Normal file
@@ -0,0 +1,80 @@
|
||||
include <../../config.scad>;
|
||||
use <../front_drive/front_leg_fixing.scad>;
|
||||
use <../front_drive/tiller_assembly.scad>;
|
||||
use <../rear_drive/rear_wheel_fastener.scad>;
|
||||
use <../common/metric_bolt.scad>;
|
||||
use <../common/washer.scad>;
|
||||
use <../common/wheel.scad>;
|
||||
|
||||
module front_drive_assembly(angle_incline_tiller) {
|
||||
echo("Front drive assembly:");
|
||||
y_pos_axis = R_BED[1] / 2 - D_WHEEL / 2;
|
||||
L_axle_long = R_BED[0] - T_WASHER_AXLE_REAR_WHEEL_POSITIONING * 2;
|
||||
L_axle_short = T_WASHER_AXLE_REAR_WHEEL_POSITIONING * 2 + T_WHEEL + D_WASHER_BOLT_REAR_WHEEL_POSITIONING;
|
||||
height_bolt_head = get_metric_bolt_head_height(SIZE_BOLT_REAR_WHEEL_POSITIONING);
|
||||
L_bolt_axle_extension = D_AXLE_FRONT + 2 * (T_WASHER_BOLT_REAR_WHEEL_POSITIONING + height_bolt_head) + L_BOLT_EXTENSION;
|
||||
offset_axle_extension_fastener_axial = 2 * SIZE_BOLT_REAR_WHEEL_POSITIONING;
|
||||
L_bolt_wheel_positioning = D_AXLE_REAR + 2 * (T_WASHER_BOLT_REAR_WHEEL_POSITIONING + height_bolt_head) + L_BOLT_EXTENSION;
|
||||
translate([0, y_pos_axis, -R_BED[2] / 2]) union() {
|
||||
// leg fixing
|
||||
front_leg_fixing();
|
||||
// left-right symmetry
|
||||
translate([0, 0, -Z_OFFSET_BED_TO_AXLE]) for (index_side = [0:1:1]) {
|
||||
mirror([index_side, 0, 0]) {
|
||||
// axle extensions
|
||||
color(COLOUR_BEAM_ALUMINIUM) translate([L_axle_long / 2 + L_axle_short / 2, 0, 0]) rotate([0, 90, 0]) cylinder(L_axle_short, D_AXLE_REAR / 2, D_AXLE_REAR / 2, center = true);
|
||||
// axle extension fixing bolt
|
||||
translate([L_axle_long / 2 - offset_axle_extension_fastener_axial, 0, -L_BOLT_EXTENSION / 2]) metric_bolt(SIZE_BOLT_REAR_WHEEL_POSITIONING, L_bolt_axle_extension, true, L_BOLT_EXTENSION);
|
||||
// axle extension fixing bolt washers
|
||||
translate([L_axle_long / 2 - offset_axle_extension_fastener_axial, 0, 0]) for (index_side_z = [0 : 1 : 1]) {
|
||||
mirror([0, 0, index_side_z]) {
|
||||
translate([0, 0, D_AXLE_FRONT / 2 + T_WASHER_BOLT_REAR_WHEEL_POSITIONING / 2]) washer(T_WASHER_BOLT_REAR_WHEEL_POSITIONING, D_WASHER_BOLT_REAR_WHEEL_POSITIONING, SIZE_BOLT_REAR_WHEEL_POSITIONING);
|
||||
}
|
||||
}
|
||||
// inner wheel axis washers
|
||||
translate([L_axle_long / 2 + T_WASHER_AXLE_REAR_WHEEL_POSITIONING / 2, 0, 0]) rotate([0, 90, 0]) washer(T_WASHER_AXLE_REAR_WHEEL_POSITIONING, D_WASHER_AXLE_REAR_WHEEL_POSITIONING, D_AXLE_REAR);
|
||||
// wheels
|
||||
translate([L_axle_long / 2 + T_WASHER_AXLE_REAR_WHEEL_POSITIONING + T_WHEEL / 2, 0, 0]) wheel();
|
||||
// outer wheel axis washers
|
||||
translate([L_axle_long / 2 + T_WASHER_AXLE_REAR_WHEEL_POSITIONING * 3 / 2 + T_WHEEL, 0, 0]) rotate([0, 90, 0]) washer(T_WASHER_AXLE_REAR_WHEEL_POSITIONING, D_WASHER_AXLE_REAR_WHEEL_POSITIONING, D_AXLE_REAR);
|
||||
|
||||
/* replaced with rear_wheel_fastener below
|
||||
// wheel positioning bolts
|
||||
translate([L_axle_long / 2 + T_WASHER_AXLE_REAR_WHEEL_POSITIONING * 2 + T_WHEEL + D_WASHER_BOLT_REAR_WHEEL_POSITIONING / 2, 0, -L_BOLT_EXTENSION / 2]) metric_bolt(SIZE_BOLT_REAR_WHEEL_POSITIONING, L_bolt_wheel_positioning, true, L_BOLT_EXTENSION);
|
||||
// wheel positioning bolt washers
|
||||
translate([L_axle_long / 2 + T_WASHER_AXLE_REAR_WHEEL_POSITIONING * 2 + T_WHEEL + D_WASHER_BOLT_REAR_WHEEL_POSITIONING / 2, 0, 0]) for (index_side_z = [0 : 1 : 1]) {
|
||||
mirror([0, 0, index_side_z]) {
|
||||
translate([0, 0, D_AXLE_REAR / 2 + T_WASHER_BOLT_REAR_WHEEL_POSITIONING / 2]) washer(T_WASHER_BOLT_REAR_WHEEL_POSITIONING, D_WASHER_BOLT_REAR_WHEEL_POSITIONING, SIZE_BOLT_REAR_WHEEL_POSITIONING);
|
||||
}
|
||||
}
|
||||
*/
|
||||
translate([L_axle_long / 2 + T_WASHER_AXLE_REAR_WHEEL_POSITIONING * 2 + T_WHEEL + D_WASHER_BOLT_REAR_WHEEL_POSITIONING / 2, 0, 0]) rear_wheel_fastener();
|
||||
}
|
||||
}
|
||||
// axle
|
||||
color(COLOUR_BEAM_ALUMINIUM) translate([0, 0, -Z_OFFSET_BED_TO_AXLE]) rotate([0, 90, 0]) cylinder(L_axle_long, D_AXLE_FRONT / 2, D_AXLE_FRONT / 2, center = true);
|
||||
// tiller
|
||||
translate([0, D_AXLE_FRONT / 2, -Z_OFFSET_BED_TO_AXLE]) tiller_assembly(angle_incline_tiller);
|
||||
// joint axle to tiller
|
||||
translate([0, 0, -Z_OFFSET_BED_TO_AXLE + L_BOLT_FRONT_AXLE_BEARING / 2 - D_AXLE_FRONT / 2 - T_JOINT_FRONT_AXLE_TO_TILLER - DEPTH_BOLT_FRONT_AXLE_BEARING - COUNT_WASHERS_JOINT_FRONT_AXLE_TO_TILLER * T_WASHER_JOINT_FRONT_AXLE_TO_TILLER]) mirror([0, 0, 1]) metric_bolt(SIZE_BOLT_FRONT_AXLE_BEARING, L_BOLT_FRONT_AXLE_BEARING, false);
|
||||
// joint axle to tiller washers
|
||||
for (index_washer = [0 : 1 : COUNT_WASHERS_JOINT_FRONT_AXLE_TO_TILLER - 1]) {
|
||||
translate([0, 0, -Z_OFFSET_BED_TO_AXLE - D_AXLE_FRONT / 2 - T_JOINT_FRONT_AXLE_TO_TILLER - T_WASHER_JOINT_FRONT_AXLE_TO_TILLER * (index_washer + 1 / 2)]) washer(T_WASHER_JOINT_FRONT_AXLE_TO_TILLER, D_WASHER_JOINT_FRONT_AXLE_TO_TILLER, SIZE_BOLT_FRONT_AXLE_BEARING);
|
||||
}
|
||||
}
|
||||
// Shopping
|
||||
// front leg fixing
|
||||
echo(str("Axle extension: Round Aluminium bar Φ", D_AXLE_REAR, "mm x ", L_axle_short, "mm - x2"));
|
||||
// Axle extension fixing bolt
|
||||
// echo(str("Axle extension fixing bolt washer: Washer Φ", D_WASHER_BOLT_REAR_WHEEL_POSITIONING, "mm x ", T_WASHER_BOLT_REAR_WHEEL_POSITIONING, "mm - x4")); // Axle extension fixing bolt washers
|
||||
// echo(str("Wheel positioning washer: Washer Φ", D_WASHER_BOLT_REAR_WHEEL_POSITIONING, "mm x ", T_WASHER_BOLT_REAR_WHEEL_POSITIONING, "mm - x4")); // Wheel positioning washers
|
||||
// wheels
|
||||
// wheel positioning fastener
|
||||
// echo(str("Wheel positioning bolt washer: Washer Φ", D_WASHER_BOLT_REAR_WHEEL_POSITIONING, "mm x ", T_WASHER_BOLT_REAR_WHEEL_POSITIONING, "mm - x4")); // Wheel positioning bolt washers
|
||||
echo(str("Axle: Round Aluminium bar Φ", D_AXLE_FRONT, "mm x ", L_axle_long, "mm - x1"));
|
||||
// tiller assembly
|
||||
// front axis bearing bolt
|
||||
// echo(str("Front axis bearing washers: Washer Φ", D_WASHER_JOINT_FRONT_AXLE_TO_TILLER, "mm x ", T_WASHER_JOINT_FRONT_AXLE_TO_TILLER, "mm - x", COUNT_WASHERS_JOINT_FRONT_AXLE_TO_TILLER)); // Front axis bearing washers
|
||||
}
|
||||
|
||||
front_drive_assembly(20);
|
||||
50
models/front_drive/front_leg_fixing.scad
Normal file
50
models/front_drive/front_leg_fixing.scad
Normal file
@@ -0,0 +1,50 @@
|
||||
include <../../config.scad>;
|
||||
use <../fixings/tube_clamp_round_3_way_through_116.scad>;
|
||||
use <../fixings/tube_clamp_round_base_plate_132.scad>;
|
||||
use <../common/metric_bolt.scad>;
|
||||
use <../common/washer.scad>;
|
||||
|
||||
module front_leg_fixing() {
|
||||
echo("Front leg fixing assembly:");
|
||||
R_base_plate = get_R_plate_round_base_plate_132(D_AXLE_FRONT);
|
||||
h_leg = Z_OFFSET_BED_TO_AXLE - D_AXLE_FRONT / 2 - R_base_plate[2];
|
||||
offset_y_hole_base_plate = get_offset_hole_y_round_base_plate_132(D_AXLE_FRONT);
|
||||
size_hole_base_plate = get_diameter_hole_round_base_plate_132(D_AXLE_FRONT);
|
||||
h_bolt_head = get_metric_bolt_head_height(size_hole_base_plate);
|
||||
L_fastener = h_bolt_head * 2 + T_WASHER_BASE_PLATE * 2 + R_base_plate[2] + R_BED[2] + L_BOLT_EXTENSION;
|
||||
difference() {
|
||||
union() {
|
||||
// bracket - top, under bed
|
||||
// translate([0, 0, -R_fixing[2] / 2]) cylinder(R_fixing[2], R_fixing[0] / 2, R_fixing[0] / 2, center = true);
|
||||
rotate([0, 180, 0]) tube_clamp_round_base_plate_132(D_AXLE_FRONT);
|
||||
// bed bracket fastening bolt
|
||||
for (index_side_y = [0 : 1 : 1]) {
|
||||
mirror([0, index_side_y, 0]) {
|
||||
// bracket at bed fastener
|
||||
translate([0, offset_y_hole_base_plate, L_fastener / 2 - R_base_plate[2] - L_BOLT_EXTENSION - h_bolt_head - T_WASHER_BASE_PLATE]) metric_bolt(size_hole_base_plate, L_fastener, true, L_BOLT_EXTENSION);
|
||||
translate([0, offset_y_hole_base_plate, h_bolt_head / 2 - T_WASHER_BASE_PLATE / 2]) for (index_side_z = [0 : 1 : 1]) {
|
||||
mirror([0, 0, index_side_z]) {
|
||||
// bracket fastener washers
|
||||
translate([0, 0, L_fastener / 2 - L_BOLT_EXTENSION / 2 - h_bolt_head - T_WASHER_BASE_PLATE / 2]) washer(T_WASHER_BASE_PLATE, D_WASHER_BASE_PLATE, size_hole_base_plate);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// leg
|
||||
color(COLOUR_BEAM_ALUMINIUM) translate([0, 0, -R_base_plate[2] - h_leg / 2]) cylinder(h_leg, D_AXLE_FRONT / 2, D_AXLE_FRONT / 2, center = true);
|
||||
// bracket - bottom, against axle
|
||||
translate([0, 0, -Z_OFFSET_BED_TO_AXLE]) rotate([0, 0, 0]) tube_clamp_round_3_way_through_116(D_AXLE_FRONT); // translate([0, 0, -R_fixing[2] * 3 / 2 - h_leg - T_PLATE * 2 - D_AXLE_FRONT + z_overlap_tee_clamp_round * 1]) cylinder(R_fixing[2], R_fixing[0] / 2, R_fixing[0] / 2, center = true);
|
||||
}
|
||||
// front axle bearing hole
|
||||
translate([0, 0, -Z_OFFSET_BED_TO_AXLE + D_AXLE_FRONT / 2 + DEPTH_BOLT_FRONT_AXLE_BEARING - L_BOLT_FRONT_AXLE_BEARING]) cylinder(L_BOLT_FRONT_AXLE_BEARING, SIZE_BOLT_FRONT_AXLE_BEARING / 2, SIZE_BOLT_FRONT_AXLE_BEARING / 2, center = false);
|
||||
}
|
||||
// Shopping
|
||||
// bed fixing
|
||||
echo(str("Leg: Round Aluminium bar Φ", D_AXLE_FRONT, "mm x ", h_leg, "mm - x1"));
|
||||
// Base plate fastening bolts and nuts
|
||||
// echo(str("Base plate fastening washers: Washer Φ", D_WASHER_BASE_PLATE, "mm x ", T_WASHER_BASE_PLATE, "mm - x4")); // Base plate fastening washers
|
||||
// axle fixing
|
||||
echo(str("Tool: M", SIZE_BOLT_FRONT_AXLE_BEARING, " HSS tapping tool - x1"));
|
||||
}
|
||||
|
||||
front_leg_fixing();
|
||||
64
models/front_drive/tiller_assembly.scad
Normal file
64
models/front_drive/tiller_assembly.scad
Normal file
@@ -0,0 +1,64 @@
|
||||
include <../../config.scad>;
|
||||
use <./tiller_joint.scad>;
|
||||
use <../common/metric_bolt.scad>;
|
||||
use <../fixings/tube_clamp_round_tee_long_104.scad>;
|
||||
|
||||
module tiller_assembly(angle_incline_tiller) {
|
||||
echo("Tiller assembly:");
|
||||
/*
|
||||
t_universal_joint = get_universal_joint_thickness();
|
||||
d_universal_joint = get_universal_joint_d();
|
||||
d_hole_universal_joint = get_universal_joint_d_hole();
|
||||
d_hole_bore_universal_joint = get_universal_joint_d_bore_hole();
|
||||
L_universal_joint = get_universal_joint_length();
|
||||
joint_axial_offset = get_universal_joint_joint_axial_offset();
|
||||
pin_axial_offset = get_universal_joint_pin_axial_offset();
|
||||
L_hole = t_universal_joint + d_hole_universal_joint / 2 + pin_axial_offset;
|
||||
L_bolt_fastener = D_AXLE_FRONT + d_hole_universal_joint * 4 + T_WASHER_UNIVERSAL_JOINT;
|
||||
echo("t_universal_joint", t_universal_joint, "mm");
|
||||
echo("d_hole_universal_joint", d_hole_universal_joint, "mm");
|
||||
echo("pin_axial_offset", pin_axial_offset, "mm");
|
||||
echo("L_hole", t_universal_joint + d_hole_universal_joint / 2 + pin_axial_offset, "mm");
|
||||
echo("L_universal_joint / 2 - joint_axial_offset - L_hole", L_universal_joint / 2 - joint_axial_offset - L_hole, "mm");
|
||||
*/
|
||||
|
||||
union() {
|
||||
// tiller
|
||||
color(COLOUR_BEAM_ALUMINIUM) difference() {
|
||||
// body
|
||||
rotate([-90, 0, 0]) cylinder(L_TILLER, D_AXLE_FRONT / 2, D_AXLE_FRONT / 2, center = false);
|
||||
// joint fastening hole normal
|
||||
translate([L_TILLER - OFFSET_BOLT_JOINT_TILLER_EXTENSION_AXIAL, 0, 0]) cylinder(D_AXLE_FRONT, SIZE_BOLT_JOINT_TILLER_EXTENSION / 2, SIZE_BOLT_JOINT_TILLER_EXTENSION / 2, center = false);
|
||||
}
|
||||
/*
|
||||
// universal joint
|
||||
translate([L_TILLER - L_hole, 0, 0]) universal_joint();
|
||||
// tiller universal joint fastening
|
||||
translate([L_TILLER - L_hole / 2, 0, 0]) metric_bolt(d_hole_universal_joint, L_bolt_fastener);
|
||||
*/
|
||||
// tiller joint
|
||||
translate([0, L_TILLER + L_JOINT_TILLER_EXTENSION / 2 - OFFSET_BOLT_JOINT_TILLER_EXTENSION_AXIAL * 2, 0]) tiller_joint();
|
||||
// tiller extension
|
||||
translate([0, L_TILLER + L_JOINT_TILLER_EXTENSION - OFFSET_BOLT_JOINT_TILLER_EXTENSION_AXIAL * 4, 0]) rotate([angle_incline_tiller, 0, 0]) {
|
||||
color(COLOUR_BEAM_ALUMINIUM) difference() {
|
||||
// body
|
||||
rotate([-90, 0, 0]) cylinder(L_TILLER_EXTENSION, D_HANDLE_BAR / 2, D_HANDLE_BAR / 2, center = false);
|
||||
// joint fastening hole normal
|
||||
translate([0, OFFSET_BOLT_JOINT_TILLER_EXTENSION_AXIAL, 0]) cylinder(D_AXLE_FRONT, SIZE_BOLT_JOINT_TILLER_EXTENSION / 2, SIZE_BOLT_JOINT_TILLER_EXTENSION / 2, center = false);
|
||||
}
|
||||
// handle beam
|
||||
color(COLOUR_BEAM_ALUMINIUM) translate([0, L_TILLER_EXTENSION + D_HANDLE_BAR / 2, 0]) rotate([0, 90, 0]) cylinder(W_HANDLE_BAR, D_HANDLE_BAR / 2, D_HANDLE_BAR / 2, center = true);
|
||||
// handle fixing
|
||||
translate([0, L_TILLER_EXTENSION + D_HANDLE_BAR / 2, 0]) rotate([90, 0, -90]) tube_clamp_round_tee_long_104(D_HANDLE_BAR);
|
||||
}
|
||||
}
|
||||
// Shopping
|
||||
echo(str("Tiller: Round Aluminium bar Φ", D_AXLE_FRONT, "mm x ", L_TILLER, "mm - x1"));
|
||||
// Tiller extension joint
|
||||
echo(str("Tiller extension: Round Aluminium bar Φ", D_HANDLE_BAR, "mm x ", L_TILLER_EXTENSION, "mm - x1"));
|
||||
echo(str("Handle bar: Round Aluminium bar Φ", D_HANDLE_BAR, "mm x ", W_HANDLE_BAR, "mm - x1"));
|
||||
// Handle fixing
|
||||
}
|
||||
|
||||
// $fn = 100;
|
||||
tiller_assembly(20);
|
||||
50
models/front_drive/tiller_joint.scad
Normal file
50
models/front_drive/tiller_joint.scad
Normal file
@@ -0,0 +1,50 @@
|
||||
include <../../config.scad>;
|
||||
use <../common/metric_bolt.scad>;
|
||||
use <../common/washer.scad>;
|
||||
|
||||
module tiller_joint() {
|
||||
echo("Tiller joint assembly:");
|
||||
R_plate_tiller = [T_PLATE, L_JOINT_TILLER_EXTENSION, 3 * SIZE_BOLT_JOINT_TILLER_EXTENSION];
|
||||
x_pos_plate = (D_AXLE_FRONT + R_plate_tiller[0]) / 2 + T_WASHER_TILLER_JOINT;
|
||||
h_bolt_head = get_metric_bolt_head_height(SIZE_BOLT_JOINT_TILLER_EXTENSION);
|
||||
L_bolt = D_AXLE_FRONT + 2 * (h_bolt_head + T_WASHER_TILLER_JOINT * 2 + R_plate_tiller[0]) + L_BOLT_EXTENSION;
|
||||
y_pos_bolt = R_plate_tiller[1] / 2 - OFFSET_BOLT_JOINT_TILLER_EXTENSION_AXIAL;
|
||||
x_pos_washer_internal = D_AXLE_FRONT / 2 + T_WASHER_TILLER_JOINT / 2;
|
||||
x_pos_washer_external = L_bolt / 2 - L_BOLT_EXTENSION / 2 - h_bolt_head - T_WASHER_TILLER_JOINT / 2;
|
||||
count_washers_each_side_front = 5;
|
||||
union() {
|
||||
for (index_side_x = [0 : 1 : 1]) {
|
||||
mirror([index_side_x, 0, 0]) {
|
||||
// plates
|
||||
color(COLOUR_BEAM_ALUMINIUM) translate([x_pos_plate, 0, 0]) cube(R_plate_tiller, center = true);
|
||||
|
||||
for (index_side_y = [0 : 1 : 1]) {
|
||||
mirror([0, index_side_y, 0]) {
|
||||
// washers
|
||||
// external
|
||||
translate([x_pos_washer_external, y_pos_bolt, 0]) rotate([0, 90, 0]) washer(T_WASHER_TILLER_JOINT, D_WASHER_TILLER_JOINT, SIZE_BOLT_JOINT_TILLER_EXTENSION);
|
||||
}
|
||||
}
|
||||
// rear internal washers
|
||||
translate([x_pos_washer_internal, -y_pos_bolt, 0]) rotate([0, 90, 0]) washer(T_WASHER_TILLER_JOINT, D_WASHER_TILLER_JOINT, SIZE_BOLT_JOINT_TILLER_EXTENSION);
|
||||
// front internal washers
|
||||
for (index_washer_front = [0 : 1 : count_washers_each_side_front]) {
|
||||
translate([x_pos_washer_internal - T_WASHER_TILLER_JOINT * index_washer_front, y_pos_bolt, 0]) rotate([0, 90, 0]) washer(T_WASHER_TILLER_JOINT, D_WASHER_TILLER_JOINT, SIZE_BOLT_JOINT_TILLER_EXTENSION);
|
||||
}
|
||||
}
|
||||
}
|
||||
for (index_side_y_only = [0 : 1 : 1]) {
|
||||
mirror([0, index_side_y_only, 0]) {
|
||||
// bolts
|
||||
translate([-L_BOLT_EXTENSION / 2, y_pos_bolt, 0]) rotate([0, 90, 0]) metric_bolt(SIZE_BOLT_JOINT_TILLER_EXTENSION, L_bolt, true, L_BOLT_EXTENSION);
|
||||
}
|
||||
}
|
||||
}
|
||||
// Shopping
|
||||
echo(str("Plate: Aluminium sheet ", R_plate_tiller[0], "mm x ", R_plate_tiller[1], "mm x ", R_plate_tiller[2], "mm - x2"));
|
||||
// echo(str("Washer: Washer Φ", D_WASHER_TILLER_JOINT, "mm x ", T_WASHER_TILLER_JOINT, "mm - x8")); // Tiller joint washers
|
||||
// Bolts
|
||||
}
|
||||
|
||||
// output
|
||||
tiller_joint();
|
||||
45
models/rear_drive/rear_drive_assembly.scad
Normal file
45
models/rear_drive/rear_drive_assembly.scad
Normal file
@@ -0,0 +1,45 @@
|
||||
|
||||
include <../../config.scad>;
|
||||
use <../fixings/tube_clamp_round_tee_long_104.scad>;
|
||||
use <../fixings/tube_clamp_round_base_plate_132.scad>;
|
||||
use <../rear_drive/rear_leg_fixing.scad>;
|
||||
use <../rear_drive/rear_wheel_fastener.scad>;
|
||||
use <../common/washer.scad>;
|
||||
use <../common/wheel.scad>;
|
||||
|
||||
module rear_drive_assembly() {
|
||||
echo("Rear drive assembly:");
|
||||
L_shaft_short_leg_to_axle = get_L_shaft_short_round_tee_long_104(D_AXLE_REAR);
|
||||
L_shaft_long_leg_to_axle = get_L_shaft_long_round_tee_long_104(D_AXLE_REAR);
|
||||
// L_axial_rear_wheel_fastener = SPACING_WASHER_AXLE_REAR_WHEEL_POSITIONING + T_WASHER_AXLE_REAR_WHEEL_POSITIONING + D_WASHER_BOLT_REAR_WHEEL_POSITIONING;
|
||||
// x_pos_wheel_centre = X_POS_AXLE_LEG_REAR + L_shaft_long_leg_to_axle / 2 + L_axial_rear_wheel_fastener + T_WHEEL / 2;
|
||||
L_axle = 2 * (X_POS_WHEEL_CENTRE + T_WHEEL / 2 + SPACING_WASHER_AXLE_REAR_WHEEL_POSITIONING + T_WASHER_AXLE_REAR_WHEEL_POSITIONING + D_WASHER_BOLT_REAR_WHEEL_POSITIONING);
|
||||
translate([0, Y_POS_AXLE_REAR, -R_BED[2] / 2]) union() {
|
||||
for (index_side_bed = [0:1:1]) {
|
||||
mirror([index_side_bed, 0, 0]) {
|
||||
// leg fixings
|
||||
translate([X_POS_AXLE_LEG_REAR, 0, 0]) rear_leg_fixing();
|
||||
// wheels
|
||||
translate([X_POS_WHEEL_CENTRE, 0, -Z_OFFSET_BED_TO_AXLE]) wheel();
|
||||
translate([X_POS_WHEEL_CENTRE, 0, -Z_OFFSET_BED_TO_AXLE]) for(index_side_wheel = [0:1:1]) {
|
||||
mirror([index_side_wheel, 0, 0]) translate([T_WHEEL / 2 + SPACING_WASHER_AXLE_REAR_WHEEL_POSITIONING + T_WASHER_AXLE_REAR_WHEEL_POSITIONING + D_WASHER_BOLT_REAR_WHEEL_POSITIONING / 2, 0, 0]) {
|
||||
// wheel positioning fasteners
|
||||
rear_wheel_fastener();
|
||||
// washer
|
||||
translate([-D_WASHER_BOLT_REAR_WHEEL_POSITIONING / 2 - T_WASHER_AXLE_REAR_WHEEL_POSITIONING / 2, 0, 0]) rotate([0, 90, 0]) washer(T_WASHER_AXLE_REAR_WHEEL_POSITIONING, D_WASHER_AXLE_REAR_WHEEL_POSITIONING, D_AXLE_REAR);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// axle
|
||||
color(COLOUR_BEAM_ALUMINIUM) translate([0, 0, -Z_OFFSET_BED_TO_AXLE]) rotate([0, 90, 0]) cylinder(L_axle, D_AXLE_REAR / 2, D_AXLE_REAR / 2, center = true);
|
||||
}
|
||||
// Shopping
|
||||
// Rear leg fixing
|
||||
// Wheel
|
||||
// Rear wheel fastener
|
||||
// echo(str("Rear wheel positioning axle washer: Washer Φ", D_WASHER_AXLE_REAR_WHEEL_POSITIONING, "mm x ", T_WASHER_AXLE_REAR_WHEEL_POSITIONING, "mm - x4")); // Rear wheel positioning axle washer
|
||||
echo(str("Rear axle: Round Aluminium bar Φ", D_AXLE_REAR, "mm x ", L_axle, "mm - x1"));
|
||||
}
|
||||
|
||||
rear_drive_assembly();
|
||||
45
models/rear_drive/rear_leg_fixing.scad
Normal file
45
models/rear_drive/rear_leg_fixing.scad
Normal file
@@ -0,0 +1,45 @@
|
||||
include <../../config.scad>;
|
||||
use <../fixings/tube_clamp_round_tee_long_104.scad>;
|
||||
use <../fixings/tube_clamp_round_base_plate_132.scad>;
|
||||
use <../common/metric_bolt.scad>;
|
||||
use <../common/washer.scad>;
|
||||
|
||||
module rear_leg_fixing() {
|
||||
echo("Rear leg fixing:");
|
||||
R_base_plate = get_R_plate_round_base_plate_132(D_AXLE_REAR);
|
||||
h_leg = Z_OFFSET_BED_TO_AXLE - R_base_plate[2] - D_AXLE_REAR / 2;
|
||||
offset_y_hole_base_plate = get_offset_hole_y_round_base_plate_132(D_AXLE_REAR);
|
||||
size_hole_base_plate = get_diameter_hole_round_base_plate_132(D_AXLE_REAR);
|
||||
h_bolt_head = get_metric_bolt_head_height(size_hole_base_plate);
|
||||
L_fastener = h_bolt_head * 2 + T_WASHER_BASE_PLATE * 2 + R_base_plate[2] + R_BED[2] + L_BOLT_EXTENSION;
|
||||
union() {
|
||||
// bracket bed
|
||||
rotate([0, 180, 0]) tube_clamp_round_base_plate_132(D_AXLE_REAR); // cylinder(R_fixing[2], R_fixing[0] / 2, R_fixing[0] / 2, center = true); // cube(R_fixing, center = true);
|
||||
|
||||
for (index_side_y = [0 : 1 : 1]) {
|
||||
mirror([0, index_side_y, 0]) {
|
||||
// bracket at bed fastener
|
||||
translate([0, offset_y_hole_base_plate, L_fastener / 2 - R_base_plate[2] - L_BOLT_EXTENSION - h_bolt_head - T_WASHER_BASE_PLATE]) metric_bolt(size_hole_base_plate, L_fastener, true, L_BOLT_EXTENSION);
|
||||
translate([0, offset_y_hole_base_plate, h_bolt_head / 2 - 0* T_WASHER_BASE_PLATE / 2]) for (index_side_z = [0 : 1 : 1]) {
|
||||
mirror([0, 0, index_side_z]) {
|
||||
// bracket fastener washers
|
||||
translate([0, 0, L_fastener / 2 - L_BOLT_EXTENSION / 2 - h_bolt_head - T_WASHER_BASE_PLATE / 2]) washer(T_WASHER_BASE_PLATE, D_WASHER_BASE_PLATE, size_hole_base_plate);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// leg
|
||||
color(COLOUR_BEAM_ALUMINIUM) translate([0, 0, -R_base_plate[2] - h_leg / 2]) cylinder(h_leg, D_AXLE_REAR / 2, D_AXLE_REAR / 2, center = true); // cube([t_beam, t_beam, h_leg], center = true);
|
||||
// bracket axle-side
|
||||
translate([0, 0, -Z_OFFSET_BED_TO_AXLE]) rotate([0, -90, 0]) tube_clamp_round_tee_long_104(D_AXLE_REAR); // cylinder(R_fixing[2], R_fixing[0] / 2, R_fixing[0] / 2, center = true);
|
||||
}
|
||||
// Shopping
|
||||
// bracket at bed
|
||||
// bracket bolt
|
||||
// echo(str("Base plate fastening washers: Washer Φ", D_WASHER_BASE_PLATE, "mm x ", T_WASHER_BASE_PLATE, "mm - x4")); // Base plate fastening washers
|
||||
echo(str("Leg: Round Aluminium bar Φ", D_AXLE_REAR, "mm x ", h_leg, "mm - x1"));
|
||||
// bracket at axle
|
||||
}
|
||||
|
||||
rear_leg_fixing();
|
||||
|
||||
28
models/rear_drive/rear_wheel_fastener.scad
Normal file
28
models/rear_drive/rear_wheel_fastener.scad
Normal file
@@ -0,0 +1,28 @@
|
||||
|
||||
include <../../config.scad>;
|
||||
use <../common/metric_bolt.scad>;
|
||||
use <../common/washer.scad>;
|
||||
|
||||
module rear_wheel_fastener() {
|
||||
echo("Rear wheel fastener:");
|
||||
height_bolt_head = get_metric_bolt_head_height(SIZE_BOLT_REAR_WHEEL_POSITIONING);
|
||||
count_washers_each_end = 7;
|
||||
L_bolt = D_AXLE_REAR + 2 * height_bolt_head + 2 * T_WASHER_BOLT_REAR_WHEEL_POSITIONING * count_washers_each_end + L_BOLT_EXTENSION;
|
||||
union() {
|
||||
// bolt
|
||||
translate([0, 0, -L_BOLT_EXTENSION / 2]) metric_bolt(SIZE_BOLT_REAR_WHEEL_POSITIONING, L_bolt, true, L_BOLT_EXTENSION);
|
||||
for (index_side_bolt = [0 : 1 : 1]) {
|
||||
mirror([0, 0, index_side_bolt]) {
|
||||
// washer
|
||||
for (index_washer = [0 : 1 : max(0, count_washers_each_end - 1)]) {
|
||||
translate([0, 0, D_AXLE_REAR / 2 + T_WASHER_BOLT_REAR_WHEEL_POSITIONING * (index_washer + 1/2)]) washer(T_WASHER_BOLT_REAR_WHEEL_POSITIONING, D_WASHER_BOLT_REAR_WHEEL_POSITIONING, SIZE_BOLT_REAR_WHEEL_POSITIONING);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// Shopping
|
||||
// bolt
|
||||
// echo(str("Bolt washer: Washer Φ", D_WASHER_BOLT_REAR_WHEEL_POSITIONING, "mm x ", T_WASHER_BOLT_REAR_WHEEL_POSITIONING, "mm - x", 2 * count_washers_each_end)); // Rear wheel fastener bolt washers
|
||||
}
|
||||
|
||||
rear_wheel_fastener();
|
||||
30
models/top_crate/fixing_top_crate_shaft.scad
Normal file
30
models/top_crate/fixing_top_crate_shaft.scad
Normal file
@@ -0,0 +1,30 @@
|
||||
include <../../config.scad>;
|
||||
use <../common/metric_bolt_functions.scad>;
|
||||
use <../common/metric_nut.scad>;
|
||||
use <../common/washer.scad>;
|
||||
|
||||
module fixing_top_crate_shaft() {
|
||||
echo("Fixing top crate shaft:");
|
||||
h_nut = get_metric_bolt_head_height(D_SHAFT_TOP_CRATE);
|
||||
union() {
|
||||
// shaft (threaded rod)
|
||||
color(COLOUR_ROD_THREADED) translate([0, 0, -R_BED[2] / 2 - T_WASHER_SHAFT_TOP_CRATE * COUNT_WASHERS_SHAFT_TOP_CRATE_EACH_END - h_nut]) cylinder(L_SHAFT_TOP_CRATE, D_SHAFT_TOP_CRATE / 2, D_SHAFT_TOP_CRATE / 2, center = false);
|
||||
// fixing
|
||||
for (index_side_bed_z = [0 : 1 : 1]) {
|
||||
mirror([0, 0, index_side_bed_z]) {
|
||||
// washers
|
||||
for (index_washer = [0 : 1 : COUNT_WASHERS_SHAFT_TOP_CRATE_EACH_END]) {
|
||||
translate([0, 0, R_BED[2] / 2 + T_WASHER_SHAFT_TOP_CRATE * index_washer]) washer(T_WASHER_SHAFT_TOP_CRATE, D_WASHER_SHAFT_TOP_CRATE, D_SHAFT_TOP_CRATE, centre = false);
|
||||
}
|
||||
// nuts
|
||||
translate([0, 0, R_BED[2] / 2 + T_WASHER_SHAFT_TOP_CRATE * COUNT_WASHERS_SHAFT_TOP_CRATE_EACH_END]) metric_nut(D_SHAFT_TOP_CRATE, centre = false);
|
||||
}
|
||||
}
|
||||
}
|
||||
// Shopping
|
||||
echo(str("Top crate shaft: Threaded Steel rod M", D_SHAFT_TOP_CRATE, " x ", L_SHAFT_TOP_CRATE, "mm - x1"));
|
||||
// Fixing washers
|
||||
// Fixing nuts
|
||||
}
|
||||
|
||||
fixing_top_crate_shaft();
|
||||
29
models/top_crate/top_crate_shaft_assembly.scad
Normal file
29
models/top_crate/top_crate_shaft_assembly.scad
Normal file
@@ -0,0 +1,29 @@
|
||||
include <../../config.scad>;
|
||||
use <./fixing_top_crate_shaft.scad>;
|
||||
|
||||
module top_crate_shaft_assembly() {
|
||||
echo("Top crate shaft assembly:");
|
||||
union() {
|
||||
// shafts along y
|
||||
for (index_side_x = [0 : 1 : 1]) {
|
||||
mirror([index_side_x, 0, 0]) {
|
||||
translate([R_BED[0] / 2 - D_WASHER_SHAFT_TOP_CRATE / 2, 0, 0]) for (index_shaft_y = [0 : 1 : COUNT_SHAFTS_TOP_CRATE_Y - 1]) {
|
||||
translate([0, -R_BED[1] / 2 + D_WASHER_SHAFT_TOP_CRATE / 2 + index_shaft_y * (R_BED[1] - D_WASHER_SHAFT_TOP_CRATE) / (COUNT_SHAFTS_TOP_CRATE_Y - 1), 0]) fixing_top_crate_shaft();
|
||||
}
|
||||
}
|
||||
}
|
||||
// shafts along x
|
||||
if (COUNT_SHAFTS_TOP_CRATE_X > 2) {
|
||||
for (index_side_y = [0 : 1 : 1]) {
|
||||
mirror([0, index_side_y, 0]) {
|
||||
translate([0, R_BED[1] / 2 - D_WASHER_SHAFT_TOP_CRATE / 2, 0]) for (index_shaft_x = [1 : 1 : COUNT_SHAFTS_TOP_CRATE_X - 2]) {
|
||||
translate([-R_BED[0] / 2 + D_WASHER_SHAFT_TOP_CRATE / 2 + index_shaft_x * (R_BED[0] - D_WASHER_SHAFT_TOP_CRATE) / (COUNT_SHAFTS_TOP_CRATE_X - 1), 0, 0]) fixing_top_crate_shaft();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// Shopping
|
||||
}
|
||||
|
||||
top_crate_shaft_assembly();
|
||||
Reference in New Issue
Block a user