Rで理論化学:ヘンダーソン・ハッセルバルヒの式

問題

酢酸(CH₃COOH)と酢酸ナトリウム(CH₃COONa)からなる緩衝溶液について考えます。酢酸の酸解離定数を \(K_a = 1.8\times10^{-5}\)(\(\text{p}K_a = 4.745\))とします。

(1) 酢酸の初濃度 \(C_{\text{HA}} = 0.20~\text{mol/L}\)、酢酸ナトリウムの初濃度 \(C_{\text{A}^-} = 0.20~\text{mol/L}\) の緩衝溶液について、以下の2通りの方法でpHをRを用いて計算し、両者を比較しなさい。

  • a ヘンダーソン・ハッセルバルヒの式による近似計算
  • b 電離平衡の厳密な質量作用の式(二次方程式)による計算

(2) 酢酸と酢酸ナトリウムの合計濃度を \(0.20~\text{mol/L}\) に固定したまま、酢酸ナトリウムの物質量分率 \(x = C_{\text{A}^-}/(C_{\text{HA}}+C_{\text{A}^-})\)\(0.01\) から \(0.99\) まで変化させたときのpHの変化をRで計算し、可視化しなさい。このグラフから、緩衝溶液が最も効果的に機能する組成(緩衝能が最大になる点)を考察しなさい。

(3) この緩衝溶液に少量の強酸(HCl)または強塩基(NaOH)を加えたときのpH変化を計算し、緩衝作用がどのように働くかを定量的に確認しなさい。


解答方針

ヘンダーソン・ハッセルバルヒの式は

\[\text{pH} = \text{p}K_a + \log_{10}\frac{[\text{A}^-]}{[\text{HA}]}\]

という形で、弱酸とその共役塩基の濃度比からpHを直接求められる近似式です。この式は、電離平衡の質量作用の式

\[K_a = \frac{[\text{H}^+][\text{A}^-]}{[\text{HA}]}\]

において、酢酸の電離によって生じる \([\text{H}^+]\) の寄与が \([\text{HA}]\)\([\text{A}^-]\) の初濃度に比べて無視できるほど小さい、という近似のもとで導かれています。この近似がどの程度妥当かを、厳密な二次方程式による解と比較して確認します。

# ------------------------------------------------------------
# ヘンダーソン・ハッセルバルヒの式:酢酸緩衝溶液
# ------------------------------------------------------------

Ka <- 1.8e-5
pKa <- -log10(Ka)

cat(sprintf("pKa = %.3f\n\n", pKa))

# --- (1) C_HA = C_A- = 0.20 mol/L における pH の比較 ---

C_HA <- 0.20 # 酢酸の初濃度
C_Am <- 0.20 # 酢酸イオン(酢酸ナトリウム由来)の初濃度

# (a) ヘンダーソン・ハッセルバルヒの式による近似計算
pH_HH <- pKa + log10(C_Am / C_HA)

# (b) 厳密解:質量作用の式を満たす[H+]を二次方程式として解く
# 電離により生じる[H+]の量をhとすると、
#   [HA]  = C_HA - h
#   [A-]  = C_Am + h
#   [H+]  = h
# Ka = h(C_Am + h) / (C_HA - h)
#  => h^2 + (Ka + C_Am)*h - Ka*C_HA = 0
solve_h_exact <- function(C_HA, C_Am, Ka) {
  b <- Ka + C_Am
  c <- -Ka * C_HA
  h <- (-b + sqrt(b^2 - 4 * c)) / 2 # 物理的に意味のある正の根を採用
  h
}

h_exact <- solve_h_exact(C_HA, C_Am, Ka)
pH_exact <- -log10(h_exact)

cat("=== C_HA = C_A- = 0.20 mol/L における pH ===\n")
cat(sprintf("(a) HH式による近似pH   = %.4f\n", pH_HH))
cat(sprintf("(b) 厳密解によるpH     = %.4f\n", pH_exact))
cat(sprintf("差: %.5f\n\n", abs(pH_HH - pH_exact)))
pKa = 4.745

=== C_HA = C_A- = 0.20 mol/L における pH ===
(a) HH式による近似pH   = 4.7447
(b) 厳密解によるpH     = 4.7448
差: 0.00008

\(C_{\text{HA}}, C_{\text{A}^-}\) がいずれも \(K_a\) に比べて十分大きいため、近似式と厳密解の差はごくわずかであり、ヘンダーソン・ハッセルバルヒの式が高い精度で成立していることが確認できます。


(2) 組成比を変化させたときのpH変化

# 合計濃度0.20 mol/Lを固定し、A-の物質量分率xを0.01~0.99まで変化させる
x_seq <- seq(0.01, 0.99, by = 0.01)
C_total <- 0.20

C_Am_seq <- C_total * x_seq
C_HA_seq <- C_total * (1 - x_seq)

pH_HH_seq <- pKa + log10(C_Am_seq / C_HA_seq)

df_buffer <- data.frame(
  x = x_seq,
  C_HA = C_HA_seq,
  C_Am = C_Am_seq,
  pH = pH_HH_seq
)

library(ggplot2)

p_buffer <- ggplot(df_buffer, aes(x = x, y = pH)) +
  geom_line(color = "darkgreen", linewidth = 1) +
  geom_hline(yintercept = pKa, linetype = "dashed", color = "gray40") +
  geom_vline(xintercept = 0.5, linetype = "dashed", color = "gray40") +
  annotate("text",
    x = 0.5, y = pKa, label = "x=0.5, pH=pKa",
    hjust = -0.1, vjust = -0.8, size = 3.5
  ) +
  labs(
    title = "緩衝溶液の組成とpHの関係",
    x = expression(x == C[A^symbol("-")] / (C[HA] + C[A^symbol("-")])),
    y = "pH"
  ) +
  theme_minimal(base_size = 13)

print(p_buffer)

cat(sprintf(
  "x=0.5(等量混合)のときのpH = %.4f (pKa = %.4f)\n",
  pH_HH_seq[x_seq == 0.5], pKa
))
x=0.5(等量混合)のときのpH = 4.7447 (pKa = 4.7447)
Figure 1

Figure 1 から、\(x=0.5\)(酢酸と酢酸イオンが等量)のとき \(\text{pH}=\text{p}K_a\) となり、\(x\) がその前後で変化するとpHが対数的に変化するS字型の曲線が得られることを確認できます。

\(x\) が0または1に近づくにつれて曲線の傾きが急になっており、片方の成分がほぼ枯渇した組成ではpHが敏感に変化しやすくなることが視覚的に読み取れます。

つまり、緩衝溶液のpHが最も外乱に対して安定する(=わずかな酸・塩基の添加に対してpH変化が最も小さい)のは、酢酸と酢酸イオンの濃度がほぼ等しい(\(x\approx0.5\)、すなわち \(\text{pH}\approx\text{p}K_a\))組成であることが分かります。

これは、対数関数 \(\log_{10}(C_{\text{A}^-}/C_{\text{HA}})\) の変化率が、比が1(等量)に近いところで最小になるという性質に対応しており、実務上「緩衝溶液は目的のpHが\(\text{p}K_a\)に近い酸・塩基の組み合わせを選ぶとよい」とされる理由の裏付けになっています。


(3) 強酸・強塩基添加時のpH変化(緩衝作用の確認)

# 緩衝溶液(等量混合, 各0.20mol/L, 全量1Lと仮定)に
# 強酸(HCl)または強塩基(NaOH)をΔn mol加えたときのpHをHH式で計算する関数
pH_after_addition <- function(C_HA, C_Am, dn_strong_acid = 0, dn_strong_base = 0) {
  # 強酸を加えるとA-がHAに変換され、強塩基を加えるとHAがA-に変換される
  C_HA_new <- C_HA + dn_strong_acid - dn_strong_base
  C_Am_new <- C_Am - dn_strong_acid + dn_strong_base

  if (C_HA_new <= 0 || C_Am_new <= 0) {
    return(NA) # 緩衝能を超えて片方の成分が枯渇した場合
  }
  pKa + log10(C_Am_new / C_HA_new)
}

# 添加量を0~0.15 mol/Lまで変化させて比較
dn_seq <- seq(0, 0.15, by = 0.01)

pH_add_acid <- sapply(dn_seq, function(dn) pH_after_addition(C_HA, C_Am, dn_strong_acid = dn))
pH_add_base <- sapply(dn_seq, function(dn) pH_after_addition(C_HA, C_Am, dn_strong_base = dn))

df_titration <- data.frame(
  dn = dn_seq,
  pH_acid_added = pH_add_acid,
  pH_base_added = pH_add_base
)

print(df_titration)

# 比較のため:緩衝作用のない純水にHClを同量加えた場合のpH変化(概算)
# (体積1Lと仮定した単純化)
pH_water_acid <- -log10(dn_seq)
pH_water_acid[1] <- 7 # dn=0のときは中性

cat("\n=== 緩衝溶液 vs 緩衝作用なしの水 における pH変化の比較(酸添加時)===\n")
cat(sprintf("dn = %.2f molのとき:\n", max(dn_seq)))
cat(sprintf(
  "  緩衝溶液のpH変化   : %.2f -> %.2f (変化量 %.2f)\n",
  pH_HH, tail(pH_add_acid, 1), pH_HH - tail(pH_add_acid, 1)
))
cat(sprintf(
  "  水のpH変化(概算)  : 7.00 -> %.2f (変化量 %.2f)\n",
  tail(pH_water_acid, 1), 7 - tail(pH_water_acid, 1)
))
     dn pH_acid_added pH_base_added
1  0.00      4.744727      4.744727
2  0.01      4.701262      4.788193
3  0.02      4.657577      4.831878
4  0.03      4.613449      4.876006
5  0.04      4.568636      4.920819
6  0.05      4.522879      4.966576
7  0.06      4.475882      5.013573
8  0.07      4.427307      5.062148
9  0.08      4.376751      5.112704
10 0.09      4.323722      5.165733
11 0.10      4.267606      5.221849
12 0.11      4.207608      5.281847
13 0.12      4.142668      5.346787
14 0.13      4.071312      5.418143
15 0.14      3.991400      5.498055
16 0.15      3.899629      5.589826

=== 緩衝溶液 vs 緩衝作用なしの水 における pH変化の比較(酸添加時)===
dn = 0.15 molのとき:
  緩衝溶液のpH変化   : 4.74 -> 3.90 (変化量 0.85)
  水のpH変化(概算)  : 7.00 -> 0.82 (変化量 6.18)

緩衝溶液に強酸を \(0.15~\text{mol/L}\) 加えた場合でも、pHの変化はおよそ0.85程度に収まっています。

これは、加えられた \(\text{H}^+\) の大部分が酢酸イオン \(\text{A}^-\) と反応して未電離の酢酸 \(\text{HA}\) に変換されるため、溶液中の遊離した \(\text{H}^+\) 濃度の増加が緩和されるためです。

一方、緩衝作用を持たない水に同量の強酸を加えた場合は、pHが中性(7)付近から酸性側へ大きく変化することになり、緩衝溶液がpHの変動を大幅に抑制していることが定量的に確認できます。


まとめ

項目内容
ヘンダーソン・ハッセルバルヒの式\(\text{pH}=\text{p}K_a+\log_{10}([\text{A}^-]/[\text{HA}])\)
近似の前提電離によるH⁺の寄与が初濃度に比べて無視できること
緩衝能が最大になる条件 \([\text{A}^-]=[\text{HA}]\)(すなわち \(\text{pH}=\text{p}K_a\))付近
強酸・強塩基添加時の挙動緩衝溶液は非緩衝系に比べてpH変化が大幅に抑制される

補足

酸解離定数とは

酸解離定数とは、弱酸が水溶液中で電離する反応の平衡定数のことで、記号 \(K_a\) で表されます。弱酸 \(\text{HA}\) の電離平衡

\[\text{HA} \rightleftharpoons \text{H}^+ + \text{A}^-\]

に対して、

\[K_a = \frac{[\text{H}^+][\text{A}^-]}{[\text{HA}]}\]

と定義されます。ここで \([\text{H}^+]\)\([\text{A}^-]\)\([\text{HA}]\) はそれぞれ平衡状態における水素イオン、共役塩基、未電離の酸の濃度(単位 mol/L)です。

\(K_a\) の値が大きいほど電離が進みやすく、酸としての強さが大きいことを意味します。\(K_a\) は桁数が非常に小さくなることが多いため、実用上は

\[\text{p}K_a = -\log_{10}K_a\]

という対数表示がよく用いられます。

\(\text{p}K_a\) が小さいほど酸性度が強く、この値は弱酸の強さを比較したり、緩衝溶液の設計(目的のpHに近い \(\text{p}K_a\) を持つ酸を選ぶこと)を行う際の基準として広く利用されています。

共役塩基とは

共役塩基とは、酸がプロトン(\(\text{H}^+\))を1個放出したときに生じる化学種のことです。酸 \(\text{HA}\) の電離平衡

\[\text{HA} \rightleftharpoons \text{H}^+ + \text{A}^-\]

において、\(\text{A}^-\)\(\text{HA}\) の共役塩基にあたります。逆に、\(\text{A}^-\)\(\text{H}^+\) を受け取ると \(\text{HA}\) に戻ることから、\(\text{HA}\)\(\text{A}^-\) の共役酸と呼ばれ、両者は「共役酸塩基対」と呼ばれる対の関係にあります。

酸の強さと共役塩基の強さの間には相反する関係があり、酸解離定数 \(K_a\) が大きい(強い酸である)ほど、その共役塩基は水溶液中でプロトンを受け取りにくく、塩基としては弱くなります。この関係は

\[K_a \times K_b = K_w\]

という式で定量的に表され、\(K_b\) は共役塩基の塩基解離定数、\(K_w\) は水のイオン積(一定温度で一定の値、単位 mol²/L²)です。緩衝溶液は、弱酸とその共役塩基を組み合わせることで、外部からの酸・塩基の添加に対してpHの変動を抑える性質を持ちます。

水のイオン積とは

水のイオン積とは、水がわずかに自己解離する平衡

\[\text{H}_2\text{O} \rightleftharpoons \text{H}^+ + \text{OH}^-\]

における平衡定数のことで、記号 \(K_w\) で表されます。定義式は

\[K_w = [\text{H}^+][\text{OH}^-]\]

です。ここで \([\text{H}^+]\) は水素イオン濃度、\([\text{OH}^-]\) は水酸化物イオン濃度(いずれも単位 mol/L)を表します。

純水の濃度は反応の前後でほとんど変化しないとみなせるため、平衡定数の式から \([\text{H}_2\text{O}]\) の項を省略した形で定義されています。

\(K_w\) は温度によって変化する定数で、25℃では

\[K_w = 1.0\times10^{-14}~\text{mol}^2/\text{L}^2\]

という値をとります。この関係式は、酸性・中性・塩基性を問わずあらゆる水溶液中で常に成り立つため、\([\text{H}^+]\) が分かれば \([\text{OH}^-] = K_w/[\text{H}^+]\) として自動的に求めることができ、pHとpOHの関係(\(\text{pH}+\text{pOH}=14\)、25℃の場合)を導く基礎にもなっています。

以上です。