Exercice Sous-partie 3 - Questions 1.17, 1.19 et 1.20 · Bac Sciences de l'Ingénieur Métropole 2 remplacement 2021

Thème : Traitement de l'information : algorithmes et programmation · Tiré du sujet Métropole France 2 remplacement (2021)

Énoncé

Sous-partie 3 - Choix 2

Réduire la consommation énergétique du véhicule

L'objectif de cette sous-partie est d'évaluer les performances du logiciel permettant de renseigner le pilote sur la consommation électrique et la vitesse du véhicule.

3. Comment renseigner le pilote sur les performances du véhicule ?

Le pilote est renseigné sur les données de fonctionnement instantanées du véhicule. Ces informations sont affichées sur une interface de dialogue du type écran tactile (figure 14). Durant la course, elles vont lui permettre d'adapter au mieux le mode de conduite afin de réaliser la meilleure manche possible. À la fin de chaque manche, les valeurs obtenues sont enregistrées pour être analysées en vue d'améliorer les performances futures.

Acquisition de l'énergie électrique et de la distance parcourue

L'affichage de la quantité d'énergie électrique utilisée par le véhicule nécessite de mesurer la tension aux bornes de la batterie UbatU_{bat} et l'intensité du courant IbatI_{bat} délivrée par celle-ci. Pour réaliser ces mesures, la batterie du véhicule est équipée d'une sonde de courant et d'une sonde de tension. Un codeur incrémental placé en bout d'arbre moteur permet la mesure de la distance parcourue par le véhicule.

Les données issues de ces capteurs sont transmises à un microcontrôleur qui calcule en permanence les informations relatives au fonctionnement du véhicule.

Mesure de la quantité d'énergie électrique utilisée par le véhicule: la sonde de courant utilise le principe de l'effet Hall pour mesurer l'intensité du courant la traversant. Son information de sortie est une tension continue comprise entre 0 V et 5 V, proportionnelle au courant mesuré. La sensibilité du capteur est de 66 mV·A⁻¹, la gamme de mesure est de -30 A à 30 A.

On note Ui la tension en sortie de la sonde de courant. La figure 16 illustre la caractéristique de Ui en fonction du courant mesuré.

La sortie de cette sonde est reliée à une entrée analogique du microcontrôleur. Le Convertisseur Analogique Numérique (CAN) du microcontrôleur effectue une conversion sur 10 bits, avec une tension de référence égale à 5 V. Le résultat de la conversion analogique numérique est noté « Ni ».

La courbe illustrée en figure 17 est une approximation linéaire de la caractéristique du CAN. Cette caractéristique indique la valeur disponible dans la variable Ni en fonction de la tension Ui appliquée en entrée du CAN.

On souhaite disposer, dans le programme du microcontrôleur, d'une variable de type réel (float) notée « intensite » qui contient la valeur de l'intensité en A du courant de la batterie mesurée par la sonde de courant.

La sonde de tension, dont le schéma interne est donné figure 18, est constituée d'un pont diviseur de tension. L'information de sortie Uv est reliée à une entrée analogique du microcontrôleur. La caractéristique de conversion du CAN est celle définie précédemment, le résultat de cette conversion est noté « Nv ».

L'acquisition de l'intensité du courant IbatI_{bat} (en A) et de la tension UbatU_{bat} (en V) est déclenchée toutes les secondes par un timer du microcontrôleur. Ces données permettent le calcul de la puissance électrique instantanée Pi absorbée par le véhicule et de la quantité d'énergie électrique E1s nécessaire au fonctionnement du véhicule pendant une seconde. Les valeurs de IbatI_{bat} et UbatU_{bat} sont supposées constantes pendant la période d'acquisition.

Mesure de la distance parcourue

