Skip to the content
PCBKitNew board
2 layers140 × 95 mmKiln controller, the printed circuit board in 3D

Micropython wood kiln controller for a Pi Pico 2W (WIP)

Size
140 × 95 mm
Copper layers
2
Thickness
1.6 mm
Parts
38
Nets
43
Pads
148
Tracks, vias
269, 21
Pours
2
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
18 Mar 2026
Updated
1 May 2026

Overview

Kiln controller is an open-source printed circuit board by stevers16, from the stevers16/kiln-controller repository on GitHub, published under the MIT licence. It is a 2-layer board of 140 × 95 mm with 38 parts on 43 nets, routed with 269 tracks and 21 vias.

It is built around the FQP30N06L. Its parts include 13 connectors, 7 resistors, 5 capacitors, 4 ICs and 2 diodes. It belongs with the RP2040 boards of this library.

Main components

1

README

README.md

Kiln Controller

A MicroPython-based lumber drying kiln controller for a passive solar kiln in the Georgian Bay area of Ontario. Designed for drying hardwood lumber (maple and beech, 0.5--1 inch thick) using multi-stage schedules derived from USDA Forest Products Laboratory references (FPL-GTR-57 and FPL-GTR-118).

The kiln is approximately 5 ft x 2 ft x 3 ft, heated passively by solar gain with a 500W ceramic PTC backup heater for shoulder-season use. A Raspberry Pi Pico 2W controls all kiln hardware. Telemetry is transmitted over LoRa (~200m) to a Raspberry Pi 4 at the cottage, which stores data in SQLite and serves a REST API for a Kivy mobile app.


Hardware

SubsystemComponent
MCURaspberry Pi Pico 2W
Temperature / RH2x SHT31-D (I2C, 0x44 / 0x45)
Moisture probesResistive, voltage divider, AC excitation
Exhaust fanFoxconn PVA080G12Q 80mm PWM, tach feedback
Circulation fans3x Thermalright TL-C12C 120mm PWM
Vent dampers2x MG90S servo (intake + exhaust)
Backup heater500W PTC + Fotek SSR-25DA + RY85 thermal fuse
Current monitoring2x INA219 (12V rail + 5V rail)
DisplayJC035-HVGA-ST-02 3.5" UART serial, 320x480
SD cardSPI micro SD (logging)
LoRa radioAI-Thinker Ra-02 433 MHz (SX1278), TX-only
Remote serverRaspberry Pi 4 with Ra-02 receiver

Schematic and custom PCB

KiCad 9.0 project with schematic and custom PCB layout is in the PCB folder.


Firmware (Pico 2W -- MicroPython)

All hardware drivers live in lib/. Every module is class-based, accepts pin numbers as constructor arguments, and follows the pattern established in lib/exhaust.py.

ModuleFunction
lib/exhaust.py80mm exhaust fan -- PWM + tach
lib/circulation.py3x 120mm circulation fans -- PWM group
lib/vents.pyIntake + exhaust damper servos
lib/heater.pySSR on/off control
lib/SHT31sensors.pyDual SHT31 temperature + RH
lib/moisture.pyResistive moisture probes, species correction
lib/current.pyINA219 DC current monitoring
lib/lora.pySX1278 LoRa transmitter (TX-only, register polling)
lib/display.pyUART serial display driver + button + page system
lib/sdcard.pySPI SD card mount/unmount wrapper
lib/logger.pyEvent log + CSV data log to SD card
lib/schedule.pyMulti-stage drying schedule controller
main.pyEntry point -- asyncio control loop + WiFi AP + REST API
config.pyDeployment configuration (SSID, key, LoRa params)

Drying schedules are stored as JSON in schedules/ and loaded from the SD card at runtime. Schedules are included for hard maple and beech at 0.5 in and 1 in thickness.

Deploying to the Pico

text
python update_lib.py

This copies main.py, config.py, and all lib/ files to the Pico in one step. The MicroPython SPI SD card driver must be deployed as sdcard_driver.py:

text
mpremote cp sdcard_driver.py :sdcard_driver.py

Running tests

text
mpremote run test_modules.py

Tests all 12 modules in sequence and reports pass/fail. Does not start WiFi or the control loop.


Cottage-side architecture (Pi4)

text
Pico --> SPI1 --> Ra-02 ~~LoRa~~ Ra-02 --> SPI0 --> Pi4 kiln_server
                                                 --> SQLite
                                                 --> REST API :8080 --> Kivy app
                                                 --> ntfy.sh --> phone

The kiln_server/ Python package (in progress) runs as a systemd service on the Pi4. It receives LoRa packets from the Pico, writes telemetry and alerts to SQLite, serves a REST API for the mobile app, and pushes fault alerts via ntfy.sh.

The Pico also runs a WiFi AP and exposes its own REST API (port 80) for direct local control when within range.


Drying schedules

Schedules follow USDA FPL kiln-drying recommendations:

  • Hard maple (T3-C2): schedules/maple_05in.json, schedules/maple_1in.json
  • Beech (T4-C3): schedules/beech_05in.json, schedules/beech_1in.json

Each schedule has 9 stages: 7 drying stages + equalizing + conditioning. Stage advance is automatic (MC% + minimum time) for drying stages, and time-only for equalizing/conditioning. Manual advance is available via the REST API.


