Greetings Marco, I have taken the liberty of combining your scripts into one Mathematica Manipulates. Basic initial conditions with ranges:
- Coffee 80 ?C
- 50 to100?C
- Milk 5?C
- 1?C to ambient
- Ambient /room temperature 20?C
- 0?C to 30?C
- Length of experiment in minutes 30
- 1 minute to 100 minutes
- Time to add milk 1 minute
- 1 minute to 100 minutes
- Volume of coffee 200ml
- 100ml to 500ml
- Volume of milk 20 ml
- 0 ml to 50ml
Code:
Manipulate[
{
sols = NDSolve[{
D[Temp[t], t] == -0.1 (Temp[t] - ambient),
Temp[0] == beginTemp,
WhenEvent[
t > addMilk,
Temp[t] -> (coffee*Temp[t] + milk*milkTemp)/(coffee + milk)]},
Temp,
{t, 0, experimentTime}
];
Plot[
Temp[t] /. sols, {t, 0, experimentTime},
PlotRange -> {{0, experimentTime}, {0, beginTemp + 10}},
AxesLabel -> {"Time (minutes)", "Temperature ?C"},
LabelStyle -> Directive[Bold, Medium],
ImageSize -> {{400, 600}}]
},
{{ambient, 20, "Ambient temperature"}, 0, 30, 0.5,
Appearance -> "Labeled"},
{{experimentTime, 30, "Time of Experiement(minutes)"}, 1, 100, 0.5, Appearance -> "Labeled"},
{{beginTemp, 80, "Coffee start temperature"}, 50, 100, 0.5, Appearance -> "Labeled"},
{{milkTemp, 5, "Milk start temperature"}, 1, ambient, 0.5, Appearance -> "Labeled"},
{{addMilk, 1, "Time to add milk(minutes)"}, 1, 100, 1, Appearance -> "Labeled"},
{{coffee, 200, "Coffee volume (ml)"}, 100, 500, 10, Appearance -> "Labeled"},
{{milk, 20, "Milk volume (ml)"}, 0, 50, 5, Appearance -> "Labeled"},
ControlPlacement -> Left
]