diff --git a/Images/actions.png b/Images/actions.png new file mode 100644 index 0000000..a8440c0 Binary files /dev/null and b/Images/actions.png differ diff --git a/Images/artecfacts.png b/Images/artecfacts.png new file mode 100644 index 0000000..100ecc7 Binary files /dev/null and b/Images/artecfacts.png differ diff --git a/Images/deltatoy_pinned.jpg b/Images/deltatoy_pinned.jpg new file mode 100644 index 0000000..5b720ad Binary files /dev/null and b/Images/deltatoy_pinned.jpg differ diff --git a/Images/pinDemo.png b/Images/pinDemo.png new file mode 100644 index 0000000..2de1252 Binary files /dev/null and b/Images/pinDemo.png differ diff --git a/Pin.scad b/Pin.scad new file mode 100644 index 0000000..02a6388 --- /dev/null +++ b/Pin.scad @@ -0,0 +1,61 @@ +// create a pin to constrain the part +//should print sat on the wide end without difficulty +// should have a narrower "bearing surface" for the moveing part +//should end in a slightly wider profile to lock in +// use a wedge profile such that joint preload can be controlled by adjusting the insertion distance slightly + +$fs = 0.1; +$sa = 1; +include ; +//cone is part of the bearing +module pin( +matingLength = 5, +bearingLength = 5, +coneLength = 2, +coneOuterDia = 7, +pinDia = pinDia, +bearingDelta = pinClearence, +chamferLength = 1, +chamferStep = 1 +){ +assert(bearingLength>coneLength, "bearing length must be longer than cone length"); +translate([0,0,-(matingLength+bearingLength)]) { + //chamfer to make locating into hole easier + cylinder(d1=pinDia-chamferStep,d2 = pinDia,h= chamferLength); + //mating section is a fixed length plug + translate([0,0,chamferLength-0.001]) cylinder(d=pinDia,h= matingLength-chamferLength); + //bearing shaft is full length inside part + translate([0,0,chamferLength]) cylinder(d=pinDia-bearingDelta,h= matingLength+bearingLength-chamferLength); + //coneic mating surface + translate([0,0,(matingLength+bearingLength)-coneLength]) cylinder(d1=pinDia-bearingDelta,d2 = coneOuterDia,h= coneLength); + } +} + +module pinClearence( +Length = 10, +pinDia = pinDia, +bearingDelta = pinClearence*1.5, +coneLength = 2, +coneOuterDia = 7, +overHead = 0.1 +){ +assert(Length>coneLength, "bearing length must be longer than cone length"); +translate([0,0,-(Length)]) { + //clear to the pin diamter throughout + cylinder(d=pinDia+bearingDelta,h=Length); + //coneic mating surface + translate([0,0,(Length)-coneLength]) cylinder(d1=pinDia+bearingDelta,d2 = coneOuterDia,h= coneLength); + translate([0,0,Length-0.01]) cylinder(d=coneOuterDia,h=overHead); + } +} + +module pinMate(Length = 10, pinClearence = pinClearence, overHead = 0.1){ + + translate([0,0,-Length]) cylinder(d=pinDia+pinClearence,h=Length+overHead); + +} +rotate([180,0,0]){ +//translate([-10,0,0]) pinClearence(); +translate([ 0,0,0]) pin(); +//translate([ 10,0,0]) pinMate(); +} \ No newline at end of file diff --git a/arm.scad b/arm.scad index b4583c8..6eb8f9d 100644 --- a/arm.scad +++ b/arm.scad @@ -1,4 +1,5 @@ include +use // lower and upper arm are the same centerToCenter = 25; @@ -16,7 +17,7 @@ difference(){ cylinder(d=Width,h=Thickness); translate([centerToCenter,0,0]) cylinder(d=Width,h=Thickness); } - cylinder(d=pinDia,h=pinHeight+Thickness); } - translate([centerToCenter,0,-Thickness]) cylinder(d=pinDia+pinClearenceVert,h=Thickness*3); + translate([centerToCenter,0,Thickness]) pinMate(); + translate([0,0,Thickness]) pinClearence(); } \ No newline at end of file diff --git a/pinDemo.scad b/pinDemo.scad new file mode 100644 index 0000000..cc61dc5 --- /dev/null +++ b/pinDemo.scad @@ -0,0 +1,17 @@ +use +$fs = 0.1; +$fa=1; + + +color("red") difference() { + cylinder(d=10,h=8); + translate([0,0,8]) pinMate(); +} + + +color("blue") translate([0,0,10]) difference() { + cylinder(d=10,h=5); + translate([0,0,5]) pinClearence(); +} + +color("green") translate([0,0,25]) pin(); \ No newline at end of file diff --git a/readme.md b/readme.md index fbc7a38..a4bc7ae 100644 --- a/readme.md +++ b/readme.md @@ -1,6 +1,7 @@ # Grounded Delta Desk Toy This is a quick and basic openscad model, it's small and quick to print, it requires three non-printed parts (skate/608 bearings) -![Image of the first revision of the Grounded Delta Desk Toy](/Images/FirstPrint.jpg) +![Image of the pinned assembly Grounded Delta Desk Toy](/Images/deltatoy_pinned.jpg) + ## Parts list to print | Part | Count | @@ -10,24 +11,47 @@ This is a quick and basic openscad model, it's small and quick to print, it requ | shoulder | 3 | | tool | 1 | | base | 1 | +| pins | 12 | All printed parts should print in the openscad export orientation without supports ## Non-printed parts | Part | Count | | ---- | ----- | -| 806 bearing | 3 | +| 608 bearing | 3 | ## Assembly instructions 1. Place bearings into the big hole on the bottom of each shoulder -2. Assemble an arm by pressing two segments together (peg into hole) the "spare" peg should be under the arm (nothing sticks out from the side of the arm) -3. add the wrist peg into the hole on the top arm, note the wrist will sit above the other arm section, if the wrist would be upside down rotate the arm 180 degrees -4. Connect the arm to the shoulder, note orientation, one side of the bracket is right on the centre of the round part, this is the side the arm should attach from +2. Assemble an arm by plassing two segments together and connecting with a pin, the pin should go into a hole with a chamfer in the first part and through to a hole without a chamfer, all chamfers should face outwards +3. Place a pin through the chamfered hole in the wrist and into the hole on the top arm, note the wrist will sit above the other arm section, if the wrist would be upside down rotate the arm 180 degrees +4. Place a pin through the chamfered hole in the bottom of the arm and into the hole in the shoulder, note that the seam between the arm and shoulder should be centered 5. Repeat this for the other two arms -6. Sit each arm on top of one of the pegs on the base +6. Place three pins through the tool part and into the bottom side of each wrist +7. Sit the assembly on top of the base (one shoulder onto each pin) ## Known Problems -* The tolerance on the bearings is a little loose, the first version has a small piece of electrical tape over each pen and on the edge of each bearing to tighten it up -* The printed joints are not very good, new design to follow at some point +* The tolerance on the bearings is a little loose, the first version has a small piece of electrical tape over each peg and on the edge of each bearing to tighten it up +* new pinned joints are a big improvement but they are quite stiff to install, I used a small trigger clamp + + +## This Branch +This branch create a demo set for an alternative fixing method where all parts have either a pass through hole or a mating point for a pin. all parts are then pinned togeather + +The pinned joints provide constraint and the ability to rotate + +![Pin joint components](/Images/pinDemo.png) +The pin (green) passes through the moving part (blue) and anchors in the static part (red) +the pin to static joint is a friction fit +there is a necked down part of the pin to allow for reduced friction on the moving part, the cone on the pin acts as an alignment point + +## Where STL? +STL files are generated using github actions to make sure they are up to date with the repo +visit [https://github.com/Scopeuk/GroundedDeltaDeskToy/actions] +select the latest build with the branch name (highlighted in blue) that matches what you are after "PegJoint" for this branch +![Github actions reference](/Images/actions.png) +Select the download button in the artefacts section +![Github actions reference](/Images/artecfacts.png) + + diff --git a/shoulder.scad b/shoulder.scad index d8c37c8..2369309 100644 --- a/shoulder.scad +++ b/shoulder.scad @@ -1,11 +1,12 @@ include +use $fs=0.1; $fa=1; diskDia = 25; diskThickness = 10; -plateThickness = 3; +plateThickness = 5; difference(){ //base shape @@ -28,7 +29,7 @@ translate([0,0,diskThickness]){ translate([0,0,PivotHeight]) rotate([0,90,0])cylinder(h=plateThickness,d=10); translate([0,-10/2,-0.1]) cube([plateThickness,10,0.1]); } - translate([-plateThickness,0,PivotHeight]) rotate([0,90,0]) cylinder(d=pinDia+pinClearence,h=plateThickness*3); + translate([0,0,PivotHeight]) rotate([0,-90,0]) pinMate(); } } diff --git a/tool.scad b/tool.scad index fcd0cf9..293af35 100644 --- a/tool.scad +++ b/tool.scad @@ -1,24 +1,21 @@ include +use $fs=0.1; $fa=1; baseDia = 40; -baseHeight = 3; +baseHeight = 5; pinInset = 4; pinHeight = 6; pinWasherDia = pinDia*1.5; pinWasherHeight = 0.1; +difference(){ + cylinder(d = baseDia, h = baseHeight); -cylinder(d = baseDia, h = baseHeight); - -module pin(){ - cylinder(d = pinWasherDia, h = baseHeight + pinWasherHeight); - cylinder(d = pinDia, h = baseHeight + pinWasherHeight + pinHeight); -} - -for(i=[0:120:360]){ - rotate([0,0,i]) translate([(baseDia/2)-pinInset,0,0]) pin(); + for(i=[0:120:360]){ + rotate([0,0,i]) translate([(baseDia/2)-pinInset,0,baseHeight]) pinClearence(); + } } diff --git a/wrist.scad b/wrist.scad index cca0351..5319517 100644 --- a/wrist.scad +++ b/wrist.scad @@ -1,33 +1,38 @@ include +use $fs=0.1; $fa=1; diskDia = 10; -diskThickness = 3; -plateThickness = 3; +diskThickness = 5; +plateThickness = 5; centerToCenter = 12; pinLength = 5; -rotate([0,-90,0]) union(){ +translate([0,0,diskDia/2]) rotate([0,90,0]) union(){ difference(){ - hull(){ - //base shape - translate([-diskDia/2,0,0])cube([diskDia,0.1,diskThickness]); - translate([0,centerToCenter,0]) cylinder(d=diskDia,h=diskThickness); - } - translate([0,centerToCenter,0]) cylinder(d=pinDia+pinClearence,h=diskThickness*3); - } + union(){ + hull(){ + //base shape + translate([-diskDia/2,0,0])cube([diskDia,0.1,diskThickness]); + translate([0,centerToCenter,0]) cylinder(d=diskDia,h=diskThickness); + } - translate([-(diskDia/2-plateThickness),diskDia/2,diskThickness]){ - PivotHeight = 7.5; - PivotOff = 10; - union(){ - hull(){ - translate([0,-PivotOff,PivotHeight]) rotate([0,-90,0])cylinder(h=plateThickness,d=10); - translate([-plateThickness,-10/2,-0.1]) cube([plateThickness,10,0.1]); - } - translate([-plateThickness,-PivotOff,PivotHeight]) rotate([0,90,0]) cylinder(d=pinDia,h=pinLength+plateThickness); - } + translate([diskDia/2,diskDia/2,diskThickness]) + { + PivotHeight = 7.5; + PivotOff = 10; + difference(){ + hull(){ + translate([0,-PivotOff,PivotHeight]) rotate([0,-90,0])cylinder(h=plateThickness,d=diskDia); + translate([-plateThickness,-10/2,-0.1]) cube([plateThickness,diskDia,0.1]); + } + translate([0,-PivotOff,PivotHeight]) rotate([0,90,0]) pinClearence(); + } + } + } + + translate([0,centerToCenter,0]) rotate([0,180,0]) pinMate(); } -} \ No newline at end of file +}