loader

9. Synchroniser des horloges

Vous êtes utilisateur d’une carte BBC micro:bit et de la TI-83 Premium CE Edition Python ? Nous avons le plaisir de vous proposer des activités SNT à réaliser en classe avec la calculatrice connectée au microcontrôleur BBC micro:bit. Ressource n°9 pour calculatrice TI-83 Premium CE Edition Python. Auteur : E. Tixidor

Votre smartphone est équipé d’un récepteur GPS [note1], qui vous permet de vous localiser, à peu près n’importe où à la surface de la Terre.
Mais n'espérez pas vous géolocaliser à l’intérieur d’un tunnel ou d’une grotte. Il vaudra mieux utiliser, si besoin, une carte.

Le smartphone reçoit les signaux des satellites GPS pour vous géolocaliser.
Dans le tunnel, pas de réception, pas de localisation possible. Mais alors, que contiennent ces signaux ? Juste un message simple issu du satellite, avec pour contenu, sa position ainsi que l’heure du départ de ce message.

Le récepteur va utiliser ces informations pour réaliser un calcul de positionnement. Nous allons voir dans cette activité que le principe de la localisation repose sur celui d’une mesure du temps, et que cette mesure nécessite une synchronisation des horloges, celles de l’émetteur et du récepteur.


Note 1 : le GPS n'est pas le seul système existant pour la géolocalisation. Galileo est un autre exemple de système de positionnement, issu d'un projet européen.

1. De la mesure du temps à la géolocalisation

Nous ne rentrerons pas ici dans le détail du principe de la géolocalisation. Nous supposerons que le lecteur connaît l’intérêt, pour le récepteur, de calculer sa distance à celle du satellite émetteur. Et que la connaissance de sa distance à plusieurs satellites va lui permettre de se géolocaliser.

Nous nous intéresserons ici au principe de la mesure du temps : Le signal reçu contient les informations de la position x0 du satellite émetteur. Et celle du temps de départ du signal. Appelons cette heure t0. Lorsque le récepteur reçoit ce signal, il consulte sa propre horloge et repère l’heure, t1. [note 2]

Une première idée, qui illustre le principe de manière simplifié, est de calculer la position x1 du récepteur en utilisant la valeur de la vitesse v : 

C’est donc la durée de transit de l’onde radio, entre le satellite émetteur GPS et le récepteur qui est mesurée, et permettra d’évaluer par un calcul la distance entre les deux.


Mesure de la durée de transit de l’onde 

Cette durée, t1 - t0 est calculée à partir des temps t1 et t0, mesurés par deux horloges différentes, et qu’il faudra synchroniser au mieux. C’est justement ce que nous allons réaliser dans l’expérience de cette ressource…

Note 2 : L’horloge du récepteur nécessite d’être régulièrement synchronisée avec celle des satellites émetteurs. C’est grâce à un algorithme calculant sur  les écarts de positionnement, que l’horloge du récepteur se met à l’heure des émetteurs. Cela nécessite de capter les signaux d’au moins 4 satellites GPS.


2. Présentation de l’expérience

Chronométrons la course d’un véhicule avec deux chronométreurs qui ne peuvent pas se voir, ni s’entendre. L’un se trouve au départ de la course, l’autre à l’arrivée. Si ceux-ci ne sont pas bien synchronisés, la mesure sera imprécise, voire incohérente. 
Comment réaliser la synchronisation entre ces deux chronomètres?

L’expérience nécessite deux élèves, qui disposent chacun d’un chronomètre (un programme chronomètre), et peuvent échanger des signaux radio. 
Le premier élève sera appelé « l’émetteur ». L’autre, le « récepteur ».
La durée mesurée sera celle du trajet d’un petit véhicule, muni d’un moteur électrique et qui voyage à vitesse constante. Ce véhicule passe par l’ouverture d’un cache. Il passe la ligne de départ devant l'émetteur et celle d’arrivée devant le récepteur.
Le cache devrait empêcher le récepteur de voir le début de la course. Et l’émetteur de voir l’arrivée.

L’idée est alors de construire, avec les élèves, le cahier des charges du programme à utiliser pour réaliser, à deux, la mesure du temps de transport. 

