Difference between revisions of "UltrasonicSensorServoMount"
Jump to navigation
Jump to search
(6 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
− | + | {{jscad|code= | |
− | + | //Parametric. | |
− | + | //Oktay Gülmez, 23/2/2016. | |
− | + | // converted to OpenJSCAD by Wolfgang Fahl 2019-06-09 | |
− | + | //GNU_GPL_V3 | |
− | + | // include("Bezier.jscad") | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | /** | |
− | + | * create front Plate | |
− | + | */ | |
− | + | function frontPlate(thickness, eyes_width, eyes_diameter) { | |
− | + | safety = 0.6; | |
− | + | radius = eyes_diameter+2; | |
− | + | radius2 = 5; | |
− | + | var parts = []; | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
var holes = []; | var holes = []; | ||
− | + | //Front plate: | |
− | + | parts.push(linear_extrude({ | |
− | + | height: thickness, | |
− | + | convexity: 10, | |
− | + | fn: 60 | |
− | + | }, hull( | |
− | + | translate([-eyes_width / 2, 0, 0], circle({ | |
− | + | r: radius, | |
− | + | center: true | |
− | + | })), | |
− | + | translate([eyes_width / 2, 0, 0], circle({ | |
− | + | r: radius, | |
− | + | center: true | |
− | + | })) | |
− | + | ))); | |
− | + | parts.push(linear_extrude({ | |
− | + | height: thickness, | |
− | + | convexity: 10, | |
− | + | fn: 60 | |
− | + | }, hull( | |
− | + | translate([-eyes_width / 2, 0, 0], circle({ | |
− | + | r: radius, | |
− | + | center: true | |
− | + | })), | |
− | + | translate([-8, -30, 0], circle({ | |
− | + | r: radius2, | |
− | + | center: true | |
− | + | })) | |
− | + | ))); | |
− | + | parts.push(linear_extrude({ | |
− | + | height: thickness, | |
− | + | convexity: 10, | |
− | + | fn: 60 | |
− | + | }, hull( | |
− | + | translate([eyes_width / 2, 0, 0], circle({ | |
− | + | r: radius, | |
− | } | + | center: true |
+ | })), | ||
+ | translate([8, -30, 0], circle({ | ||
+ | r: radius2, | ||
+ | center: true | ||
+ | })) | ||
+ | ))); | ||
+ | parts.push(translate([-8, -35, 0], cube([16, 35, thickness]))); | ||
+ | //Transducers holes: | ||
+ | for (fx = -1; fx <= 1; fx += 2) { | ||
+ | holes.push(translate([fx * eyes_width / 2, 0, thickness / 2], cylinder({ | ||
+ | h: thickness + 2, | ||
+ | r: eyes_diameter / 2 + safety, | ||
+ | fn: 50, | ||
+ | center: true | ||
+ | }))); | ||
} | } | ||
− | return | + | return difference(union(parts), union(holes)); |
} | } | ||
− | function | + | //Servo mounting bracket |
− | + | function servoBracket() { | |
− | + | radius = 8; | |
− | + | radius2 = 5; | |
− | + | return translate([0, -35, 0], rotate([-90, -90, 0], linear_extrude({ | |
− | + | height: 6, | |
− | + | convexity: 10 | |
− | + | }, hull( | |
+ | translate([0, 0, 0], circle({ | ||
+ | r: radius, | ||
+ | center: true | ||
+ | })), | ||
+ | translate([23, 0, 0], circle({ | ||
+ | r: radius2, | ||
+ | center: true | ||
+ | })) | ||
+ | )))); | ||
} | } | ||
− | function | + | function tabsPCB_Mounting(length,width) { |
− | + | //Sensor PCB mounting tabs: | |
− | var | + | var parts = []; |
− | var | + | var holes = []; |
− | + | height = 3.5; | |
− | + | outer = 3; | |
− | + | inner = 1; | |
− | + | for (fx = -1; fx <= 1; fx += 2) { | |
− | + | for (fy = -1; fy <= 1; fy += 2) { | |
− | + | parts.push(translate([fx *length / 2, fy * width / 2, 0], cylinder({ | |
− | { | + | h: thickness + height, |
− | + | r: outer | |
− | } | + | }))); |
− | + | //Sensor PCB mounting screws holes: | |
− | + | holes.push(translate([fx * length / 2, fy * width / 2, 1], cylinder({ | |
− | + | h: thickness + height, | |
− | + | r: inner | |
− | + | }))); | |
− | |||
− | |||
− | |||
− | |||
} | } | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
− | + | return difference(union(parts), union(holes)); | |
− | |||
} | } | ||
− | + | function servoHead() { | |
− | function | + | var parts = []; |
− | { | + | //Servo head placement: |
− | var | + | parts.push(translate([0, -35, 8], rotate([-90, 0, 0], cylinder({ |
− | + | h: 2.5, | |
− | + | r: 3.8 | |
− | + | })))); | |
− | { | + | parts.push(translate([0, -35 - 1, 8], rotate([-90, 0, 0], cylinder({ |
− | + | h: 8, | |
− | + | r: 1.25 | |
− | + | })))); | |
− | + | parts.push(translate([0, -35 + 4.5, 8], rotate([-90, 0, 0], cylinder({ | |
+ | h: 3, | ||
+ | r: 3 | ||
+ | })))); | ||
+ | parts.push(translate([0, -35 - 1, 23], rotate([-90, 0, 0], cylinder({ | ||
+ | h: 8, | ||
+ | r: 1 | ||
+ | })))); | ||
− | + | parts.push(translate([0, -35, 8], rotate([-90, -90, 0], linear_extrude({ | |
− | + | height: 2.5, | |
− | + | convexity: 10 | |
− | + | }, hull( | |
− | + | translate([0, 0, 0], circle({ | |
− | + | r: 3.5, | |
− | + | center: true | |
− | + | })), | |
− | + | translate([15, 0, 0], circle({ | |
− | + | r: 2, | |
− | + | center: true | |
− | + | })) | |
− | } | + | ))))); |
− | + | return union(parts); | |
− | return | ||
} | } | ||
− | + | /** | |
− | + | * create a smile | |
− | + | */ | |
− | + | function smile(thickness) { | |
− | + | /*bezier = BezierFactory.create(0,0); | |
− | + | bezier.append([ | |
− | + | [0,15], | |
− | + | [15,15] | |
− | + | ]); | |
− | + | return rotate([0,0,135],bezier.spline(thickness)).translate([10,0,0]); | |
− | + | */ | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | function | ||
− | { | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | return | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
− | function | + | /** |
− | { | + | * create a parametric ultrasonic sensor |
− | + | */ | |
− | + | function main() { | |
− | + | BezierFactory(); | |
− | + | //Parameters: | |
− | + | //The diameter of the transducer in mm.: 16mm. mostly. | |
− | + | eyes_diameter = 16; | |
− | + | //Distance between centers of transducers in mm.: 25.4mm for HC-SR04. | |
− | + | width = 41.5 | |
+ | eyes_width = 25.4; | ||
− | + | //Sensor PCB mounting holes in mm.: 41.4x17 for HC-SR04. | |
− | + | mount_length = 42.35; | |
− | + | mount_width = 17.4; | |
− | + | //Desired thickness in mm.: Maximum 5mm. | |
− | + | thickness = 2.5; | |
− | + | //Decorations: "1" smile, "2" teeth, "3" vampire, "4" mustage, "5" O, other for none. | |
− | + | face = 1; | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | fn = 20; | |
− | + | var parts = []; | |
− | ]; | + | var holes = []; |
+ | parts.push(frontPlate(thickness, eyes_width, eyes_diameter)); | ||
+ | parts.push(servoBracket()); | ||
+ | parts.push(tabsPCB_Mounting(mount_length,mount_width)); | ||
+ | // holes.push(smile(thickness).translate([0, -20, 0])); | ||
+ | holes.push(servoHead()) | ||
+ | //Cleaning overhang: | ||
+ | holes.push(translate([-10, -35, -10], cube([20, 10, 10]))); | ||
+ | return difference(union(parts), union(holes)); | ||
} | } | ||
− | + | }} | |
− | |||
− | |||
− | |||
− |
Latest revision as of 08:05, 10 June 2019
The preview below currently only works for older JSCad code using the CSG syntax. See OpenJsCad Issue 448 <jscad>//Parametric. //Oktay Gülmez, 23/2/2016. // converted to OpenJSCAD by Wolfgang Fahl 2019-06-09 //GNU_GPL_V3
// include("Bezier.jscad")
/**
* create front Plate */
function frontPlate(thickness, eyes_width, eyes_diameter) {
safety = 0.6; radius = eyes_diameter+2; radius2 = 5; var parts = []; var holes = []; //Front plate: parts.push(linear_extrude({ height: thickness, convexity: 10, fn: 60 }, hull( translate([-eyes_width / 2, 0, 0], circle({ r: radius, center: true })), translate([eyes_width / 2, 0, 0], circle({ r: radius, center: true })) ))); parts.push(linear_extrude({ height: thickness, convexity: 10, fn: 60 }, hull( translate([-eyes_width / 2, 0, 0], circle({ r: radius, center: true })), translate([-8, -30, 0], circle({ r: radius2, center: true })) ))); parts.push(linear_extrude({ height: thickness, convexity: 10, fn: 60 }, hull( translate([eyes_width / 2, 0, 0], circle({ r: radius, center: true })), translate([8, -30, 0], circle({ r: radius2, center: true })) ))); parts.push(translate([-8, -35, 0], cube([16, 35, thickness]))); //Transducers holes: for (fx = -1; fx <= 1; fx += 2) { holes.push(translate([fx * eyes_width / 2, 0, thickness / 2], cylinder({ h: thickness + 2, r: eyes_diameter / 2 + safety, fn: 50, center: true }))); } return difference(union(parts), union(holes));
}
//Servo mounting bracket function servoBracket() {
radius = 8; radius2 = 5; return translate([0, -35, 0], rotate([-90, -90, 0], linear_extrude({ height: 6, convexity: 10 }, hull( translate([0, 0, 0], circle({ r: radius, center: true })), translate([23, 0, 0], circle({ r: radius2, center: true })) ))));
}
function tabsPCB_Mounting(length,width) {
//Sensor PCB mounting tabs: var parts = []; var holes = []; height = 3.5; outer = 3; inner = 1; for (fx = -1; fx <= 1; fx += 2) { for (fy = -1; fy <= 1; fy += 2) { parts.push(translate([fx *length / 2, fy * width / 2, 0], cylinder({ h: thickness + height, r: outer }))); //Sensor PCB mounting screws holes: holes.push(translate([fx * length / 2, fy * width / 2, 1], cylinder({ h: thickness + height, r: inner }))); } } return difference(union(parts), union(holes));
}
function servoHead() {
var parts = []; //Servo head placement: parts.push(translate([0, -35, 8], rotate([-90, 0, 0], cylinder({ h: 2.5, r: 3.8 })))); parts.push(translate([0, -35 - 1, 8], rotate([-90, 0, 0], cylinder({ h: 8, r: 1.25 })))); parts.push(translate([0, -35 + 4.5, 8], rotate([-90, 0, 0], cylinder({ h: 3, r: 3 })))); parts.push(translate([0, -35 - 1, 23], rotate([-90, 0, 0], cylinder({ h: 8, r: 1 }))));
parts.push(translate([0, -35, 8], rotate([-90, -90, 0], linear_extrude({ height: 2.5, convexity: 10 }, hull( translate([0, 0, 0], circle({ r: 3.5, center: true })), translate([15, 0, 0], circle({ r: 2, center: true })) ))))); return union(parts);
}
/**
* create a smile */
function smile(thickness) {
/*bezier = BezierFactory.create(0,0); bezier.append([ [0,15], [15,15] ]); return rotate([0,0,135],bezier.spline(thickness)).translate([10,0,0]); */
}
/**
* create a parametric ultrasonic sensor */
function main() {
BezierFactory(); //Parameters: //The diameter of the transducer in mm.: 16mm. mostly. eyes_diameter = 16; //Distance between centers of transducers in mm.: 25.4mm for HC-SR04. width = 41.5 eyes_width = 25.4;
//Sensor PCB mounting holes in mm.: 41.4x17 for HC-SR04. mount_length = 42.35; mount_width = 17.4; //Desired thickness in mm.: Maximum 5mm. thickness = 2.5; //Decorations: "1" smile, "2" teeth, "3" vampire, "4" mustage, "5" O, other for none. face = 1;
fn = 20; var parts = []; var holes = []; parts.push(frontPlate(thickness, eyes_width, eyes_diameter)); parts.push(servoBracket()); parts.push(tabsPCB_Mounting(mount_length,mount_width)); // holes.push(smile(thickness).translate([0, -20, 0])); holes.push(servoHead()) //Cleaning overhang: holes.push(translate([-10, -35, -10], cube([20, 10, 10]))); return difference(union(parts), union(holes));
}</jscad>
Source code
Just cut&paste the source code below to https://www.openjscad.org/
//Parametric.
//Oktay Gülmez, 23/2/2016.
// converted to OpenJSCAD by Wolfgang Fahl 2019-06-09
//GNU_GPL_V3
// include("Bezier.jscad")
/**
* create front Plate
*/
function frontPlate(thickness, eyes_width, eyes_diameter) {
safety = 0.6;
radius = eyes_diameter+2;
radius2 = 5;
var parts = [];
var holes = [];
//Front plate:
parts.push(linear_extrude({
height: thickness,
convexity: 10,
fn: 60
}, hull(
translate([-eyes_width / 2, 0, 0], circle({
r: radius,
center: true
})),
translate([eyes_width / 2, 0, 0], circle({
r: radius,
center: true
}))
)));
parts.push(linear_extrude({
height: thickness,
convexity: 10,
fn: 60
}, hull(
translate([-eyes_width / 2, 0, 0], circle({
r: radius,
center: true
})),
translate([-8, -30, 0], circle({
r: radius2,
center: true
}))
)));
parts.push(linear_extrude({
height: thickness,
convexity: 10,
fn: 60
}, hull(
translate([eyes_width / 2, 0, 0], circle({
r: radius,
center: true
})),
translate([8, -30, 0], circle({
r: radius2,
center: true
}))
)));
parts.push(translate([-8, -35, 0], cube([16, 35, thickness])));
//Transducers holes:
for (fx = -1; fx <= 1; fx += 2) {
holes.push(translate([fx * eyes_width / 2, 0, thickness / 2], cylinder({
h: thickness + 2,
r: eyes_diameter / 2 + safety,
fn: 50,
center: true
})));
}
return difference(union(parts), union(holes));
}
//Servo mounting bracket
function servoBracket() {
radius = 8;
radius2 = 5;
return translate([0, -35, 0], rotate([-90, -90, 0], linear_extrude({
height: 6,
convexity: 10
}, hull(
translate([0, 0, 0], circle({
r: radius,
center: true
})),
translate([23, 0, 0], circle({
r: radius2,
center: true
}))
))));
}
function tabsPCB_Mounting(length,width) {
//Sensor PCB mounting tabs:
var parts = [];
var holes = [];
height = 3.5;
outer = 3;
inner = 1;
for (fx = -1; fx <= 1; fx += 2) {
for (fy = -1; fy <= 1; fy += 2) {
parts.push(translate([fx *length / 2, fy * width / 2, 0], cylinder({
h: thickness + height,
r: outer
})));
//Sensor PCB mounting screws holes:
holes.push(translate([fx * length / 2, fy * width / 2, 1], cylinder({
h: thickness + height,
r: inner
})));
}
}
return difference(union(parts), union(holes));
}
function servoHead() {
var parts = [];
//Servo head placement:
parts.push(translate([0, -35, 8], rotate([-90, 0, 0], cylinder({
h: 2.5,
r: 3.8
}))));
parts.push(translate([0, -35 - 1, 8], rotate([-90, 0, 0], cylinder({
h: 8,
r: 1.25
}))));
parts.push(translate([0, -35 + 4.5, 8], rotate([-90, 0, 0], cylinder({
h: 3,
r: 3
}))));
parts.push(translate([0, -35 - 1, 23], rotate([-90, 0, 0], cylinder({
h: 8,
r: 1
}))));
parts.push(translate([0, -35, 8], rotate([-90, -90, 0], linear_extrude({
height: 2.5,
convexity: 10
}, hull(
translate([0, 0, 0], circle({
r: 3.5,
center: true
})),
translate([15, 0, 0], circle({
r: 2,
center: true
}))
)))));
return union(parts);
}
/**
* create a smile
*/
function smile(thickness) {
/*bezier = BezierFactory.create(0,0);
bezier.append([
[0,15],
[15,15]
]);
return rotate([0,0,135],bezier.spline(thickness)).translate([10,0,0]);
*/
}
/**
* create a parametric ultrasonic sensor
*/
function main() {
BezierFactory();
//Parameters:
//The diameter of the transducer in mm.: 16mm. mostly.
eyes_diameter = 16;
//Distance between centers of transducers in mm.: 25.4mm for HC-SR04.
width = 41.5
eyes_width = 25.4;
//Sensor PCB mounting holes in mm.: 41.4x17 for HC-SR04.
mount_length = 42.35;
mount_width = 17.4;
//Desired thickness in mm.: Maximum 5mm.
thickness = 2.5;
//Decorations: "1" smile, "2" teeth, "3" vampire, "4" mustage, "5" O, other for none.
face = 1;
fn = 20;
var parts = [];
var holes = [];
parts.push(frontPlate(thickness, eyes_width, eyes_diameter));
parts.push(servoBracket());
parts.push(tabsPCB_Mounting(mount_length,mount_width));
// holes.push(smile(thickness).translate([0, -20, 0]));
holes.push(servoHead())
//Cleaning overhang:
holes.push(translate([-10, -35, -10], cube([20, 10, 10])));
return difference(union(parts), union(holes));
}