rho = m / V c = (rho - b) / a
Seconde · Chapitre 2 · TP expérimental et numérique

Le sucre d'un soda : dosage par étalonnage

Tu vas préparer des solutions sucrées de concentrations connues, mesurer leur masse volumique, puis celle d'un soda dégazé. Python t'aidera à tracer la droite d'étalonnage et à calculer la quantité de sucre cachée dans une canette.

≈ 2 h en toutPesées + 5 activités PythonSeul ou en binômePython s'exécute dans la page
← Tous les cours ← Retour au cours
Partie 1
Problématique

Quelle masse de sucre contient une canette de soda de 33 cL, et l'étiquette dit-elle vrai ?

Objectifs

  • Préparer une gamme d'étalons par dissolution.
  • Mesurer une masse volumique avec précision.
  • Tracer et modéliser une droite d'étalonnage.
  • En déduire la concentration en sucre d'un soda.

Compétences travaillées

  • Réaliser : dissolution, pesées, verrerie jaugée.
  • Analyser : choisir un modèle linéaire.
  • Valider : comparer le résultat à l'étiquette.
  • Communiquer : présenter un graphique et une conclusion chiffrée.
L'éditeur Python de cette page

Le code s'exécute réellement dans ton navigateur. Au premier clic sur ▶ Exécuter, Python se télécharge (≈ 7 Mo, une seule fois, connexion Internet nécessaire). Le bouton Télécharger .py donne un fichier utilisable dans EduPython, Thonny, Basthon ou Capytale.

Raccourcis : Ctrl + Entrée exécute, Tab décale la ligne de 4 espaces.

Choisis ton parcours

Débutant en Python : fais les cinq activités dans l'ordre, en t'aidant des indices. À l'aise avec les variables et les boucles (en général à partir du deuxième trimestre) : l'activité 1 est facultative, commence directement à l'activité 2 et vise l'activité 5 sans indice.

1
Expérience : des étalons et un soda
≈ 35 min · en salle de TP

Matériel

  • sucre en poudre (saccharose), balance au 0,01 g, coupelles, spatule, entonnoir ;
  • six fioles jaugées de 100,0 mL (préparation des étalons) ;
  • une fiole jaugée de 50,0 mL (mesure de masse volumique) ;
  • un soda dégazé (agité longuement, laissé ouvert une nuit) ; eau distillée.

Protocole

Étalons. Préparer 100,0 mL de solutions de sucre à 0 ; 25 ; 50 ; 75 ; 100 et 125 g/L par dissolution (masses : 0 ; 2,50 ; 5,00 ; 7,50 ; 10,00 ; 12,50 g).
Masse volumique. Placer la fiole de 50,0 mL vide sur la balance et tarer. La remplir de solution jusqu'au trait de jauge et noter la masse \(m\) du liquide.
Vider, rincer avec la solution suivante, et recommencer pour chaque étalon, puis pour le soda.
\(c_m\) (g/L)0255075100125soda
\(m\) pour 50,0 mL (g)
Si tu ne peux pas faire l'expérience

Jeu de données pédagogique Masses de 50,0 mL : 49,90 ; 50,39 ; 50,85 ; 51,36 ; 51,82 ; 52,32 g pour les étalons de 0 à 125 g/L, et 51,94 g pour le soda. Valeurs construites à partir des masses volumiques de solutions de saccharose à 20 °C, avec des écarts de pesée réalistes.

Q1
Pourquoi faut-il dégazer le soda avant la mesure ? Pourquoi rince-t-on la fiole avec la solution suivante plutôt qu'avec de l'eau ?

Les bulles de dioxyde de carbone occuperaient du volume dans la fiole sans presque rien peser : la masse mesurée serait trop faible, donc la masse volumique et la concentration en sucre sous-estimées. Le gaz dissous est aussi un second soluté qui fausserait la comparaison avec les étalons. On rince avec la solution suivante pour que les gouttes restées sur la paroi aient la même composition que la solution mesurée ; des gouttes d'eau la dilueraient légèrement.

