Skip to the content
PCBKitNew board
2 layers100 × 80 mmRobot main, the printed circuit board in 3D

SKiDL-generated draft v0.1. NOT FOR FABRICATION — see blockers below.

Size
100 × 80 mm
Copper layers
2
Thickness
1.6 mm
Parts
78
Nets
64
Pads
362
Tracks, vias
641, 244
Pours
1
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
28 Oct 2026
Updated
5 Nov 2026

Overview

Robot main is an open-source printed circuit board by johnugbor, from the johnugbor/RoboSolar repository on GitHub, published under the MIT licence. It is a 2-layer board of 100 × 80 mm with 78 parts on 64 nets, routed with 641 tracks and 244 vias.

It is built around the ESP32-WROOM-32, ADS1115IDGS and 74LVC1G04Z, with the 74LVC1G08Z, MPU-6050 and IRLZ44N among its other parts. Its parts include 24 resistors, 20 connectors, 14 capacitors, 9 ICs and 3 diodes. It belongs with the robots and motor control boards and the ESP32 boards of this library.

Main components

7

README

hardware/kicad/05-dock-interface/README.md

05 — Dock interface

SKiDL-generated draft v0.1. NOT FOR FABRICATION — see blockers below.

Generate + check

powershell
# one-time setup (from repo root, shared with Boards 1-4)
& 'C:\Program Files\KiCad\10.0\bin\python.exe' -m venv .venv-skidl
.\.venv-skidl\Scripts\python.exe -m pip install skidl

# generate netlist + schematic, then KiCad ERC
.\.venv-skidl\Scripts\python.exe hardware\kicad\05-dock-interface\gen_schematic.py
& 'C:\Program Files\KiCad\10.0\bin\kicad-cli.exe' sch erc --output hardware\kicad\05-dock-interface\erc.rpt hardware\kicad\05-dock-interface\dock_interface.kicad_sch

Or, where make is installed (Git Bash / WSL / Linux): make kicad-board5.

Outputs: dock_interface.net, dock_interface.kicad_sch, erc.rpt. Verified 2026-11-04: SKiDL ERC 0 errors, KiCad ERC 0 errors (17 lib_symbol_mismatch warnings — SKiDL embeds its own symbol copies; cosmetic). The SKiDL log also prints "No footprint for PWR_FLAG" errors; PWR_FLAGs have no footprint by design and the files are still generated.