L'affichage de la quantité d'énergie nécessaire pour un tour de circuit et celle ramenée au kilomètre nécessite de connaître la distance parcourue par le véhicule. Un codeur incrémental disposé en bout d'arbre du moteur est utilisé pour mesurer cette distance. La mesure de la vitesse du véhicule à partir de ce codeur ne fait pas partie de l'étude.

Le codeur délivre un train d'impulsions dont le comptage permet de déduire la distance parcourue. La voie A du codeur est reliée à une entrée d'interruption (INT) du microprocesseur. Chaque front montant du signal A entraîne le comptage d'une impulsion.

La résolution du codeur est de 200 points par tour, sa tension de travail est de 5 V. Le diamètre de la roue motrice du véhicule est DroueD_{roue} = 475 mm. Le rapport de réduction du système de transmission entre l'arbre moteur et la roue est de r=926r = \frac{9}{26}.

Le pilote dispose de deux commandes « start mesure » et « stop mesure » sur l'écran tactile. En début de manche, la touche tactile « start mesure » active l'acquisition et l'affichage des performances du véhicule. La touche tactile « stop mesure » enregistre les données et réinitialise l'ensemble des variables. L'interface de dialogue est programmée à l'aide du module Tkinter intégré à la bibliothèque de l'environnement Python.

La séquence « calcul_energies » à compléter permet de calculer et d'afficher tous les 100 m la quantité d'énergie électrique instantanée ramenée sur un kilomètre. La quantité d'énergie totale et la moyenne au kilomètre sont calculées et affichées à la fin de chaque tour (voir affichage proposé sur l'interface illustrée en figure 14).

Les instructions du langage Python nécessaires sont définies dans le tableau de la figure 20. Le tableau de définition des variables utilisées est donné figure 21. La longueur du circuit est de 1263 m.

Figure 20: instructions du langage Python à utiliser condition if / elif / else · if condition1:

instruction1 # si condition1 vraie faire instruction1

elif condition2:

instruction2 # sinon si condition2 vraie

# faire instruction2

else:

instruction3 # sinon faire instruction3

afficher dans la zone texte n°1 de l'interface · zone_texte_n1.config ( text = 'texte 1' + 'texte 2') texte 1 et texte 2 variables de type chaînes de caractères (string)

str (donnée) · Convertit la variable donnée (float ou int) en chaîne de caractères

round (donnée, x) · Arrondit la variable donnée (float) en gardant x décimales

Figure 21: définition des variables de la séquence energie_cumulee · Variable de type réel contenant la valeur de la quantité d'énergie électrique (en J) cumulée toutes les secondes pendant le tour en cours.

distance · Variable de type réel contenant la valeur de la distance instantanée (en m) parcourue par le véhicule.

distance_test · Variable de type réel contenant la valeur de la distance de test (en m) pour laquelle la variable « energie_inst_km » est calculée.

energie_au_tour · Variable de type réel contenant la valeur de la quantité d'énergie électrique utilisée (en kJ) au dernier tour de circuit.

energie_au_km · Variable de type réel contenant la valeur de la quantité d'énergie électrique moyenne (en kJ) ramenée sur un km au dernier tour de circuit.

energie_inst_km · Variable de type réel contenant la valeur de la quantité d'énergie électrique instantanée (en J) ramenée sur un km et calculée tous les 100 m.

Question 1.17 (DR2)

Compléter cet algorithme sur le document réponse DR2 afin de calculer les variables « intensite » et « tension » en fonction des grandeurs numériques Ni et Nv. Compléter ce même algorithme par le calcul des variables de type réel « energie_par_seconde », la quantité d'énergie électrique E 1s et « energie_cumulee », la quantité d'énergie électrique (en J) cumulée toutes les secondes.

Algorithme mesure énergie

Toutes les 1 s FAIRE

LIRE Ni

LIRE Nv

FIN

Question 1.19 (DR3)

Compléter l'algorithme du document réponse DR3 afin d'incrémenter la variable de type entier (integer) « nb_impulsion » à chaque front montant du signal A et de calculer la variable de type réel « distance » contenant la distance instantanée parcourue par le véhicule (avec dl=0,00258 mdl = 0{,}00258\text{ m}).

