Skip to the content
PCBKitNew board
2 layers160 × 100 mmProject button v3, the printed circuit board in 3D

detailed specs to build a humanoid robot (with kids)

Size
160 × 100 mm
Copper layers
2
Thickness
1.6 mm
Parts
46
Nets
40
Pads
213
Tracks, vias
201, 56
Pours
3
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
6 Aug 2026
Updated
26 Sep 2026

Overview

Project button v3 is an open-source printed circuit board by amyleesterling, from the amyleesterling/humanoid-robot repository on GitHub. It is a 2-layer board of 160 × 100 mm with 46 parts on 40 nets, routed with 201 tracks and 56 vias.

It belongs with the RP2040 boards of this library.

README

README.md

Humanoid Robot Program

Package baseline: HR-30 whole-body P0.1 engineering candidate

Status: complete preliminary whole-body design; not approved for fabrication, procurement, assembly, powered testing, motion, or energization

Baseline date: 2026-08-15

This repository is the engineering source of truth for a 30-inch (762 mm) whole humanoid robot. The current program deliverable is HR-30 whole-body P0.1: a recognizable complete robot with 25 articulated axes, two functional grippers, full-body editable CAD and dynamics models, candidate actuation and transmission hardware, electrical and harness architecture, budgets, and a staged path toward tethered walking. HR-V0 and its unresolved J2/R312 arm analysis are preserved as archived subsystem evidence; they no longer control or replace the whole-body program deliverable.

Program sequence

  1. HR-30 whole-body P0.1 defines the complete unpowered machine and every body, joint, transmission, electrical, harness, compute, sensing, mass, power and fabrication interface.
  2. Suspended joint commissioning validates one whole-body revision without supporting robot weight.
  3. Restrained standing and weight transfer proceed only after separate mechanical, electrical, fall-restraint and motion-control releases.
  4. Capture steps and tethered walking remain distinct physical-development gates.
  5. Untethered level-floor walking is a later end state, not a claim made by P0.1.

No child may enter the powered test area during any preliminary stage. Any later child-adjacent demonstration requires an independent risk assessment, qualified mechanical/electrical review, validated force and stopping limits, and a new released revision.

Start here

Archived HR-V0 subsystem evidence

Run python tools/check_traceability.py from this directory to ensure every requirement has at least one verification method and all risk controls reference valid requirements. Run python tools/generate_hr_v0_governance_control.py and python tools/check_hr_v0_governance_control_p01.py after any requirement, risk, gate, procedure, ownership or approval-state change. Run python tools/generate_hr_v0_electrical_v3.py --validate and python tools/check_hr_v0_electrical_v3.py to regenerate and cross-check V3. Run the current PCB chain with KiCad's bundled Python: "C:\Program Files\KiCad\10.0\bin\python.exe" tools/generate_hr_v0_watchdog_pcb.py, "C:\Program Files\KiCad\10.0\bin\python.exe" tools/generate_hr_v0_watchdog_pcba_assembly_data_p02.py, "C:\Program Files\KiCad\10.0\bin\python.exe" tools/check_hr_v0_watchdog_pcba_assembly_data_p02.py, "C:\Program Files\KiCad\10.0\bin\python.exe" tools/check_hr_v0_watchdog_footprint_metadata.py, and "C:\Program Files\KiCad\10.0\bin\python.exe" tools/check_hr_v0_watchdog_pcb.py. The R138 P0.7/P0.8 snapshots are immutable history; never recapture or overwrite them during ordinary regeneration. PCB-P1.0 is current and directly names Electrical V3-P1.15; its internal CAM review is not a supplier release. PCB-P0.5 through P0.9 are historical; do not upload or order any of them. Run python tools/check_hr_v0_watchdog_p115_identity_p01.py, python tools/generate_hr_v0_e2_hardware_slice_p04.py and python tools/check_hr_v0_e2_hardware_slice_p04.py to keep the current direct P1.15 E2 exclusion boundary synchronized. HR-V0-E2-P115-PARITY-P0.1 is historical audit evidence, not a current dependency. Run python tools/generate_hr_v0_coordinate_convention.py and python tools/check_hr_v0_coordinate_convention_p01.py after any A0/J1/J2/G1 transform, joint limit, actuator-calibration field or guard-axis change. python tools/check_energization_gates.py --through E2 --require-ready must remain nonzero until every applicable gate is evidenced and closed.

