loader

10. Le rendez-vous

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°10 pour calculatrice TI-83 Premium CE Edition Python. Auteur : E. Tixidor

Comment secourir un alpiniste perdu ? A partir de ses coordonnées GPS, à condition que celui-ci ait pu les envoyer. Cela sous-entend qu’il dispose d’un appareil muni d’un capteur GPS, et capable de partager sa position.Nous allons mettre en œuvre le principe de localisation de cet alpiniste perdu. Nous utiliserons un module GPS, dont la trame contentant la position sera envoyée aux calculatrices des élèves.

Ce thème, de la géolocalisation avec un module GPS sur microbit a été développé sur la fiche à l’adresse : https://fr.vittascience.com/learn/tutorial.php?id=44/D%C3%A9terminer-sa-position-avec-un-module-GPS-sur-Micro:bit
Le support de la calculatrice va permettre une plus grande variété dans le traitement et l’affichage des données.

La première carte microbit sera reliée au module GPS par l’intermédiaire du shield Grove. Elle aura pour rôle de lire la trame GPS et de l’envoyer vers l’autre carte, réceptrice.
La carte réceptrice sera reliée à la calculatrice TI-83, et sera programmée par celle-ci.

Les alpinistes qui partent en expédition doivent pouvoir faire connaître leur position lors de leurs activités. En cas de détresse, ils espèrent que leur géolocalisation sera précise, et qu’elle pourra être communiquée à quelqu’un qui pourra leur porter secours, même hors réseau.Dans cette activité, nous nous intéresserons à la localisation de cet alpiniste, qui tentera d’être secouru.


Mini-GPS de la marque Garmin, qui partage sa position par satellite

Partageons les rôles dans la classe : Le professeur contrôle le dispositif émetteur de la trame GPS.
Et l’élève, muni d’un dispositif récepteur, analysera cette trame, pour déterminer la position précise de l’émetteur.


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).

L’activité sera réalisée en deux temps :
Une première partie au cours de laquelle les élèves vont se familiariser avec le contenu de la trame NMEA, et extraire les données de localisation.Une deuxième partie au cours de laquelle le professeur utilise un véritable dispositif GPS et envoie la trame de ce GPS aux dispositifs récepteurs.

Partie 1 : analyse de la trame NMEA
1) Format de données
a.Principe

Le capteur GPS est un composant électronique qui équipe de nombreux appareils électroniques. Il a pour rôle de décoder les informations transmises par les satellites GPS, de calculer sa position, et de mettre en forme les données, dans une trame NMEA.

La trame NMEA est une suite de caractères mis dans un format particulier (normalisé) pour permettre un échange entre systèmes et logiciels. 

On pourra se référer à la page Wikipedia sur la norme [NMEA 0183]( https://fr.wikipedia.org/wiki/NMEA_0183) pour plus de précisions sur l’origine de ce format.

Chaque trame commence par le caractère $. Il est alors suivi d’un groupe de 5 lettres qui identifient l’origine du signal (2 lettres), et le type de trame (3 lettres).

Toutes les trames ne contiennent pas les mêmes informations. Nous ne pourrons interpréter que celles dont les 5 lettres sont GPGGA.
Voici un exemple de trame GPGGA :
$GPGGA,163221.000,4854.8644,N,00219.4940,E,2,9,0.94,52.1,M,47.3

Observons celle-ci :

Cette trame contient des données de type texte (str en Python), et numérique (float en Python). Les séparateurs entre données sont les virgules. Les séparateurs décimaux sont les points.

Elle fournit les informations suivantes : 
  • Horloge: 16h 32m 21s
  • Latitude: 4854.8644 N
  • Longitude: 219.4940 E
  • Nombre de satellites utilisés: 9
  • Altitude: 52.1 m

Comment extraire ces informations de la trame ?
Le script ci-dessous est fourni aux élèves. C’est un extrait du script NMEA.py fourni dans le dossier de l’activité.
Ce script apporte deux fonctions, split et depil, dont le contenu n’est pas au programme de la classe de SNT.
La trame NMEA est constituée d’une longue chaine de caractères, et ressemble ainsi au message que recevront les élèves dans la partie 2. 





Dans le script, lorsque l’on appelle la fonction split avec pour argument nmeasplit(nmea)
La fonction va découper la chaîne de caractère nmea au niveau des séparateurs entre données (à chaque virgule).
Les morceaux de chaîne de caractère générés sont alors mis dans la liste L.
Cette liste a alors le contenu :
L = =["GPGGA","163221.000","4854.8644","N","00219.4940","E","2","9","0.94","52.1","M","47.3"]

Les trois dernières lignes vont stocker dans une nouvelle liste nmeaLIST les seules valeurs de la liste L aux rangs 1, 2 et 4. Ces données sont transformées en type float dans la liste nmeaLIST.



b. Un format numérique particulier
  • Latitude: 4854.8644 N
  • Longitude: 219.4940 E

Mais attention au format numérique des données de position qui est très particulier :
Les latitudes et longitudes sont exprimées en degrés et minutes d’arc, mais avec un séparateur (point) qui correspond à la partie décimale des minutes. Les nombres sont exprimées sous la forme : DDMM.MMMM
Le premier ou les deux premiers chiffres correspondent au degrés. Les deux suivants, à la partie entière des minutes d’arc. Après le séparateur viennent les chiffres de la partie décimale des minutes.
L’idée sera alors de transformer cette valeur en une notation décimale, du type :DD.DDDDDD.

pour l’exemple précédent :
La latitude (Nord) est exprimée avec la série de chiffres 4854.8644
La partie entière des degrés est alors 48, soit 48°.
Pour définir cette valeur, on peut traiter le nombre  4854.8644 de la manière suivante :
partie entiere4854.8644/100=48
Nous pourrions stocker cette valeur, 48 dans la variable deg
Et le résultat de 4854.8644/100 dans une autre variable, que l’on nommera l :
l= 4854.8644/100= 48.548644
D’après ce qui précède, les minutes d’angles sont alors 54.8644 minutes. 
Pour obtenir cette valeur à partir de 4854.8644 :=l-deg×100 =54.8644
Avec la correspondance : 60 minutes = 1 degrés, on convertit cette valeur en degrés de la manière suivante :
decim= 54.8644 /60=0.914407
La valeur convertie en degrés vaut alors : deg+decim=48.914407°

Travail attendu des élèves : 
  • à partir de l’algorithme de calcul de la latitude ou longitude en degrés, à partir d’une données en format hybride DDMM.MMMM, compléter la fonction suivante. Cette fonction prendra en paramètre la donnée issue de la trame NMEA pour la latitude ou longitude (format hybride), et devra retourner une valeur en notation décimale DD.DDDDDD

def conversion(latlon):  l=latlon/100  ...  ...  ...  ...  return . . .
  • puis appeler cette fonction pour convertir les valeurs des longitude et latitude, stockées dans la liste nmeaLIST. (on écrira les deux instructions avant de parcourir le script donné, NMEA.py)

  • tester enfin le programme NMEA.py. Après execution du programme, explorer depuis le shell Python de la calculatrice les differentes variables et listes, accessibles avec la touche (var) de la calculatrice.


Partie 2 : Géolocalisation

1) Principe

