// ============================================ // Tapo Ceiling Mount - Adapter for the ORIGINAL Tapo Base // ============================================ // The reliable option. Its top is a cup that locks onto the collar bottom // ring. Its bottom is a flat surface that carries the genuine factory Tapo // base with two screws. It reuses the project camera-mount parameters, so no // unverified twist-lock geometry is needed. // // Bosses hold the base screws. They straddle the central cable hole and leave // the center open for the RJ45 and DC cables. Each boss rises from the base // plate to the rim plane, so it prints from the bed. // // Print orientation: rim on the bed. The lugs and the latch beam print on the // bed. No support. parameters_only = false; include ; // Longest base screw that fits: base plate + pilot depth. echo(str("Original base screws: ST3.5 up to ", floor(tapo_base_plate_t + adapter_rim_z - (adapter_top_z - adapter_plate_t) - 1), " mm long (the 20 mm factory screws are too long)")); module tapo_camera_adapter_original_base() { zb = adapter_top_z - adapter_plate_t; // base plate, camera side difference() { union() { adapter_core(); // Solid bosses for the factory base screws, kept inside the inner wall. intersection() { union() for (p = tapo_base_screw_xy()) translate([p[0], p[1], zb]) cylinder(d = camera_boss_d, h = adapter_rim_z - zb); translate([0, 0, zb]) cylinder(r = adapter_spigot_r, h = adapter_rim_z - zb); } } // Pilot holes from the camera side, through the whole boss but the last // 1 mm, so longer base screws do not bottom out. for (p = tapo_base_screw_xy()) translate([p[0], p[1], zb - 0.01]) cylinder(d = camera_mount_hole_diameter, h = adapter_rim_z - zb - 1); } } tapo_camera_adapter_original_base();