Run python tools/check_hr_v0_e2_commissioning.py to validate the fail-closed 15-step E2 sequence, 20 disconnected-load logic cases, five unexecuted evidence forms and partial-only authorization boundary. Run python tools/check_hr_v0_r57_fabrication_sourcing.py to verify that the current Boston route contains only held/excluded R57 candidates and unexecuted inquiry records. A passing checker is not permission to order, fabricate, or connect a source.

Run python tools/check_hr_v0_boston_fabrication_route_p03.py for the R167 Boston/US provider-capability refresh. Passing proves only that ten routes, ten official source records, ten open inputs and every denial flag remain synchronized; it is not provider qualification or authority to contact, upload, quote, purchase, fabricate, assemble, move or energize.

Run python tools/check_hr_v0_xt1_terminal_group_p01.py for R168. Passing proves exact catalog/position parity for six XT1 bodies, one end cover, zero jumpers and shared-accessory ownership without releasing a conductor, termination, label, installed terminal, point-to-point result or work authority.

Run python tools/check_hr_v0_label_system_p01.py for R169. Passing proves six physically short XT1 texts, 34 small device/operator records, four large legends, exact candidate material stocks and twelve open holds. It does not select a printer/service, wire markers, adhesion, regulatory markings or installed evidence, and authorizes no work.

Run python tools/check_hr_v0_compute_storage_p02.py for R170. Passing proves exact Kingston SDCIT2/64GBSP identity, three current primary source records, thirteen evidence-classed interfaces, twelve open holds and ten unexecuted receiving checks. It does not prove Pi 5 compatibility, capacity integrity, card-specific endurance, imaging, filesystem resilience, recovery, retention, current/thermal behavior or safety performance.

Run python tools/check_hr_v0_host_deploy_p01.py for R171. Passing proves a six-file disabled overlay, 23 current preflight failures, eighteen open closure holds, 21 unexecuted target evidence rows, six host source tests and source-manifest integrity. It does not prove an installed target image, package/interpreter identity, service permissions, GPIO or serial behavior, HIL timing, power-loss recovery, rollback, motion safety or functional-safety performance.

Run python tools/generate_hr_v0_rpi_os_sbom_p01.py and python tools/check_hr_v0_rpi_os_sbom_p01.py for R172. Passing reproduces the official 5,336,108-byte SPDX payload hash, 4,743 package records, 632 unique DPKG identities, fifteen critical-package rows and twelve blank target-verification records. It does not prove disk-image acquisition, media write/readback, target package or executable identity, booted kernel, backend selection, security, HIL, recovery, rollback or safety performance.

Run python tools/check_hr_v0_fabrication_input_basis_p01.py for R173. Passing proves exact trace from the existing draft 100 g / 40-70 mm object and 0.15 m/s TCP / 30 deg/s automatic-joint / 10 deg/s setup limits to ten fabrication-input rows and five arithmetic screens. It does not supply duty, acceleration, jerk, restraint, safety factors, complete loads, physical evidence, qualified acceptance or work authority.

Run python tools/generate_hr_v0_dynamic_trace_analysis_p01.py and python tools/check_hr_v0_dynamic_trace_analysis_p01.py for R174. The checker proves the unresolved physical configuration is rejected, the nominal synthetic trace computes 0.030 s / 0.435 degree / 6.065 degree results but remains on qualified HOLD, reset-driven motion fails DTA-007, and a sample-index/drop fault fails DTA-001. It does not select a physical threshold, authorize a test, or supply executed stopping/reset evidence.

Run python tools/check_hr_v0_dynamic_instrumentation_p01.py for R175. It verifies ten equipment rows, all fifteen dynamic channels, eight no-connect/interface boundaries, fifteen open holds, four blank receiving records, zero work authority, EG-025 open and EG-026 partial. It does not accept a sensor range, release procurement, authorize connection, or supply physical evidence.

