L'équation de réaction associée à la définition de la constante d'acidité $\mathsf{K_a}$ d'un couple acide-base $\mathsf{AH(aq)/A^-(aq)}$ s'écrit : \begin{equation}\mathsf{ AH(aq)+H_2O(l)=A^-(aq) + H_3O^+(aq) } \end{equation}
A l'équilibre chimique, les concentrations de l'acide $\mathsf{AH}$ et de sa base conjuguée $\mathsf{A^-}$ sont liées par la relation de Guldberg-Waage \begin{equation}\mathsf{ K_a=\frac{[A^-]_{eq} \cdot [H_3O^+]_{eq}}{[AH]_{eq} \cdot C°} } \end{equation}
En notant $\mathsf{C_{tot}}$ la somme des concentrations $\mathsf{[A^-]_{eq}}$ et $\mathsf{[AH]_{eq}}$, les fractions molaires de l'acide et de la base s'écrivent : \begin{equation}\mathsf{ x_{AH}=\frac{[AH]_{eq}}{C_{tot}}=\frac{1}{1+10^{pH-pK_a}} \\ x_{A^-}=\frac{[A^-]_{eq}}{C_{tot}}=1-x_{AH}=\frac{10^{pH-pK_a}}{1+10^{pH-pK_a}} } \end{equation}
Il est ainsi possible de faire calculer, pour chaque valeur de pH, la proportion de l'espèce acide et celle de l'espèce basique.
La commande linspace
de la bibliothèque numpy
permet de générer une liste d'abscisses.
La bibliothèque matplotlib
permet ici de tracer les courbes.
Il est possible de modifier la valeur du $\mathsf{pK_a}$ du couple acide-base pour envisager divers couples.
#%%# Diagramme de distribution d'un couple AH/A-
#Importation des bibliothèques
import numpy as np
import matplotlib.pyplot as plt
#Saisie de la constante d'acidité du couple étudié
pKa=4.8
#Définition de la fonction renvoyant la proportion d'acide
# La proportion fAH de la base sera déduite (fA=1-fAH) au moment du tracé
def fAH(x):
return 1/(1+10**(x-pKa))
#Création d'une liste de valeurs de pH
pH = np.linspace(0,14,100)
#Tracé du diagramme
plt.plot(pH,fAH(pH),'b--',label='acide')
plt.plot(pH,1-fAH(pH),'k--',label='base')
plt.grid(True)
plt.title(f"Diagramme de distribution d'un couple de $pK_a$ = {pKa}")
plt.xlabel('pH')
plt.ylabel("proportions")
plt.legend()
plt.show()
Le script est écrit en considérant l'exemple de la glycine de formule $\mathsf{H_2N-CH_2-COOH}$. Le groupe acide carboxylique appartient à un couple de $\mathsf{pK_{a1}=2,4}$, le groupe amine à un couple de $\mathsf{pK_{a1}=9,6}$.
Les espèces sont symbolisées par $\mathsf{AH_2^+}$, $\mathsf{AH}$ et $\mathsf{A^-}$ où $\mathsf{AH}$ est la forme zwitterionique.
En notant $\mathsf{C_{tot}}$ la somme des concentrations $\mathsf{[AH_2^+]_{eq}}$, $\mathsf{[AH]_{eq}}$ et $\mathsf{[A^-]_{eq}}$, les fractions molaires des trois espèces s'écrivent : \begin{equation}\mathsf{ x_{AH_2^+}=\frac{[AH_2^+]_{eq}}{C_{tot}}=\frac{1}{1+10^{pH-pK_{a1}}+10^{2pH-pK_{a1}-pK_{a2}}} \\ x_{AH}=\frac{[AH]_{eq}}{C_{tot}}=\frac{1}{10^{pK_{a1}-pH}+1+10^{pH-pK_{a2}}} \\ x_{A^-}=\frac{[A^-]_{eq}}{C_{tot}}=1-x_{AH_2^+}-x_{AH} } \end{equation}
Il est ainsi possible de faire calculer, pour chaque valeur de pH, la proportion des trois espèces dans le milieu.
Il est possible de modifier les valeurs des $\mathsf{pK_a}$ des couples acide carboxylique/carboxylate et ammonium/amine pour étudier d'autres acides aminés.
#%%# Diagramme de distribution d'un acide aminé simple
#Importation des bibliothèques
import numpy as np
import matplotlib.pyplot as plt
#Saisie des constantes d'acidité des couples de l'AA
pKa1=2.4 #pKa du couple RCOOH/RCOO-
pKa2=9.6 #pKa du couple RNH3+/RNH2
#Définition des fonctions renvoyant les proportions des espèces
def fAH2(x):
return 1/(1+10**(x-pKa1)+10**(2*x-pKa1-pKa2))
def fAH(x):
return 1/(1+10**(pKa1-x)+10**(x-pKa2))
#Création d'une liste de valeurs de pH
pH = np.linspace(0,14,100)
#Tracé du diagramme de distribution
plt.plot(pH,fAH2(pH),'b--',label='$AH_2^+$')
plt.plot(pH,fAH(pH),'g--',label='$AH$')
plt.plot(pH,1-fAH2(pH)-fAH(pH),'k--',label='$A^-$')
plt.title(f"Diagramme de distribution d'un acide aminé : $pK_a1$ = {pKa1} et $pK_a2$ = {pKa2}")
plt.grid(True)
plt.xlabel('pH')
plt.ylabel("proportions")
plt.legend()
plt.show()