STM32 Toaster Oven Controller
My first embedded project — a finite-state-machine toaster-oven controller on an STM32 Nucleo development board, with buttons, ADC input, and an OLED bring-up shield.
Role
Firmware developer
Team
Individual
Status
Completed
Timeline
2025
- ▹First embedded project — STM32 Nucleo bring-up
- ▹State-machine architecture for heat-control states
- ▹Buttons, switches, potentiometer, and ADC input
- ▹OLED + shield stack for lab demos
Context
This was my first embedded project. I built it on an STM32 Nucleo development board — USB-powered, ST-Link onboard — with a black expansion shield stacked on top for buttons, switches, a potentiometer, UART headers, and a small OLED (early bring-up showed Hello World!).
Problem Statement
Appliance-style control is a classic embedded problem: debounce inputs, manage timed heating states, and respond to temperature feedback without blocking the MCU.
Design Goals
- Learn STM32 firmware on a Nucleo board from scratch
- Clear finite-state-machine architecture
- Button and ADC temperature / knob input handling
- Timed control states for heating cycles
Hardware
STM32 Nucleo as the MCU platform, plus a shield with: - OLED (I²C — SDA/SCL) - Push buttons and slide switches - Potentiometer for analog input - Buffered headers (74HC244) and UART breakouts for peripherals
System Architecture
Inputs (buttons, ADC) → FSM (idle, preheat, bake/toast, fault/done) → outputs (heater drive indicators / control signals) with timing services on the Nucleo.
Software Design
The controller is an explicit state machine in C. Each state defines entry actions, transitions, and timing. ADC readings inform temperature-related transitions.
Engineering Decisions
- FSM over ad-hoc flags for predictable behavior and easier testing
- Nucleo so I could flash and debug over USB without a separate programmer
Testing and Validation
Exercised state transitions with button sequences and ADC / pot inputs on the Nucleo + shield stack, verifying timing and control-state behavior.
Results
A working STM32 Nucleo FSM controller — my first end-to-end embedded stack from board bring-up through structured appliance-style control logic.
Challenges
- First-time toolchains, flashing, and peripheral bring-up
- Debouncing and input edge cases
- Accurate timing without busy-waiting
Lessons Learned
Explicit states and transition tables make embedded control far easier to reason about than deeply nested conditionals — and a Nucleo is a forgiving place to learn that.
Future Improvements
- PID temperature regulation overlay
- Soft-start heater drive
- Logging/telemetry for lab demos
Questions about this project? Email Caleb.