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.
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.
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.
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
| \(c_m\) (g/L) | 0 | 25 | 50 | 75 | 100 | 125 | soda |
|---|---|---|---|---|---|---|---|
| \(m\) pour 50,0 mL (g) |
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.
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.
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.
m et V ; les unités (g et mL) donnent directement des g/mL.rho = m / Vm = 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.
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.
i est m[i].rho.append(round(m[i] / V, 4))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.
\(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.
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.
plt.plot(x, y, ...) : la liste des abscisses vient en premier, celle des ordonnées ensuite.plt.plot(c, rho, 'o', color='red', label='étalons')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.
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 :
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.
b.return (rho_mes - b) / ac = [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.
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.
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.
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 ?: après la condition ; morceau → morceaux ; m_sucre = c * V / 100 (33 cL = 0,33 L) ; morceaux = m_sucre / 6.0.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.
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.
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étence | A | B | C | D |
|---|---|---|---|---|
| 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 |
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.
Pour consolider : exercices 3, 9 et 10, puis le quiz du cours.
Exercices corrigés Retour au cours