2
Activité 1 — La masse volumique du soda
≈ 10 min · Niveau 1 : variables, condition simple
Ce que fait le programme

Il calcule la masse volumique du soda à partir de la pesée, et la compare à celle de l'eau pure (0,998 g/mL à 20 °C). Comment lire le résultat ? Une masse volumique en g/mL et une phrase.

À faire : complète le calcul de rho, exécute, puis teste avec la masse de l'étalon à 0 g/L.

Indice 1 — physique. La masse volumique est la masse divisée par le volume : \(\rho = m/V\).
Indice 2 — code. Les deux variables s'appellent m et V ; les unités (g et mL) donnent directement des g/mL.
Indice 3 — code. rho = m / V
Correction de l'activité 1
m = 51.94
V = 50.0

rho = m / V

print("Masse volumique :", round(rho, 4), "g/mL")
if rho > 0.998:
    print("Plus dense que l'eau pure : la solution contient des solutés.")
else:
    print("Pas plus dense que l'eau pure.")

Résultats attendus. Soda : 1,0388 g/mL, plus dense que l'eau. Étalon à 0 g/L (49,90 g) : 0,998 g/mL, « pas plus dense que l'eau pure ».

Interprétation. La masse volumique du soda dépasse celle de l'eau de 0,041 g/mL : chaque millilitre contient 41 mg de « masse en plus », due surtout au sucre dissous. Il faut encore l'étalonnage pour traduire cet écart en concentration.

Erreurs fréquentes. Écrire V / m : on obtient 0,963, une valeur inférieure à celle de l'eau, ce qui contredit le fait que le soda contient du sucre.

3
Activité 2 — Les masses volumiques des étalons
≈ 15 min · Niveau 2 : listes, boucle
Ce que fait le programme

Il calcule la masse volumique de chaque étalon et l'augmentation par rapport à l'étalon précédent. Pourquoi ? Si la masse volumique augmente de façon régulière (à peu près de la même quantité tous les 25 g/L), le modèle linéaire sera adapté. Comment lire le résultat ? Six masses volumiques croissantes et des écarts voisins.

À faire : complète le calcul de la masse volumique dans la boucle, exécute, puis réponds à Q2.

Indice 1 — physique. Chaque masse volumique est \(\rho_i = m_i / V\).
Indice 2 — code. La masse de l'étalon numéro i est m[i].
Indice 3 — code. rho.append(round(m[i] / V, 4))
Correction de l'activité 2
c = [0, 25, 50, 75, 100, 125]
m = [49.90, 50.39, 50.85, 51.36, 51.82, 52.32]
V = 50.0

rho = []
for i in range(len(c)):
    rho.append(round(m[i] / V, 4))
    print("c =", c[i], "g/L | rho =", rho[i], "g/mL")

for i in range(1, len(rho)):
    print("augmentation entre", c[i - 1], "et", c[i], "g/L :", round(rho[i] - rho[i - 1], 4), "g/mL")

Résultats attendus. \(\rho\) = 0,998 ; 1,0078 ; 1,017 ; 1,0272 ; 1,0364 ; 1,0464 g/mL. Augmentations : 0,0098 ; 0,0092 ; 0,0102 ; 0,0092 ; 0,0100 g/mL.

Interprétation. Tous les 25 g/L, la masse volumique augmente d'environ 0,0097 g/mL, à ± 0,0005 près : l'augmentation est régulière, ce qui annonce une relation linéaire entre \(\rho\) et \(c_m\). Les petites variations correspondent à des écarts de pesée de quelques centigrammes.

Erreurs fréquentes. Commencer la seconde boucle à 0 : pour i = 0, rho[i - 1] désigne le dernier élément de la liste en Python, et le premier écart affiché n'aurait aucun sens.

