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

11 KiB
Raw Blame History

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

# 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