

Ulva controller
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
12TPT1334-SO1R
SOP-8-40℃~+125℃ 1mA 3V~3.6V 5Mbps CAN FD Transceiver SOP-8 CAN Transceivers ROHS3PEAKCAN TransceiversSY8301ABC
SOT-23-6-40℃~+85℃@(TA) 1 1.6MHz~2.4MHz 1A 22uA 4.5V~40V Adjustable Buck Buck Built-in Yes SOT-23-6 DC-DC Converters ROHSSilergy CorpDC-DC ConvertersLTV-817S-TA1-C
SMD-4P-30℃~+110℃ 1 1.2V 100mV@1mA,20mA 35V 3us 4us@2mA,100Ω 50% 50mA 50mA 5kV 600% 6V DC Phototransistor SMD-4P Transistor, Photovoltaic Output Optoisolators ROHSLite-OnTransistor, Photovoltaic Output OptoisolatorsCC0603KRX7R9BB104
0603100nF 50V X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHSYAGEOMultilayer Ceramic Capacitors MLCC - SMD/SMTCL31B225KBHNNNE
12062.2uF 50V X7R ±10% 1206 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHSSamsung Electro-MechanicsMultilayer Ceramic Capacitors MLCC - SMD/SMTTS-1187A-B-A-B
SMD-4P,5.1x5.1mm-30℃~+85℃ 1.5mm 1.6N 100,000 cycles 12V 5.1mm 5.1mm 50mA Gold No Round Button SPST Surface Mount,Vertical Without Bracket SMD-4P,5.1x5.1mm Tactile Switches ROHSXKB ConnectionTactile Switches046701.5NRHF
0603-55℃~+90℃ 0.0766 0.8mm 1.5A 1.6mm 32V 35A、35A 65V Surface Mount Fuse 0603 Disposable fuses ROHSLittelfuseDisposable FusesCL31A476MPHNNNE
120610V 47uF X5R ±20% 1206 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHSSamsung Electro-MechanicsMultilayer Ceramic Capacitors MLCC - SMD/SMTAO3400A
SOT-23-55℃~+150℃ 1 N-channel 1.45V 1.4W 30V 48mΩ@2.5V 5.7A 50pF 630pF 75pF 7nC@10V N-Channel SOT-23 MOSFETs ROHSAlpha & Omega SemiconductorMOSFETsPESD2CANFD24V-TR
SOT-23SOT-23 ESD and Surge Protection (TVS/ESD) ROHSElecSuperUncategorisedXT30PW(2+2)-M.G.B
-- Power connector / plug connector ROHSChangzhou Amass ElecPlug1N4148W
SOD-123150mA 1A 1V@50mA 1uA@75V 400mW 4ns 75V Independent SOD-123 Switching Diodes ROHSSTMicroelectronicsSwitching Diodes
README
README.mdUlva
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:
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.
| Path | Contents |
|---|---|
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.md | Hardware and pinout reference |
| docs/bom.md | Parts and assembly ownership |
| docs/3d.md | 3D 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.svg | Board 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:
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 pcbThe 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:
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-docsTo 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:
python3 scripts/export_schematic_docs.py
python3 scripts/export_schematic_docs.py --update-docsAfter updating public viewer assets, refresh their version metadata. This reads the existing files; regenerate any affected view first:
python3 scripts/export_viewer_info.pyLicense
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| Qty | Value | Footprint | References |
|---|---|---|---|
| 10 | 10k | Resistor_SMD:R_0603_1608Metric | R8, R12, R14, R15, R19, R23, R25, R27, R30, R32 |
| 6 | 100nF | Capacitor_SMD:C_0603_1608Metric | C1, C10, C12, C13, C15, C16 |
| 6 | 1k | Resistor_SMD:R_0603_1608Metric | R5, R6, R11, R17, R26, R33 |
| 6 | DRIVER COM | TerminalBlock_MetzConnect:TerminalBlock_MetzConnect_360272_1x01_Horizontal_ScrewM2.6 | J18, J19, J20, J21, J22, J23 |
| 5 | 4.7k | Resistor_SMD:R_0603_1608Metric | R1, R2, R3, R4, R13 |
| 4 | 2.2uF / 50V | Capacitor_SMD:C_1206_3216Metric | C3, C4, C8, C9 |
| 4 | AC2_IN | TerminalBlock_MetzConnect:TerminalBlock_MetzConnect_360272_1x01_Horizontal_ScrewM2.6 | J13, J14, J16, J17 |
| 4 | M3 NPTH | MountingHole:MountingHole_3.2mm_M3 | H1, H2, H3, H4 |
| 4 | OLED M2 SLOT | Ulva:MountingSlot_4.0x2.7mm_M2_OLED | H5, H6, H7, H8 |
| 3 | TS-1187A-B-A-B | Ulva:SW_XKB_TS-1187A_5.1x5.1mm | SW2, SW3, SW4 |
| 2 | 1.5A fast | Ulva:Fuse_Littelfuse_467_0603 | F2, F3 |
| 2 | 120 | Resistor_SMD:R_1206_3216Metric | R24, R29 |
| 2 | 1uF | Capacitor_SMD:C_0603_1608Metric | C11, C14 |
| 2 | 47uF / 10V | Capacitor_SMD:C_1206_3216Metric | C6, C7 |
| 2 | AO3400A | Package_TO_SOT_SMD:SOT-23 | Q1, Q2 |
| 2 | PESD2CANFD24V-TR | Package_TO_SOT_SMD:SOT-23 | D5, D6 |
| 2 | TERM ON | Jumper:SolderJumper-2_P1.3mm_Bridged_Pad1.0x1.5mm | JP1, JP2 |
| 2 | TPT1334-SO1R | Package_SO:SOIC-8_3.9x4.9mm_P1.27mm | U3, U4 |
| 2 | XT30PW(2+2)-M.G.B | Ulva:AMASS_XT30PW_2plus2_M_Horizontal | J26, J27 |
| 1 | 100nF / 50V | Capacitor_SMD:C_0603_1608Metric | C5 |
| 1 | 150k | Resistor_SMD:R_0603_1608Metric | R31 |
| 1 | 1N4148W | Diode_SMD:D_SOD-123 | D3 |
| 1 | 2.2k | Resistor_SMD:R_0603_1608Metric | R16 |
| 1 | 2.7k | Resistor_SMD:R_0603_1608Metric | R22 |
| 1 | 206-2ST | Button_Switch_THT:SW_DIP_SPSTx02_Slide_9.78x7.26mm_W7.62mm_P2.54mm | SW1 |
| 1 | 20k | Resistor_SMD:R_0603_1608Metric | R28 |
| 1 | 24V - IN | TerminalBlock_MetzConnect:TerminalBlock_MetzConnect_360272_1x01_Horizontal_ScrewM2.6 | J25 |
| 1 | 24V DC + | TerminalBlock_MetzConnect:TerminalBlock_MetzConnect_360272_1x01_Horizontal_ScrewM2.6 | J24 |
| 1 | 24VAC / I2C0 | TerminalBlock_MetzConnect:TerminalBlock_MetzConnect_360272_1x01_Horizontal_ScrewM2.6 | J15 |
| 1 | 24VAC / I2C1 (HP) | TerminalBlock_MetzConnect:TerminalBlock_MetzConnect_360272_1x01_Horizontal_ScrewM2.6 | J12 |
| 1 | 330 | Resistor_SMD:R_0603_1608Metric | R18 |
| 1 | 4.7uH | Ulva:L_Sunlord_SWPA6045_6x6mm | L1 |
| 1 | 433MHZ_SPRING | TestPoint:TestPoint_THTPad_D2.0mm_Drill1.0mm | AE1 |
| 1 | 47k | Resistor_SMD:R_0603_1608Metric | R20 |
| 1 | 51k | Resistor_SMD:R_0603_1608Metric | R21 |
| 1 | BAT54S | Package_TO_SOT_SMD:SOT-23 | D7 |
| 1 | BZX84C8V2 | Package_TO_SOT_SMD:SOT-23 | D2 |
| 1 | C5 v1.2 PSRAM / J1 LEFT | Ulva:Samtec_SSW-116-01-G-S_1x16_P2.54mm | J6 |
| 1 | C5 v1.2 PSRAM / J3 RIGHT | Ulva:Samtec_SSW-116-01-G-S_1x16_P2.54mm | J7 |
| 1 | DHT20_LP_I2C | Ulva:Samtec_SSW-104-01-G-S_1x04_P2.54mm | J1 |
| 1 | DS3231_RTC_SOCKET | Ulva:Samtec_SSW-105-01-G-S_1x05_P2.54mm | J2 |
| 1 | EXP0 AC ONLY | Ulva:ZHOURI_DC3-2.54-10PAS_IDC_2x05_P2.54mm | J8 |
| 1 | EXP0 DC ONLY | Ulva:ZHOURI_DC3-2.54-10PAS_IDC_2x05_P2.54mm | J10 |
| 1 | EXP1 AC ONLY | Ulva:ZHOURI_DC3-2.54-10PAS_IDC_2x05_P2.54mm | J9 |
| 1 | EXP1 DC ONLY | Ulva:ZHOURI_DC3-2.54-10PAS_IDC_2x05_P2.54mm | J11 |
| 1 | GND | TestPoint:TestPoint_Pad_D1.5mm | TP2 |
| 1 | HF46F/5-HS1 | Ulva:Relay_SPST_Hongfa_HF46F_HS1 | K1 |
| 1 | LTV-817S-TA1-C | Package_DIP:SMDIP-4_W9.53mm | U1 |
| 1 | OLED 0.96 SSD1306 I2C | Ulva:Samtec_SSW-104-01-G-S_1x04_P2.54mm | J3 |
| 1 | PASSIVE PIEZO 1+ / 4- | Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical | J5 |
| 1 | POWER_0V-GND bond | NetTie:NetTie-2_SMD_Pad2.0mm | NT1 |
| 1 | SS34 | Diode_SMD:D_SMA | D4 |
| 1 | SY8301ABC | Package_TO_SOT_SMD:SOT-23-6_Handsoldering | U2 |
| 1 | SYN480R_RX | Ulva:Samtec_SSW-104-01-G-S_1x04_P2.54mm | J4 |
| 1 | ZONE_ENABLE GREEN | LED_SMD:LED_0805_2012Metric | D1 |
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 mm

- 4 layers103.7 × 93 mm

Box carrier modules r2
phyreact/reactor
Robots that help AI sense and interact with the physical world.
61 parts - 4 layers64 × 56 mm

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 mm

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 mm

- 4 layers21 × 51 mm

- 2 layers88 × 130 mm

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 mm

Forward Ignition PCB
aditgoyal5/Forward_Ignition_PCB
This repository is about a printed circuit board I built for Team Sammard.
135 parts



