Skip to the content
PCBKitNew board
2 layers100 × 100 mmUlva controller, the printed circuit board in 3D

Ulva controller

ivere27/ulva

controller board for robotics and agriculture

Size
100 × 100 mm
Copper layers
2
Thickness
1.6 mm
Parts
106
Nets
81
Pads
311
Tracks, vias
590, 114
Pours
9
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
21 Oct 2026
Updated
23 Oct 2026

Overview

Ulva controller is an open-source printed circuit board by ivere27, from the ivere27/ulva repository on GitHub, published under the MIT licence. It is a 2-layer board of 100 × 100 mm with 106 parts on 81 nets, routed with 590 tracks and 114 vias.

It is built around the TPT1334-SO1R, SY8301ABC and LTV-817S-TA1-C, with the CC0603KRX7R9BB104, CL31B225KBHNNNE and TS-1187A-B-A-B among its other parts. Its parts include 30 resistors, 27 connectors, 15 capacitors, 7 diodes and 5 switches. It belongs with the robots and motor control boards of this library.

Main components

12

README

README.md

Ulva

An open-source ESP32-C5 controller board for robotics and controlled-environment agriculture (CEA).

The repository contains a 100 × 100 mm, two-layer carrier PCB, eight KiCad schematic sheets, project libraries and an ESP-IDF button-input example. The current board revision is v0.42.

  • Two CAN FD interfaces with fused 24 V control-power outputs.
  • 24 V DC input and an onboard 5 V supply.
  • Two I²C buses, peripheral connections and OpenSprinkler-compatible AC/DC expansion.
  • OLED, RTC, DHT20, 433 MHz receiver and passive piezo connections.
  • Three ADC buttons, a two-switch configuration input and voltage monitoring.

This is a prototype. Full controller firmware and physical validation remain unfinished. See the hardware reference for pin assignments, power limits and wiring.

Board views

CAD renders of the current board:

FrontBack
Ulva frontUlva back
Routing3D assembly
Ulva routingUlva 3D assembly

Interactive board viewer · HTML source

Switch between the Routing, 3D, Schematic and Orders tabs. Routing lets you select traces, vias or pads to highlight a net, search components, switch copper layers, zoom and save a selection image. Ground pours are omitted; both layers use front-view coordinates. Schematic provides a thumbnail sidebar for all eight sheets, with zoom, pan and a PDF download. Orders lets you select JLCPCB assembly or loose LCSC parts and download supplier files; see the order workflow.

For offline use, keep the complete docs/ directory and open docs/index.html directly in a browser. In Routing, choose routing/board.svg when prompted. In 3D, choose 3d/assembly.json and 3d/board.glb together. A local server is optional; the browser needs explicit file selection to read these data files from disk. Schematic images, the PDF and Orders open directly without a file picker.

Version details shows the board revision, an Export base commit and source/export SHA-256 hashes. Export base records Git HEAD when the metadata was generated. Each view retains its own recorded source hashes, so older exports can be distinguished from the current sources.

3D assembly

Open the 3D tab · Export and usage guide

Rotate, zoom and pan the assembly, or show and hide individual components and modules. Visibility controls affect the view only. Some component shapes and module mounting heights are illustrative; the KiCad board remains authoritative.

Open the project

Open ulva_controller.kicad_pro in KiCad 9 with its standard symbol and footprint libraries installed. The included project libraries use relative paths.

PathContents
ulva_*.kicad_*Schematics, PCB, project settings and design rules
Ulva.kicad_sym, Ulva.pretty/Project symbols and footprints
Ulva.3dshapes/Original terminal-block visualization models
docs/hardware.mdHardware and pinout reference
docs/bom.mdParts and assembly ownership
docs/3d.md3D viewer, export and model limitations
tools/JLCPCB and LCSC order preparation and unit tests
scripts/KiCad DRC/ERC validation, SPICE simulation and export runner
firmware/buttons_adc/Button example, host unit tests, build and integration instructions
artwork/ulva-icon.svgBoard icon

Verification

Use Python 3.10 or later. Button tests need CMake and a C compiler. CAD checks use KiCad 9's kicad-cli and pcbnew module in the same Python environment, plus ngspice for analog checks. Without native KiCad, the runner uses Docker with the pinned kicad/kicad:9.0.9 image.

From the repository root, install the rendering dependencies needed for PCB, Gerber and board-documentation checks, then run the relevant checks:

sh
python3 -m pip install --target build/preview-python \
  gerbonara==1.5.0 resvg-py==0.2.6
python3 -m unittest discover -s tools
python3 scripts/run_checks.py buttons
python3 scripts/run_checks.py schematic
python3 scripts/run_checks.py pcb