Q2
Sans calcul supplémentaire, entre quels étalons se situe le soda (ρ = 1,0388 g/mL) ? Donne un encadrement de sa concentration en sucre.

\(1{,}0364 < 1{,}0388 < 1{,}0464\) : le soda se situe entre les étalons à 100 g/L et à 125 g/L, plus près du premier. Sa concentration en sucre est comprise entre 100 et 125 g/L, probablement un peu au-dessus de 100 g/L. C'est l'équivalent d'une échelle de teintes ; la droite d'étalonnage va donner une valeur.

4
Activité 3 — La courbe d'étalonnage
≈ 15 min · Niveau 3 : nuage de points, lecture graphique
Ce que fait le programme

Il trace \(\rho\) en fonction de \(c_m\) pour les étalons, et une ligne horizontale à la masse volumique du soda. Pourquoi ? Le point de la courbe d'étalonnage situé à la hauteur du soda donne sa concentration. Comment le lire ? On part de la ligne du soda, on rejoint les points des étalons, puis on descend sur l'axe des concentrations.

À faire : complète la ligne qui trace les points des étalons, exécute, puis lis la concentration du soda sur le graphique.

Indice 1 — physique. On trace la masse volumique (ordonnée) en fonction de la concentration (abscisse).
Indice 2 — code. plt.plot(x, y, ...) : la liste des abscisses vient en premier, celle des ordonnées ensuite.
Indice 3 — code. plt.plot(c, rho, 'o', color='red', label='étalons')
Correction de l'activité 3
import matplotlib.pyplot as plt

c = [0, 25, 50, 75, 100, 125]
rho = [0.998, 1.0078, 1.017, 1.0272, 1.0364, 1.0464]
rho_soda = 1.0388

plt.plot(c, rho, 'o', color='red', label='étalons')
plt.plot([0, 125], [rho_soda, rho_soda], '--', color='green', label='soda')
plt.title("Masse volumique de solutions sucrées")
plt.xlabel("concentration en sucre (g/L)")
plt.ylabel("masse volumique (g/mL)")
plt.legend()
plt.grid()
plt.show()

Résultat attendu. Six points alignés, montant de 0,998 à 1,046 g/mL ; la ligne du soda croise l'alignement vers 105 g/L.

Interprétation. Les points sont pratiquement alignés : la masse volumique est une fonction affine de la concentration en sucre. La lecture graphique donne environ 105 g/L, une valeur que l'activité 4 va calculer précisément.

Erreurs fréquentes. Inverser c et rho : on obtiendrait \(c_m\) en fonction de \(\rho\), et la ligne horizontale du soda n'aurait plus de sens.

5
Activité 4 — Modéliser et calculer la concentration
≈ 20 min · Niveau 4 : fonctions, modèle affine
Ce que fait le programme

On modélise la courbe d'étalonnage par une droite \(\rho = a \times c_m + b\). La fonction pente (fournie) calcule \(a\) à partir de deux points éloignés : le premier et le dernier étalon ; \(b\) est la masse volumique de l'eau (étalon à 0 g/L). La fonction concentration inverse le modèle :

\(c_m = \dfrac{\rho - b}{a}\)

Comment lire le résultat ? La valeur de \(a\), puis la concentration en sucre du soda et d'un jus d'orange.

À faire : complète la ligne return de la fonction concentration, exécute, puis réponds à Q3.

Indice 1 — maths. Pour isoler \(c_m\) dans \(\rho = a\,c_m + b\), on retranche \(b\) puis on divise par \(a\).
Indice 2 — code. Dans la fonction, \(b\) est un paramètre : il s'appelle b.
Indice 3 — code. return (rho_mes - b) / a
Correction de l'activité 4
c = [0, 25, 50, 75, 100, 125]
rho = [0.998, 1.0078, 1.017, 1.0272, 1.0364, 1.0464]

def pente(x1, y1, x2, y2):
    return (y2 - y1) / (x2 - x1)