Run python tools/generate_hr_v0_dynamic_event_interface_p01.py and python tools/check_hr_v0_dynamic_event_interface_p01.py for R176. Passing verifies two exact TI ISO1212EVM evaluation units, seven field events, exact J4/J2/J1 and T7 DB37 mappings, one FIO0-FIO7 FIO_STATE capture word, root plus four native KiCad child sheets at ERC 0/0, fifteen open holds and four blank receiving rows. It does not authorize a field tap: Pilz/Schneider loading, diagnostic-pulse, EDM, dropout, field-ground, timing, fault-injection, physical and qualified noninterference evidence remains open, and all test equipment has zero safety credit.

Run python tools/generate_hr_v0_dynamic_event_ain_p01.py and python tools/check_hr_v0_dynamic_event_ain_p01.py for R177. Passing verifies seven exact TI AMC3330EVM evaluation candidates, all seven T7 adjacent differential pairs, exact J1/J2/J3 and DB37 mappings, an eight-address sequential scan model, root plus five readable native KiCad child sheets at ERC 0/0, fifteen open holds and four blank receiving rows. It does not authorize procurement or connection: the EVM accepts only +/-1 V, is not certified by TI for high-voltage operation, and every field divider, protection value, node envelope, loading limit, timing threshold, physical result and qualified disposition remains SELECTION REQUIRED.

Run python tools/generate_hr_v0_event_tap_disposition_p01.py and python tools/check_hr_v0_event_tap_disposition_p01.py for R178. Passing verifies seven exact P1.15 node/terminal groups, five source-controlled manufacturer records, ten open closure holds and root plus three native KiCad disposition sheets at ERC 0/0. It proves no catalog-only field tap or divider has been released; it does not establish allowable parallel loading, transient limits, noninterference, physical timing, safety credit or work authority. Run python tools/generate_hr_v0_noncontact_event_observation_p01.py and python tools/check_hr_v0_noncontact_event_observation_p01.py for R179. Passing verifies seven exact logical conductor locations, one exact current-probe evaluation candidate, five source records, twelve open holds, nine unexecuted E2 comparison steps, zero electrical field taps and zero safety credit. It does not prove as-built wire identity, jaw fit, compatible-host selection, simultaneity, calibration, thresholds, source/motion witnesses, noninterference, timing uncertainty or permission to perform a powered test.

Run python tools/generate_hr_v0_event_observation_correction_p01.py and python tools/check_hr_v0_event_observation_correction_p01.py for R180. Passing verifies that one false EDM-channel-independence assumption is superseded, both STOP and RESET/ARM plans allocate eight simultaneous channels, the MSO58B/TCP0030A/TIVP02 records remain evaluation-only, no diagnostic load or connection is released and zero physical tests or safety credit exist. It does not prove probe-power compatibility, diagnostic-contact application, as-built identity, motion/source sensing, noninterference, thresholds, uncertainty or work authority.

Run python tools/generate_hr_v0_dynamic_trace_analysis_p02.py and python tools/check_hr_v0_dynamic_trace_analysis_p02.py for R181. Passing verifies two distinct eight-channel disconnected-load E2 trace schemas, nine fail-closed rules, six synthetic algorithm fixtures, one common series-EDM channel, two zero-credit diagnostic auxiliaries, control-source-valid/no-motion enforcement, unresolved physical configuration rejection and zero executed physical runs. It does not prove any physical threshold, calibration, probe compatibility, diagnostic load, powered-motion stopping result, reset behavior or work authority.

Run python tools/generate_hr_v0_e2_acquisition_compatibility_p01.py and python tools/check_hr_v0_e2_acquisition_compatibility_p01.py for R182. Passing verifies a balanced eight-channel candidate population of four TCP0030A and four TIVP02/TIVPMX10X probes at 35.8 W per MSO58B bank and 71.6 W total, plus the exact Banner Q4XFULAF110-Q8 E2 displacement-witness candidate, six current primary-source records, fifteen open holds, zero physical compatibility runs and zero safety credit. It does not release the host configuration, cable, supply, diagnostic loads, test points, mount, target, thresholds, connection, physical test or powered-motion stopping architecture.

Run python tools/generate_hr_v0_q4x_interface_p01.py and python tools/check_hr_v0_q4x_interface_p01.py for R183. Passing verifies the exact Banner sensor, 2 m shielded cordset and pan/tilt bracket candidates; the exact Keithley isolated-supply-channel and Tektronix probe candidates; eight unreleased pin rows; six held domain boundaries; ten unexecuted calibration steps; seven current primary-source records; fourteen open holds; zero released connections/protection devices; zero robot-baseline changes; and zero safety credit. It does not select protection, terminals, enclosure, current limit, shield treatment, target, support geometry, configuration, threshold, physical evidence or work authority.

