Skip to the content
4 layers32 × 55 mmFuruta pendulum, the printed circuit board in 3D

A Furuta (rotary inverted) pendulum system controlled by a neural network running on a custom PCB.

Size
32 × 55 mm
Copper layers
4
Thickness
1.6 mm
Parts
67
Nets
81
Pads
247
Tracks, vias
4, 0
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
24 May 2026
Updated
15 Jul 2026

Overview

Furuta pendulum is an open-source printed circuit board by MHVandborg, from the MHVandborg/furuta_pendulum repository on GitHub. It is a 4-layer board of 32 × 55 mm with 67 parts on 81 nets, routed with 4 tracks and 0 vias.

It is built around the ATSAMD51J20A-AU, DRV8313PWP and AMS1117-3.3, with the USBLC6-2SC6, GZ2012D601TF and TS-1088-AR02016 among its other parts. Its parts include 18 capacitors, 17 resistors, 6 diodes, 5 connectors and 3 ICs. It belongs with the SAM D and SAM boards of this library.

Main components

9

README

README.md

Furuta Pendulum

A Furuta (rotary inverted) pendulum system controlled by a neural network running on a custom PCB.

The system consists of a horizontal rotating arm driven by a BLDC motor, with a freely swinging pendulum attached at the end. The neural network controller learns to swing up and balance the pendulum using reinforcement learning trained in a physics simulation, then deployed directly onto the MCU.

End Goal — Double Furuta Pendulum

The ultimate goal is a double Furuta pendulum: motorised arm → first free pendulum → second free pendulum, all balanced simultaneously in the inverted position by a single neural network. The current hardware (PCB rev1) targets the single pendulum first as a validated stepping stone. Double Furuta requires a PCB rev2 with a third encoder.


Control Architecture

Single Furuta (PCB rev1 — current)

text
[AS5600 arm]  [AS5600 pendulum 1]
      |               |
      +-------+-------+
              |
        [Neural Network]  MLP 2×64, trained with PPO
        inputs:  θ_arm, θ_p1, ω_arm, ω_p1
        output:  torque_command (−1…+1)
              |
        [SimpleFOC / DRV8313]
              |
        [GBM2804H-100T BLDC]

Double Furuta (PCB rev2 — future)

text
[AS5600 arm]  [AS5600 pendulum 1]  [AS5600 pendulum 2]
      |               |                    |
      +-----------+---+--------------------+
                  |
            [Neural Network]  MLP 2×64 (extended inputs), trained with SAC
            inputs:  θ_arm, θ_p1, θ_p2, ω_arm, ω_p1, ω_p2
            output:  torque_command (−1…+1)
                  |
            [SimpleFOC / DRV8313]
                  |
            [GBM2804H-100T BLDC]

A single NN handles both swing-up and balancing via curriculum learning — it trains near vertical first, then faces progressively larger starting angles.


Repository Structure

text
furuta_pendulum/
├── firmware/          # Bare-metal C (ARM GCC, CMake) → firmware/README.md
├── hardware/
│   ├── pcb/           # KiCad schematic + layout → hardware/pcb/COMPONENTS.md
│   └── mechanical/    # Fusion 360 3D design files
├── neural_network/    # RL training + Gymnasium env + exported weights → neural_network/README.md
├── bootloader/        # UF2 bootloader binary for ATSAMD51J20A
└── docs/              # Datasheets and reference documents

Toolchain

AreaTools
FirmwareARM GCC, CMake, VS Code, Atmel-ICE + Tag-Connect TC2030 (SWD), UF2 bootloader
ML / TrainingPython, TensorFlow / Keras, Gymnasium, PPO → SAC
Inference on MCUTensorFlow Lite Micro (TFLM)
MechanicalFusion 360, PLA (FDM)
PCBKiCad

PCB Revision History

RevTagDateNotes
1hw-rev12026-06-07First production run — JLCPCB. Single Furuta (2 encoders)
2(planned)TBDAdd AS5600 #3 + third I2C bus for double Furuta

Further Reading

DocumentContents
ROADMAP.mdFull phased development plan with checklists
hardware/pcb/COMPONENTS.mdComponent choices, rationale, and PCB design decisions
firmware/README.mdFirmware architecture, build instructions, peripheral map
neural_network/README.mdRL training approach, simulation, reward design, export pipeline

Contact

If you use or build on this project, I'd love to hear about it! Feel free to open an issue or reach out directly.

Parts