Status

Pico firmware is at the integration stage. All 12 lib/ modules are complete and hardware-tested. main.py is implemented and pending full hardware integration test. The Pi4 kiln_server daemon and Kivy mobile app are next.

Parts

38
QtyValueFootprintReferences
310kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR2, R3, R5
2100Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR1, R4
2100kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR6, R7
2100nFCapacitor_THT:C_Disc_D5.0mm_W2.5mm_P5.00mmC1, C3
210uFCapacitor_THT:CP_Radial_D5.0mm_P2.00mmC4, C5
21N5819Diode_THT:D_DO-41_SOD81_P10.16mm_HorizontalD1, D2
2FQP30N06LPackage_TO_SOT_THT:TO-220-3_VerticalQ1, Q2
1100uFCapacitor_THT:CP_Radial_D8.0mm_P3.50mmC2
112V 3A PS HeaderTerminalBlock_MetzConnect:TerminalBlock_MetzConnect_Type101_RT01602HBWC_1x02_P5.08mm_HorizontalJ1
1Circulation Fan HeaderKilnFootprintLibrary:TerminalBlock_MetzConnect_Type101_RT01604HBWC_1x04_P5.08mm_HorizontalJ3
1Display Button HeaderTerminalBlock_MetzConnect:TerminalBlock_MetzConnect_Type101_RT01602HBWC_1x02_P5.08mm_HorizontalJ11
1Display HeaderKilnFootprintLibrary:TerminalBlock_MetzConnect_Type101_RT01604HBWC_1x04_P5.08mm_HorizontalJ10
1Exhaust Fan HeaderKilnFootprintLibrary:TerminalBlock_MetzConnect_Type101_RT01604HBWC_1x04_P5.08mm_HorizontalJ2
1Exhaust Servo HeaderKilnFootprintLibrary:TerminalBlock_MetzConnect_Type101_RT01604HBWC_1x04_P5.08mm_HorizontalJ5
1Heater SSR HeaderTerminalBlock_MetzConnect:TerminalBlock_MetzConnect_Type101_RT01602HBWC_1x02_P5.08mm_HorizontalJ9
1INA219 Current Sensor (12V)KilnFootprintLibrary:INA219_ModuleU2
1INA219 Current Sensor (5V)KilnFootprintLibrary:INA219_ModuleU3
1Intake Servo HeaderKilnFootprintLibrary:TerminalBlock_MetzConnect_Type101_RT01604HBWC_1x04_P5.08mm_HorizontalJ6
1Intake Zone SHT31 HeaderKilnFootprintLibrary:TerminalBlock_MetzConnect_Type101_RT01604HBWC_1x04_P5.08mm_HorizontalJ8
1LM2596_MOD_5VKilnFootprintLibrary:LM2596_Module_5VPS1
1Lumber Zone SHT31 HeaderKilnFootprintLibrary:TerminalBlock_MetzConnect_Type101_RT01604HBWC_1x04_P5.08mm_HorizontalJ7
1Moisture Probe 1 HeaderTerminalBlock_MetzConnect:TerminalBlock_MetzConnect_Type101_RT01602HBWC_1x02_P5.08mm_HorizontalJ12
1Moisture Probe 2 HeaderTerminalBlock_MetzConnect:TerminalBlock_MetzConnect_Type101_RT01602HBWC_1x02_P5.08mm_HorizontalJ13
1Ra-02_433MHzKilnFootprintLibrary:LoRa_ModuleU4
1Raspberry Pi Pico 2WModule:RaspberryPi_Pico_Common_THTU1
1SD Card ModuleConnector_PinSocket_2.54mm:PinSocket_1x06_P2.54mm_VerticalJ4

The 34 most common of 38 parts.

Questions

How big is the Kiln controller PCB?

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

What parts does the Kiln controller use?

38 parts, built around the FQP30N06L. 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 Kiln controller KiCad files?

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

Can I use the Kiln 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 layers68.6 × 53.3 mmProtogasm Board V2, the printed circuit board in 3D

    Protogasm Board V2

    Edging-Machines/Edging-Machines

    This repository is intended to contain as much information as possible about building, designing, prototyping, and using automated edging machines.

    14 parts67MIT
  • 2 layers76.2 × 48.9 mmEpaper clock, the printed circuit board in 3D

    Epaper clock

    mattwach/epaper_clock

    Autosetting clock based on an epaper display. Runs about a year on batteries and has basic weather telemetry (temperature, pressure, humidity).

    14 parts48Apache-2.0
  • 2 layers98 × 83.8 mmProjeto placa, the printed circuit board in 3D

    Projeto placa

    phfbertoleti/placa_lorawan

    Repositório oficial da placa LoRaWAN, um kit de desenvolvimento para protótipos IoT.

    39 parts19MIT
  • 2 layers152.4 × 63.7 mmCut down control board, the printed circuit board in 3D

    Cut down control board

    dwkennedy/ballooning

    Mutli-function balloon related project (variometer, balloon cut-down, let down reel, tracking)

    52 parts2GPL-3.0
  • 2 layers106 × 53.3 mmFinalForLayout, the printed circuit board in 3D

    FinalForLayout

    CIDARLAB/Fluorescence-Detector

    42 parts1