Run python tools/generate_hr_v0_q4x_box_p01.py and python tools/check_hr_v0_q4x_box_p01.py for R184. Passing verifies root plus two connected native KiCad sheets at ERC 0/0; nineteen candidate-BOM rows; fourteen current primary-source records; exact protection, terminal, enclosure, panel, gland, lock-nut, ferrule/tool and cable identities; eleven unreleased connection rows; explicit drain/remote parking; fourteen open holds; and zero procurement, fabrication, connection, powered-run or safety authority. It does not release the source current limit, exact cable procurement form/length, drilling coordinates, crimp/termination process, isolation/grounding, closed-box thermal behavior, analog fixture, calibration, physical execution or qualified review.

Run python tools/generate_hr_v0_q4x_box_layout_p01.py, the controlled CadQuery cad/hr-v0-q4x-box-layout-p0.1/build.py, and python tools/check_hr_v0_q4x_box_layout_p01.py for R185. Passing verifies the corrected 174.498 x 222.250 x 3.175 mm panel geometry, four catalog hole coordinates, centered 150.000 mm rail envelope, 60.800 mm device-width arithmetic, two interactive SVGs, proxy STEP/STL, twelve open holds and zero released drill holes. It does not select rail hardware, bore diameter, G1/G2 coordinates, torque, finished rating, physical assembly or work authority.

Run python tools/generate_hr_v0_q4x_installation_evidence_p01.py and python tools/check_hr_v0_q4x_installation_evidence_p01.py for R186. Passing verifies twelve source-bounded installation rows, LAPP's 1.5 N m M12 installation/cap-nut baseline, the blank separate locknut-torque certificate field, ten exact but unauthorized receiving lines, ten unexecuted metrology steps, eleven open holds and zero released holes. It does not define a through-bore, coordinates, rail hardware, modified-enclosure rating, purchase, physical work or energization authority.

Run python tools/generate_hr_v0_q4x_unpowered_acquisition_p01.py and python tools/check_hr_v0_q4x_unpowered_acquisition_p01.py for R187. Passing verifies parity with all ten R186 receiving lines, two separately decidable unpowered lots, eighteen needed evidence articles, 21 seller units including three quarantined spare locknuts, ten dated commercial-source records, a $211.30 fit-lot snapshot, a $22.83 PTCB-lot snapshot and a $234.13 combined subtotal before shipping, sales tax, fees and price movement. It does not create a cart, purchase decision, order, received part, measurement, drilling, fabrication, connection, powered test, motion or energization authority.

Run python tools/generate_hr_v0_q4x_quote_readiness_p01.py and python tools/check_hr_v0_q4x_quote_readiness_p01.py for R188. Passing verifies two direct DigiKey product-line records, exact seller codes 14F0907-ND and 277-1464484-ND, the corrected $211.63 fit-lot / $22.83 PTCB / $234.46 combined snapshots, and one explicit zero-stock PTCB hold. It does not prove delivery, landed cost, purchase authority, physical evidence, work authority or energization readiness.

Run python tools/generate_hr_v0_checkout_eol_contract.py only when deliberately changing the controlled checkout-byte contract, then run python tools/check_hr_v0_clean_clone_audit_p01.py for R189. The recorded external clone of commit 221035ed307f4e3501abad82cf7afa42f6e7cc36 passed 145/145 checkers under Windows with core.autocrlf=true and remained clean. This is reproducibility evidence only; EG-002 remains partial and no physical or energization gate closes.

Run python tools/generate_hr_v0_xc330_gripper_feasibility_p01.py with the controlled CadQuery interpreter and python tools/check_hr_v0_xc330_gripper_feasibility_p01.py for R190. Passing verifies the exact official XC330 STEP hash and 15-solid parse, nine native custom part pairs, three mechanism poses, nominal 38-74 mm padded range, 673.774625 g incomplete feasibility subtotal, 76.225375 g shared incomplete headroom and fifteen open holds. It does not select the branch, release a gripper, close mass or force, or authorize procurement, fabrication, connection, powered test, motion or energization.