def concentration(rho_mes, a, b):
    return (rho_mes - b) / a

a = pente(c[0], rho[0], c[-1], rho[-1])
b = rho[0]
print("a =", round(a, 7), "g/mL par g/L ; b =", b, "g/mL")

for nom, m in [("soda", 51.94), ("jus d'orange", 51.70)]:
    rho_mes = m / 50.0
    print(nom, ": rho =", round(rho_mes, 4), "g/mL -> c =", round(concentration(rho_mes, a, b)), "g/L")

Résultats attendus. \(a = 0{,}0003872\) g/mL par g/L ; soda : 105 g/L ; jus d'orange : 93 g/L.

Interprétation. Le soda contient environ 105 g de sucre par litre, en accord avec les étiquettes courantes (10,6 g pour 100 mL pour un cola classique). Pour le jus d'orange, la valeur est à prendre avec prudence : il contient d'autres solutés (acides, sels minéraux) qui augmentent aussi sa masse volumique, alors que le modèle suppose que seul le sucre compte.

Erreurs fréquentes. Écrire rho_mes - b / a sans parenthèses : Python calcule d'abord \(b/a\) (environ 2 577) et le résultat est négatif.

Q3
Une erreur de pesée de 0,05 g sur la fiole de soda (51,99 g au lieu de 51,94 g) change-t-elle beaucoup le résultat ? Teste-le avec le programme.

Avec 51,99 g, \(\rho = 1{,}0398\ \text{g/mL}\) et \(c \approx 108\ \text{g/L}\) au lieu de 105 g/L : 0,05 g d'écart sur la pesée (0,1 %) donne environ 3 % d'écart sur la concentration. La méthode est sensible, car la masse volumique ne varie que de 4 % entre l'eau et l'étalon le plus concentré : il faut peser avec soin et bien ajuster le trait de jauge.

6
Activité 5 — Le programme d'Inès
≈ 15 min · Niveau 5 : trouver et corriger des erreurs
La situation

Inès veut calculer la masse de sucre dans une canette de 33 cL (concentration 105 g/L), le nombre de morceaux de sucre de 6,0 g correspondant, et la comparer aux 25 g conseillés par jour. Son programme contient quatre erreurs : deux l'empêchent de fonctionner, deux donnent un résultat faux sans message. Résultat attendu : 35 g de sucre, 6 morceaux.

Indice 1 — méthode. Corrige d'abord ce que Python signale, une erreur à la fois. Puis vérifie l'ordre de grandeur : une canette contient quelques dizaines de grammes de sucre.
Indice 2 — où chercher. Que manque-t-il à la fin de la ligne if ? La variable morceau existe-t-elle ? Dans quelle unité doit être le volume pour que \(c \times V\) donne des grammes ? Combien de morceaux de 6 g y a-t-il dans \(m\) grammes ?
Indice 3 — les quatre corrections. Ajouter : après la condition ; morceau → morceaux ; m_sucre = c * V / 100 (33 cL = 0,33 L) ; morceaux = m_sucre / 6.0.
Correction de l'activité 5
c = 105
V = 33

m_sucre = c * V / 100            # erreur 3 : 33 cL = 0,33 L
morceaux = m_sucre / 6.0         # erreur 4 : masse totale / masse d'un morceau

print("Masse de sucre :", round(m_sucre), "g")
print("Nombre de morceaux :", round(morceaux))     # erreur 2 : nom de variable
if m_sucre > 25:                                  # erreur 1 : deux-points
    print("Plus que l'apport conseillé pour une journée entière !")

Erreur 1 (bloquante). Il manque les deux-points à la fin de la ligne if : erreur de syntaxe.

Erreur 2 (bloquante). morceau n'existe pas : NameError.

Erreur 3 (silencieuse). Le volume est en centilitres : \(105 \times 33 = 3\,465\) « g », 100 fois trop. Il faut \(V = 0{,}33\ \text{L}\).

