Objectif de la fiche : tracer, à l'aide d'un langage de programmation, le diagramme de distribution des espèces d'un couple acide-base de pKa donné, puis l'exploiter pour construire un diagramme de prédominance et justifier le choix d'un indicateur coloré.
Cette fiche est autonome : tu n'as besoin d'aucun autre document. Chaque étape contient un script incomplet à compléter, puis à copier-coller dans Thonny (ou dans la console Basthon tout en bas de la page si tu n'as pas Thonny sous la main).
Contexte : deux espèces qui se partagent la solution
- Un couple acide-base, comme
CH₃COOH/CH₃COO⁻, est lié par l'équilibreCH₃COOH(aq) + H₂O(ℓ) = CH₃COO⁻(aq) + H₃O⁺(aq), de constante d'aciditéKa = 10⁻ᵖᴷᵃ. - À l'équilibre, l'égalité entre le quotient de réaction et
Ka, combinée à la définition du pH, conduit à la relation[CH₃COO⁻]eq / [CH₃COOH]eq = 10^(pH−pKa). - En notant
p_acideetp_baseles proportions de chaque espèce dans le mélange (avecp_acide + p_base = 1), on en déduit :p_acide = 1 / (1 + 10^(pH−pKa))etp_base = 1 − p_acide. - Tracer ces deux proportions en fonction du pH donne le diagramme de distribution du couple.
Tracer le diagramme de distribution
- Complète la fonction
pA(x,pKa), qui renvoie la proportion de la forme acide1/(1+10^(x−pKa))pour un pHxdonné. - Crée un tableau
pHde 100 valeurs régulièrement réparties entre 0 et 14, et prendspKa = 4.8(couple de l'acide éthanoïque). - Trace
pA(pH,pKa)en bleu trait plein (label'acide') et1-pA(pH,pKa)en noir tirets (label'base') sur le même graphe.
import numpy as np
import matplotlib.pyplot as plt
def pA(x,pKa):
return 1/(1+10**(_-___)) # TODO : proportion de la forme acide
pH = np.linspace(_,__,___) # TODO : 100 valeurs de pH entre 0 et 14
pKa=___ # TODO : couple de l'acide éthanoïque
plt.plot(pH,pA(pH,pKa),'__',label='acide')
# TODO : trace la proportion de base, en noir tirets
plt.plot(pH,_-pA(__,___),'___',label='base')
plt.grid(True)
plt.xlabel('pH')
plt.ylabel("proportions")
plt.legend()
plt.show()
Indice
Dans pA(x,pKa), le paramètre x joue le rôle du pH : on retrouve exactement la formule 1/(1+10^(pH−pKa)) de la partie « Contexte », en remplaçant pH par x.
Une courbe bleue qui part de 1 à pH = 0 et descend vers 0, croisant une courbe noire en tirets qui fait l'inverse : les deux courbes se croisent exactement à pH = pKa = 4,8, là où les deux espèces sont à 50 % - 50 %.
Diagramme de prédominance et domaines de majorité
- Le diagramme de distribution montre que l'espèce acide prédomine pour
pH < pKa, et l'espèce basique pourpH > pKa. C'est le diagramme de prédominance du couple. - Une espèce est dite majoritaire devant l'autre si sa concentration est au moins 10 fois supérieure. On montre que cela correspond à
pH < pKa − 1pour l'acide majoritaire, etpH > pKa + 1pour la base majoritaire — ce qui fait apparaître un troisième domaine intermédiaire, où les concentrations sont proches.
- En réutilisant la fonction
pAde l'étape précédente, vérifie numériquement que la frontièrepH = pKa − 1correspond bien à un rapport de concentrations de 10 pour 1 en faveur de l'acide.
# TODO : proportion d'acide à la frontière inférieure (pH = pKa - 1)
p_bas = pA(pKa__, pKa)
print("à pH = pKa-1 :", p_bas, "soit un rapport de", p_bas/(1-p_bas))
# TODO : proportion d'acide à la frontière supérieure (pH = pKa + 1)
p_haut = pA(pKa__, pKa)
print("à pH = pKa+1 :", p_haut, "soit un rapport de", (1-p_haut)/p_haut)
À pH = pKa − 1, la proportion d'acide vaut environ 0,909 (90,9 %) contre 9,1 % de base : le rapport affiché doit valoir 10,0. Symétriquement, à pH = pKa + 1, la proportion d'acide tombe à 0,091 et le rapport base/acide affiché vaut aussi 10,0.
Justifier le choix d'un indicateur coloré
- Un indicateur coloré est un couple acide-base dont les deux espèces ont des teintes différentes. Le bleu de bromothymol (BBT) a pour espèce acide
HInd, jaune, et pour espèce basiqueInd⁻, bleue ; sonpKavaut7à 25 °C. - Quand l'espèce acide est majoritaire (
pH < pKa−1), elle impose sa couleur : la solution est Jaune. Quand c'est la base qui est majoritaire (pH > pKa+1), la solution est Bleu. Entre les deux se trouve la zone de virage, où la teinte est un mélange des deux. - Lors d'un titrage, un indicateur coloré est adapté si sa zone de virage est entièrement incluse dans le saut de pH observé à l'équivalence.
- Complète la fonction
couleur(pH,pKa), qui renvoie la teinte de la solution ('jaune', 'bleu', ou 'zone de virage') selon la valeur du pH. - Complète ensuite la fonction
indicateur_convient(pKa, pH_avant, pH_apres), qui renvoieTruesi la zone de virage de l'indicateur est bien comprise entrepH_avantetpH_apres(le saut de pH mesuré lors d'un titrage).
def couleur(pH,pKa):
if pH _ pKa__:
return 'jaune'
elif pH _ pKa__:
return 'bleu'
else:
return 'zone de virage'
def indicateur_convient(pKa,pH_avant,pH_apres):
return pH_avant __ pKa-1 and pKa+1 __ pH_apres
Indice
Les deux fonctions réutilisent les mêmes bornes que l'étape précédente : pKa-1 et pKa+1. Pour indicateur_convient, il faut que le saut de pH « dépasse » la zone de virage des deux côtés à la fois, avec des inégalités <= ou >= selon le sens.
Pour le BBT (pKa = 7) : couleur(4, 7) renvoie 'jaune', couleur(10, 7) renvoie 'bleu', et couleur(7, 7) renvoie 'zone de virage'. Pour un titrage avec un saut de pH entre 3 et 11 (par exemple), indicateur_convient(7, 3, 11) doit renvoyer True ; avec un saut trop étroit, entre 6,5 et 7,5, la même fonction doit renvoyer False.
Pour aller plus loin : le cas d'un diacide (la glycine)
- Certaines espèces, comme les acides α-aminés (par exemple la glycine), possèdent deux couples acide-base successifs, caractérisés par
pKa1etpKa2. Trois espèces peuvent alors prédominer :AH₂⁺,AH(forme neutre) etA⁻, séparées parpKa1etpKa2. - Le même raisonnement qu'à l'étape 1 permet d'établir :
p_AH₂⁺ = 1 / (1 + 10^(pH−pKa1) + 10^(2pH−pKa1−pKa2))etp_AH = 1 / (1 + 10^(pKa1−pH) + 10^(pH−pKa2)), puisp_A⁻ = 1 − p_AH₂⁺ − p_AH. - Pour la glycine,
pKa1 = 2,4etpKa2 = 9,6.
- Complète les fonctions
pAH2(x,pKa1,pKa2)etpAH(x,pKa1,pKa2)ci-dessous. - Trace les trois proportions
pAH2,pAHet1-pAH2-pAHen fonction du pH, avec une légende pour chaque espèce.
import numpy as np
import matplotlib.pyplot as plt
def pAH2(x,pKa1,pKa2):
return 1/(1+10**(_-____)+10**(_*x-pKa1-pKa2))
def pAH(x,pKa1,pKa2):
return 1/(1+10**(pKa1-_)+10**(_-pKa2))
pH = np.linspace(0,14,100)
pKa1=___ # TODO : pKa du couple AH2+/AH
pKa2=___ # TODO : pKa du couple AH/A-
plt.plot(pH,pAH2(pH,pKa1,pKa2),'b-',label='AH2+')
plt.plot(pH,pAH(pH,pKa1,pKa2),'g.',label='AH')
# TODO : trace la proportion de A-, en noir tirets
plt.plot(pH,_-pAH2(pH,pKa1,pKa2)-pAH(__,____,____),'___',label='A-')
plt.grid(True)
plt.xlabel('pH')
plt.ylabel("proportions")
plt.legend()
plt.show()
Indice
Chaque exposant se lit directement dans la formule de l'« À savoir » : x-pKa1, 2*x-pKa1-pKa2 pour pAH2 ; pKa1-x, x-pKa2 pour pAH. Le paramètre x représente ici encore le pH.
Trois domaines apparaissent sur le graphe : AH₂⁺ prédomine pour pH < 2,4, la forme neutre AH prédomine largement entre les deux pKa (elle atteint presque 100 % au milieu), et A⁻ prédomine pour pH > 9,6.
Conclusion
- Le diagramme de distribution donne les proportions des deux espèces d'un couple acide-base en fonction du pH ; il permet d'en déduire le diagramme de prédominance (acide prédominant si
pH < pKa, base sipH > pKa). - Une espèce est majoritaire (rapport 10:1) au-delà d'un pH à
±1unité du pKa, ce qui définit trois domaines et, pour un indicateur coloré, une zone de virage. - Un indicateur coloré est adapté à un titrage si sa zone de virage est incluse dans le saut de pH observé à l'équivalence.
- Le même raisonnement se généralise à des espèces possédant plusieurs couples acide-base successifs (diacides, polyacides, acides aminés), en ajoutant les termes correspondants dans les expressions des proportions.
Pense-bête — diagramme de distribution
| p_acide | = 1 / (1 + 10^(pH−pKa)) |
| p_base | = 1 − p_acide |
| pH = pKa | 50 % - 50 %, les deux courbes se croisent |
| pH < pKa−1 | acide majoritaire (≥ 10 fois plus concentré) |
| pH > pKa+1 | base majoritaire |
| np.linspace(0,14,100) | 100 valeurs de pH régulièrement réparties |
Pas de Thonny sous la main ? Utilise Basthon
Ouvrir dans un nouvel onglet ↗Ctrl+V ou Cmd+V) le code copié avec les boutons « Copier le code » ci-dessus, puis appuie sur Entrée pour l'exécuter.