Skip to the content
4 layers82.5 × 81.5 mmFanpico, the printed circuit board in 3D

Fanpico: Open Source Programmable PWM (PC) Fan Controller

Size
82.5 × 81.5 mm
Copper layers
4
Thickness
1.6 mm
Parts
113
Nets
74
Pads
398
Tracks, vias
630, 47
Pours
4
Routed
Yes
KiCad
KiCad 8.0 (file 20240108)
Created
31 Jan 2022
Updated
26 Sep 2026

Overview

Fanpico is an open-source printed circuit board by tjko, from the tjko/fanpico repository on GitHub, published under the GPL-3.0 licence. It is a 4-layer board of 82.5 × 81.5 mm with 113 parts on 74 nets, routed with 630 tracks and 47 vias.

It is built around the SN74AHCT126D, BAT54CL and 2N7002K. Its parts include 36 diodes, 27 resistors, 17 capacitors, 14 connectors and 4 ICs. It belongs with the home automation and IoT and computers and single-board computers boards and the RP2040 boards of this library.

Main components

3

README

README.md

Fanpico: Programmable PWM (PC) Fan Controller

CI CodeQL

[OSHW] US002599 | Certified open source hardware | oshwa.org/cert

Fanpico is a smart PWM (PC) fan controller based around Raspberry Pi Pico (RP2040 MCU). Fanpico operates as standalone controller that can be configured and left running. It does not require any drivers and doesn't care what OS is being used. FanPico is an Open-source hardware (OSHW) project.

FanPico-0804D FanPico-0401D

What is it for?

  • Fanpico is for customizing fan "curves" to fine tune how your motherboard controlled fans run.
  • Fine tuning fan speeds to easily balance airflow.
  • Controlling fan based on temperature sensor input.
  • Monitoring fan speeds and behaviour as well as monitoring what exactly motherboard is doing.
  • Fanpico works also as standalong controller for other things than a PC, it's been used controlling fans on 3D printers and on enclosed network equipment racks, etc..

Features

  • Controls up to 8 fans.
  • Connect up to 4 motherboard fan outputs.
  • Connect up to 2 remote temperature probes (plus onboard "ambient" temperature sensor).
  • Support for 1-Wire Temperature sensors (up to 8 sensors)
  • Support for I2C Temperature sensors (up to 8 sensors)
  • OLED and LCD display support (boards where model name ends with "D").
  • Can be powered from motherboard fan outputs or using auxiliary power connector (4-Pin Floppy or DC Barrel jack connector).
  • Ability to define custom fan "curves" for each fan.
  • Ability to provide custom tachometer (fan RPM) output signal back to motherboard.
  • Support for Locked Rotor (Alarm) signal fans (allows using regular tachometer fans with system expecting Locked Rotor Alarm fans and vice versa).
  • Control fans from any motherboard PWM signal or from temperature sensors.
  • OS Independent, no drivers or software needed.
  • Configuration stored on the device itself (in the flash memory).
  • SCPI "like" programming interface (see Command Reference)
  • Monitor each fan and motherboard output signals as well as temperatures.
  • WiFi support if opting to mount Pico W on the board.
    • HTTP server with TLS (HTTPS) support.
    • MQTT client with TLS support for logging data and to receive commands.
    • Home Assistant support using MQTT Discovery feature.
    • Telnet server for configuration and monitoring.
    • SSH server for configuration and monitoring (experimental).
    • SNMP Agent for monitoring.

Interfaces

  • Serial "Console". Primary method for configuring/monitoring FanPico units is via (USB) Serial console (some units also have 3.3V TTL Serial connection).

  • Desktop application (that polls FanPico using SCPI commands over the console connection): FanPico Monitor

  • Web Interface (available when using Pico W) over WiFi

    FanPico

For more documentation check FanPico Wiki

Sponsors

I would like to thank following sponsors, who have helped FanPico project:

  • PCBWay

Where can I get one?

Currently Fanpico is available as a DIY project. Check discussion forums for places to purchase Kits or PCBs: Places to Purchase FanPico

(Instructions for building the kit are in FanPico Wiki)

However, if there is sufficient interest, then ready-made units may be made available for sale. If you'd be interested in purchasing FanPico pease indicate your interest here: FanPico Forum

DIY Option

You can upload the Kerber files (found under boards directory) to your favorite PCB maker website and get your boards produced in matter of days. Component list (BOM or bill of materials) is found under boards directory as well along with the electrical schematics.

NOTE, check discussions forum for giveaways for free PCBs.

Review Units

If you are member of press (or YouTuber) and would like to review/test Fanpico. Please contact me via email.