67
QtyValueFootprintReferences
9100nCapacitor_SMD:C_0402_1005MetricC8, C15, C16, C18, C22, C23, C24, C27, C28
810uCapacitor_SMD:C_0805_2012MetricC9, C10, C12, C13, C19, C20, C21, C26
44.7kResistor_SMD:R_0402_1005MetricR22, R23, R24, R25
4M2MountingHole:MountingHole_2.2mm_M2H1, H2, H3, H4
4TestPointTestPoint:TestPoint_Pad_D1.5mmTP1, TP4, TP5, TP6
310kResistor_SMD:R_0402_1005MetricR11, R19, R26
3FiducialFiducial:Fiducial_1mm_Mask2mmFID1, FID2, FID3
21kResistor_SMD:R_0402_1005MetricR15, R17
22kResistor_SMD:R_0402_1005MetricR14, R16
233Resistor_SMD:R_0402_1005MetricR1, R2
2330Resistor_SMD:R_0402_1005MetricR13, R18
25.1kResistor_SMD:R_0402_1005MetricR3, R4
2GREENLED_SMD:LED_0805_2012MetricD3, D4
2GZ2012D601TFInductor_SMD:L_0805_2012MetricFB2, FB5
2TS-1088-AR02016furuta_pendulum:SW_TS-1088-AR02016BTN1, RESET1
110uInductor_SMD:L_0603_1608MetricL1
14.7uCapacitor_SMD:C_0603_1608MetricC17
1AMS1117-3.3Package_TO_SOT_SMD:SOT-223-3_TabPin2U1
1ATSAMD51J20A-APackage_QFP:TQFP-64_10x10mm_P0.5mmU7
1BLM18PG121SN1DInductor_SMD:L_0603_1608MetricFB3
1Conn_ARM_SWD_TagConnect_TC2030Connector:Tag-Connect_TC2030-IDC-FP_2x03_P1.27mm_VerticalJ5
1DRV8313Connector_PinHeader_2.54mm:PinHeader_2x07_P2.54mm_VerticalJ3
1EncodersConnector_PinHeader_2.54mm:PinHeader_1x06_P2.54mm_VerticalJ7
1GZ2012D101TFInductor_SMD:L_0805_2012MetricFB4
1LCD_ST7735SConnector_PinHeader_2.54mm:PinHeader_1x07_P2.54mm_VerticalJ2
1REDLED_SMD:LED_0603_1608MetricD5
1SMBJ12ADiode_SMD:D_SMBD2
1SMBJ5.0ADiode_SMD:D_SMBD1
1USBLC6-2SC6Package_TO_SOT_SMD:SOT-23-6U3
1USB_C_Receptacle_USB2.0_14PConnector_USB:USB_C_Receptacle_HRO_TYPE-C-31-M-12J8
1YELLOWLED_SMD:LED_0805_2012MetricD6

Similar boards

  • 2 layers159.9 × 47.5 mmLVP G0S4, the printed circuit board in 3D

    LVP G0S4

    Omar-Magdy0/ForgeDriveHW

    ForgeDrive is an open-source research and development platform for modular, scalable, and industrial-inspired systems.

    69 partsMIT
  • 4 layers228 × 115.4 mmOcxPrototype, the printed circuit board in 3D

    OcxPrototype

    ocxpke/ocx

    Open Computer Experience

    126 partsCERN-OHL-S-2.0
  • 4 layers50 × 50 mmSTMF103C8T6 Dev Board, the printed circuit board in 3D

    STMF103C8T6 Dev Board

    hackclub/OnBoard

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

    52 parts915
  • 4 layers252 × 92 mmCooksense, the printed circuit board in 3D

    Cooksense

    misko/prompt2device

    The separate vNext PCB skill and orchestrator package is available alongside the reference workflow below; existing projects keep their accepted toolchain until an explicit migration.

    195 parts3MIT
  • 6 layers90 × 89 mmModular processing board, the printed circuit board in 3D

    Modular processing board

    igorwolfs/modular-processing-hw

    MCU Breakout board with Hirose BM28B connector

    177 parts1
  • 6 layers133.1 × 133.1 mmAERIS H743-PCB, the printed circuit board in 3D

    AERIS H743-PCB

    7903555032/AERIS-H743-PCB

    A 6-layer STM32H743-based embedded development and flight-control/data-logging PCB designed as a practical hardware-design and PCB-layout project.

    114 parts1
  • 4 layers68.7 × 53 mmIcey, the printed circuit board in 3D

    Icey

    darshg321/Icey

    an Uno-sized FPGA iCE40-UP5K board for learning!

    113 parts6CERN-OHL-P-2.0
  • 2 layers95 × 50 mmGw v41-plus, the printed circuit board in 3D

    Gw v41-plus

    shachi-lab/greaseweazle-v41-plus

    Greaseweazle V4.1 based compatible board design for 3.5/5.25-inch FDDs

    87 parts4

Questions

How big is the Furuta pendulum PCB?

It measures 32 × 55 mm and has 4 copper layers, 1.6 mm thick.

What parts does the Furuta pendulum use?

67 parts, built around the ATSAMD51J20A-AU, DRV8313PWP, AMS1117-3.3 and USBLC6-2SC6. 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 Furuta pendulum KiCad files?

From the MHVandborg/furuta_pendulum repository on GitHub, at the commit this page was made from: the board is hardware/pcb/furuta_pendulum.kicad_pcb and its schematic hardware/pcb/furuta_pendulum.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Furuta pendulum design in my own project?

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