The runner checks a disposable snapshot and writes logs and receipts under ignored build/runs/. Use the runner rather than invoking its export helpers directly. Automated checks do not replace physical hardware validation.

When board images or the routing viewer need regeneration:

sh
python3 scripts/run_checks.py board-docs
# After reviewing the generated assets, update the images and routing viewer:
python3 scripts/run_checks.py board-docs --update-docs

To regenerate the schematic pages and PDF, use Python 3.10 or later and KiCad 9's kicad-cli. Review the output in build/schematic-docs/, then publish it:

sh
python3 scripts/export_schematic_docs.py
python3 scripts/export_schematic_docs.py --update-docs

After updating public viewer assets, refresh their version metadata. This reads the existing files; regenerate any affected view first:

sh
python3 scripts/export_viewer_info.py

License

Original Ulva design files, firmware, documentation and artwork are released under the MIT License. Upstream library data and dependencies retain their own licenses; see third-party notices.

Parts

106
QtyValueFootprintReferences
1010kResistor_SMD:R_0603_1608MetricR8, R12, R14, R15, R19, R23, R25, R27, R30, R32
6100nFCapacitor_SMD:C_0603_1608MetricC1, C10, C12, C13, C15, C16
61kResistor_SMD:R_0603_1608MetricR5, R6, R11, R17, R26, R33
6DRIVER COMTerminalBlock_MetzConnect:TerminalBlock_MetzConnect_360272_1x01_Horizontal_ScrewM2.6J18, J19, J20, J21, J22, J23
54.7kResistor_SMD:R_0603_1608MetricR1, R2, R3, R4, R13
42.2uF / 50VCapacitor_SMD:C_1206_3216MetricC3, C4, C8, C9
4AC2_INTerminalBlock_MetzConnect:TerminalBlock_MetzConnect_360272_1x01_Horizontal_ScrewM2.6J13, J14, J16, J17
4M3 NPTHMountingHole:MountingHole_3.2mm_M3H1, H2, H3, H4
4OLED M2 SLOTUlva:MountingSlot_4.0x2.7mm_M2_OLEDH5, H6, H7, H8
3TS-1187A-B-A-BUlva:SW_XKB_TS-1187A_5.1x5.1mmSW2, SW3, SW4
21.5A fastUlva:Fuse_Littelfuse_467_0603F2, F3
2120Resistor_SMD:R_1206_3216MetricR24, R29
21uFCapacitor_SMD:C_0603_1608MetricC11, C14
247uF / 10VCapacitor_SMD:C_1206_3216MetricC6, C7
2AO3400APackage_TO_SOT_SMD:SOT-23Q1, Q2
2PESD2CANFD24V-TRPackage_TO_SOT_SMD:SOT-23D5, D6
2TERM ONJumper:SolderJumper-2_P1.3mm_Bridged_Pad1.0x1.5mmJP1, JP2
2TPT1334-SO1RPackage_SO:SOIC-8_3.9x4.9mm_P1.27mmU3, U4
2XT30PW(2+2)-M.G.BUlva:AMASS_XT30PW_2plus2_M_HorizontalJ26, J27
1100nF / 50VCapacitor_SMD:C_0603_1608MetricC5
1150kResistor_SMD:R_0603_1608MetricR31
11N4148WDiode_SMD:D_SOD-123D3
12.2kResistor_SMD:R_0603_1608MetricR16
12.7kResistor_SMD:R_0603_1608MetricR22
1206-2STButton_Switch_THT:SW_DIP_SPSTx02_Slide_9.78x7.26mm_W7.62mm_P2.54mmSW1
120kResistor_SMD:R_0603_1608MetricR28
124V - INTerminalBlock_MetzConnect:TerminalBlock_MetzConnect_360272_1x01_Horizontal_ScrewM2.6J25
124V DC +TerminalBlock_MetzConnect:TerminalBlock_MetzConnect_360272_1x01_Horizontal_ScrewM2.6J24
124VAC / I2C0TerminalBlock_MetzConnect:TerminalBlock_MetzConnect_360272_1x01_Horizontal_ScrewM2.6J15
124VAC / I2C1 (HP)TerminalBlock_MetzConnect:TerminalBlock_MetzConnect_360272_1x01_Horizontal_ScrewM2.6J12
1330Resistor_SMD:R_0603_1608MetricR18
14.7uHUlva:L_Sunlord_SWPA6045_6x6mmL1
1433MHZ_SPRINGTestPoint:TestPoint_THTPad_D2.0mm_Drill1.0mmAE1
147kResistor_SMD:R_0603_1608MetricR20
151kResistor_SMD:R_0603_1608MetricR21
1BAT54SPackage_TO_SOT_SMD:SOT-23D7
1BZX84C8V2Package_TO_SOT_SMD:SOT-23D2
1C5 v1.2 PSRAM / J1 LEFTUlva:Samtec_SSW-116-01-G-S_1x16_P2.54mmJ6
1C5 v1.2 PSRAM / J3 RIGHTUlva:Samtec_SSW-116-01-G-S_1x16_P2.54mmJ7
1DHT20_LP_I2CUlva:Samtec_SSW-104-01-G-S_1x04_P2.54mmJ1
1DS3231_RTC_SOCKETUlva:Samtec_SSW-105-01-G-S_1x05_P2.54mmJ2
1EXP0 AC ONLYUlva:ZHOURI_DC3-2.54-10PAS_IDC_2x05_P2.54mmJ8
1EXP0 DC ONLYUlva:ZHOURI_DC3-2.54-10PAS_IDC_2x05_P2.54mmJ10
1EXP1 AC ONLYUlva:ZHOURI_DC3-2.54-10PAS_IDC_2x05_P2.54mmJ9
1EXP1 DC ONLYUlva:ZHOURI_DC3-2.54-10PAS_IDC_2x05_P2.54mmJ11
1GNDTestPoint:TestPoint_Pad_D1.5mmTP2
1HF46F/5-HS1Ulva:Relay_SPST_Hongfa_HF46F_HS1K1
1LTV-817S-TA1-CPackage_DIP:SMDIP-4_W9.53mmU1
1OLED 0.96 SSD1306 I2CUlva:Samtec_SSW-104-01-G-S_1x04_P2.54mmJ3
1PASSIVE PIEZO 1+ / 4-Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_VerticalJ5
1POWER_0V-GND bondNetTie:NetTie-2_SMD_Pad2.0mmNT1
1SS34Diode_SMD:D_SMAD4
1SY8301ABCPackage_TO_SOT_SMD:SOT-23-6_HandsolderingU2
1SYN480R_RXUlva:Samtec_SSW-104-01-G-S_1x04_P2.54mmJ4
1ZONE_ENABLE GREENLED_SMD:LED_0805_2012MetricD1

