File size: 2,430 Bytes
6aac9e7
 
 
ca3fa03
6aac9e7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ca3fa03
 
 
6aac9e7
ca3fa03
 
6aac9e7
ca3fa03
 
 
 
6aac9e7
 
ca3fa03
6aac9e7
6e019e4
 
 
ca3fa03
 
6aac9e7
ca3fa03
6aac9e7
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import gradio as gr
import math

def calculate_cooling_time(initial_temperature_C, ambient_temperature_C, volume_coffee_ml, diameter_mug_mm, desired_temperature_C):
    # Constants
    specific_heat_water_J_per_g_C = 4.186  # in J/g°C
    thermal_conductivity_ceramic_W_per_m_K = 1  # in W/m·K
    density_water_g_per_ml = 1  # in g/ml

    # Convert units
    volume_coffee_m3 = volume_coffee_ml * 1e-6  # convert ml to m³
    diameter_mug_m = diameter_mug_mm * 1e-3  # convert mm to m

    # Calculate the radius of the mug and the coffee
    radius_mug_m = diameter_mug_m / 2
    radius_coffee_m = radius_mug_m  # we're assuming the coffee fills the mug to the brim

    # Estimate the height of the coffee based on the volume
    height_coffee_m = volume_coffee_m3 / (math.pi * radius_coffee_m**2)

    # Calculate the surface area of the coffee exposed to the air
    surface_area_coffee_m2 = math.pi * radius_coffee_m**2

    # Calculate the mass of the coffee
    mass_coffee_g = volume_coffee_ml * density_water_g_per_ml  # convert volume to mass

    # Calculate the temperature difference between the coffee and the ambient temperature
    delta_temperature_C = initial_temperature_C - ambient_temperature_C

    # Estimate the cooling constant
    cooling_constant = (thermal_conductivity_ceramic_W_per_m_K * surface_area_coffee_m2 * delta_temperature_C) / (specific_heat_water_J_per_g_C * mass_coffee_g)

    # Check if the desired temperature is less than the initial temperature
    if desired_temperature_C >= initial_temperature_C:
        return "Desired temperature must be less than initial temperature"

    # Rearrange the temperature equation to solve for time
    cooling_time_s = -math.log((desired_temperature_C - ambient_temperature_C) / (initial_temperature_C - ambient_temperature_C)) / cooling_constant

    # Convert the cooling time from seconds to minutes
    cooling_time_min = cooling_time_s / 60

    return cooling_time_min

iface = gr.Interface(
    fn=calculate_cooling_time, 
    inputs=[
        gr.inputs.Number(label="Initial temperature of coffee (C)"),
        gr.inputs.Number(label="Ambient temperature (C)"),
        gr.inputs.Number(label="Volume of coffee (ml)"),
        gr.inputs.Number(label="Diameter of mug (mm)"),
        gr.inputs.Number(label="Desired temperature (C)")
    ], 
    outputs=gr.outputs.Textbox(label="Estimated cooling time (minutes)"),
)

iface.launch()