Project

Otto Cycle

This code is to generate the otto cycle graph.

Using thermodynamic coditions for gas laws and kinematics of engine, we can plot the results on a pv plot.

By defining the swept volume, clearance volume of engine and crank angle, crank angle can be divided into small intervas at which the calculation is done.

this shows the compression and expansion processes respectively

constant volume heat addition process follows based on gas laws

the formulas used are:

clearance volume = swept volume/(compression ratio-1)

V/Vc = 0.5*(cr-1)+R+1-cos(theta)-(R^2-(sin(theta))^2)

pressure*volume^(gamma) = constant

other thermodynamic relations

	#otto cycle simulator

import math
import matplotlib.pyplot as plt

def engine_kinematics(bore,stroke,con_rod,cr,start_crank,end_crank):

	#engine kinematics

	a = stroke/2
	R = con_rod/a
	#volume computation
	v_s = (math.pi/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			
#inputs
p1 = 101325
t1 = 500
gamma = 1.4
t3 = 2300
#geometric parameters
bore = 0.1
stroke = 0.1
con_rod = 0.15
cr = 12
#volume computation
v_s = (math.pi/4)*pow(bore,2)*stroke
v_c = v_s/(cr-1)
v1 = v_c + v_s
#state point 2
v2 = v_c
#p2v2^gama = p1v1^gamma
p2 = p1*pow(v1,gamma)/pow(v2, gamma)

#p2v2/t2 = p1v1/t1| rhs = p1v1/t1 | p2v2/t2 = rhs | t2 = p2v2/rhs
rhs = p1*v1/t1
t2 = p2*v2/rhs
V_compression = engine_kinematics(bore,stroke,con_rod,cr,0,180)

constant = p1*pow(v1,gamma)

P_compression = []

for v in V_compression:
	P_compression.append(constant/pow(v,gamma))
#P_compression * V_comression ^ gamma = constant
#state point 3
v3 = v2

#p3v3/t3 = p2v2/t2 | rhs = p2v2/t2 | 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()
	

V = engine_kinematics(bore,stroke,con_rod,cr,0,180)

Your portfolio, next

Ship work like this
in your own course.

Talk to a career counsellor

Free 20-minute call. We'll map the right course to where you want to work.

By submitting you agree to our Terms and Privacy Policy.

Talk to a career counsellor

Free 20-minute call. We'll map the right course to where you want to work.

By submitting you agree to our Terms and Privacy Policy.