Questions

How big is the Ulva controller PCB?

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

What parts does the Ulva controller use?

106 parts, built around the TPT1334-SO1R, SY8301ABC, LTV-817S-TA1-C and CC0603KRX7R9BB104. 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 Ulva controller KiCad files?

From the ivere27/ulva repository on GitHub, at the commit this page was made from: the board is ulva_controller.kicad_pcb and its schematic ulva_can.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Ulva controller 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).

Similar boards

  • 2 layers65 × 56 mmKgiu, the printed circuit board in 3D

    Kgiu

    goruck/all

    Alexa Lambda Linux (ALL) Reference Design - IoT and ML at the edge.

    24 parts62
  • 4 layers103.7 × 93 mmBox carrier modules r2, the printed circuit board in 3D

    Box carrier modules r2

    phyreact/reactor

    Robots that help AI sense and interact with the physical world.

    61 parts
  • 4 layers64 × 56 mmAlec sensor, the printed circuit board in 3D

    Alec sensor

    eshelton328/forge

    Hardware design monorepo with software-grade CI/CD. KiCad PCB projects with automated ERC/DRC, multi-fab rule validation, schematic & BOM checks, and auto-generated board documentation.

    100 parts
  • 2 layers350 × 70 mmDisplays a, the printed circuit board in 3D

    Displays a

    JuanPoueriet/automatic-spork

    Máquina de ruleta física de casino. 6 PCBs: pic32main (cerebro), wheel (rueda de LEDs), displaysa/b/c (paneles de 7 segmentos en cascada) y buttons (botonera).

    31 parts
  • 2 layers27.2 × 91.6 mmFan controller, the printed circuit board in 3D

    Fan controller

    JXNCTED/fan_controller

    33 parts1
  • 4 layers21 × 51 mmCh32-pico, the printed circuit board in 3D

    Ch32-pico

    fcjr/ch32-pico

    ch32 > rpi2040

    55 parts
  • 2 layers88 × 130 mmWindowmaster controller v2, the printed circuit board in 3D

    Windowmaster controller v2

    Simplycissmus/windowmaster-s3-controller

    Open hardware and ESP32-S3 firmware for a local 24 V window actuator controller with MQTT and Home Assistant integration.

    68 parts1
  • 2 layers68.2 × 52.2 mmForward Ignition PCB, the printed circuit board in 3D

    Forward Ignition PCB

    aditgoyal5/Forward_Ignition_PCB

    This repository is about a printed circuit board I built for Team Sammard.

    135 parts