How Can I help?

  • Build your own FanPico and provide feedback, suggestions (see discussion forums).
  • If you're into electronics new/improved board designs are most welcome.
  • If you're into programming:
    • Create cool (desktop) program that allows easily configuring FanPico boards (with ability to "draw" fan curves, etc..) and to monitor Fan statuses.
    • Help improve the firmware.
  • If you're into graphics (or web) design:
    • Help create cool (but lightweight) web interface
    • Create better logo for FanPico
  • As this is Open (Source) Hardware Project, if you like to build (and sell) assembled boards or DIY kits, you'd be most welcome...
  • You can always donate (and get your name added to the Sponsors section, if you so wish).

Hardware

Fanpico is Open Source Hardware, reference design is provided for the "0804" model (8 fan outputs and 4 motherboard fan inputs), and "0804D" model that adds OLED display support (hence the "D" suffix).

Additional models with different combinations of fan inputs/outputs could be easily designed (takining into account limitations of Raspberry Pi Pico I/O limits). New and improved PCB models/designs are most welcome.

Model "0840D" with (with right-angle connectors and DC power connector):

Fanpico-0804D

Model "0804" without display (with straight connectors):

Fanpico-0804

Hardware Design

Fanpico (reference design) utilizes all available I/O pins on a Raspberry Pi Pico.

  • Fan PWM outputs are driven by the Pico's PWM hardware.
  • Motherboard Fan PWM inputs are read using Pico's PWM hardware.
  • Tacho signal output (for motherboard connectors) is generated using Pico's PIO hardware, providing extremely stable tachometer signal.
  • Tacho signal inputs (from fans) are read differently in model 0804 and 0804D:
    • 0804: signals are read using GPIO interrupts, measuring all fans simultaneously by counting number of pulses received over a period of time.
    • 0804D: signals are read through multiplexer measuring one fan at a time, by measuring pulse length.
  • Temperature readings are done using ADC, with help of a accurrate 3V voltage reference (LM4040). Any NTC (10k or 100k) thermistors can be used as themperature sensors.
  • Each FAN output has jumper to select whether fan gets its power from associated MBFAN connector or from the AUX connector
  • There is a jumper to select whether power the Fanpico itself from MBFAN1 or AUX connector.

To help design and test Fanpico couple other projects were born:

Projects based on FanPico firmware:

  • BrickPico - (LEGO) LED Light Kit Controller.

Models (PCB designs)

Currently following models are available:

ModelFans (Outputs)MB Fan (Inputs)External Temperature SensorsDisplayNotes
FANPICO-0804842NFirst publicly available board (reference design).
FANPICO-0804D842YSupport for OLED (128x64 or 128x128) displays
FANPICO-0401D412YAdds QWIIC and 1-Wire connectors.
FANPICO-0200202YOLED display supported via QWIIC connector. PCB under development.

(all boards have one additional 'on-board' temperature sensor on the RP2040 MCU itself)

Models ending with "D" have connector to attach OLED display module to see 'real-time' status of fans and temperatures.

OLED panel directly mounted on the PCB:

FanPico OLED Display

LCD Panel attached via a short cable:

FanPico LCD Display

Accessory Boards (PCB designs)

Following accessories are available:

ModelInfo
OLED-AdapterMounting adapter for OLED boards with different pinouts.
Power-BoardAdapter for using high-power fans with FanPico.

Firmware

Firmware is developed in C using the Pico SDK. Pre-compiled firmware is released when there is new major features or bug fixes.

Latest pre-compiled firmware image can be found here: Releases

To get latest firmware with latest updates/fixes you must compile the firmware from the sources.

Installing firmware image

Firmware can be installed via the built-in UF2 bootloader on the Raspberry Pi Pico or using the debug header with Picoprobe, etc...

Selecting Right Firmware to use

Each release (zip file) contains multiple different firmware files. Make sure to select firmware for the board you're using and for the pico model ("pico_w" if using Pico W).

Firmware file names have format: fanpico-<board_model>-<pico_model>.uf2

text
fanpico-0401D-pico.uf2
fanpico-0401D-pico_w.uf2
fanpico-0804-pico.uf2
fanpico-0804-pico_w.uf2
fanpico-0804D-pico.uf2
fanpico-0804D-pico_w.uf2
Upgrading Firmware

Firmware upgrade steps:

  • Boot Pico into UF2 bootloader. This can be done in two ways:
    1. Press and hold "bootsel" button and then press and release "reset" button.
    2. Issue command: SYS:UPGRADE
  • Copy firmware file to the USB mass storage device that appears.
  • As soon as firmware copy is complete, Pico will reboot and run the fanpico firmware.

Building Firmware Images

Raspberry Pi Pico C/C++ SDK is required for compiling the firmware:

Requirements / Dependencies
Install Pico SDK

Pico SDK must be installed working before you can compile fanpico.

