From 5d1942ba862a82206f67391236c1d85bee076e2d Mon Sep 17 00:00:00 2001 From: Wouter Horlings Date: Mon, 10 Aug 2020 17:45:21 +0200 Subject: [PATCH] Improve arm design --- .../SCARA/hardware/openSCAD/.gitignore | 1 + .../SCARA/hardware/openSCAD/carriage.scad | 166 +++++++++++++++--- .../SCARA/hardware/openSCAD/sg90.scad | 48 +++++ .../SCARA/hardware/openSCAD/stepper.scad | 44 ++++- .../hardware/openSCAD/steppertester.scad | 18 ++ 5 files changed, 246 insertions(+), 31 deletions(-) create mode 100644 implementation/SCARA/hardware/openSCAD/.gitignore create mode 100644 implementation/SCARA/hardware/openSCAD/sg90.scad create mode 100644 implementation/SCARA/hardware/openSCAD/steppertester.scad diff --git a/implementation/SCARA/hardware/openSCAD/.gitignore b/implementation/SCARA/hardware/openSCAD/.gitignore new file mode 100644 index 0000000..1567411 --- /dev/null +++ b/implementation/SCARA/hardware/openSCAD/.gitignore @@ -0,0 +1 @@ +*.stl diff --git a/implementation/SCARA/hardware/openSCAD/carriage.scad b/implementation/SCARA/hardware/openSCAD/carriage.scad index a4a2a0b..434f02c 100644 --- a/implementation/SCARA/hardware/openSCAD/carriage.scad +++ b/implementation/SCARA/hardware/openSCAD/carriage.scad @@ -2,6 +2,7 @@ use use use use +use //module arm(holes, width, thinkness, bore){ @@ -17,39 +18,150 @@ b = acos((arm1_sq + length_sq - arm2_sq)/(2 * arm1 * length)); c = acos((arm1_sq - length_sq + arm2_sq)/(2 * arm1 * arm2)); angle1 = b + atan2(y,x) - 90; angle2 = angle1 - 90 + c; -stepper_spaceing = 45; +stepper_spaceing = 47; stepper_offset = 55; arm_thickness = 3; arm_width = 10; arm_offset = 15; -%translate([stepper_offset,0,0]) { - // stepper on joint C - rotate([0,90,0]) stepper_103H5205(); - // stepper on joint A - translate([0,stepper_spaceing,0]) rotate([0,90,0]) stepper_103H5205(); +bus_diameter = 3 + arm_width; +shaft_bore = 5.15; +joint_bore = 3.2; +joint_spacing = arm_thickness+1; +set_screw_bore = 2.5; + +$fn = $preview? 32 : 72; + +module arm3 (){ + difference(){ + union(){ + translate([0,0,-arm_thickness/2])cylinder(d=bus_diameter,h=10-arm_thickness/2); + arm([0,25],arm_width,arm_thickness,joint_bore); + } + cylinder(d=shaft_bore,h=16,center=true); + rotate([0,-90,0]){ + rotate([45,0,0]) translate([arm_thickness,0,0]) cylinder(d=set_screw_bore,h=20); + rotate([-45,0,0]) translate([arm_thickness,0,0]) cylinder(d=set_screw_bore,h=20); + } + } +} + +module arm0 (){ + difference(){ + union(){ + cylinder(d=bus_diameter,h=20,center=true); + arm([0,25],arm_width,arm_thickness,joint_bore); + } + cylinder(d=shaft_bore,h=21,center=true); + rotate([0,-90,0]){ + translate([5,0,0]) cylinder(d=set_screw_bore,h=20); + translate([-5,0,0]) cylinder(d=set_screw_bore,h=20); + } + } +} +module arm5a(){ + rotate([90, 0, 90]) arm([25,0,50],arm_width,arm_thickness,joint_bore); +} + +module arm5b(){ + arm5a(); + difference(){ + translate([-arm_thickness/2-2.5,35,-14]) rotate([0,0,180]) {sg90_bracket(); + // sg90(-90); + } + translate([0,25,0]) rotate([0,90,0]) cylinder(d=7,h=10,center=true); + } +} + +module arm5(){ + translate([joint_spacing,0,0]) arm5a(); + translate([-joint_spacing,0,0]) arm5b(); + translate([0,50,0]) difference() {cube([arm_thickness+2*joint_spacing,10,arm_width], center=true); + cylinder(d=joint_bore,h=40,center=true); + } +} + +module arm6a(){ + union(){ + rotate([0,0,90]) arm([0,30-arm_width/2],arm_width,arm_thickness,joint_bore); + translate([0,30-arm_width/2,0]) cube([arm_width,arm_width,arm_thickness],center=true); //cylinder(h=arm_thickness,d=arm_width,center=true); + } +} + +module arm6b(){ + difference() { + length = 29; + hull() { + cylinder(h=arm_thickness, d=arm_width,center=true); + translate([0,length,0]) cylinder(h=arm_thickness, d=5, center=true); + } + cylinder(h=arm_thickness+1, d=joint_bore,center=true); + translate([0,length,0]) cylinder(h=arm_thickness+1, d=2, center=true); + } +} + +module arm6(){ + arm_offset = 5+arm_thickness/2+1; + difference(){ + union(){ + translate([0,0,arm_offset]) arm6a(); + translate([0,0,arm_offset]) rotate([0,0,90]) arm6b(); + translate([0,0,-arm_offset]) arm6a(); + translate([0,30,0]) { + translate([-20+arm_width/2,0,0]) rotate([0,90,0]) cylinder(d=18,h=20); + translate([-5,0,0]) { + rotate([-45,0,0]) cylinder(d=7,h=11); + rotate([-135,0,0]) cylinder(d=7,h=11); + } + } + } + translate([0,30,0]){ + translate([-20+arm_width/2-1,0,0])rotate([0,90,0]) cylinder(d=14.9,h=22); + translate([-5,0,0]) { + rotate([-45,0,0]) cylinder(d=set_screw_bore,h=40); + rotate([-135,0,0]) cylinder(d=set_screw_bore,h=40); + } + } + } + +} + +//!arm6(); + +translate([stepper_offset,0,0]) { + // stepper on joint C + rotate([-90,0,-90]) stepper_103H5205(); + // stepper on joint A + translate([0,stepper_spaceing,0]) rotate([90,0,90]) stepper_103H5205(); translate([arm_offset,0,0]){ - - translate([0,stepper_spaceing,0]) rotate([angle1,0,0]) rotate([0,-90,0]) arm([0,-25],arm_width,arm_thickness,5); + + //arm0 + translate([0,stepper_spaceing,0]) rotate([angle1,0,0]) rotate([0,90,0]) arm0();//([0,-25],arm_width,arm_thickness,5); //arm1 - rotate([angle1,0,0]) rotate([0,-90,0]) arm([0,-25,arm1],arm_width,arm_thickness,5); + rotate([angle1,0,0]) rotate([0,-90,0]) + difference(){ + arm([0,-25,arm1],arm_width,arm_thickness,joint_bore); + cylinder(d=shaft_bore, h= 10, center=true); + } //arm2 - translate([3,0,0]) rotate([angle1,0,0]) translate([0,0,-25]) rotate([-angle1,0,0]) rotate([90,0,90]) arm([0,stepper_spaceing],arm_width,arm_thickness,5); - translate([-3,0,0]) rotate([angle1,0,0]) translate([0,0,-25]) rotate([-angle1,0,0]) rotate([90,0,90]) arm([0,stepper_spaceing],arm_width,arm_thickness,5); + translate([3,0,0]) rotate([angle1,0,0]) translate([0,0,-25]) rotate([-angle1,0,0]) rotate([90,0,90]) arm([0,stepper_spaceing],arm_width,arm_thickness,joint_bore); + translate([-3,0,0]) rotate([angle1,0,0]) translate([0,0,-25]) rotate([-angle1,0,0]) rotate([90,0,90]) arm([0,stepper_spaceing],arm_width,arm_thickness,joint_bore); //arm3 rotate([angle2,0,0]){ - translate([3,0,0]) rotate([90,0,-90]) arm([0,25],arm_width,arm_thickness,5); - translate([-3,0,0]) rotate([90,0,-90]) arm([0,25],arm_width,arm_thickness,5); + translate([3,0,0]) rotate([-90,0,-90]) arm3(); //([0,25],arm_width,arm_thickness,5); + translate([-3,0,0]) rotate([90,0,-90]) arm3(); //arm([0,25],arm_width,arm_thickness,5); translate([0,-25,0]) rotate([angle1-angle2,0,0]) { // arm4 - rotate([0,-90,0]) arm([0,arm1],arm_width,arm_thickness,5); - translate([0,0,arm1]) rotate([angle2-angle1,0,0]) { - translate([3,0,0]) rotate([90, 0, 90]) arm([25,0,arm2+25],arm_width,arm_thickness,5); - translate([-3,0,0]) rotate([90, 0, 90]) arm([25,0,arm2+25],arm_width,arm_thickness,5); - translate([-stepper_offset-arm_offset,arm2+25]) rotate([0,90,0]) marker(0); + rotate([0,-90,0]) arm([0,arm1],arm_width,arm_thickness,joint_bore); + translate([0,0,arm1]) rotate([angle2-angle1,0,0]) rotate([0,0,0]) { + arm5(); + translate([-stepper_offset-arm_offset,arm2+25]) rotate([0,90,0]) marker("red"); + translate([0,50,0]){ + arm6(); + } } } } @@ -57,18 +169,18 @@ arm_offset = 15; } // electronics -translate([20,80,-10]) rotate([-0,-90,0]){ -color("olive") translate([-12,-2,5]) cube([40,61,1]); -stepper_controller(); -translate([0,25.4,0]) stepper_controller(); +translate([40,0,-60]) rotate([-0,-90,0]){ + color("olive") translate([-12,-2,5]) cube([40,61,1]); + translate([20,5,0]) + rotate([0,0,90]) { + stepper_controller(); + translate([30.4,0,0]) stepper_controller(); + } } //carriage translate([stepper_offset,0,0]) rotate([0,90,0]) { - stepper_103H5205_mount(); - translate([0,stepper_spaceing,0]) stepper_103H5205_mount(); + stepper_103H5205_bracket(); + translate([0,stepper_spaceing,0]) stepper_103H5205_bracket(); } - - - diff --git a/implementation/SCARA/hardware/openSCAD/sg90.scad b/implementation/SCARA/hardware/openSCAD/sg90.scad new file mode 100644 index 0000000..7b9c9b0 --- /dev/null +++ b/implementation/SCARA/hardware/openSCAD/sg90.scad @@ -0,0 +1,48 @@ + +sg90_length = 22.2; +sg90_width = 11.8; +sg90_flange_pos = 15.9; +sg90_flange_thinkness = 2.5; +sg90_flange_length = 5; +sg90_flange_hole_pos = 2.7; +sg90_flange_hole_bore = 2; + +module sg90(rot){ + translate([0,0,-sg90_flange_pos+7]) { + color("steelblue") import("SG90_v7.stl"); + translate([5.9,16.3,32]) rotate([0,180,rot]) import("SG90_arm_v2.stl"); + } +} + +module sg90_bracket_halve(){ + thinkness = 5; + translate([0,0,-thinkness]) difference(){ + cube([sg90_width,sg90_flange_length,thinkness]); + translate([sg90_width/2,sg90_flange_hole_pos,-1]) cylinder(d=sg90_flange_hole_bore,h=thinkness+2); + } +} + +module sg90_bracket(){ +hull(){ +translate([-2,-2,0]) cube([2,27,13]); +translate([-5,-2,8]) cube([5,27,5]); +} +translate([-2,-2,0]) cube([16,2,7]); +translate([-2,23,0]) cube([16,2,7]); +translate([-2,23,9.5]) cube([4,2,3.5]); +translate([-2,-2,9.5]) cube([4,2,3.5]); + +difference(){ +translate([12.5,-2,0]) cube([1.5,27,7]); +translate([17,11.5,4]) rotate([0,0,45]) cube([20,20,10],center=true); +} +//import("servo-halter-sg90-1.stl"); +} +/* translate([0,0,sg90_flange_pos]) { + translate([0,-sg90_flange_length,0]) sg90_bracket_halve(); + translate([0,sg90_length,0]) sg90_bracket_halve(); + }*/ + + +//sg90(90); +sg90_bracket(); diff --git a/implementation/SCARA/hardware/openSCAD/stepper.scad b/implementation/SCARA/hardware/openSCAD/stepper.scad index c45583d..a273a1d 100644 --- a/implementation/SCARA/hardware/openSCAD/stepper.scad +++ b/implementation/SCARA/hardware/openSCAD/stepper.scad @@ -44,24 +44,60 @@ module four_cylinder(distance,height,radius){ } } -stepper_103H5205(); -translate([0,0,0.2]) stepper_103H5205_mount(); +rotate([0,0,90]) stepper_103H5205(); +translate([0,0,0.2]) stepper_103H5205_bracket(); module stepper_103H5205_mount() { - body_width = 42; + body_width = 43; flange_diameter = 22; hole_seperation = 31; - hole_bore = 3; + hole_bore = 4; hole_depth = 4; corner_radius = 5; bracket_thickness = 4; difference(){ + hull(){ body(length=bracket_thickness, width=body_width, corner_radius = corner_radius); + } translate([0,0,-0.5]) four_cylinder(hole_seperation/2,bracket_thickness+1,hole_bore/2); translate([0,0,-0.5]) cylinder(h=bracket_thickness+1,d=flange_diameter+1); } } + +module stepper_103H5205_bracket() { + body_width = 43; + flange_diameter = 22; + hole_seperation = 31; + hole_bore = 4; + hole_depth = 4; + corner_radius = 5; + bracket_thickness = 4; + + difference(){ + hull(){ + body(length=bracket_thickness, width=body_width, corner_radius = corner_radius); + translate([body_width/2-5,0,bracket_thickness/2]) + cube([10,body_width,bracket_thickness],center=true); + } + translate([0,0,-0.5]) four_cylinder(hole_seperation/2,bracket_thickness+1,hole_bore/2); + translate([0,0,-0.5]) cylinder(h=bracket_thickness+1,d=flange_diameter+1); + } + mount_side(body_width, bracket_thickness); + mirror([0,1,0]) + mount_side(body_width, bracket_thickness); + translate([body_width/2, -(body_width/2+bracket_thickness) ,-body_width*0.7+bracket_thickness]) + cube([bracket_thickness,bracket_thickness*2+body_width,body_width*0.7]); +} + +module mount_side(body_width, bracket_thickness) { + translate([body_width/2 - body_width *0.7, body_width/2, bracket_thickness- body_width *0.7]) + difference(){ + cube([body_width*0.7,bracket_thickness,body_width*0.7]); + rotate([90,0,0]) + cylinder(h=bracket_thickness*2.5,r=body_width*0.7-bracket_thickness,center=true); + } +} diff --git a/implementation/SCARA/hardware/openSCAD/steppertester.scad b/implementation/SCARA/hardware/openSCAD/steppertester.scad new file mode 100644 index 0000000..c4e9705 --- /dev/null +++ b/implementation/SCARA/hardware/openSCAD/steppertester.scad @@ -0,0 +1,18 @@ +use +$fn = $preview? 32 : 72; + +stepper_103H5205(); +translate([0,0,50]) rotate([180,0,0]) stepper_103H5205(); +union(){ + translate([0,0,4]) rotate([180,0,0]) stepper_103H5205_bracket(); + translate([0,0,46]) stepper_103H5205_bracket(); +} + +translate([0,0,25]) difference(){ + cylinder(h=30,d=12,center=true); + cylinder(h=32,d=5,center=true); + rotate([90,0,0]) { + translate([0,8,0]) cylinder(h=32,d=3); + translate([0,-8,0]) cylinder(h=32,d=3); + } +}