Avec ce programme: 
  • La carte micro:bit de l’émetteur devra signifier à la carte micro:bit récepteur le TOP départ : moment où le véhicule franchit la ligne de départ. [note 3]
  • Et la carte micro:bit du récepteur doit pouvoir repérer le temps d’arrivée, et calculer la durée du trajet.



Connexion des deux cartes micro:bit

Note 3: La carte émettrice ne transmet pas à la carte réceptrice l’information du temps du départ, repérée sur sa propre horloge. Ce n’est pas utile car les deux horloges sont certainement en décalage, et n’affichent pas le même repère du temps, au même instant. Par contre, la carte émettrice pourrait envoyer un message du type TOP DEPART, par radio, et qui serait reçu instantanément par la carte réceptrice. Ceci afin de déclencher les deux chronomètres en même temps. 

  • Module général de gestion de la carte micro:bit : MICROBIT.8xv
  • Module permettant les communications radio entre plusieurs cartes : MB_RADIO.8xv
  • Module permettant d’utiliser les boutons A et B de la carte : MB_BUTNS.8xv
  • Module pour gérer l’affichage des DEL : MB_DISP.8xv

  • Remarque : le fichier TI_Runtime_for_Microbit_ver_2.x.hex est à télécharger dans la carte micro:bit en connectant celle-ci directement à l’ordinateur (via le port USB).


    Modules pour le script python de la calculatrice(à appeler au début du script Python)
    • ti_system pour la fonction escape
    • microbit
    • mb_radio pour les fonctions de communication radio
    • mb_disp pour la gestion de l'affichage sur l'écran LED de la carte micro:bit
    • mb_butns pour les fonctions button_a.is_pressed et button_b.is_pressed
    • ti_plotlib pour l'affichage graphique sur l'écran de la calculatrice
    • time pour la fonction monotonic

    1. Cahier des charges

    A) Départ du chronomètre
    La réflexion attendue de la part des élèves concerne le problème du chronométrage. Lorsque le véhicule passe devant l’émetteur, celui-ci doit déclencher le chronométrage. 
    Surviennent alors plusieurs questions :

    • Cela a-t-il du sens de comparer les temps de départ et d'arrivée si ceux-ci sont mesurés avec deux chronomètres différents? ...
      Oui, à condition que les deux horloges soient parfaitement synchronisées. 


    • Et si ces horloges n’indiquent pas la même heure, au même instant, comment fait-on?
      On lance le chronomètre du récepteur. Au TOP DEPART, lancé par l’émetteur, et reçu instantanément par le récepteur, ce dernier consulte son horloge et mémorise le temps t0. Lorsque le véhicule passe la ligne d’arrivée, il consulte à nouveau son horloge et repère le temps t1.



    t1-to mesure la durée de déplacement du mobile


    • Comment indiquer le “TOP” du départ aux autres cartes micro:bit ? 

    Il faudra utiliser la fonction radio du microcontrôleur. (Rappelez vous que l’écran empêche en théorie les élèves de se voir et de communiquer). 
    Le programme de l’émetteur devra posséder la fonction de déclencher tous les chronomètres, grâce à l’émission d’un message radio.
    Cette fonction pourrait être réalisée lors de l’appui sur le bouton b de sa carte micro:bit.



    B) Arrêt du chronomètre
    A la réception du signal TOP DEPART, le chronomètre du récepteur doit se mettre à zéro et démarrer. Il doit mémoriser l’instant t0.
    Mais il doit aussi pouvoir arrêter son chronomètre, c'est-à-dire repérer et mémoriser le temps t1.
    Cette fonction pourrait être réalisée lors de l’appui sur le bouton a.


    2. Algorithme
    Pour des raisons de commodité, l’émetteur et le récepteur partageront le même script.
    En résumé, le programme doit assurer trois fonctions :

    A) Pour le récepteur : Arrêter son chronomètre et afficher la durée
    Cette fonction pourrait être réalisée lors de l’appui sur le bouton a.L’algorithme, écrit en langage naturel pourrait être :

    Si le bouton_a est pressé
    consulter l’horloge et relever le temps t1
    afficher le résultat du chronométrage sur l’écran de la calculatrice



    B) Récepteur : démarrer le chronomètre lorsqu’il reçoit le signal “TOP”
    L’algorithme, écrit en langage naturel pourrait être :

    Si un message radio est reçu
    consulter l’horloge et relever le temps t0
    afficher zero sur l’écran de la calculatrice



    C) Pour l’émetteur : Envoyer le message “TOP” - départ à toutes les cartes micro:bit. 
    Cette fonction pourrait être réalisée lors de l’appui sur le bouton b.
    L’algorithme, écrit en langage naturel pourrait être :

    Si le bouton_b est pressé
    consulter l’horloge et relever le temps
    afficher zero sur l’écran de la calculatrice
    envoyer par radio le message “TOP” aux autres calculatrices



    Ce seront alors ces trois types d'événements que devra gérer le programme.



    3. Première partie du script
    from ti_system import *
    from microbit  import *
    from mb_radio import *
    from mb_disp import *
    from mb_butns import *
    import ti_plotlib as plt
    from time import *

    radio.config(length=8,channel=7,power=6,group=1)
    radio.on()

    plt.cls()
    def synchro():
    return monotonic()
    def chrono(t):
    t1=synchro()
    return t1-t

    def affichage(t):
    msg="temps=%.1f"%chrono(t)
    plt.cls()
    plt.text_at(7,msg,"center")

    Au démarrage du programme, suite à l'import du module 'time', l'horloge commence à dérouler le temps de manière continue. Ce module diffère selon la version de micropython du dispositif. Pour la calculatrice TI-83, c’est la fonction Python qui permet de consulter l'horloge s'appelle 'monotonic'.

    Le programme utilise deux nouvelles fonctions Python, utiles pour consulter le temps : synchro et chrono, ainsi qu’une fonction utile pour permettre l’affichage, affichage


    A) Fonction synchro

    La fonction synchro, dont le script est fourni ci-dessous, sert à consulter l’horloge :
    def synchro():
    return monotonic()

    On l’utilise lorsque l’on veut savoir l’heure, ou plutôt, où en est l’horloge actuellement  (le moment zéro correspondant au démarrage du programme). Si on veut stocker la valeur dans la variable t0, il faudra réaliser l’appel de la fonction de la manière suivante : t0 = synchro().



    B) Fonction chrono
    La fonction chrono dont le script est ci-dessous, sert à savoir combien de temps se sont écoulés depuis le temps t, passé en argument
    def chrono(t)
     t1=synchro()
     return t1-t



    Pour mesurer une durée avec une horloge qui déroule le temps de manière continue, il faudra repérer le temps de départ, à l'aide d'une variable, t0. 
    Puis appeller la fonction chrono. Celle-ci prend pour paramètre le temps initial, t0, et retourne une valeur calculée en soustrayant: synchro() - t0.
    Comme synchro() représente la position du temps actuel, ce calcul est équivalent à : temps actuel - temps initial.
    On appellera cette fonction de la manière suivante : chrono(t0).


    C) Fonction affichage
    Pour afficher le temps chronométré sur l’écran de la calculatrice.
    def affichage(t)
    msg="temps=%.1f"%chrono(t)
    plt.cls()
    plt.text_at(7,msg,"center")

    Lors d’un appel de la manière suivante, la calculatrice affiche le temps écoulé depuis t0: affichage(t0) 
    Le temps t0 est passé en argument. On affiche une valeur à l'écran calculée en appelant chrono(t). Comme t vaut t0 puisqu'il s'agit de l'argument passé lors de l'appel de la fonction, cette fonction affiche la durée chronométrée.

    Lorsque l'on écrit successivement les deux instructions ci-dessous, le chronomètre affiche zéro : 
    t0 = synchro()
    affichage(t0)
    En effet, au moment où la fonction chrono(t0) est appelée (procédure affichage), le temps repéré par l'horloge est à peine supérieur à t0, disons qu'il vaut t0 + ε. Alors chrono(t0) retourne ε, qui devrait être inférieur à la milliseconde.

    Cette combinaison d'instructions est donc équivalente à remettre le chronomètre à zéro. C'est ce qui sera réalisé lorsque :
    - la carte micro:bit reçoit un message d'une autre carte micro:bit
    - ou bien lorsque l'on appuie sur le bouton b.


    4. Conception ou utilisation du script
    Selon le niveau de la classe, et l’avancée dans l’année scolaire, le script pourrait être présenté en partie, ou directement fourni aux élèves.
    Voici deux scénarios pédagogiques possibles :

    a) Scénario 1 : les élèves complètent le script
    Seule la partie 1 du script est donnée. On rappelle que le programme doit gérer les évènements liés:
    • à l’appui sur le bouton a
    • à l’appui sur le bouton b
    • à la réception du message radio “TOP”

    Revoir pour cela le paragraphe Algorithme.

    b) Scénario 2 : le script complet est fourni aux élèves

    Dans ce deuxième cas, on peut imaginer un exercice sur la lecture du script, afin que la séance ne se limite pas à mettre en œuvre l’expérience. 
    Selon l'état du programme, il affiche certaines images sur l'écran de la carte micro:bit.

    Ces images sont parmi : 


    Pouvez vous deviner l'image qui sera affichée sur l'écran LED de l'opérateur selon l'état de son programme ? 
    C'est à dire selon si celui-ci :
    - a appuyé sur le bouton b car il est au départ du véhicule (à gauche sur le dessin ci-dessous)



    - a reçu le message radio “TOP”, au moment du départ d'un véhicule lointain (à droite sur le dessin ci-dessous)



    - a appuyé sur le bouton a car le véhicule vient de franchir la ligne d'arrivée devant lui.




    5. Utiliser le programme
    Une fois le programme CHRONOS lancé :
    • Le bouton a permet de relever le temps d'arrivée. Appuyer sur ce bouton quand le véhicule franchit la ligne d'arrivée.
    • Le bouton b remet le chronomètre à zéro et envoie l'information "TOP" aux autres cartes micro:bit, par message radio. C'est sur ce bouton qu'il faut appuyer lorsque le véhicule franchit la ligne de départ.
    • Le dispositif remet automatiquement son chronomètre à zéro lorsqu'il reçoit l'information "TOP" de la part d'une autre carte micro:bit. Il suffira alors d'appuyer sur le bouton a pour mesurer la durée.


    6. Prolongement possible
    Le professeur pourrait donner la valeur de la vitesse du véhicule aux élèves. Cela permettrait de déduire la distance entre la ligne de départ et d’arrivée. Puis d’évaluer la qualité de ce résultat par une mesure directe. Une discussion pourrait être amorcée sur les sources d’incertitude pour cette méthode.

    Script de la calculatrice TI-83 Premium CE EDITION PYTHON

    Le script est celui des fichiers :
    • CHRONOS.py
    • CHRONOS.8xv

    Le fichier CHRONOS.8xv peut être directement chargé sur chacune des calculatrices.


    Script équivalent pour micro:bit
    Si l’une des cartes micro :bit est utilisée seule, non branchée à la calculatrice, il faudra charger un programme .hex compilé à partir du script en micropython suivant :
    - chronos_hex.py

    Pour transférer le code Python créé sur l'interface Vittascience :

  • Cliquer sur le bouton : "Télécharger .py pour calculatrice"
  • Connecter votre calculatrice Ti-83 Premium CE Edition Python à l'ordinateur à l'aide du câble USB.
  • Ouvrir le logiciel TI Connect CE.
  • Glisser sur la calculatrice (dans le logiciel TI Connect CE) le programme téléchargé (.py) pour le copier.
  • Attendre la fin du téléchargement.
  • Débrancher votre calculatrice et connecter votre carte micro:bit.
  • Ouvrir l'application Python de votre calculatrice (touche prgm) et lancer votre programme.


  • Pour réaliser ces activités, vous aurez besoin de votre calculatrice TI-83 Premium CE Edition Python mise à jour avec le dernier système d’exploitation disponible et de télécharger et d’installer les modules BBC micro:bit.

    Toutes les instructions d'installation sont disponibles dans l'activité n°0 Présentation et installation.

    Användarlicens

    Licence Creative Commons

    Detta verk får användas enligt villkoren i Creative Commons-licensen Erkännande – Inga ändringar 2.0 UK