Pico Kiln
Creator
Nov 2025 - Jun 2026
Personal Project
A 1977 industrial pottery kiln, rebuilt into a smart, dual-core controller that never crashes.
- Raspberry Pi Pico W
- RP2350
- Rust
- Embassy
- no_std
- MicroPython
- Tauri
- React
- PID Control
- Python
- Firing Temp
- ~1222°C (cone 6)
- Kiln Weight
- 400kg
- Uptime
- Zero crashes since Rust rewrite
A kiln is a box that holds over 1000°C for hours, unattended, in a workshop. Pico Kiln is my project to control one safely: a 1977 “Bretagne” pottery kiln, originally wired for 380V 3-phase factory power, that I converted into a 220V single-phase smart kiln driven by a $6 microcontroller.
What it does
The system rewires and controls a real, physically dangerous piece of equipment: three 1500W heating elements, solid-state relays, and a firing cycle that has to hold precise temperatures (cone 6, ~1222°C) for hours without supervision. On top of the hardware, it runs a physics-based PID control loop with gain scheduling to counter the kiln’s non-linear radiative heat loss, a multi-mode auto-tuner, crash-recovery that resumes an interrupted firing from its own log, and a cross-platform app (web, macOS, Android) built once in React via Tauri.
The point
This isn’t a toy IoT project. Bugs in this codebase can mean a fire left unattended runs away, or a $600 kiln element burns out because a garbage collector paused the control loop at the wrong second. Embedded work with real physical stakes forces a different discipline than typical app development: every abstraction has to earn its place next to a 9kW heating element.
My role
Sole creator, end to end: electrical rewiring of the 400kg unit, firmware, control theory, the app, and later the full rewrite.
The journey
The series runs five parts. Part 1 covers the physical rewiring: taming 3-phase industrial power down to a safe 220V single-phase circuit, sizing breakers, and solving ground-fault issues. Part 2 builds the firmware in MicroPython on the Pico’s dual-core RP2040, splitting real-time control from best-effort WiFi/HTTP handling. Part 3 ships a single React codebase as a web app, native macOS app, and Android APK via Tauri. Part 4 replaces eyeballed temperature curves with a physics-based thermal model and proper PID tuning from CSV firing logs.
Part 5 is the one I’m proudest of: after months of real firings validated the design in MicroPython, I tore out the interpreter and rewrote the firmware from scratch in bare-metal Rust on the RP2350. The rewrite is organized around one rule enforced at compile time, not by convention: the control brain never touches the world. Pure, host-testable logic; hardware access behind embedded-hal traits; golden-replay tests against real firing logs; and a linker-enforced safety boundary between the control core and everything else. It hasn’t crashed, frozen, or hiccuped since. I sleep through overnight firings now.
Articles about this project
Pico Kiln Part 5: Dropping to the Metal with Rust
Migrating kiln firmware from MicroPython to bare-metal Rust on the RP2350: a compile-time safety wall, golden-replay tests, and MSPLIM stack guards.
18 min read
Pico Kiln Part 4: Physics-Based PID Tuning in Python
Tune a kiln PID controller with physics-based phase detection, FOPDT thermal modeling, and Ziegler-Nichols, Cohen-Coon, and AMIGO tuning methods.
18 min read
Pico Kiln Part 3: From Web to Native with Tauri
Ship one React kiln controller UI as a web app, macOS app, and Android APK with Tauri, and bypass the HTTP/HTTPS mixed-content problem entirely.
7 min read
Pico Kiln Part 2: Firmware Architecture
Deep dive into the dual-core control logic, PID implementation with Adaptive Gain Scheduling, and thread-safe communication on the Raspberry Pi Pico W.
18 min read
Pico Kiln Part 1: Converting a 380V Kiln to 220V
Rewiring a 1977 pottery kiln from 380V three-phase power to 220V single-phase: star-to-parallel element conversion, breaker sizing, and ground faults.
13 min read
Working on something similar?
Happy to go through the technical details, or look at the same problem in your system.
Book a call