I have a simple hot air Popcorn popper that I plan to use as a coffee roasting apparatus.
The popper consists of a fan propelled by a DC motor put below a heater wire. The produced hot air is channeled through some vents into a cylinder:
| |
| |
_| |_
| :_____: <--- Vents
\ %%%%% / <- Heater wire
|vvvvv| <- Fan
The heater and the wire are connected so that it was only possible to turn the system on or off as a whole.
To gain the needed control I already split the circuit. The heater wire is now controlled via a SSR connected to an Arduino. The fan is powered separately and is always on.
I put a Type K thermocouple in one of the vents to measure the temperature that is entering the cylinder.
I already have a working Arduino sketch that heats the “roasting chamber” according to a time based temperature profile. The PID library is used to control the relay as in the PID_RelayOutput.ino example.
Basically everything works.
The thing I’m having trouble with is tuning the PID parameters. I’ve already spent several hours tuning. I even tried the Arduino PID Autotune Library.
I get a somewhat stable system. But no matter what I try, I can’t get rid of temperature deviations of ~ 5° C to ~ 10° C.
Here’s what I tried so far:
- Trial and error.
- The Ziegler-Nichols method.
- The Arduino PID Autotune Library.
Now I’m wondering: What can I expect from a PID controller in the above use case? How accurate will I be able to set the temperature? Am I not tuning correctly or does it just not get any better?
For reference, here are plots of two of the more accurate test runs: