Physique-chimie · Terminale · Enseignement de spécialité · Fiche 5

Un acide dans l'eau,
jusqu'où va-t-il réagir ?

Quand on dissout un acide dans l'eau, la réaction ne va pas forcément à son terme : elle atteint un état d'équilibre, caractérisé par un taux d'avancement compris entre 0 et 1. Le calculer revient à résoudre une équation du second degré. Tu vas coder cette résolution, puis l'utiliser pour comparer la force de plusieurs acides et comprendre ce qui distingue un acide fort d'un acide faible.

acide_base.py — aperçupKa = 4,8
C τ

Objectif de la fiche : déterminer, à l'aide d'un langage de programmation, le taux d'avancement final de la réaction d'un acide sur l'eau, et l'utiliser pour comparer la force de différents acides.

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 : une réaction qui ne va pas toujours à son terme

À savoir
  • Mettre un acide AH dans l'eau conduit à la réaction AH(aq) + H₂O(ℓ) = A⁻(aq) + H₃O⁺(aq). Par exemple, pour l'acide éthanoïque : CH₃COOH(aq) + H₂O(ℓ) = CH₃COO⁻(aq) + H₃O⁺(aq).
  • Avec un tableau d'avancement, en notant C la concentration apportée en acide et V le volume de solution, l'état final est caractérisé par un avancement x_eq tel que Q_r,eq = Ka, où Ka = 10⁻ᵖᴷᵃ est la constante d'acidité du couple.
  • Cette égalité conduit à une équation du second degré en x_eq. En introduisant le taux d'avancement τ = x_eq / (C·V) (compris entre 0 et 1), cette équation se simplifie et ne dépend plus de V : C·τ² + τ·Ka·C° − Ka·C° = 0, avec C° = 1 mol.L⁻¹ la concentration de référence.
  • Résoudre cette équation revient donc à résoudre un polynôme du second degré a·τ² + b·τ + c = 0, avec a = C, b = Ka·C° et c = −Ka·C°. C'est ce que tu vas coder.
01

Résoudre une équation du second degré

À savoir
  • Pour un polynôme a·x² + b·x + c, le discriminant Δ = b² − 4ac détermine le nombre de racines réelles : aucune si Δ < 0, une seule si Δ = 0, et deux si Δ > 0 : x = (−b ± √Δ) / (2a).
  • La fonction ci-dessous est générale : elle fonctionne pour n'importe quel polynôme du second degré, pas seulement pour notre problème de chimie.
Consigne
  • Complète la fonction polynome(a,b,c) ci-dessous, qui affiche les racines réelles du polynôme a·x² + b·x + c selon le signe du discriminant.
etape1_polynome.py
import numpy as np

def polynome(a,b,c):
    Delta = float(b**_-_*a*c)  # TODO : discriminant
    if Delta__:
        print("le polynôme n'a pas de racines réelles")
    elif Delta___:
        if Delta==0:
            T=-b/(_*a)
            print(T)
        if Delta__:
            T1=(-b-np.sqrt(_____))/(2*a)
            T2=(-b+np.sqrt(_____))/(_*a)
            print(T1,T2)
Indice

La première ligne à compléter reprend la définition mathématique du discriminant Δ = b² − 4ac : deux trous seulement (l'exposant de b, et le facteur devant 4ac). Les lignes if Delta<0, elif Delta>=0 et if Delta>0 sont des comparaisons classiques ; on retrouve les mêmes trous pour Delta dans np.sqrt(Delta).

Résultat attendu

Teste avec l'acide éthanoïque à C = 0,1 mol.L⁻¹ (pKa = 4,8) : polynome(0.1, 10**-4.8, -10**-4.8) doit afficher T1 ≈ −0,0127 (racine négative, sans sens physique ici) et T2 ≈ 0,0125 (le taux d'avancement cherché, soit environ 1,3 %).

02

Calculer directement le taux d'avancement et le pH