Instructions on installing Pico SDK see: Getting started with Raspberry Pi Pico

(Make sure PICO_SDK_PATH environment variable is set)

Downloading sources

Create some directory for building fanpico ('src' used in this example):

text
$ mkdir src
$ cd src
$ git clone https://github.com/tjko/fanpico.git
$ git submodule update --init --recursive
Building fanpico firmware

To build fanpico firmware, first create a build directory:

text
$ cd fanpico
$ mkdir build

Select which board to build firmware for (default is "0804") and which Pico is to be used (default is "pico"):

text
$ cd build
$ cmake -DFANPICO_BOARD=0804D -DPICO_BOARD=pico_w ..

Then compile fanpico:

text
$ make -j

After successful compile you should see firmware binary in the build directory: subdirectory:

text
$ ls *.uf2
fanpico.uf2

If you have picotool installed you can check the firmware image information:

text
$ picotool info -a fanpico.uf2
File fanpico.uf2 family ID 'rp2040':

Program Information
 name:              fanpico
 version:           1.7.6
 web site:          https://kokkonen.net/fanpico/
 description:       FanPico-0804D - Smart PWM Fan Controller
 features:          USB stdin / stdout
 boot settings:     bootdelay = 0
                    safemode = 0
 binary start:      0x10000000
 binary end:        0x1012edc0
 embedded drive:    0x101c0000-0x10200000 (256K): littlefs

Fixed Pin Information
 0:                 TX (Serial) / MISO (SPI)
 1:                 RX (Serial) / CS (SPI)
 2:                 SDA (I2C) / SCK (SPI)
 3:                 SCL (I2C) / MOSI (SPI)
 4:                 Fan1 PWM signal (output)
 5:                 Fan2 PWM signal (output)
 6:                 Fan3 PWM signal (output)
 7:                 Fan4 PWM signal (output)

Parts

113
QtyValueFootprintReferences
90.1uFCapacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolderC1, C4, C6, C11, C22, C24, C26, C29, C32
910kResistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR5, R7, R13, R15, R37, R40, R43, R50, R51
93.3V TVSDiode_SMD:D_SOD-323_HandSolderingD7, D13, D14, D16, D17, D18, D19, D23, D29
612V TVSDiode_SMD:D_SOD-323_HandSolderingD2, D15, D20, D21, D22, D26
6LED 0805 (green)LED_SMD:LED_0805_2012Metric_Pad1.15x1.40mm_HandSolderD4, D5, D6, D8, D12, D32
55V TVSDiode_SMD:D_SOD-323_HandSolderingD11, D33, D34, D35, D36
5ES1D 1A 200VDiode_SMD:D_SMA_HandsolderingD3, D10, D25, D28, D31
41nFCapacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolderC10, C21, C23, C25
449.9kResistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR9, R10, R12, R16
4680Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR14, R38, R41, R44
4BAT54(C)FanPico:D_SOT-23_ANKD9, D24, D27, D30
4MountingHole_PadMountingHole:MountingHole_3.2mm_M3_Pad_ViaH1, H2, H3, H4
310uF 16VCapacitor_Tantalum_SMD:CP_EIA-3216-18_Kemet-A_Pad1.58x1.35mm_HandSolderC7, C8, C30
31kResistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR1, R4, R11
20Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR49, R55
22N7002KPackage_TO_SOT_SMD:SOT-23Q1, Q2
2330Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR3, R48
11-WireTerminalBlock_TE-Connectivity:TerminalBlock_TE_282834-3_1x03_P2.54mm_HorizontalJ5
11-Wire PullUp EnableConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJP12
110uF 25VCapacitor_Tantalum_SMD:CP_EIA-3528-12_Kemet-T_Pad1.50x2.35mm_HandSolderC5
14.7kResistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR2
14.99kResistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR6
1DNFResistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR54
1Fan1 OutputConnector:FanPinHeader_1x04_P2.54mm_VerticalJ8
1Fan2 OutputConnector:FanPinHeader_1x04_P2.54mm_VerticalJ12
1Fan3 OutputConnector:FanPinHeader_1x04_P2.54mm_VerticalJ13
1Fan4 OutputConnector:FanPinHeader_1x04_P2.54mm_VerticalJ14
1Floppy Power ConnectorFanPico:TE 171826-4 Floppy 4-pin ComboJ1
1I2C (OLED ALT)Connector_PinSocket_2.54mm:PinSocket_1x04_P2.54mm_VerticalJ2
1I2C (OLED)Connector_PinSocket_2.54mm:PinSocket_1x04_P2.54mm_VerticalJ3
1LCD (SPI)Connector_PinHeader_2.54mm:PinHeader_2x05_P2.54mm_VerticalJ18
1LM4040DBZ-3Package_TO_SOT_SMD:SOT-23U6
1MB Fan1 InputConnector:FanPinHeader_1x04_P2.54mm_VerticalJ4
1PicoFanPico:RPi_Pico_PicoW_SMD_THU4
1Polyfuse 0.5AFuse:Fuse_1206_3216Metric_Pad1.42x1.75mm_HandSolderF2
1Polyfuse 1.5AFuse:Fuse_2920_7451Metric_Pad2.10x5.45mm_HandSolderF3
1Polyfuse 2AFuse:Fuse_2920_7451Metric_Pad2.10x5.45mm_HandSolderF1
1Power SelectorConnector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJP1
1QWIICConnector_JST:JST_SH_SM04B-SRSS-TB_1x04-1MP_P1.00mm_HorizontalJ6
1SM5819PL 1A 40VDiode_SMD:D_SMAD1
1SN74AHCT126Package_SO:TSSOP-14_4.4x5mm_P0.65mmU1
1SPX1117-ADJPackage_TO_SOT_SMD:SOT-223-3_TabPin2U5
1SW_PushFanPico:SW_PUSH_6mm_SMD_2SW1
1Sensor1Connector_JST:JST_XH_B2B-XH-A_1x02_P2.50mm_VerticalJ16
1Sensor2Connector_JST:JST_XH_B2B-XH-A_1x02_P2.50mm_VerticalJ17
1Serial Console (TTL)Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJ19

