UltrasonicSensorServoMount
Jump to navigation
Jump to search
<jscad nocache> //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>