Files
2026-10-02 12:23:58 -04:00

68 lines
2.6 KiB
OpenSCAD

// Concealed DFRobot DFR1154 V1.1 chair camera pod, prototype v1.
// Strap beneath the walkway-side wicker armrest; +Z faces the walkway.
// Board and optic positions MUST be verified on the physical V1.1 unit.
part = "tray"; // "tray", "cover", or "assembly"
$fn = 64;
module rounded_slot_x(x0, x1, y, diameter, z0, height) {
hull() {
translate([x0,y,z0]) cylinder(d=diameter,h=height);
translate([x1,y,z0]) cylinder(d=diameter,h=height);
}
}
module rounded_slot_y(x, y0, y1, diameter, z0, height) {
hull() {
translate([x,y0,z0]) cylinder(d=diameter,h=height);
translate([x,y1,z0]) cylinder(d=diameter,h=height);
}
}
module tray() {
difference() {
union() {
// Square rear plate and short side/top shroud. Bottom stays open
// for the board's USB-C plug and a downward cable drip loop.
translate([-27,-27,0]) cube([54,54,3]);
translate([-27,-27,3]) cube([3,54,10]);
translate([24,-27,3]) cube([3,54,10]);
translate([-27,24,3]) cube([54,3,10]);
// Four board spacers (3 mm high).
for (x=[-17,17], y=[-17,17])
translate([x,y,3]) cylinder(d=7,h=3);
// Two rear ears accept soft hook-and-loop straps threaded through
// the wicker frame. They stay behind the camera's front plane.
translate([-39,-18,0]) cube([13,36,4]);
translate([26,-18,0]) cube([13,36,4]);
}
// Adjustable PCB slots accommodate 30-38 mm horizontal hole pitch.
for (y=[-17,17], s=[-1,1])
rounded_slot_x(s*15,s*19,y,3.0,-1,9);
// Strap slots in the ears.
for (x=[-33,33])
rounded_slot_y(x,-11,11,5,-1,6);
// M2 cover screws: pilot bores into the side-wall corner lands.
for (x=[-25.5,25.5], y=[-23,23])
translate([x,y,5]) cylinder(d=1.6,h=9);
}
}
module cover() {
difference() {
translate([-27,-27,0]) cube([54,54,2.4]);
// Approximate source-board layout: lens ~6 mm above board center;
// two IR emitters on each side. Kept as separate unglazed openings
// so the IR cannot reflect from a shared close window into the lens.
translate([0,6,-1]) cylinder(d=18,h=5);
for (x=[-15.5,15.5])
rounded_slot_y(x,0,11,7,-1,5);
// The four side-wall screws secure a removable faceplate.
for (x=[-25.5,25.5], y=[-23,23])
translate([x,y,-1]) cylinder(d=2.4,h=5);
}
}
if (part == "tray") tray();
else if (part == "cover") cover();
else { tray(); translate([0,0,13]) cover(); }