The 110 most common of 113 parts.

More from tjko/fanpico

3
  • 4 layers81 × 60 mmFanpico, the printed circuit board in 3D

    Fanpico

    tjko/fanpico

    Fanpico: Open Source Programmable PWM (PC) Fan Controller

    86 parts239GPL-3.0
  • 2 layers65 × 65 mmFanpico powerboard, the printed circuit board in 3D

    Fanpico powerboard

    tjko/fanpico

    Fanpico: Open Source Programmable PWM (PC) Fan Controller

    22 parts239GPL-3.0
  • 2 layers25 × 14.5 mmFanpico oled adapter, the printed circuit board in 3D

    Fanpico oled adapter

    tjko/fanpico

    Fanpico: Open Source Programmable PWM (PC) Fan Controller

    3 parts239GPL-3.0

Similar boards

  • 2 layers135 × 81.5 mmTjko fanpico fanpico 31b08e, the printed circuit board in 3D

    Tjko fanpico fanpico 31b08e

    punkfab/pcb-corpus

    235 real KiCad boards from open-source hardware repositories, prepared as a placement and routing benchmark

    216 parts1
  • 4 layers35.2 × 68 mmFanController, the printed circuit board in 3D

    FanController

    aleksul/FanController

    OpenSource fan controller for your PC

    54 partsMIT
  • 4 layers46.8 × 34.8 mmSmartWatch V4, the printed circuit board in 3D

    SmartWatch V4

    Bellafaire/ESP32-Smart-Watch

    An open source smartwatch based on the ESP32 compatible with the Arduino IDE.

    74 parts258MIT
  • 4 layers85 × 85 mmEPS, the printed circuit board in 3D

    EPS

    rgw3d/1KCubeSat_Hardware

    Hardware design files for my $1000 CubeSat.

    657 parts158GPL-3.0
  • 4 layers80 × 80 mmZ5524, the printed circuit board in 3D

    Z5524

    brer-rabbit/zoxnoxious

    Analog synth / software interface

    234 parts68GPL-3.0
  • 2 layers77.7 × 166.3 mmDelta pico, the printed circuit board in 3D

    Delta pico

    AaronC81/delta-pico

    Powerful scientific calculator based on the Raspberry Pi Pico

    84 parts57MIT
  • 2 layers32 × 20 mmGd32 encoder, the printed circuit board in 3D

    Gd32 encoder

    avenhaus/SO-ARM100-Encoders

    It explores to use much cheaper magnetic encoders for the Leader Arm instead of the regular servos. These dummy servos are also much easier to move manually, as there is no gear train that needs to back drive the servo…

    26 parts45
  • 2 layers198 × 278 mmQ2, the printed circuit board in 3D

    Q2

    joewing/q2

    12-bit single-board discrete transistor computer

    1,660 parts42

Questions

How big is the Fanpico PCB?

It measures 82.5 × 81.5 mm and has 4 copper layers, 1.6 mm thick.

What parts does the Fanpico use?

113 parts, built around the SN74AHCT126D, BAT54CL and 2N7002K. 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 Fanpico KiCad files?

From the tjko/fanpico repository on GitHub, at the commit this page was made from: the board is boards/fanpico-0401D/kicad/fanpico.kicad_pcb and its schematic boards/fanpico-0200/kicad/extra_fan_channel.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

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