À savoir
  • Pour notre problème de chimie, a = C > 0 et c = −Ka·C° < 0, donc −4ac > 0 : le discriminant est toujours strictement positif. Inutile de tester son signe, il y a toujours deux racines réelles.
  • De ces deux racines, seule T2 (obtenue avec +√Δ) est physiquement acceptable, car un taux d'avancement doit vérifier 0 ≤ τ ≤ 1.
  • Une fois τ connu, la concentration en ions oxonium à l'équilibre vaut [H₃O⁺]_eq = τ·C, d'où pH = −log(τ·C/C°).
Consigne
  • Complète la fonction tau(a,b,c), qui renvoie directement le couple (taux d'avancement, pH), sans avoir besoin de tester le signe du discriminant.
etape2_tau_et_ph.py
import numpy as np

def tau(a,b,c):
    Delta = float(b**_-_*a*c)
    # TODO : seule la racine positive nous intéresse ici
    T = (-b+np.sqrt(_____))/(_*a)
    # TODO : pH à partir du taux d'avancement et de la concentration a
    ph = -np.log10(_*_)
    return(T,ph)
Indice

Dans tau(a,b,c), l'argument a joue un double rôle : c'est à la fois le premier coefficient du polynôme et, physiquement, la concentration apportée C (puisque C° = 1 mol.L⁻¹). C'est cette même variable a qu'il faut réutiliser dans le calcul du pH.

Résultat attendu

Toujours pour l'acide éthanoïque à C = 0,1 mol.L⁻¹ : tau(.1, 10**-4.8, -10**-4.8) doit renvoyer environ (0,0125 ; 2,90), ce qui se lit τ = 1,3 % et pH = 2,9.

03

Balayer plusieurs concentrations avec une boucle

À savoir
  • On veut étudier l'effet de la dilution : recalculer τ et le pH pour tout un ensemble de concentrations, sans relancer la fonction tau à la main pour chacune.
  • Une boucle while permet de parcourir les concentrations C = 10⁻¹, 10⁻², ..., 10⁻⁶ mol.L⁻¹ en faisant varier un compteur entier i de 1 à 6.
Consigne
  • Complète la fonction acide(pKa), qui construit et renvoie deux listes : les six taux d'avancement T et les six pH correspondants, pour les concentrations C = 10⁻¹ à 10⁻⁶ mol.L⁻¹.
etape3_balayage_concentrations.py
import numpy as np

def acide(pKa):
    T = []
    ph = []
    i = 1
    while i__ :  # TODO : condition pour parcourir i = 1 à 6
        x,y = tau(10**(__),10**(____),-10**(____))
        T.append(_)
        ph.append(_)
        i = i+_
    return (T,ph)
Indice

La concentration C de l'itération i est 10**(-i). On la réutilise deux fois dans l'appel à tau : une fois comme premier argument (coefficient a), et une fois cachée dans 10**(-pKa) qui, lui, ne dépend pas de i.

Résultat attendu

Pour l'acide éthanoïque, acide(4.8) doit renvoyer deux listes de 6 valeurs : les taux d'avancement ≈ [0,0125 ; 0,039 ; 0,118 ; 0,327 ; 0,695 ; 0,944] (croissants, l'acide se dissocie de mieux en mieux quand on dilue), et les pH ≈ [2,90 ; 3,41 ; 3,93 ; 4,49 ; 5,16 ; 6,03].

04

Comparer la force de plusieurs acides

À savoir
  • Le pKa permet de comparer la force des acides : plus le pKa du couple est faible, plus l'acide est fort, c'est-à-dire plus son taux d'avancement avec l'eau est grand.
  • Les acides appartenant à des couples de pKa négatifs ont un taux d'avancement proche de 100 % quelle que soit la concentration : ce sont des acides forts (la transformation est quasi-totale). Les acides de pKa positifs sont dits faibles (transformation non totale).
Consigne
  • Appelle acide(pKa) pour chacun des acides du tableau ci-dessous, et trace sur un même graphe le taux d'avancement T en fonction de la concentration, pour chaque acide, avec une légende indiquant sa valeur de pKa.
  • Utilise une échelle logarithmique sur l'axe des concentrations (plt.xscale('log')) : les concentrations s'étendent sur six ordres de grandeur.
etape4_comparaison_acides.py
import numpy as np
import matplotlib.pyplot as plt

concentrations = [10**(-i) for i in range(1,7)]

plt.figure()
for pKa in [____, ___, ___, ___, ___]:  # TODO : les 5 valeurs de pKa du tableau
    T, ph = acide(___)  # TODO : appelle acide avec le pKa courant
    plt.plot(_______________, _, label='pKa = '+str(pKa))  # TODO : trace T en fonction de la concentration

plt.xscale('log')
plt.xlabel('C (mol/L)') ; plt.ylabel("taux d'avancement")
plt.legend(loc='best')
plt.grid()
plt.show()
Valeurs de pKa utilisées (issues du document éduscol)
AcideCouplepKa
Acide nitriqueHNO₃ / NO₃⁻−1,8
Iodure d'hydrogèneHI / I⁻−1,2
Acide dichloroéthanoïqueCl₂CHCOOH / Cl₂CHCOO⁻1,2
Acide méthanoïqueHCOOH / HCOO⁻3,8
Acide éthanoïqueCH₃COOH / CH₃COO⁻4,8
Chlorure d'ammoniumNH₄⁺ / NH₃9,2
Indice

Tu n'es pas obligé d'utiliser les 6 acides du tableau : 5 valeurs de pKa bien choisies, réparties entre les acides forts (pKa négatif) et les acides faibles (pKa élevé), suffisent pour bien voir l'effet sur le graphe.

Résultat attendu

Les courbes des acides de pKa négatif (acide nitrique, iodure d'hydrogène) restent collées à τ = 1 quelle que soit la concentration : ce sont des acides forts. Les courbes des acides de pKa élevé (chlorure d'ammonium, pKa = 9,2) restent proches de τ = 0 : la transformation reste très limitée, même en diluant beaucoup.

+

Conclusion

À retenir
  • Le taux d'avancement final τ d'une réaction acide-base se détermine en résolvant une équation du second degré, dont on ne garde que la racine physiquement acceptable (0 ≤ τ ≤ 1).
  • Un acide est dit fort si la transformation acide-base avec l'eau est quasi-totale (τ ≈ 1), ce qui correspond à un pKa de couple négatif. Un acide est dit faible si la transformation est non totale, ce qui correspond à un pKa positif.
  • Le taux d'avancement dépend non seulement du pKa, mais aussi de la concentration apportée : à faible concentration, même un acide qualifié de faible tend à se dissocier presque totalement. Distinguer acides forts et acides faibles sur le seul critère du pKa n'a donc de sens que pour des concentrations usuelles (de l'ordre de 10⁻¹ à 10⁻² mol.L⁻¹).
  • Le modèle utilisé ici (une seule réaction acide + eau) atteint ses limites pour les solutions très diluées d'acides faibles, où la réaction d'autoprotolyse de l'eau ne peut plus être négligée — ce qui dépasse le cadre de cette fiche.

Pense-bête — équation du second degré et acide-base

Δ=b²-4acdiscriminant du polynôme a·x²+b·x+c
x=(-b±√Δ)/(2a)racines réelles quand Δ>0
Ka=10⁻ᵖᴷᵃconstante d'acidité du couple acide/base
τ=x_eq/(C·V)taux d'avancement, compris entre 0 et 1
pH=-log(τ·C/C°)pH à partir du taux d'avancement
while i<7 :boucle pour parcourir i = 1, 2, ..., 6

Pas de Thonny sous la main ? Utilise Basthon

Ouvrir dans un nouvel onglet ↗
Basthon est une console Python qui tourne directement dans le navigateur, sans rien installer. Colle ici (avec 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.
La console Basthon n'a pas pu se charger ici (bloquée par ton navigateur ou ton établissement). Ouvre-la directement dans un nouvel onglet.