Erreur 4 (silencieuse). Le rapport est inversé : on calcule combien de canettes contiendraient un seul morceau.

Résultat après correction. Masse de sucre : 35 g, Nombre de morceaux : 6, et le message d'alerte.

Q4
Après correction des erreurs 1 et 2, le programme affiche « Masse de sucre : 3465 g » et « Nombre de morceaux : 0 ». Quels indices montrent que c'est faux ?

Une canette de 33 cL pèse environ 340 g en tout : elle ne peut pas contenir 3,5 kg de sucre. Et les deux résultats se contredisent : avec 3 465 g de sucre, il faudrait des centaines de morceaux, pas 0. La masse fausse vient d'un oubli de conversion (cL → L), le nombre de morceaux nul d'une division inversée.

7
Conclusion et auto-évaluation
≈ 10 min
Q5
Réponds à la problématique : quelle masse de sucre contient une canette de 33 cL, et l'étiquette (10,6 g pour 100 mL) dit-elle vrai ?

On a préparé des étalons de 0 à 125 g/L et mesuré leur masse volumique : elle augmente de façon affine avec la concentration en sucre (\(\rho = 0{,}000387\,c_m + 0{,}998\)). Le soda dégazé a une masse volumique de 1,0388 g/mL, ce qui correspond à \(c_m \approx 105\ \text{g/L}\). Une canette de 33 cL contient donc environ \(105 \times 0{,}33 \approx 35\ \text{g}\) de sucre, soit 6 morceaux. L'étiquette annonce 106 g/L : l'écart de 1 % est inférieur à la précision de la méthode (environ 3 g/L, voir Q3). L'étiquette est confirmée.

Grille d'auto-évaluation

A = je sais faire seul · B = avec un peu d'aide · C = partiellement · D = à retravailler.

CompétenceABCD
Préparer une solution par dissolution
Mesurer une masse volumique avec une fiole jaugée
Tracer une courbe d'étalonnage
Modéliser par une droite et l'inverser
Convertir les unités de volume (mL, cL, L)
Repérer une erreur par un ordre de grandeur
Clique sur A, B, C ou D pour chaque compétence.
Fiche professeur

Organisation

Durée totale estimée : 120 min. En séance de 1 h 30 : partie expérimentale et activités 1 à 3 ; activités 4 et 5 et conclusion en fin de séance, à la maison ou en séance suivante. Le parcours « à l'aise » (activité 1 facultative) fait gagner environ 10 min.

Préparation

Préparer la veille le soda dégazé (bouteille ouverte, agitée, laissée une nuit). Prévoir six fioles de 100 mL par binôme, ou répartir les étalons entre binômes et mettre les mesures en commun.

Sécurité

Aucun risque chimique notable ; interdire de goûter les solutions (verrerie de laboratoire).

Points de vigilance

La fiole de 50 mL doit être parfaitement sèche à l'extérieur avant chaque pesée. Une erreur de 0,05 g change le résultat d'environ 3 g/L (voir Q3) : insister sur le trait de jauge.

Différenciation

Aide : Fournir le tableau des masses de sucre à peser déjà calculées ; faire tracer la courbe à la main avant l'activité 3.

Approfondissement : Doser un jus de fruit et discuter pourquoi le résultat est surestimé (autres solutés) ; comparer avec l'étiquette.

Évaluation (sur 20)

Q5 (conclusion chiffrée et comparaison à l'étiquette, 6 pts) ; activités 3 et 4 (droite d'étalonnage et inversion du modèle, 8 pts) ; activité 5 (4 pts) ; Q3 (sensibilité, 2 pts).

Les corrections détaillées des activités Python et des questions sont dans les encadrés de chaque partie.

TP terminé, bravo !

Pour consolider : exercices 3, 9 et 10, puis le quiz du cours.

Exercices corrigés Retour au cours