Run python tools/generate_hr_v0_xc330_gripper_interface_p02.py with the controlled CadQuery interpreter and python tools/check_hr_v0_xc330_gripper_interface_p02.py for R191. Passing verifies all four official XC330/FPX330 source hashes, the 15-solid actuator and one-solid frame imports, exact nominal two-frame registration, seven native custom part pairs, three assembly poses, the module 0.8 / 20-tooth / 20-degree involute arithmetic, the 38-74 mm nominal padded range, 679.124713 g incomplete subtotal, 70.875287 g incomplete headroom and sixteen open holds. It does not select the branch, release a tolerance, fastener, print process, guard, gripper or electrical change, or authorize procurement, fabrication, connection, powered test, motion or energization.

Run python tools/generate_hr_v0_xc330_wrist_integration_p01.py with the controlled CadQuery interpreter and python tools/check_hr_v0_xc330_wrist_integration_p01.py for R192. Passing verifies the exact H104 source hashes and one-solid parse, the H104/gripper/world transform chain, two native bridge pairs, twelve represented hole axes, seven nominal contact records, 399 endpoint-aligned 5-degree joint samples, 688.961224 g incomplete subtotal, 61.038776 g incomplete headroom and eighteen open holds. It does not select XC330, disposition GRIP-002, prove continuous/physical clearance or strength, release a bridge/fastener/cable/guard, or authorize procurement, fabrication, connection, powered test, motion or energization. Run python tools/check_hr_v0_gripper_cad_source_correction_p02.py for R193. Passing verifies six current source states, six unique public Onshape element identities, three fail-closed branch decisions, twelve open holds and zero EG-003/005/028 closure. It does not turn the mutable Main workspace into a manufacturing release, export a file, select a gripper, permit XC330 connection to the current rail, or authorize procurement, fabrication, assembly, connection, powered testing, motion or energization.

Run python tools/check_hr_v0_boston_site_p02.py for R194. Passing verifies eight controlled jurisdiction/program records, eight current source records, six site-role dispositions, twenty deliberately blank premises inputs, eight open holds and zero EG-001/022 closure. It does not select a premises, determine legal applicability, qualify a fabrication provider, approve a branch/receptacle, or authorize connection, powered testing, motion or energization.

Run python tools/check_hr_v0_control_panel.py to cross-check the R64 25-row panel BOM, nominal allocations, exact XT1 mapping, all 66 bounded V3 wire endpoints, one fail-closed SD1 sidewall option, unreleased physical-wire fields, cable-entry holds, thermal/space screens, readable SVG warning content and twenty-two unexecuted panel records. Run python tools/check_hr_v0_service_disconnect.py to prove the exact 75920-01 catalog candidate remains application-held, all 15 SD1 rows remain unexecuted, and no cutout, conductor, lockout procedure or wiring release exists. Passing either checker releases no drilling, cutting, wiring, assembly, PCB fabrication, or energization work.

Run python tools/check_hr_v0_fabrication_rfi_packets.py to verify that every obsolete P0.1 supplier packet remains withdrawn and that zero ZIPs are active. The

Parts

