mirror of
https://gitlab.com/Anson-Projects/projects.git
synced 2025-06-16 06:56:46 +00:00
40 lines
7.3 KiB
JSON
40 lines
7.3 KiB
JSON
[
|
||
{
|
||
"path": "posts/2021-04-01-air-propulsion-simulation/",
|
||
"title": "Air Propulsion Simulation",
|
||
"description": "Simulating the performance of an air propulsion system as an alternative to solid rocket motors.",
|
||
"author": [
|
||
{
|
||
"name": "Anson Biggs",
|
||
"url": "https://ansonbiggs.com"
|
||
}
|
||
],
|
||
"date": "2021-04-01",
|
||
"categories": [
|
||
"Julia",
|
||
"Capstone"
|
||
],
|
||
"contents": "\r\nFor my team was tasked with designing a system capable of moving mining equipment and materials around the surface of the Moon using a propolsive landing. The system had to be tested on earth with something that was feasible for our team to build in 2 semesters. One of the first considerations my capstone advisor wanted was to test the feasibility of an air propulsion system instead of the obvious solution that of using solid rocket motors. This document is really just napkin math to determine if the system is even feasibly and is not mean’t to be a rigorous study of an air propulsion system which would easily keep a capstone team busy by itself.\r\n\r\n\r\nShow code\r\nusing Plots\r\nplotly()\r\ntheme(:ggplot2); # In true R spirit\r\n\r\nusing Unitful\r\nusing DataFrames\r\nusing Measurements\r\nusing Measurements: value, uncertainty\r\nusing CSV\r\n\r\nThe Simulation\r\nAn off the shelf paintball gun tank was used for the pressure vessel. This was chosen because they are very high pressure for their weight, and are designed to be bumped around.\r\n\r\n# Tank https://www.amazon.com/Empire-Paintball-BASICS-Pressure-Compressed/dp/B07B6M48SR/\r\nV = (85 ± 5)u\"inch^3\"\r\nP0 = (4200.0 ± 300)u\"psi\"\r\nWtank = (2.3 ± 0.2)u\"lb\"\r\nPmax = (250 ± 50)u\"psi\" # Max Pressure that can come out the nozzle\r\n\r\nThe nozzle diameter was changed until the air prop system had a burn time similar to a G18ST rocket motor.\r\n\r\n# Params\r\nd_nozzle = ((1 // 18) ± 0.001)u\"inch\"\r\na_nozzle = (pi / 4) * d_nozzle^2\r\n\r\nThese are just universal values for what a normal day would look like in Arizona. (Çengel and Boles 2015)\r\n\r\n# Universal Stuff\r\nP_amb = (1 ± 0.2)u\"atm\"\r\nγ = 1.4 ± 0.05\r\nR = 287.05u\"J/(kg * K)\"\r\nT = (300 ± 20)u\"K\"\r\n\r\nThe actual simulation is actually quite simple. The basic idea is that using the current pressure you can calculate \\(\\dot{m}\\), which allows calculating the Thrust, and then you can just subtract the current mass of air in the tank by \\(\\dot{m}\\) and recalculate pressure using the new mass then repeat the whole process.\r\nThe bulk of the equations in the simulation came from (Çengel and Boles 2015), while the Thrust and \\(v_e\\) equations came from (Sutton and Biblarz 2001, eq: 2-14).\r\n\\[ T = \\dot{m} \\cdot v_\\text{Exit} + A_\\text{Nozzle} \\cdot (P - P_\\text{Ambient}) \\]\r\nThe initial pressure difference is 4190.0 ± 300.0 psi which is absolutely massive so the area of the nozzle greatly affects the simulation. The paintball tanks do come with pressure regulators, in our case 800 psi which is still a very large number compared to atmospheric pressure. While the total impulse of the system doesn’t really change with different nozzle areas the peak thrust and burn time vary greatly. One of the benefits of doing air propulsion, and the reason it was even considered so seriously, is that it should be possible to vary the nozzle diameter in flight which would make controlled landing much easier.\r\n\r\ndf = let\r\nt = 0.0u\"s\"\r\nP = P0 |> u\"Pa\"\r\nM = V * (P / (R * T)) |> u\"kg\"\r\nts = 1u\"ms\"\r\ndf = DataFrame(Thrust=(0 ± 0)u\"N\", Pressure=P0, Time=0.0u\"s\", Mass=M)\r\n while M > 0.005u\"kg\"\r\n # Calculate what is leaving tank\r\n P = minimum([P, Pmax])\r\n ve = sqrt((2 * γ / (γ - 1)) * R * T * (1 - P_amb / P)^((γ - 1) / γ)) |> u\"m/s\"\r\n ρ = P / (R * T) |> u\"kg/m^3\"\r\n ṁ = ρ * a_nozzle * ve |> u\"kg/s\"\r\n \r\n Thrust = ṁ * ve + a_nozzle * (P - P_amb) |> u\"N\"\r\n \r\n # Calculate what is still in the tank\r\n M = M - ṁ * ts |> u\"kg\"\r\n P = (M * R * T) / V |> u\"Pa\"\r\n t = t + ts\r\n \r\n df_step = DataFrame(Thrust=Thrust, Pressure=P, Time=t, Mass=M)\r\n append!(df, df_step)\r\n end\r\n df\r\nend\r\n\r\nAnalysis\r\nHeres the results plotted. Notice the massive error once the tank starts running low. This is because the calculation for pressure has a lot of variables that are very uncertain. This is mostly due to air being a compressible fluid which is what makes this simulation so difficult to do accurately. The thrust being below 0 N might not make intuitive sense, but its technically possible for the pressure to compress which would leave the inside of the rocket nozzle with a pressure thats actually below atmospheric pressure. The effect would likely last a fraction of a second but the point stands that this simulation is very inaccurate and only meant to get an idea of what an air propulsion system is capable of.\r\n\r\n\r\nShow code\r\n\r\nthrust_values = df.Thrust .|> ustrip .|> value;\r\nthrust_uncertainties = df.Thrust .|> ustrip .|> uncertainty;\r\n\r\nair = DataFrame(Thrust=thrust_values, Uncertainty=thrust_uncertainties, Time=df.Time .|> u\"s\" .|> ustrip);\r\n\r\n\r\nplot(df.Time .|> ustrip, thrust_values, \r\n title=\"Thrust Over Time\", \r\n ribbon=(thrust_uncertainties, thrust_uncertainties), \r\n fillalpha=.2,label=\"Thrust\",\r\n xlabel=\"Time (s)\", \r\n ylabel=\"Thrust (N)\",\r\n size = (1200, 800),\r\n )\r\n\r\n\r\nFigure 1: Air Proplsion Simulation\r\n\r\n\r\n\r\nIn Figure 2, the air propulsion simulation is compared to commercially available rocket motors. This early in the project we have no idea whether short burns or longer burns are ideal for a propulsive landing so the air propulsion system was compared to a variety of different motors.\r\n\r\n\r\nShow code\r\n\r\nf10 = CSV.read(\"AeroTech_F10.csv\", DataFrame);\r\nf15 = CSV.read(\"Estes_F15.csv\", DataFrame);\r\ng8 = CSV.read(\"AeroTech_G8ST.csv\", DataFrame);\r\n\r\n\r\nplot(air.Time, air.Thrust, label=\"Air Propulsion\", fillalpha=.1, legend=:topleft, size = (1200, 800));\r\n\r\nfor (d, l) in [(f10, \"F10\"), (f15, \"F15\"), (g8, \"G8ST\")]\r\n plot!(d[!,\"Time (s)\"], d[!, \"Thrust (N)\"], label=l);\r\nend\r\n\r\ntitle!(\"Propulsion Comparison\");\r\nxlabel!(\"Time (s)\");\r\nylabel!(\"Thrust (N)\")\r\n\r\n\r\nFigure 2: Rocket Motor Data: (Coker, n.d.)\r\n\r\n\r\n\r\nBig conclusion about things.\r\n\r\n\r\n\r\nCoker, John. n.d. “Rocket Motor Data.” https://www.thrustcurve.org/.\r\n\r\n\r\nÇengel, Yunus A., and Michael A. Boles. 2015. Thermodynamics: An Engineering Approach. Eighth edition. New York: McGraw-Hill Education.\r\n\r\n\r\nSutton, George P., and Oscar Biblarz. 2001. Rocket Propulsion Elements. 7th ed. New York: John Wiley & Sons.\r\n\r\n\r\n\r\n\r\n",
|
||
"preview": {},
|
||
"last_modified": "2021-04-04T13:12:28-07:00",
|
||
"input_file": "air-propulsion-simulation.utf8.md"
|
||
},
|
||
{
|
||
"path": "posts/welcome/",
|
||
"title": "Welcome to Anson's Projects",
|
||
"description": "Welcome to our new blog, Anson's Projects. We hope you enjoy \nreading what we have to say!",
|
||
"author": [
|
||
{
|
||
"name": "Nora Jones",
|
||
"url": "https://example.com/norajones"
|
||
}
|
||
],
|
||
"date": "2021-04-01",
|
||
"categories": [],
|
||
"contents": "\n\n\n\n",
|
||
"preview": {},
|
||
"last_modified": "2021-04-01T20:38:44-07:00",
|
||
"input_file": {}
|
||
}
|
||
]
|