3d-printing/tapo-ceiling-mount/README.md

540 lines
23 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Tapo Ceiling Mount
A parametric ceiling-mount adapter for a **TP-Link Tapo C202 / C210** camera. It
uses **only the existing round ceiling hole**. It drills **no new holes**.
<img src="preview.png" width="480">
The adapter clamps the false-ceiling panel between one exterior plate below and
two interior clamps above. Two **M4** screws (one per clamp) travel up through the existing
hole and pull the clamps down onto the ceiling.
A **modular camera connector** hangs below the plate. It carries no ceiling
load. It routes the cables and it accepts exchangeable camera adapters through
two bayonet interfaces. See [Modular camera connector](#modular-camera-connector).
## Load path
The load goes through this chain:
1. camera
2. original Tapo base
3. exterior plate
4. M4 screws
5. captive M4 nuts
6. interior clamps
7. upper surface of the ceiling panel
Broad bearing surfaces spread the load. They protect the plasterboard from
point pressure.
## Files
| File | Part | Print? |
|------|------|--------|
| `tapo_ceiling_outer_plate.scad` | Exterior plate (below ceiling) | Yes, ×1 |
| `tapo_ceiling_inner_clamp.scad` | Interior clamps, joined as a pair | Yes, ×1 pair |
| `tapo_ceiling_camera_connector.scad` | Modular connector collar | Yes, ×1 |
| `tapo_ceiling_camera_adapter_blank.scad` | Blank adapter template | Optional |
| `tapo_ceiling_camera_adapter_tapo.scad` | Direct Tapo adapter (male twist mount) | Optional |
| `tapo_ceiling_camera_adapter_tapo_original_base.scad` | Adapter for the factory Tapo base | Yes, ×1 |
| `tapo_ceiling_tapo_base.scad` | Printed Tapo base, and the lug gap test | Test first |
| `tapo_ceiling_nut_fit_test.scad` | Nut press-fit test coupon | Test first |
| `tapo_ceiling_mount_parameters.scad` | Shared parameters and modules | No (include only) |
| `tapo_ceiling_mount_assembly.scad` | Preview of the full assembly | No |
Print **one** camera adapter. Use `..._tapo_original_base.scad` for a reliable
fit. Use `..._blank.scad` as a template for another camera.
**The two clamps print as one part.** They are identical, and a thin flexible
line joins them across the hole center. You push one clamp up through the hole,
and the other one follows on the line. A lip under each clamp drops into the
hole from above, like the plate lip from below. It seats the clamp and stops it
from turning around its screw. Set `clamp_link = false` to print the clamps
separately.
**Edit `tapo_ceiling_mount_parameters.scad` only.** Every part reads its values
from that file.
## Hardware
| Item | Quantity | Note |
|------|----------|------|
| M4 machine screw | 2 | Length from the formula below. Default = **25 mm**. |
| M4 hex nut | 2 | Standard nut, 7.0 mm across flats, 3.2 mm thick. |
| ST3.5 screws for the Tapo base | 2 | Up to 13 mm long. The 20 mm factory screws are too long for the adapter. |
| TPU / rubber pad | 2 | Optional. See `clamp_tpu_pad`. |
### Screw length
The design computes a recommended length. Open any file in OpenSCAD. Read the
console line:
```
ECHO: "Recommended M4 screw length (under head): 25 mm"
```
The formula is:
```
length = plate_thickness + ceiling_thickness + clamp_boss_height - head_recess_depth
```
The result rounds up to the next 5 mm. A thicker ceiling needs a longer screw.
## Key parameters
Group `[Existing Ceiling Hole]`:
- **`ceiling_hole_diameter`** — the real hole diameter. Default 80 mm.
- **`ceiling_thickness`** — the real panel thickness. Default 12.5 mm.
- **`install_clearance`** — gap so parts do not scrape the hole edge.
Group `[Exterior Plate]`:
- **`outer_diameter`** — plate diameter. Default 105 mm. Keep it at least 105 mm, so the collar rim sits on the flat face.
- **`plate_thickness`** — plate thickness. Default 3 mm.
- **`centering_lip_height`** — depth the lip enters the hole.
Group `[Central Cable Opening]`:
- **`central_opening_diameter`** — main cable opening. Default 54 mm.
- **`cable_slot_reach`** — extra opening reach for cable routing.
- **`cable_slot_angle`** — direction of that extra reach.
Group `[M4 Fasteners]`:
- **`screw_boss_d`** — boss around each screw on the plate top. The screw
position is derived from it: the screw and its boss always stay inside the
centering lip, so they enter the hole. A smaller boss moves the screws out.
- **`head_type`** — `cap` for a counterbore, or `countersunk` for a cone.
- **`m4_nut_flats`**, **`m4_nut_thickness`** — measure your real nuts.
- **`nut_pocket_tol`** — across-flats offset for the nut press fit. Default
-0.15 mm. Raise it if the nut does not go in. Lower it if the nut falls out.
- **`nut_pocket_depth_tol`** — extra pocket depth, so the nut sits below the
boss top. Default 0.2 mm.
- **`nut_pocket_lead`** — lead-in chamfer at the pocket mouth. Default 0.4 mm.
Group `[Interior Clamps]`:
- **`clamp_outer_r`** — clamp reach. It must exceed the hole radius.
- **`clamp_half_angle`** — clamp arc width. A smaller value inserts more easily.
- **`clamp_grip_ribs`** — anti-slip grooves on the bearing face.
- **`clamp_lip`**, **`clamp_lip_h`** — centering lip under each clamp. Default
3 mm high.
- **`clamp_link`**, **`clamp_link_w`**, **`clamp_link_t`** — the thin line that
joins the clamps. Default 2 x 1.2 mm.
Group `[Camera Base Mount]`:
- **`camera_mount_hole_spacing`** — distance between the base screw holes.
The original Tapo base uses 39 mm.
- **`camera_mount_hole_diameter`** — base screw hole size.
- **`camera_mount_rotation`**, **`camera_mount_offset_x`**, **`camera_mount_offset_y`**
— position of the base pattern on the plate, for the direct base mount
without the connector. The original-base adapter follows `tapo_wing_angle`
instead.
The model checks its own limits with `assert`. A bad value stops the render and
prints the reason.
## Modular camera connector
The connector makes the ceiling mount reusable for different cameras. You change
the camera adapter without touching the structural ceiling mount.
### Architecture
The system has three layers:
```
exterior plate -> connector collar -> camera adapter -> camera
```
Two bayonet interfaces join the layers. Both use the same mechanism. The fixed
part has a short ring with outward load tabs. The hanging part is a cup that
wraps around the ring. Rigid tabs carry the load. A click latch stops the part
from turning loose.
| Interface | Joins | Tabs | Key (gaps from cable exit) | Lock turn | Lock |
|-----------|-------|------|----------------------------|-----------|------|
| Upper bayonet | plate to collar | 3 | 0, 90, 180 degrees | 30 degrees | click latch |
| Lower bayonet | collar to adapter | 3 | 0, 90, 180 degrees | 30 degrees | click latch |
The two interfaces are identical. So a camera adapter locks onto the collar
bottom, or straight onto the plate without the collar. It ends in the same
orientation both ways.
### Upper bayonet (plate to collar)
The plate has a short ring with three outward tabs. The collar is larger. It
wraps around the ring and sits flush against the plate face. So the tabs, the
back stops and the two M4 screw heads stay hidden when the collar is locked.
The three entry gaps are not evenly spaced (0, 90 and 180 degrees from the cable
exit). The collar fits one way only. In that position its cable exit always
meets a window in the plate ring.
### Lower bayonet (collar to adapter)
The collar bottom repeats the plate design one level down. It has a flat bottom
face and a short ring with three outward tabs, back stops and a latch bump.
The adapter is a cup with the same outer diameter as the collar (101.6 mm). It
wraps around the collar ring. So the collar and the adapter look like one
cylinder with a thin seam, and the ring stays hidden.
The ring, the key, the latch and the back stops copy the plate exactly. The
adapter fits one way only, so its orientation to the cable exit is always the
same. Its release nub sits under the collar release nub.
### Adapter straight on the plate
Without the collar, the adapter locks onto the plate ring in the same way: push
it up, turn it 30 degrees until it clicks. The camera face then sits 11.6 mm
below the plate face instead of 24.2 mm. There is no side cable exit, so the
cables must reach the camera through the adapter center.
### Click latch
Each cup has a flexible beam in its rim. The beam carries a notch. A bump on the
fixed part lifts the beam during the last few degrees of the turn. Then the
bump drops into the notch with a click. The steep notch wall blocks the reverse
turn, so the part cannot turn loose. A hard back stop blocks over-rotation.
The latch only stops rotation. The tabs carry the camera load.
The latch sits right beside the cable exit (`ui_latch_beside_exit`). The beam
starts at the exit edge, and the release nub is just beside the exit. Both
bayonets share the latch position, so when everything is closed the collar
nub and the adapter nub line up, one above the other.
### Camera load path
The camera hangs from rigid bayonet tabs, not from clips:
```
camera -> adapter lugs -> collar bottom tabs -> collar -> collar lugs -> plate tabs -> plate
```
### Fit the collar
1. Turn the collar so its cable exit is 30 degrees past the ring window.
2. Push the collar straight up over the plate ring until the rim meets the plate.
3. Turn it until it clicks. Seen from below, it turns counterclockwise.
### Remove the collar
1. Press the release nub on the collar side toward the floor.
2. Turn the collar back 30 degrees.
3. Pull it straight down.
### Fit an adapter
1. Hold the adapter under the collar. Turn it until its lugs meet the three
gaps in the collar bottom ring. It fits one way only.
2. Push the adapter straight up until its rim meets the collar.
3. Turn it about 30 degrees until it clicks. Seen from below, it turns
counterclockwise, the same way as the collar.
### Remove an adapter
1. Press the release nub on the adapter side toward the floor.
2. Turn the adapter back 30 degrees.
3. Pull it straight down.
Both parts lock in the same direction. When you lock the adapter, the turn
pushes the collar against its back stop. When you unlock the adapter, the
collar latch holds the collar. So the collar stays locked while you change the
adapter.
### Cable management
The collar is hollow. The center stays open for the RJ45 and DC cables. The
collar bottom ring leaves a 79 mm passage. Inside the adapter, a 45-degree
funnel leads the cables to the 40 mm central hole. The side cable exit is open
at the collar rim and lines up with the window in the plate ring. So the cables
can leave sideways right under the ceiling.
The side cable exit is 24 mm wide and 10 mm deep. Route the cables after the
collar is locked: pass each plug from inside the collar out through the exit.
The RJ45 plug goes through with its latch pressed.
Do not lay the cables in before you fit the collar. The collar turns 30
degrees to lock, so its exit moves away from the window in the plate ring and
the rim would pinch the cables.
The collar ends 2.3 mm below the cable exit, so it is as short as the exit
allows. 10 mm is the smallest exit an RJ45 plug passes through. Set
`cable_exit_count = 2` for a second exit on the opposite side.
### Tapo twist mount
The Tapo camera does not hold a base. It holds a socket. The original Tapo base
is **male**: a 56 mm disc with a short boss and 2 lugs at 180 degrees. The
camera slides its socket over the lugs and turns **clockwise, seen from below**,
until its own latch clicks. To remove it, turn it back.
It fits C200, C202, C210, C211, C212, C216, C220, C222, C230, TC70 to TC74 and
Kasa EC70/EC71. It does not fit C100/C110.
No official drawing exists. The values come from 11 printable replicas that
users report as a good fit:
| Feature | Value |
|---------|-------|
| Boss diameter, root to top | 30.4 to 28.4 mm |
| Lugs | 2 at 180 degrees, 7.0 mm wide, 1.5 mm thick |
| Lug tips | 44 mm across (radius 22) |
| Gap from the camera face to the lug underside | 3.0 mm (`tapo_lug_gap`) |
| Recess around the boss | 47 mm diameter, 1 mm deep |
| Base screws | 2, 39 mm apart, at 90 degrees to the lugs |
**Wing rotation.** `tapo_wing_angle` turns the two wings relative to the cable
exit. Set it so that the camera connectors face the cable exit once the camera
has clicked on. It turns the wings of the direct Tapo adapter and the printed
base. It also turns the two screw holes of the original-base adapter, because
the factory base has its screws at 90 degrees to its wings.
Three ways to hang the camera:
- **Original-base adapter + factory base** — the reliable choice. Screw the
factory base on with two ST3.5 screws up to 13 mm long.
- **Original-base adapter + printed base** — `tapo_base.stl` is a copy of the
factory base with the same screw holes. Use it if the factory base is lost.
- **Direct Tapo adapter** — the boss and lugs are part of the adapter. It is one
part less, but it needs support under the two lugs.
### Tapo lug gap test
The gap from the camera face to the lug underside is the one sensitive value.
A smaller gap holds tighter.
1. Print `tapo_base_test_set.stl`. It has three bases with gaps of 2.7, 3.0 and
3.3 mm. The edge notches number them 1, 2 and 3.
2. Put the camera on each base and turn it until it clicks.
3. Keep the tightest base that turns in fully and holds with no play.
4. Set `tapo_lug_gap` to its gap. Then print the direct Tapo adapter or
`tapo_base.stl`.
A small rib under each lug tip (`tapo_detent_h`, 0.3 mm) adds grip. Set it to 0
if the camera does not turn in.
### Connector parameters
Group `[Camera Connector Collar]`:
- **`enable_connector_interface`** — add the bayonet ring to the plate.
- **`connector_shelf_angle`** — optional inner shelf under the collar floor.
Default 0: a flat floor, and the collar ends 2.3 mm below the cable exit.
The flat floor needs support inside the collar. 35 or 45 degrees print
without that support, but make the collar 5.1 or 7.3 mm taller.
- **`connector_floor_t`** — collar floor thickness at the bottom ring. Default
2 mm.
- The collar height follows from these values and `cable_exit_height`. It is
not set directly.
- **`cable_exit_width`**, **`cable_exit_height`**, **`cable_exit_count`** — the
side cable exit. Default 24 x 10 mm. A deeper exit makes the collar taller.
Group `[Upper Bayonet - Plate to Collar]`:
- **`ui_ring_r_i`** — plate ring radius. It must stay outside the screw heads.
- **`ui_gap_centers`** — the keyed gap layout.
- **`ui_lock_rot`** — lock turn angle.
- **`ui_clearance`** — fit clearance per surface. Default 0.3 mm.
Group `[Click Latch - Plate to Collar]`:
- **`ui_latch_bump_h`** — how far the bump reaches into the notch. Higher gives a
firmer lock.
- **`ui_latch_beam_t`** — beam thickness. Thicker gives a stiffer click.
Group `[Lower Bayonet - Collar to Adapter]`:
- The lower bayonet takes every value from the upper bayonet. Change the
`ui_*` values to change both.
- **`li_floor_gap`** — gap between the ring and the adapter floor.
The collar outer diameter follows from the ring and tab sizes (101.6 mm). The
adapter outer diameter equals the collar outer diameter. The camera face of an
adapter sits 24.2 mm below the plate face with the collar, and 11.6 mm without
it.
The model checks both bayonets with `assert`. Each lug must pass its gap and
land fully on its tab. Each back stop must sit on its tab. The latch groove must
be long enough for the turn. The notch must be shallower than the beam. Each
key must fit one way only. The adapter key must also fit the plate ring.
### Fit test
Print the collar and one adapter first. Try the twist-locks by hand. Use the
`ui_*` values for both joints.
- Too tight or it will not start: raise the clearance by 0.05 mm.
- Loose or it rattles: lower the clearance by 0.05 mm.
- Click too weak: raise the latch bump height by 0.2 mm.
- Click too hard to push over: lower the latch beam thickness by 0.2 mm.
## Print settings
- Material: **PETG** or **ASA**. This part hangs overhead, so use a strong
material.
- Perimeters: **4 to 5**.
- Infill: **35 to 50 %**.
- Layer height: **0.2 mm**.
- Supports: only where the list below says so.
Every load face stays flat. The lugs of a cup (collar top, adapter top) print
on the bed, so their load faces point up. The tabs of a fixed ring (plate ring,
collar bottom ring) end up at the top of the print, so their load faces point
down. Those tabs need a little support.
Print each part in the orientation below:
- **Clamps** — flat top on the bed. The link prints on the bed, the lips point
up and the nut pockets open onto the bed. No support.
- **Connector collar** — rim on the bed. The lugs and the latch beam print on
the bed. The flat floor needs support inside the collar, and the three lower
tabs need support under them.
- **Adapters** — rim on the bed. The lugs and the latch beam print on the bed.
An inner wall and a 45-degree cable funnel hold up the base plate. The floor
over the ring channel is a 4.8 mm bridge. No support.
- **Direct Tapo adapter** — rim on the bed, like the other adapters. The twist
ring points up. Add light support under its three inward lock tabs.
- **Plate, no connector** (`enable_connector_interface = false`) — visible face on
the bed. The lip and bosses point up. No support.
- **Plate, with connector** — the plate then has features on both faces. It is the
one part that needs a little support. Print it with the bayonet ring pointing
up. The visible face then points up and stays clean. Use a brim for stability.
Add light support under the disc and under the three tabs. The tab support
marks sit inside the collar footprint, so the collar hides them.
## STL files for a build plate
The `stl/` folder holds each part, already turned to its print orientation and
placed on the bed. Import them and arrange your plate.
| STL | Quantity | Size on bed (mm) | Support |
|-----|----------|------------------|---------|
| `inner_clamps.stl` | 1 (the linked pair) | 108 x 66 x 12 | none |
| `inner_clamp.stl` | 0 (single clamp, only to replace one) | 37 x 66 x 12 | none |
| `camera_connector.stl` | 1 | Ø 101.6 x 18.9 | inside under the flat floor, and under the 3 lower tabs |
| `outer_plate.stl` | 1 | Ø 105 x 12.6 | light, on the ceiling side; use a brim |
| `camera_adapter_tapo_original_base.stl` | 1 (reliable choice) | Ø 101.6 x 11.3 | none |
| `camera_adapter_blank.stl` | 0-1 (template) | Ø 101.6 x 11.3 | none |
| `camera_adapter_tapo.stl` | 0-1 (direct Tapo mount) | Ø 101.6 x 15.8 | under the 2 Tapo lugs |
| `tapo_base_test_set.stl` | test first | 180 x 56 x 8.3 | under the lugs, through the plate windows |
| `tapo_base.stl` | 0-1 (printed factory base) | Ø 56 x 8 | under the lugs, through the plate windows |
| `nut_fit_test.stl` | test first | 65 x 19 x 5.4 | none |
The collar and the adapters also carry a 1.5 mm release nub on the side.
Print **one** adapter. Choose `camera_adapter_tapo_original_base.stl` for a
reliable fit. A full plate is: 1 plate, 2 clamps, 1 connector, 1 adapter.
To regenerate the STLs after a parameter change, run `./generate-print-stls.sh`.
It turns each part to its print orientation and puts it on the bed.
## Assembly and installation
Do this before you start. Press one M4 nut into each clamp pocket:
1. Set the nut in the chamfer at the pocket mouth, with its flats aligned.
2. Press it down square with your thumb or flat pliers until it sits on the
floor.
3. If it is too tight, pull it in with the screw. Pass an M4 screw up through the
bearing face, thread the nut and tighten until the nut seats. Then remove the
screw.
The nut stays in place when you turn the clamp upside down.
Then follow this sequence:
1. Disconnect the camera. Remove it.
2. Pass the Ethernet cable and the power cable through the ceiling hole.
3. Push one clamp of the pair up through the hole. Lay it on the ceiling with
its lip in the hole.
4. Push the second clamp up through the hole. It follows on the line. Set its
lip in the hole on the opposite side.
5. Hold the exterior plate under the ceiling.
6. Push the two M4 screws up through the plate.
7. Start each screw into its captive nut by hand.
8. Pull the plate gently down while you turn each screw. This keeps each clamp
from turning with the screw.
9. Tighten the two screws in small, even steps.
10. Confirm the ceiling panel sits tight between the plate and the clamps.
Then attach the modular connector:
11. Push the connector collar up over the plate ring (it fits one way only).
12. Turn the collar about 30 degrees until it clicks.
13. Reach in through the open collar bottom. Pass the Ethernet plug and the
power plug out through the side exit. Press the RJ45 latch to get it through.
14. Screw the factory Tapo base onto the camera adapter.
15. Push the adapter up over the collar bottom ring in the keyed orientation.
16. Turn the adapter about 30 degrees until it clicks.
17. Lead the cables to the camera connectors.
18. Attach the camera.
To change the camera later, press the adapter release nub toward the floor, turn
the adapter back and pull it down. The ceiling mount stays in place.
## Measurements to verify before you print
Measure these values on the real installation. Set them in the parameters file.
A wrong value gives a loose or a tight fit.
1. **`ceiling_hole_diameter`** — measure the real hole. This value is critical.
2. **`ceiling_thickness`** — measure the real panel.
3. **`camera_mount_hole_spacing`** — measure the two screw holes on your Tapo
base.
4. **`camera_mount_hole_diameter`** — match your base screws.
5. **`m4_nut_flats`** and **`m4_nut_thickness`** — measure your real nuts.
6. **`tapo_lug_gap`** — use the Tapo lug gap test.
Print the two test coupons first:
- `nut_fit_test.stl` has four nut pockets at -0.25, -0.20, -0.15 and -0.10 mm. The
edge notches number them 1 to 4. Press a nut into each pocket. Choose the
tightest pocket that takes the nut fully and holds it upside down. Set
`nut_pocket_tol` to its offset.
- `tapo_base_test_set.stl` sets the Tapo lug gap.
Then print one clamp. Test the fit through the hole. Then print the rest.
## Design checks
The assembly preview confirms the mechanical rules. Open
`tapo_ceiling_mount_assembly.scad`. Check that:
- No screw touches the ceiling material.
- Every screw stays inside the existing hole.
- Each clamp passes through the hole one at a time.
- Each clamp overlaps the ceiling top by about 14 mm (default 80 mm hole).
- The clamps leave the hole center open.
- The Ethernet and DC connectors pass through the open center.
- The plate covers the whole hole.
- The two screws and their bosses stay inside the ceiling hole.
- The two screws stay clear of the camera base.
For the modular connector, check also that:
- The connector locks and unlocks from below.
- The connector cannot pull straight down when locked.
- The adapter cannot pull straight down when locked.
- Each lug bears on a solid tab.
- The adapter fits the collar one way only, and it does not fit the plate.
- The center stays open for the RJ45 and DC connectors.
- The side notch gives room for the cable bend.
- You can change the adapter without removing the ceiling mount.
Set `assembly_mode` in the preview to `assembled`, `exploded` or `section`. The
`section` view cuts the model on the y=0 plane and shows the cable path.
Where rules conflict, the design keeps this order of priority:
1. structural safety
2. no new ceiling holes
3. cable clearance
4. easy installation
5. compact look