46
QtyValueFootprintReferences
16Harwin S1751-46R SMT test pointHarwin_S1751_46RTP1, TP2, TP3, TP4, TP5, TP6, TP7, TP8, TP9, TP10, TP11, TP12, TP13, TP14, TP15, TP16
4M3 BOARD-ONLY - MOUNTING/ENCLOSURE SELECTION OPENMountingHole_3.2mm_M3MH1, MH2, MH3, MH4
3Murata GRM21BR71H104KA01L, 100 nF 50 V X7R 0805Murata_GRM21_Reflow_NominalCDEC1, CDRV1, CDRV2
2Panasonic ERJ6ENF1001V, 1.00 kOhm 1% 0805Panasonic_ERJ6_Reflow_NominalRSO1, RSO2
2Panasonic ERJ6ENF1002V, 10.0 kOhm 1% 0805Panasonic_ERJ6_Reflow_NominalRPD1, RPD2
2Panasonic ERJ6ENF5620V, 562 Ohm 1% 0805Panasonic_ERJ6_Reflow_NominalRSN1, RSN2
2Phoenix Contact MKDS 1/2-3,5, item 1751248MKDS_1_2_3P5JWF1, JWH1
2TDK CGA3E2X7R1H103K080AA, 10 nF 50 V X7R 0603TDK_CGA3_Reflow_NominalCFI1, CFI2
2Vishay CRCW12102K70FKEA, 2.70 kOhm 1% 0.5 W 1210Vishay_CRCW1210_ReflowRW1, RW2
2Vishay MMA02040C1001FB300, 1.00 kOhm 1% 0.4 W MELFVishay_MMA0204_IPC_ReflowRTH1, RTH2
1Panasonic ERJ6ENF1002V, 10.0 kOhm 1% 0805 0.125 WPanasonic_ERJ6_Reflow_NominalRHP1
1Panasonic ERJ6ENF9100V, 910 Ohm 1% 0805 0.125 WPanasonic_ERJ6_Reflow_NominalRHB1
1Phoenix Contact MKDS 1/4-3,5, item 1751264MKDS_1_4_3P5JWP1
1Raspberry Pi Pico 1, order SC0915 / RP2040RaspberryPi_Pico_SMDWDCTRL1
1TRACO POWER TSR 1-2450, 24 V to 5 V 1 A non-isolatedConverter_DCDC_TRACO_TSR-1_THTDC1
1Texas Instruments ISO1212DBQ dual 24 V input receiverTI_DBQ0016A_Example_LandUFB1
1Texas Instruments TPL7407LPWR channel-1 relay driverTI_PW0016A_Example_LandUDRV1
1Texas Instruments TPL7407LPWR channel-2 relay driverTI_PW0016A_Example_LandUDRV2
1Vishay VO618A-4X017T heartbeat optocouplerVO618A_Option7_SMDISO1

Questions

How big is the Project button v3 PCB?

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

What parts does the Project button v3 use?

46 parts. 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 Project button v3 KiCad files?

From the amyleesterling/humanoid-robot repository on GitHub, at the commit this page was made from: the board is electrical/kicad/project-button-v3/project-button-v3.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.

Can I use the Project button v3 design in my own project?

Its repository states no licence, so its author keeps all rights: ask amyleesterling before reusing the design.

More from amyleesterling/humanoid-robot

12

Similar boards

  • 2 layers83.3 × 65.3 mmSimonShield, the printed circuit board in 3D

    SimonShield

    github-linguist/linguist

    Language Savant. If your repository's language is being reported incorrectly, send us a pull request!

    46 parts14kMIT
  • 2 layers27.8 × 22.3 mmAudio, the printed circuit board in 3D

    Audio

    byrantech/laptop

    anyon_e, a highly integrated, high end, open source laptop. Attempt the impossible.

    46 parts4.3kMIT
  • 2 layers370 × 11 mmDaylight XXL, the printed circuit board in 3D

    Daylight XXL

    VoronDesign/Voron-Hardware

    Cool Hardware designed by the Voron Design group

    46 parts1.1kGPL-3.0
  • 2 layers87.5 × 50 mmMesabob, the printed circuit board in 3D

    Mesabob

    rene-dev/stmbl

    AC Servo Driver for STM32F4

    46 parts990GPL-3.0
  • 2 layers38.8 × 62.5 mmESPAudio, the printed circuit board in 3D

    ESPAudio

    hackclub/OnBoard

    💡 Join 1,000 teenagers and make your first PCB with a $100 grant!

    46 parts915
  • 2 layers53.2 × 24.8 mmPicoLink, the printed circuit board in 3D

    PicoLink

    ErichStyger/mcuoneclipse

    McuOnEclipse projects and examples

    46 parts765
  • 2 layers23 × 29 mmESP32-epaper adapter, the printed circuit board in 3D

    ESP32-epaper adapter

    pcbreflux/espressif

    all espressif stuff will committed here

    46 parts608GPL-3.0
  • 2 layers25.5 × 73.5 mmTERES PCB2-IO Rev.B, the printed circuit board in 3D

    TERES PCB2-IO Rev.B

    OLIMEX/DIY-LAPTOP

    Do It Yourself Open Source Hardware and Software Modular Hacker's Friendly Laptop

    46 parts578Apache-2.0