PCBOven — WiFi Reflow Controller

by: Hugo Abondano, Tomás Ospina, Juan Rodríguez, Nicolás Ospitia.

Overview

An ESP32-based controller that automates the heating and cooling cycles needed to reflow surface-mount components onto a PCB. It reads a J-type thermocouple through a MAX31856, drives the heating element through an SSR and the cooling fan through PWM, and exposes the whole thing as a web UI served straight off the ESP32’s SPIFFS with live telemetry over WebSockets.

Signal chain: dashboard over WiFi to the ESP32, temperature sensor, heating resistance

Architecture: thermocouple → MAX31856 → ESP32 → SSR/fan, with a WebSocket web UI

Problem & Solution

A reflow station is an expensive piece of equipment for something that is, electrically, a temperature setpoint and a timer. The controller adds exactly that to an ordinary oven: set a target temperature and a maximum heating time from the browser, and watch the thermocouple curve come back live while the SSR and the fan do the work.

Technical Specifications

| Item | Detail | | —————– | ——————————————————- | | MCU | ESP32 (esp32doit-devkit-v1), PlatformIO | | Temperature | Adafruit MAX31856 over SPI, J-type thermocouple | | Heater control | SSR driven by PWM (pin 13) | | Cooling | PWM fan (pin 27) | | Interface | Web UI from SPIFFS, WebSocket telemetry on /ws, HTTP /toggle | | Power | Separate supply for heater and fan — never off the 3.3 V rail |

The interface

The whole control surface is a single page served from the ESP32’s own flash — set the target temperature and a maximum heating time, flip the toggle, and watch the thermocouple reading and the fan state come back live over the WebSocket.

Web interface showing target temperature, maximum heating time, activation toggle, fan state and live sensor value

My Role & Key Contributions

What I Learned / Next Steps

The control loop is heuristic rather than a tuned PID, which is honest about what it is: good enough to reach and hold a setpoint, but it needs manual tuning per oven for a proper reflow profile. Closing that gap with a real PID and a multi-stage profile (preheat → soak → reflow → cooldown) is the obvious next step.


🔗 View on GitHub