カルノーサイクルは、熱機関の効率の理論的上限を与えるサイクルです。1824年にサディ・カルノーが提唱したこのサイクルは、すべて可逆過程で構成されており、同じ温度条件で動作する熱機関の中で最高の効率を達成します。
カルノーサイクルの理解は、エンジン、発電所、冷凍機の設計における効率評価の基盤です。本記事では、4つの過程を数式で導出し、PV線図とTS線図で可視化します。
本記事の内容
- カルノーサイクルの4つの過程の数学的記述
- 熱効率の導出
- カルノーの定理の証明
- PythonによるPV線図・TS線図の可視化
前提知識
この記事を読む前に、以下の記事を読んでおくと理解が深まります。
熱機関の基本
熱機関は、高温熱源から熱 $Q_H$ を受け取り、一部を仕事 $W$ に変換し、残りを低温熱源に $Q_L$ として放出する装置です。
$$ W = Q_H – Q_L $$
熱効率 $\eta$ は、
$$ \eta = \frac{W}{Q_H} = 1 – \frac{Q_L}{Q_H} $$
カルノーサイクルの4つの過程
作動流体を理想気体とします。高温熱源の温度を $T_H$、低温熱源の温度を $T_L$ とします。
過程1→2: 等温膨張($T = T_H$)
$$ Q_H = W_{12} = nRT_H\ln\frac{V_2}{V_1} > 0 $$
高温熱源から熱 $Q_H$ を吸収しながら、等温で膨張します。
過程2→3: 断熱膨張
$$ T_H V_2^{\gamma-1} = T_L V_3^{\gamma-1} $$
断熱的に膨張し、温度が $T_H$ から $T_L$ に低下します。$Q = 0$、仕事は内部エネルギーの減少分です。
$$ W_{23} = nC_V(T_H – T_L) $$
過程3→4: 等温圧縮($T = T_L$)
$$ Q_L = |W_{34}| = nRT_L\ln\frac{V_3}{V_4} > 0 $$
低温熱源に熱 $Q_L$ を放出しながら、等温で圧縮されます。
過程4→1: 断熱圧縮
$$ T_L V_4^{\gamma-1} = T_H V_1^{\gamma-1} $$
断熱的に圧縮され、温度が $T_L$ から $T_H$ に上昇します。
$$ W_{41} = -nC_V(T_H – T_L) $$
熱効率の導出
断熱過程の関係式から、
$$ \frac{V_2}{V_1} = \left(\frac{T_L}{T_H}\right)^{1/(\gamma-1)} \cdot \frac{V_3}{V_4} \cdot \left(\frac{T_H}{T_L}\right)^{1/(\gamma-1)} $$
実際に $T_HV_2^{\gamma-1} = T_LV_3^{\gamma-1}$ と $T_LV_4^{\gamma-1} = T_HV_1^{\gamma-1}$ を割り算すると、
$$ \frac{V_2}{V_1} = \frac{V_3}{V_4} $$
これを用いると、
$$ \frac{Q_L}{Q_H} = \frac{nRT_L\ln(V_3/V_4)}{nRT_H\ln(V_2/V_1)} = \frac{T_L}{T_H} $$
したがって、カルノーサイクルの熱効率は、
$$ \boxed{\eta_{\text{Carnot}} = 1 – \frac{T_L}{T_H}} $$
カルノー効率は高温熱源と低温熱源の温度比のみで決まり、作動流体の種類に依存しません。
カルノーの定理
カルノーの定理: 同じ高温熱源と低温熱源の間で動作するすべての熱機関のうち、可逆熱機関(カルノーサイクル)が最大の効率を持つ。
$$ \eta \le \eta_{\text{Carnot}} = 1 – \frac{T_L}{T_H} $$
等号は可逆サイクルのときのみ成立します。
Pythonでの実装
カルノーサイクルのPV線図とTS線図を可視化します。
import numpy as np
import matplotlib.pyplot as plt
# パラメータ
n = 1.0 # モル数
R = 8.314 # 気体定数
gamma = 1.4 # 比熱比
Cv = R / (gamma - 1)
TH = 600 # 高温 [K]
TL = 300 # 低温 [K]
# 状態1の設定
V1 = 1e-3 # [m^3]
P1 = n * R * TH / V1
# 状態2: 等温膨張(体積比を設定)
ratio = 2.0
V2 = V1 * ratio
P2 = n * R * TH / V2
# 状態3: 断熱膨張
V3 = V2 * (TH / TL)**(1 / (gamma - 1))
P3 = n * R * TL / V3
# 状態4: 等温圧縮
V4 = V1 * (TH / TL)**(1 / (gamma - 1))
P4 = n * R * TL / V4
# 各過程の曲線
# 1→2: 等温膨張
V_12 = np.linspace(V1, V2, 200)
P_12 = n * R * TH / V_12
# 2→3: 断熱膨張
V_23 = np.linspace(V2, V3, 200)
P_23 = P2 * (V2 / V_23)**gamma
# 3→4: 等温圧縮
V_34 = np.linspace(V3, V4, 200)
P_34 = n * R * TL / V_34
# 4→1: 断熱圧縮
V_41 = np.linspace(V4, V1, 200)
P_41 = P4 * (V4 / V_41)**gamma
# エントロピー計算
S1 = 0 # 基準
S2 = S1 + n * R * np.log(V2 / V1) # 等温膨張でのエントロピー変化
S3 = S2 # 断熱(等エントロピー)
S4 = S1 # 断熱(等エントロピー)
fig, axes = plt.subplots(1, 2, figsize=(14, 6))
# --- PV線図 ---
axes[0].plot(V_12 * 1e3, P_12 / 1e3, 'r-', linewidth=2, label='1→2: Isothermal expansion')
axes[0].plot(V_23 * 1e3, P_23 / 1e3, 'b-', linewidth=2, label='2→3: Adiabatic expansion')
axes[0].plot(V_34 * 1e3, P_34 / 1e3, 'c-', linewidth=2, label='3→4: Isothermal compression')
axes[0].plot(V_41 * 1e3, P_41 / 1e3, 'm-', linewidth=2, label='4→1: Adiabatic compression')
# 状態点のマーク
for i, (V, P, label) in enumerate([(V1, P1, '1'), (V2, P2, '2'), (V3, P3, '3'), (V4, P4, '4')]):
axes[0].plot(V * 1e3, P / 1e3, 'ko', markersize=8)
axes[0].annotate(label, (V * 1e3, P / 1e3), textcoords="offset points",
xytext=(10, 5), fontsize=14, fontweight='bold')
axes[0].set_xlabel('Volume [L]')
axes[0].set_ylabel('Pressure [kPa]')
axes[0].set_title(f'Carnot Cycle PV Diagram\n$T_H$={TH} K, $T_L$={TL} K')
axes[0].legend(fontsize=9)
axes[0].grid(True)
# --- TS線図 ---
# カルノーサイクルはTS線図で長方形になる
S_arr = [S1, S2, S3, S4, S1]
T_arr = [TH, TH, TL, TL, TH]
axes[1].plot(S_arr, T_arr, 'b-', linewidth=2, marker='o', markersize=8)
# 状態点の番号
labels = ['1', '2', '3', '4']
S_points = [S1, S2, S3, S4]
T_points = [TH, TH, TL, TL]
for s, t, lab in zip(S_points, T_points, labels):
axes[1].annotate(lab, (s, t), textcoords="offset points",
xytext=(10, 10), fontsize=14, fontweight='bold')
# Q_HとQ_Lの面積を塗る
axes[1].fill_between([S1, S2], TL, TH, alpha=0.2, color='red', label=f'$Q_H$ = {n*R*TH*np.log(ratio):.1f} J')
axes[1].fill_between([S4, S3], 0, TL, alpha=0.2, color='blue', label=f'$Q_L$ = {n*R*TL*np.log(ratio):.1f} J')
axes[1].set_xlabel('Entropy $S$ [J/K]')
axes[1].set_ylabel('Temperature $T$ [K]')
axes[1].set_title(f'Carnot Cycle TS Diagram\n$\\eta$ = {1-TL/TH:.1%}')
axes[1].legend()
axes[1].grid(True)
axes[1].set_ylim(0, TH * 1.2)
plt.tight_layout()
plt.show()
# 効率の計算
eta = 1 - TL / TH
QH = n * R * TH * np.log(ratio)
QL = n * R * TL * np.log(ratio)
W_net = QH - QL
print(f"カルノー効率: η = 1 - {TL}/{TH} = {eta:.1%}")
print(f"Q_H = {QH:.1f} J, Q_L = {QL:.1f} J, W = {W_net:.1f} J")
print(f"η = W/Q_H = {W_net/QH:.1%}")
PV線図ではサイクルの囲む面積が正味仕事を表し、TS線図ではカルノーサイクルが長方形になることが確認できます。TS線図上の面積が正味仕事に対応します。
まとめ
本記事では、カルノーサイクルの理論と熱効率について解説しました。
- カルノーサイクルは等温膨張→断熱膨張→等温圧縮→断熱圧縮の4過程からなる
- 熱効率は $\eta = 1 – T_L/T_H$ で、温度比のみで決まる
- カルノーの定理: すべての熱機関の効率はカルノー効率を超えられない
- TS線図ではカルノーサイクルは長方形となり、面積が正味仕事を表す
次のステップとして、以下の記事も参考にしてください。