Compressed-Gas Spray

CaptionResourceCreateNotebook

Compressed-gas dusters spray a gas such as difluoroethane (DFE) to remove dust from electronics. When gas exits the valve, liquid DFE in the container vaporizes to maintain vapor-liquid equilibrium. The energy to vaporize the liquid is obtained by cooling the remaining liquid; the container is modeled as adiabatic in this Demonstration. Decreasing the liquid temperature decreases its saturation pressure, which lowers the driving force, and thus the gas flow rate decreases. For smaller initial volume fractions of liquid (change with a slider), the liquid cools faster.

Select a plot (volume, moles, temperature or pressure) with buttons to display how that property changes with time. Animate the duster by clicking the play button next to "spray gas". Select "stop at -5 °C" and the spray will stop once -5 °C is reached; or set the time the spray stops with a slider. In either case, the black dot(s) show the conditions of the duster on the plot. The liquid and vapor DFE are assumed to be in equilibrium at all times. As the spray time increases, the adiabatic approximation becomes less accurate.

Initialization CodeResourceCreateNotebook

ManipulateResourceCreateNotebook

Manipulate[
Module[{z,T0,P0,R,Vcan,Psat0,ΔHvap,Cp,ρL,vL0,n0,Psat,α,sol,moles,temperature,pressure,vL,vV,nL,nV,tfinal,r,can,p1,p2,p3,p4},
z=If[set,z2,z1];
T0=25;(*°C*)P0=1;(*bar*)R=0.08314;(*L bar/mol/K*)Vcan=0.375;(*L*)

Psat0=10^(4.23406-896.171/(T0+238.3));(*bar,°C*)

ΔHvap=21.8;(*kJ/mol*)Cp=0.0707;(*kJ/mol/K*)ρL=13.57;(*mol/L*)

(*total moles at T=300k*)
vL0=f*Vcan;
n0=vL0*ρL+((Psat0*(Vcan-vL0))/(R*(T0+273)));

Psat[t_]:=10^(4.23406-896.171/(T[t]+238.3));

α=6*^-4;(*mol/bar/time*)

sol=Quiet@Flatten@NDSolve[{
n'[t]==-α*(Psat[t]-P0),
T'[t]==-((α*(Psat[t]-P0)*ΔHvap)/(n[t]*Cp)),
n[0]==n0,T[0]==T0},{n,T},{t,0,300}];

moles=Evaluate[n/.sol];
temperature=Evaluate[T/.sol];
pressure[t_]=Evaluate[Psat[t]/.sol];

vL[t_]:=((moles[t]-Vcan*pressure[t]/(R*(temperature[t]+273)))/(ρL-pressure[t]/(R*(temperature[t]+273))));
vV[t_]:=Vcan-vL[t];
nL[t_]:=ρL*vL[t];
nV[t_]:=((pressure[t]*vV[t])/(R*(temperature[t]+273)));

tfinal=If[set,spraytime,tm/.Quiet@FindRoot[temperature[tm]==-5,{tm,0}]];

r=0.08;
can=Show[Graphics[{
{Thickness@0.04,Line[{{0,1.01*Vcan},{0,1.02*Vcan}}]},
EdgeForm@Thick,FaceForm@White,Rectangle[{-r/3,1.02*Vcan},{r/3,1.175*Vcan}],
Line[{{#*r/3,1.02*Vcan},{#*r/3,1.175*Vcan}}]&/@Range[-1,1,0.25],
Disk[{r/6,1.1*Vcan},{0.012,0.0096}],PointSize@0.025,Point[{r/6,1.1*Vcan}],
{Thick,Dashed,Opacity[Rescale[vV'[z],{vV'[tfinal],vV'[0]}],RGBColor[0.,0.84,0.83]],
If[0<z,Line[{{r/2,1.1*Vcan},{1.5*r,Vcan*(1.1+0.1*#)}}]&/@Range[-1,1,0.5]]}
}],
Plot[{Evaluate[(Sqrt[(r^2)-(x^2)])+Vcan-r],Evaluate[(Sqrt[(r^2)-(x^2)])+Vcan-r]},{x,-r,r},PlotStyle->{{Thick,Black}},Filling->{1->{0,RGBColor[0,0.85,0.8]},2->{vL[z],White}}],
Graphics[{Thick,Line[{{-r,Vcan-r},{-r,0},{r,0},{r,Vcan-r}}]}],
ImageSize->{150,375},AspectRatio->Full,Axes->False,PlotRange->{{-r,0.14},{0,0.45}},PlotRangePadding->0.001];

p1=Plot[{vL[time],vV[time]},{time,0,tfinal},PlotStyle->{{Thick,Orange},{Thick,Dashed,Orange}},PlotRange->{0,Vcan},FrameLabel->{"time (s)","volume (L)"},
Epilog->{
Text[Framed[Style[#1,18],Background->White,FrameStyle->None,FrameMargins->Tiny],#2]&@@@{{"liquid",{0.33*tfinal,vL[0.33*tfinal]}},{"vapor",{0.666*tfinal,vV[0.666*tfinal]}}},
PointSize@0.025,Point[{z,vL[z]}],Point[{z,vV[z]}]
}];

p2=Plot[{nL[time],nV[time]},{time,0,tfinal},PlotStyle->{{Thick,Purple},{Thick,Dashed,Purple}},PlotRange->{0,n0},FrameLabel->{"time (s)","moles"},
Epilog->{
Text[Framed[Style[#1,18],Background->White,FrameStyle->None,FrameMargins->Tiny],#2]&@@@{{"liquid",{0.33*tfinal,nL[0.33*tfinal]}},{"vapor",{0.666*tfinal,nV[0.666*tfinal]}}},
PointSize@0.025,Point[{z,nL[z]}],Point[{z,nV[z]}]
}];

p3=Plot[temperature[time],{time,0,tfinal},PlotStyle->{Thick,Black},PlotRange->{temperature[tfinal],T0},FrameLabel->{"time (s)","temperature (C)"},
Epilog->{PointSize@0.025,Point[{z,temperature[z]}]}];

p4=Plot[pressure[time],{time,0,tfinal},PlotStyle->{Thick,Blue},PlotRange->{P0,Psat0},FrameLabel->{"time (s)","pressure (bar)"},
Epilog->{PointSize@0.025,Point[{z,pressure[z]}]}];

Grid@{{can,
Show[Switch[npr,1,p1,2,p2,3,p3,4,p4],Axes->False,Frame->True,FrameTicks->True,LabelStyle->{17,Black},ImagePadding->{{60,10},{45,10}},ImageSize->{440,375},AspectRatio->Full,PlotRangePadding->{Scaled@0.015,Scaled@0.05},
PlotLabel->Style[Row@{
Subscript[Style["P",Italic],#1]," = ",NumberForm[pressure[#2],{2,1}]," bar",Spacer@20,
Subscript[Style["T",Italic],#1]," = ",NumberForm[temperature[#2],{3,1}]," C"
}&@@If[z==0,{"i",0},{"f",tfinal}],18,If[z==0∨z==If[set,spraytime,264.24*f+5.4203],Black,White]]
]}}
],
Column[{
Row[{Control[{{npr,1,""},{1->" volume ",2->" moles ",3->" temperature ",4->" pressure "},Setter,
TrackingFunction->(npr=#;z1=0;z2=0;&)}],Spacer[30],
Control[{{set,False,""},{False->" stop at -5 °C ",True->" adjust stopping time"},RadioButton}]}],
Row[{
Control[{{f,0.75,"initial volume fraction of liquid"},0.1,1,0.01,Appearance->"Labeled",
TrackingFunction->(f=#;z1=0;z2=0;&)}],Spacer[20],
PaneSelector[{
False->Control[{{z1,0,"spray gas"},0,264.24*f+5.4203,Trigger,AnimationRate->30}],
True->Control[{{z2,0,"spray gas"},0,spraytime,Trigger,AnimationRate->30}]
},Dynamic@set]}],
PaneSelector[{True->Control[{{spraytime,204,"time sprayed (s)"},20,300,5,Appearance->"Labeled",
TrackingFunction->(spraytime=#;z2=0;&)}]},Dynamic@set]
}]
]

SnapshotsResourceCreateNotebook

Source & Additional Information

Contributed By:ResourceCreateNotebook

Rachael L. Baumann

John L. Falconer

DetailsResourceCreateNotebook

The total volume of the can (Subscript[V, can]) is 0.375 L, and the initial volume of liquid in the can (Subscript[V, 0]^L) is:

(Subscript[V, 0]^L)=f (Subscript[V, can]),

where f is the initial volume fraction of liquid.

Initially all contents are at room temperature (300 K), and the pressure inside the can is the saturation pressure (P^sat) at 300 K. The Antoine equation is used to calculate (P^sat):

(P^sat)=(10^(A-(B/(T+C)))),

where (P^sat) is in bar, T is temperature (K) and A, B and C are Antoine constants.

The total moles n are equal to the liquid moles (n^L) plus the vapor moles (n^V):

n=(n^L)+(n^V),

(n^L)=(ρ^L) (V^L),

(n^V)=(((V^V) (P^sat))/(R T)),

where (ρ^L) is the liquid molar density (mol/L), R is the ideal gas constant ([L bar]/[mol K]), and (V^L) and (V^V) are the liquid and vapor volumes at any time.

The liquid volume is found by rearranging the equation for total moles:

(V^L)=((n-(Subscript[V, can]) (P^sat)/R T)/((ρ^L)-(P^sat)/R T)),

with (V^V)=(Subscript[V, can])-(V^L).

From an unsteady-state mole balance:

((dn)/(dt))=-α ((P^sat)-1)

at t=0, n=(Subscript[n, T=300]),

where t is time (s), α is a constant (mol/[bar s]) and the air pressure outside of the can is 1 bar.

From the energy balance:

((dT)/(dt))=-((α ((P^sat)-1) Δ(H^vap))/(n Cp))

at t=0, T=300 K, where Δ(H^vap) is the heat of vaporization (kJ/mol), and Cp is the liquid heat capacity (kJ/[mol K]).

The screencast video at[1] shows how to use this Demonstration.

References & CitationsResourceCreateNotebook

[1] Compressed-Gas Spray[Video]. (Aug 31, 2016) www.colorado.edu/learncheme/thermodynamics/CompressedGasSray.html.

Submission NotesResourceCreateNotebook

Additional information for the reviewer.

KeywordsResourceCreateNotebook

chemical engineering

mechanical engineering

thermodynamics

unsteady state energy balance

mass balance

vapor-liquid equilibrium

VLE

unsteady state

CategoriesResourceCreateNotebook

Related DemonstrationsResourceCreateNotebook

LinksResourceCreateNotebook

CompatibilityResourceCreateNotebook

AR SupportResourceCreateNotebook

Wolfram Language VersionResourceCreateNotebook

6

Cloud SupportResourceCreateNotebook