OTTO CYCLE P-v DIAGRAM | PYTHON PROGRAMMING
OBJECTIVE:
- To plot the p-V diagram of the air standard otto cycle by finding out the state variables at each points.
OTTO CYCLE:
An Otto cycle is a thermodynamic cycle that is used for spark ignition piston engine.
It consists of four processes i.e.
- Reversible adiabatic (isentropic) compression
- Constant volume heat addition
- Reversible adiabatic (isentropic) expansion
- Constant volume heat rejection
The p-V diagram of the otto cycle is shown below:
Fig 1 – p-V diagram
- Process 1-2: Reversible adiabatic (isentropic) compression:
In this process the piston moves from BDC (bottom dead centre) to TDC (top dead centre). Air undergoes reversible adiabatic (isentropic) compression.
In this process the pressure increases from p1 to p2 while volume decreases from v1 to v2.
- Process 2-3: Constant volume heat addition:
In this process the piston stays at TDC for a moment. Heat is added at a constant volume (v2 = v3) from an external heat source. Temperature and pressure rises from t2 to t3 and p2 to p3.
In this process heat supplied = m(t3-t4)
Where is the specific heat supplied at constant volume.
- Process 3-4: Reversible adiabatic (isentropic) expansion:
Air undergoes reversible adiabatic (isentropic) expansion. Piston is pushed fromm the TDC to BDC. Here, pressure decreases from p3 to p4 volume rises from v3 to v4.
- Process 4-1: Constant volume heat rejection:
The piston rests at BDC for a moment and heat is rejected at constant volume (v4 = v1). In this process pressure falls from p4 to p1.
The temperature also decreases from t4 to t1.
Swept volume v_s:
It is the volume between the TDC & BDC, as the piston moves from one dead centre to another dead centre it sweeps the volume so it is called swept volume.
Clearance volume v_c :
It is the volume which is at the top when the piston is at TDC.
PYTHON CODE:
The below code has been written to calculate the state variables at each state point & then to generate the p-v plot:
import math
import matplotlib.pyplot as plt
def engine_kinematics(bore,stroke,con_rod,cr,start_crank,end_crank):
a = stroke/2 # crank pin radius
R = con_rod/a
#Volume parameters
V_s = math.pi*(1/4)*pow(bore,2)*stroke
V_c = V_s / (cr - 1)
sc = math.radians(start_crank)
ec = math.radians(end_crank)
num_values = 50
dtheta = (ec -sc)/(num_values - 1)
V = []
for i in range(0,num_values):
theta = sc + i*dtheta
term1 = 0.5*(cr - 1)
term2 = R + 1 - math.cos(theta)
term3 = pow(R,2) - pow(math.sin(theta),2)
term3 = pow(term3,0.5)
V.append((1 + term1*(term2 - term3))*V_c)
return V
p1 = 101325
t1 = 500
gamma = 1.4
t3 = 2300
bore = 0.1
stroke = 0.1
con_rod = 0.15
cr = 8
#Volume
V_s = math.pi*(1/4)*pow(bore,2)*stroke
V_c = V_s / (cr - 1)
v1 = V_c + V_s
# state point 2
v2 = V_c
#p2v2^gamma = p1v1^gamma
p2 = p1*pow(v1,gamma)/pow(v2,gamma)
#p2v2/t2 = p1v1/t1 | rhs = p1v1/t1 | t2 = p2v2/rhs
rhs = p1*v1/t1
t2 = p2*v2/rhs
V_compression = engine_kinematics(bore,stroke,con_rod,cr,180,0)
constant = p1*pow(v1,gamma)
P_compression = []
for v in V_compression:
P_compression.append(constant/pow(v,gamma))
# state point 3
v3 = v2
# p3v3/t3 = p2v2/t2 | rhs = p2v2t2 |p3 =rhs*t3/v3
rhs = p2*v2/t2
p3 = rhs*t3/v3
V_expansion = engine_kinematics(bore,stroke,con_rod,cr,0,180)
constant = p3*pow(v3,gamma)
P_expansion = []
for v in V_expansion:
P_expansion.append(constant/pow(v,gamma))
# state point 4
v4 = v1
#p4v4^gamma = p3v3^gamma
p4 = p3*pow(v3,gamma)/pow(v4,gamma)
# p4v4/t4 = rhs
t4 = p4*v4/rhs
plt.plot([v2,v3],[p2,p3])
plt.plot(V_compression,P_compression)
plt.plot(V_expansion,P_expansion)
plt.plot([v4,v1],[p4,p1])
plt.show()
- The math & the plotting libraries has been imported for using the modules.
- The above formula has been used to define a function
engine_kinematics(bore,stroke,con_rod,cr,start_crank,end_crank) which
takes the inputs bore, stroke, connecting rod, compression ratio, start crank angle & end crank angle.
The above inputs are defined in the engine geometric parameters from which swept volume and clearance volume is calculated. - The volume equation has been broken down into three terms:
term1 = 0.5*(cr - 1)
term2 = R + 1 - math.cos(theta)
term3 = pow(R,2) - pow(math.sin(theta),2)
term3 = pow(term3,0.5) - num_values = 50 so it will give 50 values, the values are then stored in the empty array V = [] by using the append command.
- return V is used to return the values for volume.
- The values for p1, v1 & t1 has been given.
- Calculating the swept volume by the formula `pi/4 *`(bore)`^2`* stroke.
Swept volume is the volume between the TDC & BDC . - Clearance volume is the volume left above the top dead center. and is calculated by the formula V_s / (cr - 1).
- v1 is the total volume v1 = V_c + V_s.
- Calculating the variables at state point 2 , similarly all the variables are calculated at each point.
- After calculating the variables at each point & defining the function we create the P-V plot with the plt.plot & plt. show command.
RESULT:
Fig 2 : P-V plot otto cycle