Hot-air balloon
rodzic
5d81f821a7
commit
51da21c0d0
|
@ -0,0 +1,300 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "07f8c98b-84ac-4365-a15b-7521e8e0a281",
|
||||
"metadata": {
|
||||
"extensions": {
|
||||
"jupyter_dashboards": {
|
||||
"activeView": "grid_default",
|
||||
"views": {
|
||||
"grid_default": {
|
||||
"col": 0,
|
||||
"height": 1,
|
||||
"hidden": false,
|
||||
"row": 0,
|
||||
"width": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"source": [
|
||||
"## Hot air balloon (box shape)\n",
|
||||
"### Lift calculator\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 86,
|
||||
"id": "6ea87a15-f571-4611-8487-5b7556e2ef45",
|
||||
"metadata": {
|
||||
"extensions": {
|
||||
"jupyter_dashboards": {
|
||||
"activeView": "grid_default",
|
||||
"views": {
|
||||
"grid_default": {
|
||||
"col": null,
|
||||
"height": 2,
|
||||
"hidden": true,
|
||||
"row": null,
|
||||
"width": 2
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# https://pythreejs.readthedocs.io\n",
|
||||
"from pythreejs import *\n",
|
||||
"from IPython.display import HTML,display\n",
|
||||
"from math import pi\n",
|
||||
"\n",
|
||||
"# https://ipywidgets.readthedocs.io\n",
|
||||
"import ipywidgets as widgets\n",
|
||||
"from ipywidgets import Layout\n",
|
||||
"\n",
|
||||
"# https://pypi.org/project/termcolor/\n",
|
||||
"from termcolor import colored\n",
|
||||
"\n",
|
||||
"#from scipy.interpolate import interp1d\n",
|
||||
"#import numpy as np"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 87,
|
||||
"id": "d075a994-76bb-46f7-bdfb-cc6ef449dc43",
|
||||
"metadata": {
|
||||
"extensions": {
|
||||
"jupyter_dashboards": {
|
||||
"activeView": "grid_default",
|
||||
"views": {
|
||||
"grid_default": {
|
||||
"col": null,
|
||||
"height": 2,
|
||||
"hidden": true,
|
||||
"row": null,
|
||||
"width": 2
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# air density–temperature relationship at 1 atm or 101.325 kPa\n",
|
||||
"# https://en.wikipedia.org/wiki/Density_of_air\n",
|
||||
"# https://www.engineersedge.com/calculators/air-density.htm\n",
|
||||
"# temp in st.C density in g/m3\n",
|
||||
"\n",
|
||||
"#temp = [-25,-20,-15,-10,-5,0,5,10,15,20,25,30,35]\n",
|
||||
"#dens = [1422.4,1394.3,1367.3,1341.3,1316.3,1292.2,1269.0,1246.6,1225.0,1204.1,1183.9,1164.4,1145.5]\n",
|
||||
"#dens_temp_func = interp1d(temp, dens)\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"def airDensity(temp=0.0):\n",
|
||||
" tempK = temp + 273.0 # absolute temperature [K]\n",
|
||||
" p = 101325.0 # pressure [Pa]\n",
|
||||
" rSpec = 287.0500676 # specific gas constant for dry air [J⋅kg−1⋅K−1]\n",
|
||||
" return 1000.0 * p / ( rSpec * tempK )"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 98,
|
||||
"id": "9a4bbc2b-810d-40ef-8189-9efb64b6df6b",
|
||||
"metadata": {
|
||||
"extensions": {
|
||||
"jupyter_dashboards": {
|
||||
"activeView": "grid_default",
|
||||
"views": {
|
||||
"grid_default": {
|
||||
"col": null,
|
||||
"height": 2,
|
||||
"hidden": true,
|
||||
"row": null,
|
||||
"width": 2
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"tags": []
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"application/vnd.jupyter.widget-view+json": {
|
||||
"model_id": "1501ab1298aa43a4b5d45c8f4fd3a186",
|
||||
"version_major": 2,
|
||||
"version_minor": 0
|
||||
},
|
||||
"text/plain": [
|
||||
"interactive(children=(FloatSlider(value=2.0, description='Width [m]:', layout=Layout(width='500px'), max=5.0, …"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
"output_type": "display_data"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"def f(width,height,depth,airTemp,hotAirTemp,coatDens):\n",
|
||||
" print(\"\\n\")\n",
|
||||
"# Volume\n",
|
||||
" volume = width * height * depth\n",
|
||||
" print( \"Volume: {:.2f} [m3]\".format(volume)) \n",
|
||||
"# Area\n",
|
||||
" area = 2 * (width * height + width * depth + height * depth)\n",
|
||||
" print( \"Area: {:.2f} [m2]\".format(area)) \n",
|
||||
"# Coating density 300g / 4x5m = 15g/m2\n",
|
||||
"# coatingDensity = 15.0\n",
|
||||
"# print( \"Coating density: {:.2f} [g/m2]\".format(coatingDensity)) \n",
|
||||
" coatingWeight = coatDens * area\n",
|
||||
" print( \"Coating weight: {:.2f} [g]\".format(coatingWeight)) \n",
|
||||
"# Lift per volume g/m3 \n",
|
||||
"# airDens = dens_temp_func( airTemp )\n",
|
||||
"# hotAirDens = dens_temp_func( hotAirTemp ) \n",
|
||||
" airDens = airDensity( airTemp )\n",
|
||||
" hotAirDens = airDensity( hotAirTemp ) \n",
|
||||
" lift = airDens - hotAirDens\n",
|
||||
" print( \"Lift: {:.2f} [g/m3]\".format(lift)) \n",
|
||||
"# Total lift force lift * volume \n",
|
||||
" totalLiftForce = lift * volume\n",
|
||||
" print( \"Total lift force: {:.2f} [g]\".format(totalLiftForce)) \n",
|
||||
"# Free lift force totalLiftForce - coatingWeight \n",
|
||||
" freeLiftForce = totalLiftForce - coatingWeight\n",
|
||||
" if freeLiftForce < 0:\n",
|
||||
" color = 'red'\n",
|
||||
" else:\n",
|
||||
" color = None\n",
|
||||
" print( \"Free lift force:\", colored(\"{:.2f} [g]\".format(freeLiftForce),color)) \n",
|
||||
" print(\"\\n\")\n",
|
||||
"\n",
|
||||
" box = Mesh(geometry=BoxBufferGeometry(\n",
|
||||
" width=width, \n",
|
||||
" height=height, \n",
|
||||
" depth=depth,\n",
|
||||
" widthSegments=5, \n",
|
||||
" heightSegments=10,\n",
|
||||
" depthSegments=15),\n",
|
||||
" material=MeshLambertMaterial(color='gray')\n",
|
||||
" )\n",
|
||||
" keyLight = DirectionalLight(color='white', position=[3, 5, 1], intensity=0.5)\n",
|
||||
"\n",
|
||||
" c = PerspectiveCamera(position=[2, 2, 5], up=[0, 1, 0], children=[keyLight])\n",
|
||||
"\n",
|
||||
" scene = Scene(children=[box, c, AmbientLight(color='#777777')], background=None)\n",
|
||||
"\n",
|
||||
" renderer = Renderer(camera=c,\n",
|
||||
" scene=scene,\n",
|
||||
" alpha=True,\n",
|
||||
" clearOpacity=1.0,\n",
|
||||
" clearColor='#62a0ea',\n",
|
||||
" controls=[OrbitControls(controlling=c)])\n",
|
||||
" return renderer\n",
|
||||
"\n",
|
||||
"#display(HTML('''<style>\n",
|
||||
"# .widget-label { min-width: 25ex !important; }\n",
|
||||
"#</style>'''))\n",
|
||||
"\n",
|
||||
"layout=Layout(width='500px')\n",
|
||||
"style = {'description_width': 'initial'}\n",
|
||||
" \n",
|
||||
"widgets.interact(f, \n",
|
||||
" width=widgets.FloatSlider(min=0.1, max=5.0, step=0.1, value=2.0, description='Width [m]:',readout_format='.1f',layout=layout,style=style), \n",
|
||||
" height=widgets.FloatSlider(min=0.1, max=5.0, step=0.1, value=2.0, description='Height [m]:',readout_format='.1f',layout=layout,style=style), \n",
|
||||
" depth=widgets.FloatSlider(min=0.1, max=5.0, step=0.1, value=2.0, description='Depth [m]:',readout_format='.1f',layout=layout,style=style),\n",
|
||||
" airTemp=widgets.FloatSlider(min=-40, max=35, step=1.0, value=10.0, description='Air temp.[°C]:',readout_format='.0f',layout=layout,style=style), \n",
|
||||
" hotAirTemp=widgets.FloatSlider(min=-40, max=55, step=1.0, value=35.0, description='Hot air temp.[°C]:',readout_format='.0f',layout=layout,style=style),\n",
|
||||
" coatDens=widgets.FloatSlider(min=1, max=50, step=1.0, value=15.0, description='Coating density [g/m2]:',readout_format='.0f',layout=layout,style=style) \n",
|
||||
" );\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "74ed5886-bf61-4e41-8482-bf8ba34faba6",
|
||||
"metadata": {
|
||||
"extensions": {
|
||||
"jupyter_dashboards": {
|
||||
"activeView": "grid_default",
|
||||
"views": {
|
||||
"grid_default": {
|
||||
"col": null,
|
||||
"height": 2,
|
||||
"hidden": true,
|
||||
"row": null,
|
||||
"width": 2
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"tags": []
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "2f3b63fd-d5ea-40b6-a2f9-b31c84cfef36",
|
||||
"metadata": {
|
||||
"extensions": {
|
||||
"jupyter_dashboards": {
|
||||
"activeView": "grid_default",
|
||||
"views": {
|
||||
"grid_default": {
|
||||
"col": null,
|
||||
"height": 2,
|
||||
"hidden": true,
|
||||
"row": null,
|
||||
"width": 2
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"extensions": {
|
||||
"jupyter_dashboards": {
|
||||
"activeView": "grid_default",
|
||||
"version": 1,
|
||||
"views": {
|
||||
"grid_default": {
|
||||
"cellMargin": 2,
|
||||
"defaultCellHeight": 60,
|
||||
"maxColumns": 12,
|
||||
"name": "grid",
|
||||
"type": "grid"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3 (ipykernel)",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 3
|
||||
},
|
||||
"file_extension": ".py",
|
||||
"mimetype": "text/x-python",
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.9.2"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 5
|
||||
}
|
Ładowanie…
Reference in New Issue