This commit is contained in:
2025-06-30 17:14:30 +02:00
parent b6c7d680e6
commit e66309cbf2
140 changed files with 2 additions and 0 deletions

View File

@@ -0,0 +1,3 @@
### OpenSCAD files
Edit with [OpenSCAD](https://openscad.org/index.html).

View File

@@ -0,0 +1,52 @@
// Ball joint in SCAD by Erik de Bruijn
// Based on a design by Makerblock ( http://makerblock.com/2010/03/blender-help/ )
size=10; // size of the ball joint
joint_spacing =0.5; // some space between them?
joint_thickness = 2; // thickness of the arms
joint_arms = 5; // how many arms do you want?
arm_width = 10; // actually: how much is removed from the arms Larger values will remove more
//render settings
$fs=0.8; // def 1, 0.2 is high res
$fa=4;//def 12, 3 is very nice
//print();
demo(); // turn on animation, FPS 15, steps 200
module demo()
{
ball();
rotate([sin($t*720)*28,cos($t*360*4)*28,cos($t*360*2)*20]) joint();
}
module print()
{
translate([size*2+10,0,0]) ball();
rotate([0,180,0]) joint();
}
module ball()
{
sphere(r=size);
translate([0,0,-size]) cylinder(r1=8,r2=6,h=3);
translate([0,0,-size-3]) cylinder(r=8,h=3);
}
module joint()
{
difference()
{
sphere(r=size+joint_spacing+joint_thickness);
sphere(r=size+joint_spacing);
translate([0,0,-size-3]) cube([size+joint_spacing+joint_thickness+25,size+joint_spacing+joint_thickness+25,18],center=true);
for(i=[0:joint_arms])
{
rotate([0,0,360/joint_arms*i]) translate([-arm_width/2,0, -size/2-4])
cube([arm_width,size+joint_spacing+joint_thickness+20,size+6]);
}
}
translate([0,0,size-2]) cylinder(r2=8,r1=8,h=5);
}

View File

@@ -0,0 +1,38 @@
$fn=60;
include<threads.scad>
include <BOSL2/std.scad>
include <BOSL2/shapes2d.scad>
include <boltsos_0.4.1/BOLTS.scad>
// Lames horizontales
color("green") {
// Haut
rotate([0,90,0]) translate([-10,0,2.5]) {
translate([0,0,22.5]) {
mirror([0,1,0]) RodEnd(20, 32, thread_len=32, thread_diam=16, thread_pitch=4);
translate([0,-2.5,0]) cuboid([20,105,5], rounding=1);
}
translate([0,-50,0]) {
rotate([90,0,0]) tube(od=20, wall=5.5, h=5, rounding=1);
}
translate([0,-52.5,7.5]) rotate([-90,0,0]) cuboid([20,35,5], rounding=1);
}
// Bas
union() {
translate([80,0,5]) {
cuboid([20,80,10], rounding=1);
translate([0,15,5]) tube(od=11, wall=1, h=5);
translate([0,-15,5]) tube(od=11, wall=1, h=5);
}
}
}
// Lames verticales
color("pink") {
// Droite
translate([-20,0,10]) rotate([0,90,0]) {
mirror([0,1,0]) RodEnd(20, 30, thread_len=31, thread_diam=16, thread_pitch=4);
cuboid([20,22,5], rounding=1);
}
}

View File

@@ -0,0 +1,116 @@
$fn=60;
include<threads.scad>
include <BOSL2/std.scad>
include <BOSL2/shapes2d.scad>
include <boltsos_0.4.1/BOLTS.scad>
module bolt() {
difference() {
union() {
cuboid([26,21,10], rounding=1);
translate([-10,0,0]) cuboid([6,66,10], rounding=1);
}
translate([-2.5,0,0]) zcyl(l=10, d=15);
}
translate([-2.5,0,-5]) mirror([0,1,0]) RodEnd(15, 20, thread_len=20, thread_diam=12, thread_pitch=4);
}
module blade() {
difference () {
translate([-7.5,0,0]) cuboid([26,8,66], rounding=1);
translate([0,3.5,0]) cuboid([6,5,70], rounding=1);
}
translate([-7,-4,20]) ycyl(l=3, d=8, rounding=1);
translate([-7,-4,-20]) ycyl(l=3, d=8, rounding=1);
}
module screw() {
cylinder(h=15, d=12, $fn=6);
translate([0,0,15]) mirror([0,1,0]) RodStart(20, 3, thread_len=40, thread_diam=12, thread_pitch=4);
}
* bolt();
* blade();
* screw();
// Screws
color("blue") {
translate([-5,94,0]) rotate([90,0,0]) screw();
translate([-5,0,94]) rotate([180,0,0]) screw();
}
// Horizontal blades
color("green") {
// Right
translate([-2.5,65,0]) rotate([90,0,0]) bolt();
// Left
translate([5,-62,0]) blade();
translate([-14,0,30]) cuboid([3,129,6], rounding=1);
translate([-14,0,-30]) cuboid([3,129,6], rounding=1);
}
// Vertictal blades
color("pink") {
// Top
translate([-2.5,0,65]) rotate([0,180,180]) bolt();
// Bottom
translate([5,0,-62]) rotate([90,0,0]) blade();
translate([-9.5,30.5,4]) cuboid([4,5,132], rounding=1);
translate([-9.5,-30.5,4]) cuboid([4,5,132], rounding=1);
}
// Springs
* color("orange", alpha=.5) {
translate([5,-76,20]) ycyl(l=8, d=9);
translate([5,-76,-20]) ycyl(l=8, d=9);
translate([5,20,-72]) zcyl(l=16, d=9);
translate([5,-20,-72]) zcyl(l=16, d=9);
}
// Target
color("grey", alpha=1) {
translate([3,0,0]) {
difference() {
cuboid([1,90,90]);
translate([0,40,40]) xcyl(l=3, d=4);
translate([0,40,-40]) xcyl(l=3, d=4);
translate([0,-40,-40]) xcyl(l=3, d=4);
translate([0,-40,40]) xcyl(l=3, d=4);
}
}
}
color("red", alpha=0.5) translate([4,0,0]) xcyl(l=1, d=80);
// Box
color("white", alpha=.5) {
difference() {
translate([-6,0,0]) cuboid([33,166,166], rounding=1);
translate([-2,0,0]) cuboid([29,160,160], rounding=1);
translate([-5,81,0]) ycyl(l=6, d=13);
translate([-5,0,81]) zcyl(l=6, d=13);
}
// Corners
translate([-2,0,0]) {
translate([-6,58,58]) cuboid([22,47,47], rounding=1);
translate([-6,-58,58]) cuboid([22,47,47], rounding=1);
translate([-6,58,-58]) cuboid([22,47,47], rounding=1);
translate([-6,-58,-58]) cuboid([22,47,47], rounding=1);
}
// Pins
translate([3,40,40]) xcyl(l=3, d=3, rounding=1);
translate([3,40,-40]) xcyl(l=3, d=3, rounding=1);
translate([3,-40,-40]) xcyl(l=3, d=3, rounding=1);
translate([3,-40,40]) xcyl(l=3, d=3, rounding=1);
}
// Grp Plate
* color("cyan", alpha=.3) translate([5.5,0,0]) cuboid([4,120,120], rounding=1);
// Cover
* color("white", alpha=0.5) {
translate([15,0,0]) difference() {
cuboid([3,166,166], rounding=1);
xcyl(l=5, d=80);
}
}

View File

@@ -0,0 +1,53 @@
$fn=60;
include<threads.scad>
include <BOSL2/std.scad>
include <BOSL2/shapes2d.scad>
include <boltsos_0.4.1/BOLTS.scad>
module bolt() {
difference() {
union() {
cuboid([26,21,10], rounding=1);
translate([-10,0,0]) cuboid([6,66,10], rounding=1);
}
translate([-2.5,0,0]) zcyl(l=10, d=15);
}
translate([-2.5,0,-5]) mirror([0,1,0]) RodEnd(15, 20, thread_len=20, thread_diam=12, thread_pitch=4);
}
module blade() {
difference () {
translate([-7.5,0,0]) cuboid([26,8,66], rounding=1);
translate([0,3.5,0]) cuboid([6,5,70], rounding=1);
}
translate([-7,-4,20]) ycyl(l=3, d=8, rounding=1);
translate([-7,-4,-20]) ycyl(l=3, d=8, rounding=1);
}
* bolt();
* blade();
// Horizontal blades
color("green") {
translate([-50,0,15]) rotate([0,-90,0]) {
// Right
translate([-2.5,65,0]) rotate([90,0,0]) bolt();
// Left
translate([5,-62,0]) blade();
translate([-14,0,30]) cuboid([3,129,6], rounding=1);
translate([-14,0,-30]) cuboid([3,129,6], rounding=1);
}
}
// Vertictal blades
color("pink") {
translate([50,0,15]) rotate([-90,-90,0]) {
// Top
translate([-2.5,0,65]) rotate([0,180,180]) bolt();
// Bottom
translate([5,0,-62]) rotate([90,0,0]) blade();
translate([-9.5,30.5,4]) cuboid([4,5,132], rounding=1);
translate([-9.5,-30.5,4]) cuboid([4,5,132], rounding=1);
}
}

View File

@@ -0,0 +1,29 @@
$fn=60;
include<threads.scad>
include <BOSL2/std.scad>
include <BOSL2/shapes2d.scad>
include <boltsos_0.4.1/BOLTS.scad>
// Cover
/* translate([0,0,-44.5]) {*/
difference() {
cuboid([50,160,7], rounding=5, edges=[TOP,FRONT+RIGHT,FRONT+LEFT,BACK+RIGHT,BACK+LEFT]);
translate([0,60,3.5]) {
zcyl(l=10, r=2.25);
translate([0,0,-5]) zcyl(l=4, r=3.3);
}
translate([0,-60,3.5]) {
zcyl(l=10, r=2.25);
translate([0,0,-5]) zcyl(l=4, r=3.3);
}
}
translate([0,15,4]) {
zcyl(l=2, r=5.5);
tube(od=11, wall=1, h=5);
}
translate([0,-15,4]) {
zcyl(l=2, r=5.5);
tube(od=11, wall=1, h=5);
}
/*}*/

View File

@@ -0,0 +1,131 @@
$fn=60;
include<threads.scad>
include <BOSL2/std.scad>
include <BOSL2/shapes2d.scad>
include <boltsos_0.4.1/BOLTS.scad>
// Sight
color("grey", alpha=1) {
// Base
difference() {
translate([0,-5,0]) cuboid([20,50,40], rounding=2);
xcyl(l=20, d=12.5);
}
translate([0,-30 ,0]) rotate([-90,0,0]) tube(od=15, wall=3, h=7, chamfer=0.5);
// Eye
translate([2.5,0,0]) {
rotate([0,90,0]) {
tube(od=12, wall=3, h=22, chamfer=0.5);
translate([0,0,14.5]) tube(h=10, or1=6, or2=20, wall=3, chamfer=0.5);
}
}
}
// Screws
// Top
translate ([0,0,83.5]) rotate([0,180,0]) {
cylinder(h=15, d=14, $fn=6);
translate([0,0,15]) mirror([0,1,0]) RodStart(20, 3, thread_len=30, thread_diam=15, thread_pitch=4);
}
// Right
translate ([0,83.5,0]) rotate([90,0,0]) {
cylinder(h=15, d=14, $fn=6);
translate([0,0,15]) mirror([0,1,0]) RodStart(20, 3, thread_len=30, thread_diam=15, thread_pitch=4);
}
// Horizontal blades
color("green") {
// Haut
translate([0,0,22.5]) {
mirror([0,1,0]) RodEnd(20, 30, thread_len=31, thread_diam=16, thread_pitch=4);
translate([0,-2.5,0]) cuboid([20,105,5], rounding=1);
}
translate([0,-50,0]) {
rotate([90,0,0]) tube(od=20, wall=5.5, h=5, rounding=1);
}
translate([0,-52.5,7.5]) rotate([-90,0,0]) cuboid([20,35,5], rounding=1);
// Bas
union() {
translate([0,0,-25]) cuboid([20,80,10], rounding=1);
translate([0,15,-30]) tube(od=11, wall=1, h=5);
}
}
// Vertical blades
color("pink") {
// Droite
rotate([-90,0,0]) {
translate([0,0,22.5]) {
mirror([0,1,0]) RodEnd(20, 30, thread_len=31, thread_diam=16, thread_pitch=4);
cuboid([20,22,5], rounding=1);
}
}
// Gauche
* union() {
translate([0,-52,0]) ycyl(l=32, d=12, rounding=1);
translate([0,-67.5,9.5]) rotate([-90,0,0]) cuboid([20,31,5], rounding=1);
}
}
// Springs
color("orange", alpha=.5) {
translate([0,15,-35]) zcyl(l=9.5, d=9);
translate([0,-15,-35]) zcyl(l=9.5, d=9);
translate([0,-40,-0]) ycyl(l=20, d=9);
}
// Enclosure
outerWidth=30;
outerLength=141;
innerWidth=22;
innerLength=135;
color("cyan", alpha=0.5) {
translate([0,0,19]) difference() {
union() {
translate([0,0,10]) prismoid(size1=[outerWidth,outerLength], size2=[outerWidth,25], h=43, rounding=5);
translate([0,0,-25]) cuboid([outerWidth,outerLength,70], rounding=5, edges=[FRONT+RIGHT,FRONT+LEFT,BACK+RIGHT,BACK+LEFT]);
}
translate([0,0,-25]) cuboid([innerWidth,innerLength,70], rounding=1);
translate([0,0,10]) prismoid(size1=[innerWidth,innerLength], size2=[innerWidth,30], h=40, rounding=5);
translate([0,0,-19]) {
xcyl(l=60, d=38);
* cuboid([60,35,35], rounding=15);
translate([0,70,0]) ycyl(l=20, r=7);
translate([0,0,70]) zcyl(l=20, r=7);
}
}
difference() {
union() {
translate([0,60,-38]) cuboid([30,17,6], rounding=3);
translate([0,-60,-38]) cuboid([30,17,6], rounding=3);
}
translate([0,60,-38.5]) zcyl(l=10, r=2.25);
translate([0,60,-37]) rotate([180,0,0]) DIN931("M4");
translate([0,-60,-38.5]) zcyl(l=10, r=2.25);
translate([0,-60,-37]) rotate([180,0,0]) DIN931("M4");
}
}
// Cover
* translate([0,0,-44.5]) {
difference() {
cuboid([50,160,7], rounding=5, edges=[TOP,FRONT+RIGHT,FRONT+LEFT,BACK+RIGHT,BACK+LEFT]);
translate([0,60,3.5]) {
zcyl(l=10, r=2.25);
translate([0,0,-5]) zcyl(l=4, r=3.3);
}
translate([0,-60,3.5]) {
zcyl(l=10, r=2.25);
translate([0,0,-5]) zcyl(l=4, r=3.3);
}
}
translate([0,15,4]) {
zcyl(l=2, r=5.5);
tube(od=11, wall=1, h=5);
}
translate([0,-15,4]) {
zcyl(l=2, r=5.5);
tube(od=11, wall=1, h=5);
}
}

View File

@@ -0,0 +1,319 @@
$fn=60;
// Ball joint
size=8; // size of the ball joint
joint_spacing =0.75; // some space between them?
joint_thickness = 2; // thickness of the arms
joint_arms = 4; // how many arms do you want?
arm_width = 7; // actually: how much is removed from the arms Larger values will remove more
// Finger
f_len=45;
f_dia=5;
// Render settings
$fs=0.8; // def 1, 0.2 is high res
$fa=4;//def 12, 3 is very nice
/*[Torus]*/
ShowTorus = false;
Torus_Diameter = 9.5; //[.1:.01:400]
Torus_Circle_Radius = 7; //[.1:.01:400]
Torus_Fragments = 60; //[1:.01:200]
Rotate_TorusX = 90; //[0:.01:360]
Rotate_TorusY = 0; //[0:.01:360]
Rotate_TorusZ = 0; //[0:.01:360]
Move_TorusX = 0; //[-400:.01:400]
Move_TorusY = 0; //[-400:.01:400]
Move_TorusZ = -18; //[-400:.01:400]
include<ujoint.scad>
include<threads.scad>
include <BOSL2/std.scad>
include <BOSL2/shapes2d.scad>
include <BOSL2/gears.scad>
include <boltsos_0.4.1/BOLTS.scad>
module bolt() {
difference() {
cuboid([20,20,20], rounding=1);
zcyl(l=20, d=15);
}
translate([0,0,-10]) mirror([0,1,0]) RodEnd(15, 20, thread_len=20, thread_diam=12, thread_pitch=4);
}
module ball() {
sphere(r=size);
/* translate([0,0,-size]) cylinder(r1=f_dia-2,r2=f_dia-4,h=3); */
translate([0,0,-f_len/2-3]) /* cylinder(r=8,h=3); */ zcyl(l=f_len, d=f_dia, rounding=2.5);
}
module ball2() {
sphere(r=size);
/* translate([0,0,-size]) cylinder(r1=f_dia-2,r2=f_dia-4,h=3); */
translate([0,0,-f_len/3+3]) /* cylinder(r=8,h=3); */ tube(od=f_dia+3, wall=1, l=f_len/3, rounding=1);
}
module joint() {
difference()
{
sphere(r=size+joint_spacing+joint_thickness);
sphere(r=size+joint_spacing);
translate([0,0,-size-3]) cube([size+joint_spacing+joint_thickness+25,size+joint_spacing+joint_thickness+25,18],center=true);
for(i=[0:joint_arms])
{
rotate([0,0,360/joint_arms*i]) translate([-arm_width/2,0, -size/2-4])
cube([arm_width,size+joint_spacing+joint_thickness+20,size+6]);
}
}
translate([0,0,size-2]) cylinder(r2=8,r1=8,h=5);
}
module Torus() {
InnerRadius = Torus_Circle_Radius/2;
OuterRadius = Torus_Diameter/2-Torus_Circle_Radius/2;
rotate(a = [Rotate_TorusX, 0, 0])
rotate(a = [0, Rotate_TorusY, 0])
rotate(a = [0, 0, Rotate_TorusZ])
translate([Move_TorusX, 0, 0])
translate([0, Move_TorusY, 0])
translate([0, 0, Move_TorusZ])
if (ShowTorus) {
rotate_extrude(convexity = 10, $fn = Torus_Fragments)
translate([Torus_Diameter, 0, 0])
circle(r = Torus_Circle_Radius, $fn = 144);
}
else {
//
}
}
/*[screws]*/
color("blue") {
translate ([0,14,51]) rotate([0,180,0]) {
cylinder(h=15, d=12, $fn=6);
translate([0,0,15]) {
mirror([0,1,0]) RodStart(20, 3, thread_len=68, thread_diam=11, thread_pitch=4);
linear_extrude(5)
spur_gear2d(circ_pitch=7, teeth=16, pressure_angle=14);
}
}
translate ([0,52,51]) rotate([0,180,0]) {
* cylinder(h=15, d=12, $fn=6);
translate([0,0,15]) {
mirror([0,1,0]) RodStart(20, 3, thread_len=68, thread_diam=11, thread_pitch=4);
linear_extrude(5)
rotate([0,0,10]) spur_gear2d(circ_pitch=7, teeth=16, pressure_angle=14);
}
}
}
color("red") {
translate ([51,-14,0]) rotate([0,-90,0]) {
cylinder(h=15, d=12, $fn=6);
translate([0,0,15]) {
mirror([0,1,0]) RodStart(20, 3, thread_len=68, thread_diam=11, thread_pitch=4);
linear_extrude(5)
spur_gear2d(circ_pitch=7, teeth=16, pressure_angle=14);
}
}
translate ([36.5,33,0]) rotate([0,-90,0]) {
linear_extrude(5)
rotate([0,0,8]) spur_gear2d(circ_pitch=7, teeth=24, pressure_angle=14);
}
translate ([51,80,0]) rotate([0,-90,0]) {
* cylinder(h=15, d=12, $fn=6);
translate([0,0,15]) {
mirror([0,1,0]) RodStart(20, 3, thread_len=68, thread_diam=11, thread_pitch=4);
linear_extrude(5)
spur_gear2d(circ_pitch=7, teeth=16, pressure_angle=14);
}
}
}
/*[rings]*/
* color("grey") {
translate ([0,15,-34.5]) {
tube(od=15, wall=1.8, h=5, rounding=1);
}
translate ([-34.5,-15,0]) {
rotate([0,90,0]) {
tube(od=15, wall=1.8, h=5, rounding=1);
}
}
}
/*[rotule]*/
/*[y_axis]*/
* color("cyan") {
translate([0,14,0]) {
bolt();
}
}
/*[x_axis */
* color("pink") {
translate([0,-14,0]) {
rotate([0,90,0]) {
bolt();
}
}
}
/*[plate1]*/
translate([0,0,0]) {
/* Main */
cuboid([45,3,45], rounding=1);
translate([21,13,16]) cuboid([3,28,5], rounding=1);
translate([-21,13,16]) cuboid([3,28,5], rounding=1);
translate([21,13,-16]) cuboid([3,28,5], rounding=1);
translate([-21,13,-16]) cuboid([3,28,5], rounding=1);
//
translate([16,-13,21]) cuboid([5,28,3], rounding=1);
translate([-16,-13,21]) cuboid([5,28,3], rounding=1);
translate([16,-13,-21]) cuboid([5,28,3], rounding=1);
translate([-16,-13,-21]) cuboid([5,28,3], rounding=1);
//
difference() {
cuboid([30,14,30], rounding=1);
translate([0,-6,0]) cuboid([21,4,55], rounding=1);
translate([0,6,0]) cuboid([55,4,21], rounding=1);
}
// Front
translate([0,-26,0]) cuboid([45,3,45], rounding=1);
translate([0,-31,0]) rotate([90,0,0]) tube(od=16, wall=2, h=10, rounding=1);
// Sight
* translate([0,-33,0]) {
rotate([90,0,0]) {
tube(od=12, wall=3, h=12, chamfer=0.5);
translate([0,0,10.5]) tube(h=10, or1=6, or2=20, wall=3, chamfer=0.5);
}
}
// Back
translate([0,26,0]) cuboid([45,3,45], rounding=1);
// Joint
* translate([0,38,0]) rotate([90,0,0]) joint();
}
/*[plate2]*/
translate([0,66,0]) rotate([0,0,180]) {
/* Main */
cuboid([45,3,45], rounding=1);
translate([21,13,16]) cuboid([3,28,5], rounding=1);
translate([-21,13,16]) cuboid([3,28,5], rounding=1);
translate([21,13,-16]) cuboid([3,28,5], rounding=1);
translate([-21,13,-16]) cuboid([3,28,5], rounding=1);
//
translate([16,-13,21]) cuboid([5,28,3], rounding=1);
translate([-16,-13,21]) cuboid([5,28,3], rounding=1);
translate([16,-13,-21]) cuboid([5,28,3], rounding=1);
translate([-16,-13,-21]) cuboid([5,28,3], rounding=1);
//
difference() {
cuboid([30,14,30], rounding=1);
translate([0,-6,0]) cuboid([21,4,55], rounding=1);
translate([0,6,0]) cuboid([55,4,21], rounding=1);
}
// Front
translate([0,-26,0]) cuboid([45,3,45], rounding=1);
translate([0,-31,0]) rotate([90,0,0]) tube(od=16, wall=2, h=10, rounding=1);
// Sight
* translate([0,-33,0]) {
rotate([90,0,0]) {
tube(od=12, wall=3, h=12, chamfer=0.5);
translate([0,0,10.5]) tube(h=10, or1=6, or2=20, wall=3, chamfer=0.5);
}
}
// Back
translate([0,26,0]) cuboid([45,3,45], rounding=1);
// Joint
* translate([0,38,0]) rotate([90,0,0]) joint();
}
/*[balls]*/
* color("orange") {
translate([0,38,0]) {
rotate([90,0,0]) ball();
}
translate([0,98,0]) {
rotate([-90,0,0]) ball2();
}
}
/*[enclosure]*/
color("white", alpha=.5) {
difference() {
translate([0,15,0]) cuboid([80,100,80], rounding=1);
translate([0,15,0]) cuboid([74,110,74], rounding=1);
cuboid([60,40,60], rounding=20);
translate([0,14,37.5]) {
zcyl(l=10, d=14);
}
translate([37.5,-14,0]) {
xcyl(l=10, d=14);
}
}
translate([0,64,0]) {
difference() {
union() {
cuboid([80,3,80], rounding=1);
translate([0,39,100]) {
cuboid([160,3,160], rounding=1);
}
}
ycyl(l=3, d=f_dia+2, rounding=-1.5);
translate([0,39,100]) {
cuboid([110,4,110], rounding=1);
}
}
}
// Screw guides
translate ([-37,-15,0]) {
rotate([0,90,0]) {
tube(od=17, wall=1, h=4, rounding=1);
}
}
translate ([0,15,-37]) {
tube(od=17, wall=1, h=4, rounding=1);
}
// Back
translate([0,114,0]) {
cuboid([80,3,80], rounding=1);
translate([0,0,100]) {
cuboid([160,3,160], rounding=1);
}
}
}
/*[grp_holder]*/
* translate([0,108,0]) {
difference() {
union() {
translate([0,0,16]) {
rotate([90,0,0]) {
linear_extrude(6, center=true)
trapezoid(55, 20, 80, rounding=5);
}
}
translate([0,0,100]) {
cuboid([126,6,126], rounding=1);
}
}
translate([0,0,23]) {
rotate([90,0,0]) {
linear_extrude(6, center=true)
trapezoid(27, 30, 60, rounding=5);
}
}
translate([0,-1.5,100]) cuboid([121,5,121]);
* translate([0,0,100]) cuboid([116,7,116], rounding=2);
ycyl(l=6, d=f_dia+.5, rounding=-3);
}
/*[plexi]*/
color("cyan", alpha=.3) translate([0,-1,100]) cuboid([120,4,120], rounding=1);
}
/*[ball2]*/
* translate([0,98,0]) rotate([-90,0,0]) joint();

View File

@@ -0,0 +1,33 @@
$fn=60;
include<threads.scad>
include <BOSL2/std.scad>
include <BOSL2/shapes2d.scad>
include <boltsos_0.4.1/BOLTS.scad>
// Enclosure
color("cyan") {
translate([0,0,19]) difference() {
union() {
translate([0,0,10]) prismoid(size1=[30,141], size2=[20,30], h=43, rounding=5);
translate([0,0,-25]) cuboid([30,141,70], rounding=5, edges=[FRONT+RIGHT,FRONT+LEFT,BACK+RIGHT,BACK+LEFT]);
}
translate([0,0,-25]) cuboid([22,135,70], rounding=1);
translate([0,0,10]) prismoid(size1=[22,135], size2=[20,30], h=40, rounding=5);
translate([0,0,-19]) {
cuboid([60,35,35], rounding=15);
translate([0,70,0]) ycyl(l=20, r=7);
translate([0,0,70]) zcyl(l=20, r=7);
}
}
difference() {
union() {
translate([0,60,-38]) cuboid([30,17,6], rounding=3);
translate([0,-60,-38]) cuboid([30,17,6], rounding=3);
}
translate([0,60,-38.5]) zcyl(l=10, r=2.25);
translate([0,60,-37]) rotate([180,0,0]) DIN931("M4");
translate([0,-60,-38.5]) zcyl(l=10, r=2.25);
translate([0,-60,-37]) rotate([180,0,0]) DIN931("M4");
}
}

View File

@@ -0,0 +1,66 @@
//knob parameters
KNOB_HEIGHT=10;
KNOB_DIAM=30;
//screw parameters
SCREWHEAD_FACETOFACE=11;
SCREWHEAD_DEPTH=8;
THRU_HOLE_DIAM=0;
//grippy cutouts parameters
NUM_GRIP_CUTOUTS=16;
GRIP_CUTOUT_DIAM=4;
CUTOUT_RADIUS_ADJ=1;
module FaceToFaceHex(width,height){
cube([width/sqrt(3),width,height],center = true,$fn=64);
rotate([0,0,120])cube([width/sqrt(3),width,height],center = true);
rotate([0,0,240])cube([width/sqrt(3),width,height],center = true);
}
// a=angle, r=radius of rotation
module rotate_on_circle(angle, radius) {
dx=radius*sin(angle);
dy=radius*cos(angle);
translate([dx,dy,0])
children();
}
difference(){
//Knob
union(){
translate([0, 0, -(((KNOB_HEIGHT-SCREWHEAD_DEPTH)/2)+0.01)])
cylinder(r=KNOB_DIAM/2, h=KNOB_HEIGHT, center=true,$fn=64);
translate([0, 0, -(((KNOB_HEIGHT-SCREWHEAD_DEPTH+KNOB_HEIGHT)/2))]) {
* cylinder(r=KNOB_DIAM/4, h=KNOB_HEIGHT/2, center=true,$fn=64);
}
};
//screw
union(){
//screwHead
FaceToFaceHex(SCREWHEAD_FACETOFACE,SCREWHEAD_DEPTH);
//screwHole
translate([0, 0, -(((KNOB_HEIGHT+SCREWHEAD_DEPTH)/2)+0.001)])
cylinder(r=THRU_HOLE_DIAM/2, h=KNOB_HEIGHT+KNOB_HEIGHT/2+0.001, center=true,$fn=64);
};
//grippyCutouts
for(i=[1:NUM_GRIP_CUTOUTS]){
rot_angle=(360/NUM_GRIP_CUTOUTS)*i;
translate([0,0,-(((KNOB_HEIGHT-SCREWHEAD_DEPTH)/2)+0.01)])
rotate_on_circle(rot_angle,(KNOB_DIAM/2)+CUTOUT_RADIUS_ADJ)
cylinder(r=GRIP_CUTOUT_DIAM/2,h=KNOB_HEIGHT+0.01,center=true,$fn=64);
};
//top filet
translate([0, 0,-(((KNOB_HEIGHT-SCREWHEAD_DEPTH)/2)-0.1)])
rotate_extrude()
polygon(points = [[KNOB_DIAM,KNOB_HEIGHT], [0,KNOB_HEIGHT+2],[0,KNOB_HEIGHT],[KNOB_DIAM/1.29,0]],$fn=100);
//down filet
color("pink") {
translate([0, 0,-(((KNOB_HEIGHT-SCREWHEAD_DEPTH)/2)+0.1)])
rotate_extrude()
polygon(points = [[-KNOB_DIAM,-KNOB_HEIGHT], [0,-KNOB_HEIGHT-2],[0,-KNOB_HEIGHT],[-KNOB_DIAM/1.29,0]],$fn=100);
}
}

View File

@@ -0,0 +1,183 @@
$fn=80;
include <threads.scad>
include <BOSL2/std.scad>
include <BOSL2/gears.scad>
sl=75;
td=11;
tp=4;
sw=5;
cp=7;
te1=12;
te2=25;
pa=20;
module l_screw() {
mirror([0,1,0]) RodStart(sw*2, sw, thread_len=sl, thread_diam=td, thread_pitch=tp);
translate([0,0,sw]) {
linear_extrude(sw, center=true)
spur_gear2d(circ_pitch=cp, teeth=te1, pressure_angle=pa);
}
/* translate([0,0,sl+sw]) zcyl(l=sw, d=td+1, rounding=1); */
}
module l_bolt() {
difference() {
cuboid([20,20,20], rounding=1);
zcyl(l=20, d=15);
}
translate([0,0,-10]) mirror([0,1,0]) RodEnd(15, 20, thread_len=20, thread_diam=12, thread_pitch=4);
}
module r_screw() {
RodStart(sw*2, sw, thread_len=sl, thread_diam=td, thread_pitch=tp);
translate([0,0,sw]) {
linear_extrude(sw, center=true)
spur_gear2d(circ_pitch=cp, teeth=te1, pressure_angle=pa);
}
/* translate([0,0,sl+sw]) zcyl(l=sw, d=td+1, rounding=1); */
}
module r_bolt() {
difference() {
cuboid([20,20,20], rounding=1);
zcyl(l=20, d=15);
}
translate([0,0,-10]) RodEnd(15, 20, thread_len=20, thread_diam=12, thread_pitch=4);
}
module plate() {
/* Main */
cuboid([45,3,45], rounding=1);
translate([21,13,16]) cuboid([3,28,5], rounding=1);
translate([-21,13,16]) cuboid([3,28,5], rounding=1);
translate([21,13,-16]) cuboid([3,28,5], rounding=1);
translate([-21,13,-16]) cuboid([3,28,5], rounding=1);
//
translate([16,-13,21]) cuboid([5,28,3], rounding=1);
translate([-16,-13,21]) cuboid([5,28,3], rounding=1);
translate([16,-13,-21]) cuboid([5,28,3], rounding=1);
translate([-16,-13,-21]) cuboid([5,28,3], rounding=1);
//
difference() {
cuboid([30,14,30], rounding=1);
translate([0,-6,0]) cuboid([21,4,55], rounding=1);
translate([0,6,0]) cuboid([55,4,21], rounding=1);
}
// Front
translate([0,-26,0]) cuboid([45,3,45], rounding=1);
translate([0,-31,0]) rotate([90,0,0]) tube(od=16, wall=2, h=10, rounding=1);
// Back
translate([0,26,0]) cuboid([45,3,45], rounding=1);
}
/*[screws]*/
/*[x_axis]*/
color("cyan") {
translate([-14,0,0]) l_bolt();
translate([14,0,0]) l_bolt();
}
color("blue") {
translate ([-14,0,sl/2+5]) rotate([0,180,14]) {
translate([0,0,-10]) cylinder(h=15, d=td+1, $fn=6);
l_screw();
}
translate ([14,0,sl/2+5]) rotate([0,180,0]) l_screw();
}
/*[y_axis */
color("pink") {
translate([-42,0,0]) rotate([-90,0,0]) r_bolt();
translate([42,0,0]) rotate([-90,0,0]) l_bolt();
}
color("red") {
translate ([-42,-sl/2-5,0]) rotate([-90,6,0]) r_screw();
translate ([0,-sl/2,0]) rotate([90,0,0]) {
cylinder(h=15, d=td+1, $fn=6);
linear_extrude(sw, center=true)
spur_gear2d(circ_pitch=cp, teeth=te2, pressure_angle=pa);
}
translate ([42,-sl/2-5,0]) rotate([-90,-6,0]) l_screw();
}
/*[plates]*/
translate([-28,0,0]) rotate([0,0,-90]) plate();
translate([28,0,0]) rotate([0,0,90]) plate();
/*[enclosure]*/
* color("white", alpha=.5) {
difference() {
cuboid([126,86,86], rounding=1);
translate([3,0,0]) cuboid([126,80,80]);
translate([0,0,41.5]) cuboid([70,50,5]);
translate([0,-41.5,0]) cuboid([114,4,74]);
cuboid([140,55,55], rounding=20);
translate([-14,0,38.5]) zcyl(l=10, d=td+2);
translate([14,0,40]) zcyl(l=4, d=td+1);
translate([0,-38.5,0]) ycyl(l=10, d=td+2);
translate([-42,-40,0]) ycyl(l=4, d=td+1);
translate([42,-40,0]) ycyl(l=4, d=td+1);
}
color("grey") {
translate([0,-33,0]) {
ycyl(l=3, d=20);
cuboid([10,2,85]);
}
}
translate([-14,0,-38.5]) tube(od=16, wall=1.5, h=5, rounding=1);
translate([14,0,-38.5]) tube(od=16, wall=1.5, h=5, rounding=1);
rotate([90,0,0]) {
translate([-42,0,-38.5]) tube(od=16, wall=1.5, h=5, rounding=1);
translate([42,0,-38.5]) tube(od=16, wall=1.5, h=5, rounding=1);
}
/*[covers]*/
// Top
translate ([0,0,65]) {
difference() {
union() {
cuboid([76,56,2], rounding=1);
translate([0,0,-1.5]) cuboid([70,50,5], rounding=1);
}
translate([-14,0,-1]) zcyl(l=6, d=td+2);
translate([14,0,-3]) zcyl(l=3, d=td+1);
}
}
// Right
translate ([0,-65,0]) {
difference() {
union() {
cuboid([126,2,86], rounding=1);
translate([0,1.5,0]) cuboid([113,5,73], rounding=1);
}
translate([0,1,0]) ycyl(l=6, d=td+2);
translate([-42,3,0]) ycyl(l=3, d=td+1);
translate([42,3,0]) ycyl(l=3, d=td+1);
}
}
}
/*[grp_holder]*/
* translate([68,0,0]) rotate([0,0,-90]) {
difference() {
union() {
translate([0,0,16]) {
rotate([90,0,0]) {
linear_extrude(6, center=true)
trapezoid(55, 20, 80, rounding=5);
}
}
translate([0,0,100]) {
cuboid([126,6,126], rounding=1);
}
}
translate([0,0,23]) {
rotate([90,0,0]) {
linear_extrude(6, center=true)
trapezoid(27, 30, 60, rounding=5);
}
}
translate([0,-1.5,100]) cuboid([121,5,121]);
* translate([0,0,100]) cuboid([116,7,116], rounding=2);
ycyl(l=6, d=10, rounding=-3);
}
/*[plexi]*/
color("cyan", alpha=.3) translate([0,-1,100]) cuboid([120,4,120], rounding=1);
}

View File

@@ -0,0 +1,25 @@
$fn=60;
include<threads.scad>
include <BOSL2/std.scad>
include <BOSL2/shapes2d.scad>
include <boltsos_0.4.1/BOLTS.scad>
// Sight
color("grey") {
// Base
translate([0,0,20]) {
rotate ([-90,0,0]) {
difference() {
translate([0,-5,0]) cuboid([20,50,40], rounding=2);
xcyl(l=20, d=12.5);
}
translate([0,-30 ,0]) rotate([-90,0,0]) tube(od=15, wall=3, h=7, chamfer=0.5);
}
// Eye
translate([0,50,-9]) {
tube(od=12, wall=3, h=22, chamfer=0.5);
translate([0,0,16]) tube(h=15, or1=6, or2=20, wall=3, chamfer=0.5);
}
}
}

View File

@@ -0,0 +1,32 @@
/*[Torus]*/
ShowTorus = false;
Torus_Diameter = .1; //[.1:.01:400]
Torus_Circle_Radius = .1; //[.1:.01:400]
Torus_Fragments = 10; //[1:.01:200]
Rotate_TorusX = 0; //[0:.01:360]
Rotate_TorusY = 0; //[0:.01:360]
Rotate_TorusZ = 0; //[0:.01:360]
Move_TorusX = 0; //[-400:.01:400]
Move_TorusY = 0; //[-400:.01:400]
Move_TorusZ = 0; //[-400:.01:400]
module Torus() {
InnerRadius = Torus_Circle_Radius/2;
OuterRadius = Torus_Diameter/2-Torus_Circle_Radius/2;
rotate(a = [Rotate_TorusX, 0, 0])
rotate(a = [0, Rotate_TorusY, 0])
rotate(a = [0, 0, Rotate_TorusZ])
translate([Move_TorusX, 0, 0])
translate([0, Move_TorusY, 0])
translate([0, 0, Move_TorusZ])
if (ShowTorus){
rotate_extrude(convexity = 10, $fn = Torus_Fragments)
translate([Torus_Diameter, 0, 0])
circle(r = Torus_Circle_Radius, $fn = 144);
}
else {
//
}}
// Torus();