Build ~4 min read
at the endYou know what the three printed parts are, which servo does what, and can spin the head in 3D.
The head¶
One printed cradle, one Nicla Vision, and the two servos freed by removing the handle become pan and tilt. 15.4 g. Ten screws, all into servos.
Three parts, one plate¶
| part | what it does | screws |
|---|---|---|
| yoke | on horn 5, holds servo 6 sideways in a 22 mm bore | 4 horn screws from the SO-101, 4 M2×4 into the servo tabs |
| body | 11.85 mm deep cradle on horn 6, carries the board | 2 M2.5×5 into horn 6, driven through the open top |
| lid | plug rim, snaps on, lens and ToF share one keyhole | none |
What the shape gives you¶
- Open top. Micro-USB, JST and the flex antenna sit on that edge. Reach them with the lid on.
- Board drops in. 0.5 mm clearance, two 1.7 mm lips hold it, the lid clamps it.
- Antenna out the top. The flex antenna on the u.FL socket exits over the open face, no wall in front of it.
- Tilt. The guard allows ±60° from home; the arm stays out of frame from −80° to +18° at the folded pose.
Decisions, and the print that forced them¶
The first test plate fitted four ways badly. Every number below changed because of that test fit; the constant that holds it is named so you can find it in hardware/cad/.
| decision | before | now | why |
|---|---|---|---|
| servo 6 bore in the yoke | 20.4 mm over a 20.0 mm horn disc, plus pads at 0.05 to 0.10 mm | 22.0 mm, pads deleted (yoke.BEARING_D) |
the servo dropped in but would not seat to the rear; the horn disc sat visibly off-centre. FDM does not hold a tenth. Now the four M2 tab screws clamp and the ribs and wall locate; the bore is clearance only. |
| board pocket | 22.86 + 2 × 0.30 mm | 22.86 + 2 × 0.50 mm, 0.5 mm lead-in at the mouth (nicla_head.CLR, MOUTH_LEAD) |
the board would not go in by hand. Printed inner dimensions come back 0.1 to 0.2 mm undersize. |
| lid rim | 0.2 mm per side, 0.7 mm bumps | 0.4 mm per side, 0.9 mm bumps (SNAP_CLR, SNAP_BUMP_R) |
the same printed-in-printed fit that failed at 0.30 on the board, with less room and a rim that cannot flex. Engagement stays 0.5 mm. |
| lid legs over the board | 0.12 mm (RIM_GAP), 0.04 mm over the solder mask |
0.40 mm | the first assembled head had the lid standing proud, taped shut. The legs, the rails and the board are a printed stack with no preload to spare: any 0.1 to 0.3 mm of print error lands the legs before the lid seats, and the snap bumps stop short of their grooves. At 0.40 the board can float that much toward the lid and its tallest part still stops 0.22 mm short of the lid face. Lid-only reprint. |
| battery bay | a 502030 cell behind the board, body 18.65 mm deep | no bay, body 11.85 mm deep (BODY_X) |
bulky and never going to be used; the Nicla runs on the USB cable. |
| the USB edge | a top wall with a 9.6 × 5.0 mm mouth, over the wrong connector | the whole +Z face open, two 1.7 mm lips at the top corners hold the board (LIP_W) |
the board had been placed as a mirror image (w(bx, by) mapped to the wrong side), so the mouth missed the connector. Open is simpler and gives the screwdriver a path. |
| horn screws | four M2 at 13.7° on the square | two M2.5 × 5 at (0, ±7) on the same 14 mm circle, holes rotated 45° (HOLE_ROT, HOLE_PCD) |
four screws cannot be driven inside an 11.85 mm body; only the x = 0 pair has a driver path through the open top. Removing the bay is what forced this, opening the face is what allows it. |
| antenna | behind a wall, a 6 × 1.5 mm side slot planned | no slot: the open +Z face is the exit, the u.FL socket keeps headroom under the lid (fitcheck_parts.py check 4) |
Wi-Fi is how the head talks. The slot was never cut because opening the face made it redundant. |
Three of those (bay, open face, two screws) landed as one change: deleting the bay narrows the body until four screws no longer fit, and opening the face is what gives the remaining two a driver.
Every fit above is checked against the vendor STEP files, not a datasheet: the fitcheck_*.py scripts in hardware/cad/ place the real STS3215 and Nicla Vision models in the printed cavities and measure, and the test suite reruns them. Servo-in-yoke intersection 0.00 mm³, USB 0.31 mm proud of the open face, ±90° tilt clears the yoke by 9.74 mm.
Source: hardware/cad/yoke.py, hardware/cad/nicla_head.py, checked against the STS3215 and Nicla Vision STEP files by hardware/cad/fitcheck_*.py. Next: put it together.