- Design specification: 24V DC power delivery (upgraded from 5V Issue #159) - ArUco marker ID 42 (15cm frame) for precision alignment - Spring-loaded contact pads with V-channel guide rails - Comprehensive BOM for 24V PSU, wiring, LED status circuit - Compatible with docking node #489 (ROS2 integration) - 3D-printable PETG frame (base, back wall, guide rails, brackets) - Electrical: 240W Mean Well IRM-240-24 PSU, 20A current capacity - Safety: Fused output, varistor protection, soft-start capable - Integration: MQTT status reporting, GPIO LED control (Jetson Orin NX) Files: - ISSUE_505_CHARGING_DOCK_24V_DESIGN.md: Complete design spec (mechanical, electrical, assembly) - charging_dock_505_BOM.csv: Procurement list with sourcing info Next: CAD implementation (charging_dock_505.scad, receiver variant) Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
620 lines
24 KiB
Markdown
620 lines
24 KiB
Markdown
# Issue #505: 24V Charging Dock Hardware Design
|
||
|
||
**Agent:** sl-mechanical
|
||
**Status:** In Progress
|
||
**Date Started:** 2026-03-06
|
||
**Related Issues:** #159 (5V dock), #489 (docking node)
|
||
|
||
---
|
||
|
||
## Design Overview
|
||
|
||
Upgraded charging dock system for 24V DC power delivery with improved reliability, higher power capacity, and integrated ArUco marker (ID 42) for precision alignment.
|
||
|
||
### Key Specifications
|
||
|
||
| Parameter | Specification | Notes |
|
||
|-----------|---------------|-------|
|
||
| **Voltage** | 24 V DC | Upgrade from 5V (Issue #159) |
|
||
| **Power capacity** | 480 W (20 A @ 24V) | Supports battery charging + auxiliary systems |
|
||
| **Contact type** | Spring-loaded brass pads (Ø12 mm, 2 pads) | 20 mm CL-to-CL spacing |
|
||
| **Alignment method** | V-channel rails + ArUco marker ID 42 | Precision ±15 mm tolerance |
|
||
| **Docking nodes** | Compatible with Issue #489 (ROS2 docking node) | MQTT status reporting |
|
||
| **Frame material** | PETG (3D-printable) | All parts exportable as STL |
|
||
| **Contact height** | 35 mm above dock floor (configurable per robot) | Same as Issue #159 |
|
||
|
||
---
|
||
|
||
## Subsystem Design
|
||
|
||
### A. Power Distribution
|
||
|
||
#### PSU Selection (24V upgrade)
|
||
|
||
**Primary:** Mean Well IRM-240-24 or equivalent
|
||
- 240W / 10A @ 24V, open frame
|
||
- Input: 100-240V AC 50/60Hz
|
||
- Output: 24V ±5% regulated
|
||
- Recommended alternatives:
|
||
- HLK-240M24 (Hi-Link, 240W, compact)
|
||
- RECOM R-120-24 (half-power option, 120W)
|
||
- TDK-Lambda DRB-240-24 (industrial grade)
|
||
|
||
**Specifications:**
|
||
- PCB-mount or chassis-mount (via aluminum bracket)
|
||
- 2× PG7 cable glands for AC input + 24V output
|
||
- Thermal shutdown at 70°C (add heatsink if needed)
|
||
|
||
#### Power Delivery Cables
|
||
|
||
| Component | Spec | Notes |
|
||
|-----------|------|-------|
|
||
| PSU to pogo pins | 12 AWG silicone wire (red/black) | 600V rated, max 20A |
|
||
| Cable gland exits | PG7, M20 thread, 5-8 mm cable | IP67 rated |
|
||
| Strain relief | Silicone sleeve, 5 mm ID | 150 mm sections at terminations |
|
||
| Crimp terminals | M3/M4 ring lug, 12 AWG | Solder + crimped (both) |
|
||
|
||
#### Contact Resistance & Safety
|
||
|
||
- **Target contact resistance:** <50 mΩ (brass pad to pogo pin)
|
||
- **Transient voltage suppression:** Varistor (MOV) across 24V rail (14-28V clamping)
|
||
- **Inrush current limiting:** NTC thermistor (10Ω @ 25°C) or soft-start relay
|
||
- **Over-current protection:** 25A fuse (slow-blow) on PSU output
|
||
|
||
---
|
||
|
||
### B. Mechanical Structure
|
||
|
||
#### Dock Base Plate
|
||
|
||
**Material:** PETG (3D-printed)
|
||
**Dimensions:** 300 × 280 × 12 mm (L×W×H)
|
||
**Ballast:** 8× M20 hex nuts (4 pockets, 2 nuts per pocket) = ~690 g stabilization
|
||
|
||
**Features:**
|
||
- 4× M4 threaded inserts (deck mounting)
|
||
- 4× ballast pockets (underside, 32×32×8 mm each)
|
||
- Wiring channel routing (10×10 mm), PSU mounting rails
|
||
- Cable exit slot with strain relief
|
||
|
||
#### Back Wall / Pogo Housing
|
||
|
||
**Material:** PETG
|
||
**Dimensions:** 250 × 85 × 10 mm (W×H×T)
|
||
**Contact face:** 2× pogo pin bores (Ø5.7 mm, 20 mm deep)
|
||
|
||
**Features:**
|
||
- Pogo pin spring pre-load: 4 mm travel (contact engage at ~3 mm approach)
|
||
- LED status bezel mount (4× 5 mm LED holes)
|
||
- Smooth contact surface (0.4 mm finish to reduce arcing)
|
||
|
||
#### V-Guide Rails (Left & Right)
|
||
|
||
**Material:** PETG
|
||
**Function:** Self-aligning funnel for robot receiver plate
|
||
|
||
**Geometry:**
|
||
- V-channel depth: 15 mm (±7.5 mm from centerline)
|
||
- Channel angle: 60° (Vee angle) for self-centering
|
||
- Guide length: 250 mm (front edge to back wall)
|
||
- 2.5 mm wall thickness (resists impact deformation)
|
||
|
||
**Design goal:** Robot can approach ±20 mm off-center; V-rails funnel it to ±5 mm at dock contact.
|
||
|
||
#### ArUco Marker Frame
|
||
|
||
**Design:** 15 cm × 15 cm frame (150×150 mm outer), marker ID 42
|
||
|
||
**Frame mounting:**
|
||
- Material: PETG (3D-printed frame + acrylic cover)
|
||
- Marker insertion: Side-slot, captures 100×100 mm laminated ArUco label
|
||
- Position: Dock entrance, 1.5 m height for camera visibility
|
||
- Lighting: Optional white LED ring around frame for contrast
|
||
|
||
**Marker specs:**
|
||
- Dictionary: `cv2.aruco.getPredefinedDictionary(cv2.aruco.DICT_4X4_250)`
|
||
- Marker ID: 42 (uint8, fits DICT_4X4_250: 0-249)
|
||
- Printed size: 100×100 mm
|
||
- Media: Glossy photo paper + 80 µm lamination (weather protection)
|
||
|
||
#### PSU Bracket
|
||
|
||
**Material:** PETG
|
||
**Attachment:** 4× M4 SHCS to base rear, bolts through PSU flanges
|
||
|
||
**Features:**
|
||
- Mounting pads for PSU feet
|
||
- Cable routing guides (AC input + 24V output)
|
||
- Thermal airflow clearance (30 mm minimum)
|
||
- Optional DIN-rail adapter (for rackmount variant)
|
||
|
||
#### LED Status Bezel
|
||
|
||
**Material:** PETG
|
||
**Function:** 4× LED indicator display (charging state feedback)
|
||
|
||
**LEDs & Resistors:**
|
||
|
||
| LED | Color | State | Vf (typ) | Resistor | Notes |
|
||
|-----|-------|-------|----------|----------|-------|
|
||
| L1 | Red | SEARCHING | 2.0 V | 180 Ω | No robot contact |
|
||
| L2 | Yellow | ALIGNED | 2.1 V | 180 Ω | Contact made, BMS pre-charge |
|
||
| L3 | Blue | CHARGING | 3.2 V | 100 Ω | Active charging |
|
||
| L4 | Green | FULL | 2.1 V | 180 Ω | Trickle/float mode |
|
||
|
||
**Current calculation (for 24V rail):**
|
||
- Red/Yellow/Green: R = (24 − Vf) / 0.020 ≈ 1000 Ω (use 1.0 kΩ 1/4W)
|
||
- Blue: R = (24 − 3.2) / 0.020 = 1040 Ω (use 1.0 kΩ)
|
||
|
||
**Control:**
|
||
- Jetson Orin NX GPIO output (via I2C LED driver or direct GPIO)
|
||
- Pulldown resistor (10 kΩ) on each GPIO if using direct drive
|
||
- Alternative: TP4056 analog output pins (if in feedback path)
|
||
|
||
---
|
||
|
||
### C. Robot Receiver (Mating Interface)
|
||
|
||
**Cross-variant compliance:** Same receiver design works for SaltyLab, SaltyRover, SaltyTank with different mounting interfaces.
|
||
|
||
#### Contact Pads
|
||
|
||
- **Material:** Bare brass (10-12 mm OD, 2 mm thick)
|
||
- **Pressing:** 0.1 mm interference fit into PETG housing
|
||
- **Polarity marking:** "+" slot on right side (+X), "-" unmarked on left
|
||
- **Solder lug:** M3 ring lug on rear face (connects to robot BMS)
|
||
|
||
#### V-Nose Guide
|
||
|
||
- **Profile:** Chamfered 14° V-nose (30 mm wide)
|
||
- **Function:** Mates with dock V-rails for alignment funnel
|
||
|
||
#### Mounting Variants
|
||
|
||
| Robot | Mount Type | Fastener | Height Adjustment |
|
||
|-------|-----------|----------|------------------|
|
||
| SaltyLab | Stem collar (split, 2×) | M4 × 16 SHCS (2×) | Tune via firmware offset |
|
||
| SaltyRover | Deck flange (bolt-on) | M4 × 16 SHCS (4×) | 20 mm shim if needed |
|
||
| SaltyTank | Skid plate (bolt-on) | M4 × 16 SHCS (4×) | 55 mm ramp shim recommended |
|
||
|
||
---
|
||
|
||
## 3D-Printable Parts (STL Exports)
|
||
|
||
All parts print in PETG, 0.2 mm layer height, 40-60% infill:
|
||
|
||
| Part | File | Qty | Infill | Est. Mass | Notes |
|
||
|------|------|-----|--------|----------|-------|
|
||
| Dock base | `charging_dock_505.scad` (base_stl) | 1 | 60% | ~420 g | Print on large bed (300×280 mm) |
|
||
| Back wall + pogo | `charging_dock_505.scad` (back_wall_stl) | 1 | 40% | ~140 g | Smooth face finish required |
|
||
| V-rail left | `charging_dock_505.scad` (guide_rail_stl) | 1 | 50% | ~65 g | Mirror for right side in slicer |
|
||
| V-rail right | *(mirror of left)* | 1 | 50% | ~65 g | — |
|
||
| ArUco frame | `charging_dock_505.scad` (aruco_frame_stl) | 1 | 30% | ~35 g | Slot accepts 100×100 mm marker |
|
||
| PSU bracket | `charging_dock_505.scad` (psu_bracket_stl) | 1 | 40% | ~45 g | — |
|
||
| LED bezel | `charging_dock_505.scad` (led_bezel_stl) | 1 | 40% | ~15 g | — |
|
||
| **Receiver (Lab)** | `charging_dock_receiver_505.scad` (lab_stl) | 1 | 60% | ~32 g | Stem collar variant |
|
||
| **Receiver (Rover)** | `charging_dock_receiver_505.scad` (rover_stl) | 1 | 60% | ~36 g | Deck flange variant |
|
||
| **Receiver (Tank)** | `charging_dock_receiver_505.scad` (tank_stl) | 1 | 60% | ~42 g | Extended nose variant |
|
||
|
||
---
|
||
|
||
## Bill of Materials (BOM)
|
||
|
||
### Electrical Components
|
||
|
||
#### Power Supply & Wiring
|
||
|
||
| # | Description | Spec | Qty | Unit Cost | Total | Source |
|
||
|---|---|---|---|---|---|---|
|
||
| E1 | PSU — 24V 10A | Mean Well IRM-240-24 or Hi-Link HLK-240M24 | 1 | ~$40–60 | ~$50 | Digi-Key, Amazon |
|
||
| E2 | 12 AWG silicone wire | Red + black, 600V rated, 5 m spool | 1 | ~$15 | ~$15 | McMaster-Carr, AliExpress |
|
||
| E3 | PG7 cable gland | M20 thread, IP67, 5–8 mm cable | 2 | ~$3 | ~$6 | AliExpress, Heilind |
|
||
| E4 | Varistor (MOV) | 18–28V, 1 kA | 1 | ~$1 | ~$1 | Digi-Key |
|
||
| E5 | Fuse — 25A | T25 slow-blow, 5×20 mm | 1 | ~$0.50 | ~$0.50 | Digi-Key |
|
||
| E6 | Fuse holder | 5×20 mm inline, 20A rated | 1 | ~$2 | ~$2 | Amazon |
|
||
| E7 | Crimp ring terminals | M3, 12 AWG, tin-plated | 8 | ~$0.20 | ~$1.60 | Heilind, AliExpress |
|
||
| E8 | Strain relief sleeve | 5 mm ID silicone, 1 m | 1 | ~$5 | ~$5 | McMaster-Carr |
|
||
|
||
#### Pogo Pins & Contacts
|
||
|
||
| # | Description | Spec | Qty | Unit Cost | Total | Source |
|
||
|---|---|---|---|---|---|---|
|
||
| C1 | Pogo pin assembly | Spring-loaded, Ø5.5 mm OD, 20 mm, 20A rated, 4 mm travel | 2 | ~$8–12 | ~$20 | Preci-Dip, Jst, AliExpress |
|
||
| C2 | Brass contact pad | Ø12 × 2 mm, H68 brass, bare finish | 2 | ~$3 | ~$6 | Metal supplier (Metals USA, OnlineMetals) |
|
||
| C3 | Solder lug — M3 | Copper ring, tin-plated | 4 | ~$0.40 | ~$1.60 | Heilind, Amazon |
|
||
|
||
#### LED Status Circuit
|
||
|
||
| # | Description | Spec | Qty | Unit Cost | Total | Source |
|
||
|---|---|---|---|---|---|---|
|
||
| L1 | 5 mm LED — Red | 2.0 V, 20 mA, diffuse | 1 | ~$0.30 | ~$0.30 | Digi-Key |
|
||
| L2 | 5 mm LED — Yellow | 2.1 V, 20 mA, diffuse | 1 | ~$0.30 | ~$0.30 | Digi-Key |
|
||
| L3 | 5 mm LED — Blue | 3.2 V, 20 mA, diffuse | 1 | ~$0.50 | ~$0.50 | Digi-Key |
|
||
| L4 | 5 mm LED — Green | 2.1 V, 20 mA, diffuse | 1 | ~$0.30 | ~$0.30 | Digi-Key |
|
||
| R1–R4 | Resistor — 1 kΩ 1/4W | Metal film, 1% tolerance | 4 | ~$0.10 | ~$0.40 | Digi-Key |
|
||
| J1 | Pin header 2.54 mm | 1×6 right-angle | 1 | ~$0.50 | ~$0.50 | Digi-Key |
|
||
|
||
#### Current Sensing (Optional)
|
||
|
||
| # | Description | Spec | Qty | Unit Cost | Total | Source |
|
||
|---|---|---|---|---|---|---|
|
||
| S1 | INA219 I2C shunt monitor | 16-bit, I2C addr 0x40, 26V max | 1 | ~$5 | ~$5 | Adafruit, Digi-Key |
|
||
| S2 | SMD resistor — 0.1 Ω | 1206, 1W | 1 | ~$1 | ~$1 | Digi-Key |
|
||
|
||
### Mechanical Hardware
|
||
|
||
| # | Description | Spec | Qty | Unit Cost | Total | Source |
|
||
|---|---|---|---|---|---|---|
|
||
| M1 | M20 hex nut | Steel DIN 934, ~86 g | 8 | ~$0.80 | ~$6.40 | Grainger, Home Depot |
|
||
| M2 | M4 × 16 SHCS | Stainless A4 DIN 912 | 16 | ~$0.30 | ~$4.80 | Grainger |
|
||
| M3 | M4 × 10 BHCS | Stainless A4 DIN 7380 | 8 | ~$0.25 | ~$2.00 | Grainger |
|
||
| M4 | M4 heat-set insert | Brass, threaded, M4 | 20 | ~$0.15 | ~$3.00 | McMaster-Carr |
|
||
| M5 | M3 × 16 SHCS | Stainless, LED bezel | 4 | ~$0.20 | ~$0.80 | Grainger |
|
||
| M6 | M3 hex nut | DIN 934 | 4 | ~$0.10 | ~$0.40 | Grainger |
|
||
| M7 | M8 × 40 BHCS | Zinc-plated, floor anchors (optional) | 4 | ~$0.50 | ~$2.00 | Grainger |
|
||
| M8 | Rubber foot | Ø20 × 5 mm, self-adhesive | 4 | ~$0.80 | ~$3.20 | Amazon |
|
||
|
||
### ArUco Marker & Frame
|
||
|
||
| # | Description | Spec | Qty | Unit Cost | Total | Source |
|
||
|---|---|---|---|---|---|---|
|
||
| A1 | ArUco marker print | 100×100 mm, ID=42, DICT_4X4_250, glossy photo paper | 2 | ~$1.50 | ~$3.00 | Print locally or AliExpress |
|
||
| A2 | Lamination pouch | A4, 80 µm thick | 2 | ~$0.40 | ~$0.80 | Amazon, Staples |
|
||
| A3 | Acrylic cover sheet | Clear, 3 mm, 150×150 mm | 1 | ~$3 | ~$3.00 | McMaster-Carr |
|
||
|
||
### Consumables & Assembly
|
||
|
||
| # | Description | Spec | Qty | Unit Cost | Total | Source |
|
||
|---|---|---|---|---|---|---|
|
||
| X1 | Solder wire | 63/37 Sn/Pb or lead-free, 1 m | 1 | ~$3 | ~$3.00 | Digi-Key |
|
||
| X2 | Flux paste | No-clean, 25 mL | 1 | ~$4 | ~$4.00 | Digi-Key |
|
||
| X3 | Loctite 243 | Thread-locker (medium strength), 10 mL | 1 | ~$4 | ~$4.00 | Grainger |
|
||
| X4 | Epoxy adhesive | Two-part, 25 mL | 1 | ~$6 | ~$6.00 | Home Depot |
|
||
|
||
---
|
||
|
||
## Assembly Procedure
|
||
|
||
### Phase 1: Preparation
|
||
|
||
1. **Print all PETG parts** (see STL export list above)
|
||
- Base: 0.3 mm layer, 60% infill (heavy/stable)
|
||
- Back wall: 0.2 mm, 40% infill
|
||
- Rails & brackets: 0.2 mm, 40-50% infill
|
||
- Support removal: slow, avoid pogo bore damage
|
||
|
||
2. **Prepare ballast nuts**
|
||
- Sort 8× M20 hex nuts (stack in 4 pockets, 2 per pocket)
|
||
- Optional: fill pockets with epoxy to prevent rattling
|
||
|
||
3. **Press brass contact pads**
|
||
- Apply 0.1 mm interference press-fit into receiver housing bores
|
||
- Use arbor press @ ~2 tons force
|
||
- Or use slow manual press (avoid chipping brass edges)
|
||
|
||
### Phase 2: Base Assembly
|
||
|
||
4. **Install heat-set M4 inserts** into base plate
|
||
- Back wall attach points (3×)
|
||
- Guide rail attach points (4× each side)
|
||
- ArUco mast feet (4×)
|
||
- PSU bracket mount (4×)
|
||
- Use soldering iron (350°C) or insert tool, press vertically
|
||
|
||
5. **Ballast installation**
|
||
- Insert M20 hex nuts into base pockets (from underside)
|
||
- Verify pockets are flush, no protrusions into wiring channel
|
||
- Optional: epoxy-lock nuts with 5-minute epoxy
|
||
|
||
6. **Install pogo pins** into back wall
|
||
- Press spring-loaded pins from front face into Ø5.7 mm bores (20 mm deep)
|
||
- Flange seats against counterbore shoulder at 1.5 mm depth
|
||
- Apply small drop of Loctite 243 to bore wall (prevents rotation)
|
||
|
||
### Phase 3: Electrical Assembly
|
||
|
||
7. **Solder wires to pogo pin terminals**
|
||
- 12 AWG red wire → POGO+ pin
|
||
- 12 AWG black wire → POGO- pin
|
||
- Solder both in & out of lug for redundancy
|
||
- Add ~50 mm strain relief sleeve over each joint
|
||
|
||
8. **Route pogo wires through base wiring channel**
|
||
- Guide down channel (10×10 mm trough)
|
||
- Exit through cable gland slot on rear
|
||
|
||
9. **Assemble PSU bracket**
|
||
- Bolt Mean Well IRM-240-24 (or equivalent) to bracket pads
|
||
- 4× M4 fasteners through bracket to base rear
|
||
- Orient PSU exhaust away from dock (for ventilation)
|
||
|
||
10. **Connect 24V wiring**
|
||
- Pogo+ wire (red) → PSU V+ terminal
|
||
- Pogo- wire (black) → PSU COM/GND terminal
|
||
- Observe polarity strictly (reverse = short circuit)
|
||
|
||
11. **Install power protection**
|
||
- Fuse holder in-line on PSU V+ output (25A slow-blow)
|
||
- Varistor (MOV, 18–28V) across V+/COM rails (clamp transients)
|
||
- Optional: NTC thermistor (10Ω @ 25°C) in series for soft-start
|
||
|
||
12. **Wire AC mains input** (if not pre-assembled)
|
||
- Route AC input through cable gland on PSU bracket
|
||
- Connect to PSU AC terminals (L, N, PE if applicable)
|
||
- Ensure all connections are soldered + crimped
|
||
|
||
### Phase 4: LED Assembly
|
||
|
||
13. **Install LED bezel into back wall**
|
||
- 4× 5 mm LEDs press-fit into bezel holes (bodies recessed ~2 mm)
|
||
- Solder resistors (1 kΩ 1/4W) to LED anodes on rear
|
||
- Connect all LED cathodes to common GND line (black wire to PSU COM)
|
||
- Wire LED control lines to Jetson Orin NX GPIO (via I2C expander if needed)
|
||
|
||
14. **Connect LED header**
|
||
- 2.54 mm pin header (1×6) plugs into LED control harness
|
||
- Pin 1: LED1 (red, SEARCHING)
|
||
- Pin 2: LED2 (yellow, ALIGNED)
|
||
- Pin 3: LED3 (blue, CHARGING)
|
||
- Pin 4: LED4 (green, FULL)
|
||
- Pins 5–6: GND, +24V (power for LED feedback monitoring)
|
||
|
||
### Phase 5: Mechanical Assembly
|
||
|
||
15. **Bolt back wall to base**
|
||
- 3× M4×16 SHCS from underside of base
|
||
- Tighten to ~5 Nm (snug, don't overtighten plastic)
|
||
- Back wall should be perpendicular to base (verify with level)
|
||
|
||
16. **Attach V-guide rails**
|
||
- Left rail: 4× M4 fasteners into base inserts (front & rear attach)
|
||
- Right rail: Mirror (flip STL in slicer) or manually mirror geometry
|
||
- Verify V-channels are parallel & symmetrical (±2 mm tolerance)
|
||
|
||
17. **Mount ArUco marker frame**
|
||
- Bolt 4× M4×10 fasteners to frame feet (attach to base front)
|
||
- Insert laminated 100×100 mm ArUco marker (ID 42) into frame slot
|
||
- Verify marker is flat & centered (no curl or shadow)
|
||
|
||
18. **Attach rubber feet** (or floor anchors)
|
||
- 4× self-adhesive rubber feet on base underside corners
|
||
- OR drill M8 holes through base (optional: permanent floor mounting)
|
||
|
||
### Phase 6: Robot Receiver Assembly
|
||
|
||
19. **Assemble robot receiver** (per variant)
|
||
- **SaltyLab:** 2-piece stem collar (M4×16 clamps Ø25 mm stem)
|
||
- **SaltyRover:** Single flange piece (4× M4 to deck underbelly)
|
||
- **SaltyTank:** Single piece w/ extended nose (4× M4 to skid plate)
|
||
|
||
20. **Press brass pads into receiver**
|
||
- Ø12 mm pads press into 0.1 mm interference bores
|
||
- Apply Loctite 603 retaining compound to bore before pressing
|
||
- Manual arbor press @ ~1-2 tons force; pads should be proud 0.2 mm
|
||
|
||
21. **Solder receiver wires**
|
||
- 12 AWG wires (red/black) solder to M3 solder lugs on pad rear
|
||
- Route wires through wire channel on mount face
|
||
- Terminate to robot BMS/charging PCB input
|
||
|
||
---
|
||
|
||
## Wiring Diagram (24V System)
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────┐
|
||
│ MAINS INPUT (AC) │
|
||
│ 110/220 V AC │
|
||
└────────────┬────────────────────────────────────────────────┘
|
||
│
|
||
▼
|
||
┌──────────────┐
|
||
│ IRM-240-24 │ 24V / 10A out (240W)
|
||
│ PSU │ ±5% regulated, open-frame
|
||
└──┬───────┬───┘
|
||
+24V │ │ GND
|
||
│ │
|
||
┌────┴┐ ┌─┴────┐
|
||
│ [F] │ │ [F] │ Fuse holder (25A slow-blow)
|
||
│ │ │ │
|
||
│ +24 │ │ GND │ 12 AWG silicone wire to back wall
|
||
│ │ │ │
|
||
└────┬┘ └─┬────┘
|
||
│ │
|
||
+24V│ │GND
|
||
▼ ▼
|
||
┌─────────────────┐
|
||
│ Back wall │
|
||
│ ┌───────────┐ │
|
||
│ │ POGO+ │ │ Spring-loaded contact pin (+24V)
|
||
│ │ POGO- │ │ Spring-loaded contact pin (GND)
|
||
│ └────┬──────┘ │
|
||
│ │ │
|
||
│ ┌─────┴─────┐ │
|
||
│ │ LED 1-4 │ │ Red, Yellow, Blue, Green indicators
|
||
│ │ Resistors│ │ 1 kΩ limiting resistors (×4)
|
||
│ │ [GPIO] │ │ Control from Jetson Orin NX I2C
|
||
│ └───────────┘ │
|
||
└─────┬───────────┘
|
||
│
|
||
═════╧════════ DOCK / ROBOT AIR GAP (≤50 mm) ═════════════
|
||
│
|
||
▼
|
||
┌──────────────────┐
|
||
│ Robot Receiver │
|
||
│ ┌────────────┐ │
|
||
│ │ Contact + │ │ Brass pad (Ø12×2 mm) [+24V]
|
||
│ │ Contact - │ │ Brass pad (Ø12×2 mm) [GND]
|
||
│ └──┬──┬──────┘ │
|
||
│ │ │ │
|
||
│ 12 AWG wires │ Red/black to BMS
|
||
│ │ │ │
|
||
│ ┌──▼──▼──┐ │
|
||
│ │ Robot │ │
|
||
│ │ BMS │ │
|
||
│ │Battery │ │ Charging current: 0–15A (typical)
|
||
│ └────────┘ │
|
||
└──────────────────┘
|
||
|
||
OPTIONAL — CURRENT SENSING (Diagnostic)
|
||
│ +24V
|
||
┌────┴────┐
|
||
│[INA219] │ I2C current monitor (0.1Ω sense resistor)
|
||
│ I2C 0x40│ Jetson reads dock current → state machine
|
||
└────┬────┘
|
||
│ GND
|
||
|
||
LED STATE MACHINE CONTROL (from docking_node.py):
|
||
State GPIO/Signal LED Output
|
||
─────────────────────────────────────────
|
||
SEARCHING GPIO H Red LED ON (20 mA, 1 kΩ)
|
||
ALIGNED GPIO H Yellow LED ON (pre-charge active)
|
||
CHARGING GPIO H Blue LED ON (>1 A charging)
|
||
FULL/COMPLETE GPIO H Green LED ON (float mode)
|
||
|
||
GPIO driven via Jetson Orin NX I2C LED driver (e.g., PCA9685)
|
||
or direct GPIO if firmware implements bitbang logic.
|
||
```
|
||
|
||
---
|
||
|
||
## Integration with ROS2 Docking Node (#489)
|
||
|
||
**Docking node location:** `./jetson/ros2_ws/src/saltybot_docking/docking_node.py`
|
||
|
||
### MQTT Topics
|
||
|
||
**Status reporting (outbound):**
|
||
```
|
||
saltybot/docking/status → { state, robot_id, contact_voltage, charge_current }
|
||
saltybot/docking/led → { red, yellow, blue, green } [0=OFF, 1=ON, blink_hz]
|
||
```
|
||
|
||
**Command subscriptions (inbound):**
|
||
```
|
||
saltybot/docking/reset → trigger dock reset (clear fault)
|
||
saltybot/docking/park → move robot out of dock (e.g., after full charge)
|
||
```
|
||
|
||
### Firmware Integration
|
||
|
||
**State machine (4 states):**
|
||
1. **SEARCHING** — No robot contact; dock waits for approach (ArUco marker detection via Jetson camera)
|
||
2. **ALIGNED** — Contact made (BMS pre-charge active); dock supplies trickle current (~100 mA) while robot capacitors charge
|
||
3. **CHARGING** — Main charge active; dock measures current via INA219, feedback to BMS
|
||
4. **FULL** — Target voltage reached (≥23.5 V, <100 mA draw); dock holds float voltage
|
||
|
||
**Current sensing feedback:**
|
||
- INA219 I2C shunt on 24V rail monitors dock-to-robot current
|
||
- Jetson polls at 10 Hz; state transitions trigger LED updates & MQTT publish
|
||
- Hysteresis prevents flickering (state valid for ≥2 sec)
|
||
|
||
---
|
||
|
||
## Testing Checklist
|
||
|
||
- [ ] **Electrical safety**
|
||
- [ ] 24V output isolated from mains AC (< 2.5 kV isolation @ 60 Hz)
|
||
- [ ] Fuse 25A blocks short-circuit (verify blow @ >30 A)
|
||
- [ ] Varistor clamps transient overvoltage (check 28V limit)
|
||
- [ ] All crimps are soldered + crimped (pull test: no slippage @ 10 lbf)
|
||
|
||
- [ ] **Mechanical**
|
||
- [ ] Base level on 4 rubber feet (no rocking)
|
||
- [ ] V-rails parallel within ±2 mm across 250 mm length
|
||
- [ ] Back wall perpendicular to base (level ±1°)
|
||
- [ ] Pogo pins extend 4 mm from back wall face (spring preload correct)
|
||
|
||
- [ ] **Contact alignment**
|
||
- [ ] Robot receiver pads contact pogo pins with ≥3 mm contact face overlap
|
||
- [ ] Contact resistance < 50 mΩ (measure with multimeter on lowest ohm scale during light press)
|
||
- [ ] No visible arcing or pitting (inspect pads after 10 charge cycles)
|
||
|
||
- [ ] **Power delivery**
|
||
- [ ] 24V output at PSU: 23.5–24.5 V (under load)
|
||
- [ ] 24V at pogo pins: ≥23.5 V (< 0.5 V droop @ 10 A)
|
||
- [ ] Robot receives 24V ± 1 V (measure at BMS input)
|
||
|
||
- [ ] **LED status**
|
||
- [ ] Red (SEARCHING) steady on before robot approach
|
||
- [ ] Yellow (ALIGNED) turns on when pads make contact
|
||
- [ ] Blue (CHARGING) turns on when charge current > 500 mA
|
||
- [ ] Green (FULL) turns on when current drops < 100 mA (float mode)
|
||
|
||
- [ ] **ArUco marker**
|
||
- [ ] Marker ID 42 is readable by Jetson camera from 1.5 m @ 90° angle
|
||
- [ ] No glare or shadow on marker (add diffuse lighting if needed)
|
||
- [ ] Marker detected by cv2.aruco in < 100 ms
|
||
|
||
- [ ] **MQTT integration**
|
||
- [ ] Dock publishes status every 5 sec (or on state change)
|
||
- [ ] LED state matches reported dock state
|
||
- [ ] Current sensing (INA219) reads within ±2% of true dock current
|
||
|
||
---
|
||
|
||
## Firmware/Software Requirements
|
||
|
||
### Jetson Orin NX (Docking controller)
|
||
|
||
**Python dependencies:**
|
||
```bash
|
||
pip install opencv-contrib-python # ArUco marker detection
|
||
pip install adafruit-circuitpython-ina219 # Current sensing
|
||
pip install rclpy # ROS2
|
||
pip install paho-mqtt # MQTT status reporting
|
||
```
|
||
|
||
**Key Python modules:**
|
||
- `cv2.aruco.getPredefinedDictionary(cv2.aruco.DICT_4X4_250)` → ArUco ID 42 detection
|
||
- `Adafruit_INA219` → I2C current monitoring @ 0x40
|
||
- GPIO library → LED control (via I2C LED driver or direct GPIO)
|
||
|
||
**ROS2 node:** `saltybot_docking/docking_node.py` (already present, Issue #489)
|
||
- Subscribes to `/docking/approach_request`
|
||
- Publishes to `/docking/status`, `/docking/led_state`
|
||
- MQTT gateway for legacy systems
|
||
|
||
---
|
||
|
||
## Files to Commit
|
||
|
||
**New files for Issue #505:**
|
||
```
|
||
chassis/
|
||
├── charging_dock_505.scad [Main dock 24V design]
|
||
├── charging_dock_receiver_505.scad [Robot receiver 24V variant]
|
||
├── ISSUE_505_CHARGING_DOCK_24V_DESIGN.md [This file]
|
||
├── charging_dock_505_BOM.csv [Excel-friendly BOM export]
|
||
└── charging_dock_505_WIRING_DIAGRAM.md [Detailed wiring guide]
|
||
|
||
docs/
|
||
└── Issue_505_Assembly_Guide.md [Step-by-step assembly photos + text]
|
||
```
|
||
|
||
---
|
||
|
||
## Revision History
|
||
|
||
| Date | Version | Changes |
|
||
|------|---------|---------|
|
||
| 2026-03-06 | 1.0 | Initial design (24V upgrade from Issue #159) |
|
||
|
||
---
|
||
|
||
## Next Steps
|
||
|
||
1. ✅ Design specification (this document)
|
||
2. ⏳ OpenSCAD CAD files (`charging_dock_505.scad`, `charging_dock_receiver_505.scad`)
|
||
3. ⏳ BOM export (CSV format for procurement)
|
||
4. ⏳ 3D-printed prototype testing
|
||
5. ⏳ Electrical integration with Jetson docking node
|
||
6. ⏳ ArUco marker calibration & documentation
|
||
7. ⏳ PR submission & merge to `main`
|
||
|
||
---
|
||
|
||
**Designer:** sl-mechanical
|
||
**Date:** 2026-03-06
|
||
**Status:** Design Specification Complete — Awaiting CAD Implementation
|