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>
203 lines
11 KiB
Markdown
203 lines
11 KiB
Markdown
# 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, 3–6 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) | ~30–38 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
|
||
```
|