saltylab-firmware/chassis/charging_dock_BOM.md
sl-mechanical 8222a0c42e feat(mechanical): charging dock station (Issue #159)
Universal 5 V/5 A charging dock for SaltyLab/Rover/Tank robots:
- charging_dock.scad: weighted base (ballast pockets, floor anchors),
  back wall with 2× 5 A pogo pin housing + wiring channel, V-guide
  funnel rails (±20 mm alignment tolerance), ArUco marker mast (100×100 mm,
  15° tilt), PSU bracket (IRM-30-5), 4-LED status bezel
  (Searching/Aligned/Charging/Full)
- charging_dock_receiver.scad: 3-variant robot-side contact plate with
  Ø12 mm brass pad press-fit, V-nose self-alignment; SaltyLab stem
  collar, SaltyRover deck flange, SaltyTank skid-plate mount
- charging_dock_BOM.md: hardware list, ASCII wiring diagram, INA219
  current-sense LED state logic, pogo height cross-variant shim table,
  assembly sequence, export commands

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-02 10:15:14 -05:00

203 lines
11 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.

# Charging Dock BOM — Issue #159
**Agent:** sl-mechanical | **Date:** 2026-03-01
Cross-variant charging dock: 5 V / 5 A pogo-pin contact, V-guide funnel, ArUco marker, LED status.
---
## A. Dock Station Hardware
| # | Description | Spec | Qty | Notes / Source |
|---|-------------|------|-----|----------------|
| D1 | High-current pogo pin | OD 5.5 mm, 5 A rated, 20 mm length, 4 mm travel | 2 | Generic HC pogo "PBX-5" type; AliExpress or Preci-Dip 821 series. Specify press-fit shoulder. |
| D2 | Brass contact pad | Ø12 × 2 mm, bare brass | 2 | Machine from Ø12 mm brass rod, or order PCB contact pad. Robot-side receiver. |
| D3 | Meanwell IRM-30-5 PSU | 5 V / 5 A (30 W), open-frame | 1 | Or equivalent: Hi-Link HLK-30M05, Recom RAC30-05SK |
| D4 | PG7 cable gland | IP67, M12 thread, 36 mm cable | 2 | PSU mains in + DC out to pogo; fits bracket cable exit |
| D5 | M20 hex nut (ballast) | Steel, 30 mm AF, ~86 g each | 8 | Stack in 4× base pockets (2 nuts/pocket) for ~690 g ballast |
| D6 | M4×16 SHCS | Stainless | 12 | Back wall + guide rail attachment to base |
| D7 | M4×10 BHCS | Stainless | 8 | ArUco mast foot + PSU bracket to base |
| D8 | M4 T-nut or insert | Heat-set, M4 | 20 | Into base plate slots |
| D9 | M3×16 SHCS | Stainless | 4 | LED bezel to back wall |
| D10 | M3 hex nut | DIN 934 | 4 | LED bezel |
| D11 | M8×40 BHCS | Zinc | 4 | Optional floor anchor bolts |
| D12 | Rubber foot | Ø20 × 5 mm, self-adhesive | 4 | Underside of base plate (no floor bolts variant) |
| D13 | 16 AWG silicone wire | Red + black, 300 mm each | 2 | Pogo pin to PSU |
| D14 | Crimp ring terminal | M3, for 16 AWG | 4 | Pogo pin terminal connection |
| D15 | Silicone sleeve | 4 mm ID, 100 mm | 2 | Wire strain relief in cable routing channel |
## B. LED Status Circuit Components
| # | Description | Spec | Qty | Notes |
|---|-------------|------|-----|-------|
| L1 | 5 mm LED — Red | Vf ≈ 2.0 V, 20 mA | 1 | SEARCHING state |
| L2 | 5 mm LED — Yellow | Vf ≈ 2.1 V, 20 mA | 1 | ALIGNED state |
| L3 | 5 mm LED — Blue | Vf ≈ 3.2 V, 20 mA | 1 | CHARGING state |
| L4 | 5 mm LED — Green | Vf ≈ 2.1 V, 20 mA | 1 | FULL state |
| L5 | Current limiting resistor | 150 Ω 1/4 W (for 5 V rail) | 4 | R = (5 V Vf) / 20 mA |
| L6 | TP4056 or MCU GPIO | LED driver / controller | 1 | GPIO from Jetson Orin NX via I2C LED driver, OR direct GPIO with resistors |
| L7 | 2.54 mm pin header | 1×6, right-angle | 1 | LED→controller connection |
> **LED current calc:** R = (5.0 2.1) / 0.020 = 145 Ω → use 150 Ω for red/yellow/green.
> Blue: R = (5.0 3.2) / 0.020 = 90 Ω → use 100 Ω.
## C. Robot Receiver Hardware (per robot)
| # | Description | Spec | Qty | Notes |
|---|-------------|------|-----|-------|
| R1 | Brass contact pad | Ø12 × 2 mm | 2 | Press-fit into receiver housing (0.1 mm interference) |
| R2 | 16 AWG silicone wire | Red + black, 300 mm | 2 | From pads to battery charging PCB |
| R3 | M4×10 SHCS | Stainless | 4 | Receiver to chassis (rover/tank flange bolts) |
| R4 | M4×16 SHCS | Stainless | 2 | Lab variant stem collar clamp |
| R5 | Solder lug, M3 | For wire termination to pad | 2 | Solder to brass pad rear face |
## D. ArUco Marker
| # | Description | Spec | Qty | Notes |
|---|-------------|------|-----|-------|
| A1 | ArUco marker print | 100×100 mm, ID = 0 (DICT_4X4_50) | 1 | Print on photo paper or laminate; slip into frame slot |
| A2 | Lamination pouch | A5, 80 micron | 1 | Weather-protect printed marker |
---
## Printed Parts
| Part | File | Qty | Print settings | Mass est. |
|------|------|-----|----------------|-----------|
| Dock base plate | `charging_dock.scad` `base_stl` | 1 | PETG, 5 perims, 60% infill (heavy = stable), 0.3 mm layer | ~380 g |
| Back wall | `charging_dock.scad` `back_wall_stl` | 1 | PETG, 5 perims, 40% infill | ~120 g |
| Guide rail | `charging_dock.scad` `guide_rail_stl` | 2 (mirror R) | PETG, 5 perims, 60% infill | ~45 g each |
| ArUco mast | `charging_dock.scad` `aruco_mount_stl` | 1 | PETG, 4 perims, 40% infill | ~55 g |
| PSU bracket | `charging_dock.scad` `psu_bracket_stl` | 1 | PETG, 4 perims, 30% infill | ~35 g |
| LED bezel | `charging_dock.scad` `led_bezel_stl` | 1 | PETG, 4 perims, 40% infill | ~10 g |
| Lab receiver | `charging_dock_receiver.scad` `lab_stl` | 1 | PETG, 5 perims, 60% infill | ~28 g |
| Rover receiver | `charging_dock_receiver.scad` `rover_stl` | 1 | PETG, 5 perims, 60% infill | ~32 g |
| Tank receiver | `charging_dock_receiver.scad` `tank_stl` | 1 | PETG, 5 perims, 60% infill | ~38 g |
---
## Mass Summary
| Assembly | Mass |
|----------|------|
| Dock printed parts (all) | ~690 g |
| Steel ballast (8× M20 hex nuts) | ~690 g |
| PSU + hardware | ~250 g |
| **Dock total** | **~1630 g** |
| Receiver (per robot) | ~3038 g |
---
## Pogo Pin Contact Height — Cross-Variant Alignment
The dock `POGO_Z = 35 mm` (contact height above dock floor) is set for **SaltyLab** (stem receiver height ≈ 35 mm).
| Robot | Chassis floor-to-contact height | Dock adapter |
|-------|--------------------------------|--------------|
| SaltyLab | ~35 mm (stem base) | None — direct fit |
| SaltyRover | ~55 mm (deck belly) | 20 mm ramp shim under dock base |
| SaltyTank | ~90 mm (hull floor) | 55 mm ramp shim under dock base |
> **Ramp shim:** print `dock_base.scad` with `BASE_T` increased, or print a separate shim block (not included — cut from plywood or print as needed).
> **Alternative:** in firmware, vary approach Z offset per variant. Single dock at POGO_Z = 60 mm midpoint ± 25 mm spring travel gives rough cross-variant coverage.
---
## Wiring Diagram
```
MAINS INPUT (AC)
┌─────────────────┐
│ IRM-30-5 PSU │ 5 V / 5 A out
│ 63×45×28 mm │
└────────┬────────┘
│ 5 V (RED 16 AWG) 0 V (BLK 16 AWG)
│ │
▼ ▼
┌───────────┐ ┌───────────┐
│ POGO + │ (spring-loaded) │ POGO - │
│ pin │◄────────────────────►│ pin │
└─────┬─────┘ robot docks └─────┬─────┘
│ │
─ ─ ─ ┼ ─ ─ ─ ─ ─ DOCK/ROBOT GAP ─ ─ ─ ┼ ─ ─ ─
│ │
┌─────▼─────┐ ┌─────▼─────┐
│ CONTACT + │ (brass pad Ø12 mm) │ CONTACT - │
└─────┬─────┘ └─────┬─────┘
│ │
└──────────────┬────────────────────┘
┌────────▼────────┐
│ Robot charging │
│ PCB / BMS │
│ (on robot) │
└────────┬────────┘
[Battery pack]
LED STATUS CIRCUIT (dock side):
│ 5 V from PSU
┌─────────────┼──────────────────────┐
│ │ │
[R] [R] [R]
150 Ω 150 Ω 100 Ω 150 Ω
│ │ │ │
[LED1] [LED2] [LED3] [LED4]
RED YELLOW BLUE GREEN
SEARCHING ALIGNED CHARGING FULL
│ │ │ │
└─────────────┴─────────────┴─────────┘
GPIO (Jetson Orin NX)
or TP4056 charge state output
CURRENT SENSING (optional — recommended):
Insert INA219 (I2C) in series with POGO+ line.
I2C addr 0x40; reads dock current to detect:
0 mA → SEARCHING (no robot contact)
>10 mA → ALIGNED (contact made, BMS pre-charge)
>1000 mA → CHARGING
<50 mA → FULL (BMS trickle / float)
```
---
## Assembly Sequence
1. **Print all parts** (see table above). Base at 60% infill for mass.
2. **Press ballast nuts** into base pockets from underside. Optional: fill pockets with epoxy to lock.
3. **Install heat-set M4 inserts** in base plate slots (back wall × 3, guide × 4 each side, ArUco foot × 4, PSU × 4).
4. **Press pogo pins** into back wall bores from the front face. Flange seats against counterbore shoulder. Apply drop of Loctite 243 to bore wall.
5. **Solder 16 AWG wires** to pogo pin terminals. Route down wiring channel. Thread through base cable slot.
6. **Assemble PSU bracket** to base (rear). Connect pogo wires to PSU DC terminals (observe polarity: POGO+ → V+, POGO- → COM). Route AC mains input via PG7 glands on bracket.
7. **Install LED bezel**: press 5 mm LEDs through bores (body recessed 2 mm), solder resistors and wires on rear, plug into controller header.
8. **Bolt back wall** to base (3× M4×16 from underneath).
9. **Bolt guide rails** to base (2× M4 each side). Mirror the right rail — print a second copy, insert STL mirrored in slicer OR use `mirror([1,0,0])` in OpenSCAD.
10. **Mount ArUco mast** to base front (4× M4×10).
11. **Insert ArUco marker** (laminated 100×100 mm, ID=0, DICT_4X4_50) into frame slot from side.
12. **Attach rubber feet** (or drill floor anchor holes).
13. **Robot receiver**: press brass contact pads into bores (interference fit, apply Loctite 603 retaining compound). Solder wires to pad rear lugs before pressing in.
14. **Mount receiver to robot**: align pads to dock pogo height, fasten M4 bolts.
---
## Export Commands
```bash
# Dock parts
openscad charging_dock.scad -D 'RENDER="base_stl"' -o dock_base.stl
openscad charging_dock.scad -D 'RENDER="back_wall_stl"' -o dock_back_wall.stl
openscad charging_dock.scad -D 'RENDER="guide_rail_stl"' -o dock_guide_rail.stl
openscad charging_dock.scad -D 'RENDER="aruco_mount_stl"' -o dock_aruco_mount.stl
openscad charging_dock.scad -D 'RENDER="psu_bracket_stl"' -o dock_psu_bracket.stl
openscad charging_dock.scad -D 'RENDER="led_bezel_stl"' -o dock_led_bezel.stl
# Robot receivers
openscad charging_dock_receiver.scad -D 'RENDER="lab_stl"' -o receiver_lab.stl
openscad charging_dock_receiver.scad -D 'RENDER="rover_stl"' -o receiver_rover.stl
openscad charging_dock_receiver.scad -D 'RENDER="tank_stl"' -o receiver_tank.stl
openscad charging_dock_receiver.scad -D 'RENDER="contact_pad_2d"' -o contact_pad.dxf
```