Circuit: external 14.6V charger -> J1 -> 10mOhm shunt (INA226, 0x41; 2-3A std, 5A max) -> spring contacts J2 (6 contacts) to the robot. D3 DECIDED 2026-11-04: the docked robot is the I2C master for this board's INA226 over two extra spring contacts (J2 pin4=SDA, pin5=SCL); no I2C pullups on this board - the single 4.7k pair on Board 3 serves the bus. Dock INA226 re-strapped 0x40 -> 0x41 (A0=VS) to avoid collision with Board 3's 0x40. CHG_ALERT is not contacted (robot polls; ALERT only on bench header J3). Contact 3 is dock-presence sense: tied to GND here, detected by robot MCP23017 GPB6/DOCK pullup - no sense processing on dock. Refill solenoid driver is Board 3 Sheet 5 circuit (IRLZ44N, 220R, 100k pulldown, 1N4007) on 5A fused tap; gate arrives on J2 pin 6 (REFILL_GATE_SRC, Board 3 MCP GPA3). Solenoid SPECIFIED (D7, 2026-11-04): 12V continuous-duty rated (or explicitly 15V-rated) solenoid - NOT 24V (won't pull in at 12.8V). With the rail at 14.6V peak the coil would dissipate ~48% over its 12V rating if held at 100%, so robot firmware MUST use hit-and-hold: 100% duty for ~100ms to pull in, then 60-70% PWM hold (coil heating scales with duty: ~0.65 x 1.48 ~= 0.96x rated - cool). PWM comes via the MCP23017 GPA3 over I2C, so use a low PWM rate (>=100Hz is plenty for a solenoid coil) and remember the 100k fail-closed pulldown turns it off when undocked/idle. J3 is bench/debug only. AprilTag mount mechanical only (BOM line, no circuit). Generated schematic uses net labels (mode="labels", same as Boards 1-4).

PCB layout (stages 1-2, scripted - DRAFT, NOT FOR FABRICATION)

dock_interface.kicad_pcb (100x70mm, 2-layer) is generated by make_pcb.py from dock_interface.net - placement, scripted routing, bottom GND zone:

powershell
& 'C:\Program Files\KiCad\10.0\bin\python.exe' hardware\kicad\05-dock-interface\make_pcb.py
& 'C:\Program Files\KiCad\10.0\bin\kicad-cli.exe' pcb drc --output hardware\kicad\05-dock-interface\drc.rpt hardware\kicad\05-dock-interface\dock_interface.kicad_pcb

Verified 2026-11-04: KiCad DRC 0 violations, 0 unconnected pads (cleanest board so far - not even silkscreen warnings). Render: board5-layout-stage2.png.

Placement rationale: charge path J1 -> R1 (10mOhm shunt) -> J2 spring contacts runs short and wide (2.5mm top copper) across the north edge for the 5A max charge current. The INA226 (U1) is rotated 90 degrees so its Vin+/Vin-/Vbus pads face north and take short Kelvin taps straight off the shunt pads, while SDA/SCL/ALERT/A0 escape south, away from the charge path. LM2936 (U2) sits west next to J1. The solenoid driver (F1 5A blade fuse, Q1 IRLZ44N, D1 flyback, J4) is grouped across the south edge, its drain return on the bottom layer, well away from the INA226 front-end. Bench header J3 is on the east edge; no I2C pullups on this board (the pair lives on Board 3, per D3).

Still NOT FOR FABRICATION: blockers 2 and 5 below remain open (no reverse-current blocking on the charge path - ideal-diode ECO still to add; spring-contact mechanics/ratings are not proven by this PCB), and footprints/pinouts (INA226 MSOP-10, LM2936 SOT-223 variant, blade fuse holder, J2 contact assembly) need human peer review.

Blockers before fabrication

  1. Who reads the dock INA226? RESOLVED (D3, 2026-11-04): the docked robot reads it over two extra spring contacts (J2 pins 4/5) and the dock INA226 is re-strapped to 0x41. Remaining firmware duties: the robot must configure the dock INA226 (calibration for the 10mOhm shunt, any alert thresholds) at dock/power-up - CHG_ALERT itself is not contacted, so the robot must poll. Bench use via J3 needs pullups on the test jig. Spring-contact signal integrity (I2C over spring contacts: contact resistance, bounce at dock/undock, bus capacitance) must be verified on the bench - keep dock I2C at 100kHz initially.
  2. Unfused charge path (now 5A max, not 15A): charge current is confirmed at 2-3A standard / 5A absolute max (2026-11-04), retiring the earlier 15A assumptions: spring contacts 1-2 and the Board 3 J_DOCK path need only be rated/routed for 5A (layout to confirm). Shunt now correctly sized at 10mOhm/1W (5A -> 50mV, 0.25W; INA226 FS 8.19A). Still open: only the solenoid branch is fused (5A); the charger -> contact path relies on the external charger's protection, and there is no reverse-current blocking - a docked robot battery can backfeed an unpowered/faulted charger through the shunt. Add an ideal-diode/blocking MOSFET (rated >=20V per the charge-path target) or document the charger's own reverse protection.
  3. Battery chemistry CONFIRMED (D1, 4S LiFePO4, 14.6V charge) - the 14.6V charger is correct and consistent with Board 3's "~12V" pack — confirm. The refill solenoid is also assumed to tolerate the 14.6V rail; a 12V solenoid will run hot.
  4. Regulator margin RESOLVED (D6, 2026-11-04): AMS1117 (15V abs-max) replaced by LM2936-3.3 (40V max input, 50mA - INA226 needs <1mA), meeting the >=20V charge-rail target. No TVS or reverse-polarity device is fitted on the charger input itself; the LM2936 protects only its own logic rail (main-path reverse current is blocker 2).
  5. Mechanics dominate this board: spring-contact rating (5A working, 15A-class preferred), contact alignment/float, and the AprilTag mount are mechanical design items represented only by J2 and a BOM line. Docking misalignment that shorts CHG+ to the sense contact is a credible fault — review contact geometry.

Parts

78
QtyValueFootprintReferences
13220R_0805_2012MetricR2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R21, R23
10100nFC_0805_2012MetricC4, C5, C6, C7, C8, C9, C10, C12, C13, C14
710kR_0805_2012MetricR1, R13, R14, R15, R16, R19, R20
5Conn_01x04PinHeader_1x04_P2.54mm_VerticalJ3, J4, J5, J13, J17
4Conn_01x02TerminalBlock_MaiXu_MX126-5.0-02P_1x02_P5.00mmJ1, J2, J19, J20
4Conn_01x06PinHeader_1x06_P2.54mm_VerticalJ6, J7, J12, J16
4Conn_01x06JST_GH_SM06B-GHS-TB_1x06-1MP_P1.25mm_HorizontalJ8, J9, J10, J11
4MountingHole_3.2mm_M3MountingHole_3.2mm_M3H1, H2, H3, H4
310uFC_0805_2012MetricC1, C2, C3
374LVC1G04SOT-23-5U2, U3, U6
2100kR_0805_2012MetricR22, R24
21N4007D_DO-41_SOD81_P10.16mm_HorizontalD2, D3
24.7kR_0805_2012MetricR17, R18
2IRLZ44NTO-220-3_VerticalQ2, Q3
12.2nFC_0805_2012MetricC11
12N7002SOT-23Q1
15A BladeFuseholder_Blade_Mini_Keystone_3568F1
174LVC1G08SOT-23-5U5
1ADS1115IDGSMSOP-10_3x3mm_P0.5mmU7
1Conn_01x03PinHeader_1x03_P2.54mm_VerticalJ15
1Conn_01x06TerminalBlock_MaiXu_MX126-5.0-06P_1x06_P5.00mmJ18
1Conn_01x08PinHeader_1x08_P2.54mm_VerticalJ14
1ESP32-WROOM-32ESP32-WROOM-32U1
1INA226MSOP-10_3x3mm_P0.5mmU9
1MCP23017x-x-SOSOIC-28W_7.5x17.9mm_P1.27mmU4
1MPU-6050HVQFN-24-1EP_4x4mm_P0.5mm_EP2.6x2.6mmU8
1SMBJ16AD_SMBD1

Questions

How big is the Robot main PCB?

It measures 100 × 80 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Robot main use?

78 parts, built around the ESP32-WROOM-32, ADS1115IDGS, 74LVC1G04Z and 74LVC1G08Z. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Robot main KiCad files?

From the johnugbor/RoboSolar repository on GitHub, at the commit this page was made from: the board is hardware/kicad/03-robot-mainboard/robot_main.kicad_pcb and its schematic hardware/kicad/01-soiling-station/solar_soiling.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Robot main design in my own project?

Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

More from johnugbor/RoboSolar

4
  • 2 layers80 × 60 mmSolar soiling backup, the printed circuit board in 3D

    Solar soiling backup

    johnugbor/RoboSolar

    SKiDL-generated draft v0.1. NOT FOR FABRICATION — see blockers below.

    23 partsMIT
  • 2 layers100 × 70 mmWeather node backup, the printed circuit board in 3D

    Weather node backup

    johnugbor/RoboSolar

    SKiDL-generated draft v0.1. NOT FOR FABRICATION — see blockers below.

    21 partsMIT
  • 2 layers100 × 70 mmPanel node, the printed circuit board in 3D

    Panel node

    johnugbor/RoboSolar

    SKiDL-generated draft v0.1. NOT FOR FABRICATION — see blockers below.

    20 partsMIT
  • 2 layers100 × 70 mmDock interface, the printed circuit board in 3D

    Dock interface

    johnugbor/RoboSolar

    SKiDL-generated draft v0.1. NOT FOR FABRICATION — see blockers below.

    19 partsMIT

Similar boards

  • 4 layers159.6 × 161 mmShack interface, the printed circuit board in 3D

    Shack interface

    PE1RGU/hf-antenna-switch

    Remote HF antenna switch: 3 radios x 4 antennas (path to 8), outdoor relay unit with a hardware safety chain, controlled over Cat6 from a shack interface. KiCad 10, open hardware, designed together with an AI.

    290 parts2CERN-OHL-S-2.0
  • 2 layers151 × 118 mmOBQAS, the printed circuit board in 3D

    OBQAS

    diminDDL/OBQAS

    Open Battery Quantification and Analysis System

    204 parts1MIT
  • 4 layers165 × 142.5 mmTestboard, the printed circuit board in 3D

    Testboard

    anthonydotmoe/68040pc

    A general purpose computer platform for retrocomputing enthusiasts

    175 parts9
  • 4 layers246.5 × 95 mmViaggio, the printed circuit board in 3D

    Viaggio

    dataehora/beatconfused

    A small web studio of fast, elegant, install-free music tools. Every tool is plain HTML, CSS and vanilla JavaScript with the Web Audio API — no build step, no dependencies, no accounts, works offline after first load.

    215 parts1
  • 2 layers100 × 100 mmSimple logic full, the printed circuit board in 3D

    Simple logic full

    Justinius/LogicDemoBoard

    PCB for simple logic demo

    36 partsCC0-1.0
  • 2 layers131.9 × 164.6 mmCft alu, the printed circuit board in 3D

    Cft alu

    alexiosc/cft

    The CFT homebrew minicomputer

    138 parts6GPL-3.0
  • 2 layers100 × 100 mmMicroDeflect, the printed circuit board in 3D

    MicroDeflect

    tullulah/VectrexPCBRepro

    OpenHardware project to reproduce the original PCB of the Vectrex (3GE Revision)

    98 parts4GPL-3.0
  • 2 layers84.5 × 94.5 mmLandyGauge, the printed circuit board in 3D

    LandyGauge

    paulrbarnard/LandyGauge

    Open-source ESP32-S3 vehicle instrument gauge

    129 parts