Skip to the content
2 layers37.7 × 50.5 mmSenfusion, the printed circuit board in 3D

Custom RP2040 PCB with a IAM-20680 IMU, IIS2MDC Magnetometer and BMP581 Barometer for Sensor Fusion applications. Repository also contains code for 100Hz Kalman and Madgwick Sensor fusion with complete hard/soft-iron calibration for demo purposes.

Size
37.7 × 50.5 mm
Copper layers
2
Thickness
1.6 mm
Parts
64
Nets
61
Pads
260
Tracks, vias
645, 147
Pours
14
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
18 Jun 2026
Updated
18 Jun 2026

Overview

Senfusion is an open-source printed circuit board by shrekwes, from the shrekwes/Sensor-Fusion-PCB repository on GitHub, published under the GPL-3.0 licence. It is a 2-layer board of 37.7 × 50.5 mm with 64 parts on 61 nets, routed with 645 tracks and 147 vias.

It is built around the RP2040, BMP581 and W25Q128JVSIQ, with the ICM-20602 and ABM8-272-T3 among its other parts. Its parts include 26 capacitors, 13 resistors, 6 ICs, 3 connectors and 2 diodes. It belongs with the sensors and measurement boards and the RP2040 boards of this library.

Main components

5

README

README.md

PyFusion — RP2040 Sensor Fusion Board

A compact, custom-fabricated two-layer sensor fusion PCB built around the Raspberry Pi RP2040. Integrates a 6-axis IMU, 3-axis magnetometer, and barometric pressure sensor on a single board — programmable natively in MicroPython.


Hardware

ComponentPartInterfaceAddress
MicrocontrollerRP2040 (dual-core Cortex-M0+, 133MHz)——
IMUIAM-20680HV (6-axis accel + gyro)I2C1 — GP2/GP30x68
MagnetometerIIS2MDCTR (3-axis AMR)I2C0 — GP8/GP90x1E
BarometerBMP581 (pressure + temperature)SoftI2C — GP6/GP70x46
FlashW25Q128JVS (128Mbit QuadSPI)QSPI—
CrystalABM8-272-T3 (12MHz)XIN/XOUT—
RegulatorNCP1117-3.3 (5V → 3.3V LDO)——

PCB Design

The board is a two-layer design captured in KiCad 9.0. Layout decisions were driven primarily by the sensitivity requirements of the three MEMS sensors.

Layer Stack

  • Top layer — signal routing and 3.3V power polygon pour
  • Bottom layer — continuous ground plane for low-impedance return paths and shielding, with minimal routing tracks

Sensor Placement

IMU (IAM-20680HV) Placed on a mechanically stable region of the board, away from mounting holes and connectors. Requires a solid ground plane beneath it for noise reduction — copper fill is maintained under this device. The exposed ground pad is connected to the ground plane via multiple vias.

Magnetometer (IIS2MDCTR) Highly sensitive to magnetic fields from nearby copper currents. Ground plane and copper pours are cleared on both layers in the region surrounding this device. High-current traces and switching components are kept at a distance.

Barometer (BMP581) Isolated from large copper regions on both layers to prevent thermal gradients and mechanical stress from influencing pressure readings.

Key Layout Decisions

Decoupling — All bypass capacitors placed within 1–2mm of their associated VDD pins, with short via stubs to the ground plane, in accordance with each sensor's datasheet.

Crystal — ABM8-272-T3 placed as close as practical to the RP2040 XIN/XOUT pins. Load capacitors are inline. A copper pour guard ring tied to GND prevents switching-noise coupling into the oscillator.

USB differential pair — USBDP/USBDM routed as a 90Ω differential pair (0.8mm track width, 0.15mm gap on a 1mm substrate) per the RP2040 hardware design guide.

GPIO header — 23 pins expose selected RP2040 GPIO signals for external interfacing via UART, SPI, or I2C, making the board extensible rather than a closed system.

BOOTSEL and RESET — dedicated push-buttons for bootloader entry and manual reset.

KiCad Footprint Note

The IAM-20680HV KiCad footprint files were not available at the time of design. The ICM-20602 footprint was used as a drop-in substitute — the two devices share an identical package and pin layout. The assembled board uses the IAM-20680HV component on the ICM-20602 footprint without modification.

Design Verification

Before manufacture the following checks were completed in KiCad:

  • Electrical Rules Check (ERC) — no unconnected pins or conflicting power nets
  • Design Rules Check (DRC) — cleared against manufacturer minimums (trace width, clearance, via drill, annular ring)
  • Footprint verification — each land pattern cross-checked against the manufacturer datasheet
  • Gerber preview — layer stack-up, drill file, and copper patterns confirmed

Firmware

All firmware is written in MicroPython and runs directly on the RP2040. The board was developed and flashed using Thonny IDE.

File Overview

Parts

