roaster

Coffee Roaster Lab: same green beans, why is one batch sour and the next one bitter?

Drag four sliders (charge temperature, heat, airflow, drop temperature) and watch the bean temperature curve, rate of rise, first crack and roast level change. A simplified teaching model of a ten-minute roast.

A batch of coffee takes about ten minutes, and the beans pass through three stages: first the water is driven out (drying), then they slowly turn yellow and brown and build aroma (the Maillard stage), and finally you hear a popcorn-like crackle called “first crack”. The stretch from first crack to the drop is the development phase. Its share of the whole roast, the development time ratio, is a common reference point and usually lands between 15% and 25%.

The machine below moves with your sliders. More heat raises the flame under the drum and pushes the whole curve earlier. More airflow swings the damper on the exhaust open, so hot air moves faster but also carries more heat away. A higher charge temperature means the drum starts hotter. Press ”▶ Roast” to watch a whole batch in fifteen seconds.

Notice that the curve dips before it climbs. The beans are not getting colder. The probe sits in a hot drum, and when cold beans pour in they wrap around it, so the reading drops first. The lowest point is called the turning point and usually shows up within a minute or two of charging.

Try the “Light” and “Dark” presets: first crack happens at exactly the same time. The only difference is how long you wait after it before dropping. Then try “Low heat”: without enough heat the beans never reach the drop temperature within twenty minutes, and the batch never finishes.

The limits, up front: this is a teaching model built from a few simplified formulas. It shows which direction a change pushes things, not a precise prediction. A real batch also depends on the origin, moisture, batch size and your machine, and where the probe sits can shift the reading of the same beans by ten degrees or more.

One thing to take with you

Look at the path of the curve before you look at where it ends. Two batches can drop at the same temperature and taste very different, because they rose at different speeds on the way there. The same goes for any result: if you only read the final number, you miss how it got there.

Source
// 每秒算一步。B = 豆子本身的溫度,從 25°C 起;含水率從 11% 起
// 熱風溫度:火力越大越熱,風門開越大帶走越多熱,投豆溫度高的部分是滾筒蓄熱、慢慢退掉
Ta = 125.4 + 2.16 * power - 0.27 * (airflow - 50) + (charge - 200) * 0.93 * Math.exp(-t / 116)
// 傳熱:風門開越大,熱風吹得越勤
k = 0.00238 * (0.85 + 0.3 * airflow / 100)
// 脫水:100°C 以上水分蒸發,吸走熱
ev = B > 100 ? 0.0665 * (B - 100) * moist : 0
// 一爆(196°C)後:先短暫放熱,再吸熱,所以升溫速度會掉一下
B = B + k * (Ta - B) - ev + crack(t - tFirstCrack)
// 探針讀數:探針本身要時間熱起來,所以投豆後讀數先降後升,最低點叫轉折點
probe = B + (charge - B) * Math.exp(-t / 38.5)
// 發展時間比例 = (出豆 - 一爆) / 出豆
dtr = (tDrop - tFirstCrack) / tDrop