Le dispositif émetteur émet la trame NMEA transmise par son module GPS. Cette trame, issue d’un unique dispositif dans la classe est ensuite envoyée par ondes radio aux dispositifs récepteurs (les élèves).

2) Le dispositif émetteur
La carte microbit émettrice sera insérée dans le shield Grove. Le capteur Grove GPS sera branché sur le port PIN0 du shield. 

C’est le module GPS qui envoie les caractères de la trame NMEA à la carte microbit, selon une transmission série sur le port PIN0.Actuellement, la lecture série n’est pas implémentée dans la librairie microbit pour la calculatrice TI-83.

Cette carte sera donc reliée à un ordinateur. On utilisera un IDE en micropython pour programmer cette carte. Cet éditeur vous fournira un fichier d’extension .hex qu’il faudra charger sur la carte microbit.

Nous vous conseillons d’utiliser l’éditeur en ligne du site Vittascience.com, qui devrait vous faciliter les manipulations d’édition et de chargement sur la carte : https://fr.vittascience.com/microbit/?console=bottom&toolbox=vittascience&mode=code

Voici pour information le script en micropython utilisé pour générer le fichier .hex, à charger sur cette carte : il s’agit du script maitreGPS2.py du dossier de l’activité.





Les données générées par le capteur GPS ne sont pas toutes bien formatées. Pour réduire les données à transmettre il a fallu démarrer la lecture à partir du caractère G, comme pour GPGGA par exemple.C’est ce qui est réalisé par la fonction clean, qui retourne la chaine de caractères correspondant à la trame. Cette chaine est stockée dans la variable nmea. Elle est alors transmise par message radio.
La transmission radio a donc lieu uniquement lorsqu’une trame est interceptée dans le bon format parmi les caractères issus du capteur GPS. L’affichage LED du microbit émetteur est alors “1“.

Lorsqu’il n’y a pas de trame interceptée, l’affichage LED du microbit émetteur est alors “0“.

3) Le dispositif récepteur
Le récepteur est constitué d’une carte microbit reliée à la calculatrice.Le programme à charger sur la calculatrice diffère légèrement du programme vu dans la partie 1 car il faudra maintenant :
  • Ecouter la transmission radio
  • Relever les trames NMEA issues de l’émetteur
  • Réaliser le traitement sur ces trames.

La modification va essentiellement porter sur la réception du signal. Voici le script minimal qui permettra ceci, sans en réaliser le traitement :



Ce script peut être saisi par les élèves dans un nouveau programme. On pourra néanmoins charger le script complet mis dans le dossier de cette activité : NMEA1.py

4) Intérêt et limitations

Lorsque l’on réalise l’expérience, avec l’émetteur qui envoie les différentes trames reçues aux récepteurs, on constate que ces trames sont de formats bien différents.Elle diffèrent selon la nature des 5 caractères initiaux. (voir début avec l’explication sur le format de données). Seule la trame GPGGA est dans le bon format pour notre programme de traitement.

L’activité complète devrait permettre, une fois la trame reçue d’extraire les informations de position et de traiter les données, comme vu dans la partie 1.
Les élèves pourraient laisser défiler les différentes trames qui s’affichent sur la calculatrice, et sélectionner celle qui commence par GPGGA en appuyant sur la touche (ON).
Les traitements seraient alors effectués sur la chaine de caractère nmea.
Cela n’est malheureusement pas possible car la longueur maximale du message émis ne peut pas contenir suffisamment de caractères.
L’intérêt de cette partie réside toutefois dans la réalisation d’une véritable acquisition de la trame NMEA, et de sa présentation sur les calculatrices des élèves (incomplète).

Script NMEA.py  (partie 1)




Script NMEA1.py (partie 2, dispositif récepteur)


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.

    Nutzungsrecht