Algorithme mesure distance parcourue

À chaque front montant sur l'entrée d'interruption FAIRE

FIN

Question 1.20 (DR3)

Compléter sur le document réponse DR3 la séquence « calcul_energies » en langage Python, afin de calculer et d'afficher les différentes quantités d'énergie demandées.

Consultez les figures 20 (instructions Python) et 21 (définition des variables) dans le contexte. Longueur du circuit: 1263 m.

def calcul_energies ():

# calculer les énergies à la fin de chaque tour

energie_au_km = round(energie_au_tour / 1.263, 2)

# afficher les résultats dans les zones textes n°8

# (zone d'affichage de l'énergie au tour) et n°10

# (zone d'affichage de l'énergie moyenne au km)

zone_texte_n10.config(text = str(energie_au_km) + ' kJ')

# réinitialiser les variables

nb_impulsion = 0

distance_test = 100

# calculer l'énergie instantanée ramenée au km

# afficher le résultat dans la zone texte n°4

# (zone d'affichage de l'énergie instantanée)

distance_test += 100 # ajouter 100 à la variable

# « distance_test »

IHM.after(100, calcul_energies) # exécuter la fonction

# calcul_energies périodiquement

Énoncé: Exercice Sous-partie 3 - Questions 1.17, 1.19 et 1.20 · Bac Sciences de l'Ingénieur Métropole 2 remplacement 2021

Corrigé

Corrigé établi d’après les éléments de correction officiels

Question 1.17 - Algorithme mesure énergie : intensite ←

Réponse : ```pseudocode 0,0586 * Ni - 30 ```

Question 1.17 - Algorithme mesure énergie : tension ←

Réponse : ```pseudocode 0,0489 * Nv ```

Question 1.17 - Algorithme mesure énergie : energie_par_seconde ←

Réponse : ```pseudocode intensite * tension * 1 ```

Question 1.17 - Algorithme mesure énergie : energie_cumulee ←

Réponse : ```pseudocode energie_cumulee + energie_par_seconde ```

Question 1.19 - Algorithme mesure distance parcourue : nb_impulsion ←

Réponse : ```pseudocode nb_impulsion + 1 ```

Question 1.19 - Algorithme mesure distance parcourue : distance ←

Réponse : ```pseudocode nb_impulsion * 0,00258 ```

Question 1.20 - calcul_energies : condition si un tour de circuit est effectué

Réponse : ```python if distance >= 1263: ```

Question 1.20 - calcul_energies : calcul dans round pour energie_au_tour

Réponse : ```python energie_cumulee / 1000, 2 ```

Question 1.20 - calcul_energies : affichage de energie_au_tour dans zone_texte_n8

Réponse : ```python text = str(energie_au_tour) + ' kJ' ```

Question 1.20 - calcul_energies : réinitialisation de energie_cumulee

Réponse : ```python 0 ```

Question 1.20 - calcul_energies : réinitialisation de distance

Réponse : ```python 0 ```

Question 1.20 - calcul_energies : condition sinon si une distance de 100 m est parcourue

Réponse : ```python elif distance >= distance_test: ```

Question 1.20 - calcul_energies : calcul dans round pour energie_inst_km

Réponse : ```python (energie_cumulee / distance_test) * 1000 ```

Question 1.20 - calcul_energies : affichage de energie_inst_km dans zone_texte_n4

Réponse : ```python text = str(energie_inst_km) + ' J' ```

L’explication pas à pas, faite avec l’IA, est réservée aux membres Premium. Premium

Résous-le ici : correction automatique, indices et corrigé détaillé.

‹ Exercice Sous-partie 1 - Algorithmique · Métropole 2021 (sujet 2)

Plus d’exercices de Traitement de l'information : algorithmes et programmation