64
QtyValueFootprintReferences
150.1uCapacitor_SMD:C_0402_1005MetricC3, C4, C5, C6, C7, C8, C9, C11, C12, C14, C18, C19, C20, C25, C28
7TestPointTestPoint:TestPoint_Pad_D1.5mmTP1, TP2, TP3, TP4, TP11, TP12, TP13
51kResistor_SMD:R_0402_1005MetricR3, R4, R7, R8, R9
44.7kResistor_SMD:R_0402_1005MetricR10, R11, R14, R15
310uCapacitor_SMD:C_0603_1608MetricC1, C2, C26
3MountingHoleMountingHole:MountingHole_2.2mm_M2H1, H2, H3
215pCapacitor_SMD:C_0402_1005MetricC15, C16
21uCapacitor_SMD:C_0402_1005MetricC10, C13
227.4Resistor_SMD:R_0402_1005MetricR1, R2
25.1kResistor_SMD:R_0402_1005MetricR5, R6
2LEDLED_SMD:LED_0402_1005MetricD1, D2
2SW_PushButton_Switch_SMD:SW_Push_1P1T_NO_CK_KMR2FLASH, RESET
10.47uCapacitor_SMD:C_0402_1005MetricC29
110nCapacitor_SMD:C_0402_1005MetricC30
12.2uCapacitor_SMD:C_0402_1005MetricC24
1220nCapacitor_SMD:C_0402_1005MetricC27
1ABM8-272-T3ABM8_rpipico_ul:ABM8-272-T3_ABRX1
1BMP581BMP581_ul:QFN10_BMP581_BOSU7
1Conn_01x05_PinConnector_PinHeader_2.54mm:PinHeader_1x05_P2.54mm_VerticalJ5
1Conn_01x18_PinConnector_PinHeader_2.54mm:PinHeader_1x18_P2.54mm_VerticalJ3
1ICM-20602ICM_20602_ul:LGA16_I62_IVSU4
1IIS2MDCTRIIS2MDC_ul:LGA-12_2X2X0P7_STMU5
1LOGOclippy:clippy_10mm_2G***
1NCP1117-3.3_SOT223Package_TO_SOT_SMD:SOT-223-3_TabPin2U2
1RP2040Package_DFN_QFN:QFN-56-1EP_7x7mm_P0.4mm_EP3.2x3.2mmU1
1USB_C_Receptacle_USB2.0_14PConnector_USB:USB_C_Receptacle_GCT_USB4105-xx-A_16P_TopMnt_HorizontalJ1
1W25Q128JVSPackage_SO:SOIC-8_5.3x5.3mm_P1.27mmU3

Similar boards

  • 2 layers52 × 51 mmRP2040 minimal r2, the printed circuit board in 3D

    RP2040 minimal r2

    WURocketry/Electrical_2023-2024

    Electrical Repository for 2023-2024 Competition Year

    48 parts3
  • 4 layers41 × 41 mmPulser2.1, the printed circuit board in 3D

    Pulser2.1

    aaritkoundinya/Pulse

    After creation, open KiCad and work in boards/ /.

    63 parts
  • 2 layers100 × 100 mmQX25Logger real, the printed circuit board in 3D

    QX25Logger real

    takahashirenya/QX25logger

    25年度鳥人間コンテストのロガー基盤

    99 parts1
  • 2 layers21 × 51 mmNode Zero, the printed circuit board in 3D

    Node Zero

    Sadrita404/Node-Zero

    Node Zero is an rp2040 based micro-controller unit that consist of the rp2040 micro processor, the 16Mbit SPI NOR Flash, a crystal oscillator that synchronizes communication in the board between the USB abd rp2040, a…

    47 partsMIT
  • 2 layers90 × 121.7 mmMicromouse, the printed circuit board in 3D

    Micromouse

    UBIEEE/micromouse_pcb_team_2023

    70 partsMIT
  • 4 layers277.2 × 107.5 mmKatia, the printed circuit board in 3D

    Katia

    ikajdan/katia

    A split keyboard with 6 by 3 column staggered keys and 3 thumb keys, based on the Crkbrd design

    230 parts33CERN-OHL-P-2.0
  • 4 layers51.8 × 20 mmSample target, the printed circuit board in 3D

    Sample target

    alvarop/swd2usbc

    Have you ever wanted to debug your device over USB-C? Sometimes there's not enough room for a JTAG/SWD connector, or even Tag-Connect pads!

    57 parts29CC0-1.0
  • 4 layers61.8 × 79.6 mmShipwrecked pcb, the printed circuit board in 3D

    Shipwrecked pcb

    mpkendall/shipwrecked-pcb

    Shipwrecked PCB Badges

    153 parts17Unlicense

Questions

How big is the Senfusion PCB?

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

What parts does the Senfusion use?

64 parts, built around the RP2040, BMP581, W25Q128JVSIQ and ICM-20602. 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 Senfusion KiCad files?

From the shrekwes/Sensor-Fusion-PCB repository on GitHub, at the commit this page was made from: the board is senfusion.kicad_pcb and its schematic senfusion.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Senfusion design in my own project?

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