Les nouvelles technologies pour l’enseignement des mathématiques
Intégration des TICE dans l’enseignement des mathématiques

MathémaTICE, première revue en ligne destinée à promouvoir les TICE à travers l’enseignement des mathématiques.

Un projet ICN en Seconde : participation au Challenge AstroPi
Article mis en ligne le 15 juillet 2017
dernière modification le 17 juillet 2017

par Alexis Lecomte

L’auteur de l’article, Alexis Lecomte, est professeur de mathématiques au Lycée André Maurois d’Elbeuf

Toutes les contributions d’Alexis Lecomte à MathémaTICE

Grâce à un projet initié par l’ESA (Agence Spatiale Européenne) et le CNES (Centre National d’Etudes Spatiales), des élèves suivant l’enseignement ‘Informatique et Création Numérique’ ont conçu des programmes Python qui ont été exécutés sur un RaspBerry Pi dans la station internationale, sous la surveillance de Thomas Pesquet.

Partie I : Première phase du Challenge

Au Lycée André Maurois d’Elbeuf, nous proposons depuis la rentrée 2016 l’enseignement d’exploration « Informatique et Création Numérique » .

Mon collègue Arnaud Anquetil (également enseignant en Mathématiques) et moi avons chacun une vingtaine d’élèves à raison d’1h30 par semaine et partageons la même approche de cet enseignement : un enseignement basé sur la pédagogie de projet (comme le stipule le bulletin officiel), en essayant de proposer des projets différents en fonction des groupes.

Nous avons commencé l’année avec un sondage avant répartition des groupes dans les différents projets (robotique, plan virtuel du lycée, codage/décodage, géolocalisation…). Un groupe a travaillé en particulier autour d’usages possibles de l’ordinateur Raspberry Pi dont nous avions fait préalablement l’acquisition.

Le 15 Novembre 2016, le secrétariat de l’établissement transmettait aux enseignants un appel à projets émanant du CNES (centre national d’études spatiales) :

« Mission Proxima de l’astronaute français Thomas Pesquet

Le CNES vous propose de participer, avec votre classe, aux projets éducatifs d’accompagnement de la mission de Thomas Pesquet.

· AstroPi, défi de programmation, à destination des jeunes en classe de CM1 à 1ère. Le même défi est proposé dans plusieurs pays européens.
Inscriptions avant le 2 décembre 2016 pour recevoir un kit AstroPi.

· Expérimentation sol en accompagnement des expériences Jeunesse Exo-ISS à bord de l’ISS, à destination des jeunes de CM1 à la 1ère :

  • Ceres (influence de la micropesanteur sur la croissance des plantes),
  • CrISStal (influence de la micropesanteur sur la croissance des cristaux)
  • CatalISS (influence de la micropesanteur sur la réaction enzymatique (digestion)

En allant voir en détail le challenge AstroPi, il s’est avéré que le projet était idéal pour les élèves déjà familiarisés avec le Raspberry Pi. En effet, l’AstroPi est constitué d’un ordinateur Raspberry Pi et d’un module SenseHat (constitué de différents capteurs : température, pression, hygrométrie, accéléromètre et gyroscopie) avec une caméra, deux AstroPi étant présents dans la station spatiale internationale.

L’objectif - motivant - du challenge était de proposer des codes informatiques écrits en Python ou Scratch, afin qu’ils soient directement exécutés dans l’ISS en mai 2017…

Pour pouvoir être sélectionnés parmi les 400 groupes européens lors de la première phase du challenge, il fallait simplement proposer une idée de mission réalisable avec l’AstroPi au sein de l’ISS.

Après discussion avec les élèves du groupe, nous avons proposé l’accrochage de l’AstroPi sur le hublot du module Columbus dans lequel il se situe afin de prendre des photos de la Terre à intervalles réguliers et à l’aide d’un travail sur les pixels, détecter sur quelles photos la Terre est éclairée par le soleil afin de ne sauvegarder que celles-ci pour constituer une banque de données de clichés de notre planète.

Début décembre nous avons appris la sélection de notre groupe parmi les 400 européens et avons reçu gratuitement de la part du CNES un kit AstroPi au lycée, qui a atterri en salle des professeurs… :

Celui-ci est donc constitué des mêmes éléments que les deux AstroPi de l’ISS, seul le boitier n’est pas livré (mais peut être imprimé en 3D)

Partie II : Seconde phase du challenge : mission primaire et projet en parallèle

Courant décembre, nous avons été informés des détails de la seconde phase du challenge, via la page https://proxima.cnes.fr/fr/proxima-et-les-jeunes et plus spécifiquement https://proxima.cnes.fr/sites/default/files/drupal/201611/default/prx_phase_2_astro_pi.pdf

L’objectif était de réaliser deux missions

  • la « mission primaire » consistait à écrire un programme utilisant les capteurs de l’AstroPi permettant de détecter la présence ou non d’astronautes dans le module Columbus dans lequel se situent les deux AstroPi.
  • La « mission secondaire » était quant à elle totalement libre, à condition que l’on n’utilise pas les webcams (notre idée initiale tombait donc à l’eau) et que la mission ait un intérêt scientifique pertinent.

Le planning donné était le suivant :

Phase 2 – Découverte de l’AstroPi, recherches pour accomplir les missions, écriture et soumission du code  : 28/11/16 – 28/02/17

Date limite pour soumission du code : 28/02/17

Phase 3 – Sélection et exécution des codes à bord de l’ISS : 1/03/17 –15/05/17

Sélection des meilleurs codes : 1/03/17 – 14/03/17

Annonce des codes sélectionnés : 15/03/17

Publication des résultats (après exécution des codes dans l’ISS) : 15/05/17

Le challenge s’annonçait donc compliqué, d’autant que parmi les 400 groupes répartis dans les 15 pays européens participants, seuls 5 par pays seraient sélectionnés pour la dernière phase.

Étant donné l’originalité du projet, il me semblait intéressant d’entraîner plus que les 4 élèves du ‘groupe Raspberry’.

Je proposais donc à 2 autres élèves motivés de travailler sur un projet de reportage numérique autour du projet AstroPi. Leur rôle serait de traduire le travail de leur camarade et de rédiger sur un site web quelques articles présentant le projet.

Côté programmation, j’avais également remarqué un élève passionné qui avait travaillé rapidement sur le projet de codage/décodage et possédait un Raspberry chez lui.

En attendant de savoir si le projet aurait une partie programmation compliquée, je lui proposais (avec un de ses camarades) un projet connexe assez ambitieux : programmer une page HTML permettant d’afficher la terre et représenter l’ISS au moment de l’exécution de la page (avec rafraichissement de la page pour afficher la trajectoire de l’ISS)

J’avais au préalable vérifié la faisabilité en lui fournissant les éléments nécessaires (adresse du serveur à interroger, librairie javascript pour l’affichage de la Terre), ce qui lui a largement suffi pour mener à bien le projet.

Consigne donnée :

Objectifs :
  • Réaliser une page écrite en HTML/CSS/JS pour afficher dans un navigateur la position de l’ISS - on pourra utiliser la bibliothèque Javascript WebGLearth afin d’afficher la terre
  • Afin de récupérer la position de l’ISS, on pourra utiliser une requête HTTP vers la page http://api.open-notify.org/iss-now.json

En amélioration, on pourra actualiser la page toutes les secondes et garder la mémoire de l’emplacement de l’ISS afin de visualiser sa trajectoire autour du globe .

Illustration de la page Web obtenue après quelques temps :

On visualise bien la trajectoire circulaire de l’ISS autour de la Terre. Classiquement cette trajectoire est présentée sous forme sinusoïdale sur un planisphère. Pour expliquer cette forme, il ‘resterait’ à programmer à partir de la trajectoire circulaire une déformation continue vers le planisphère. Mais ça se complique beaucoup côté programmation…

En parallèle, les élèves concernés par le challenge AstroPi se répartissaient les tâches entre les deux missions.

Afin de faciliter le travail des élèves le CNES a mis à disposition un fichier CSV contenant les enregistrements de tous les capteurs de l’AstroPi de l’ISS durant le mois de février 2016 que l’on a trouvé dans le troisième paragraphe de cette page :
https://www.raspberrypi.org/learning/astro-pi-flight-data-analysis/worksheet/

Les élèves ont donc épluché ce fichier et, pour la mission primaire, se sont rendus compte que le taux d’humidité semblait être l’indicateur le plus fiable pour traduire la présence d’humains, comme évoqué dans une autre partie de la page web précédente.

La difficulté était de traduire une augmentation globale alors que les valeurs ne cessaient d’osciller… Ils ont donc fait le choix de comparer des moyennes successives sur des laps de temps assez importants.

En effet en travaillant avec un tableur, les élèves ont obtenu la représentation suivante avec les données brutes :

Les élèves ont naturellement voulu conclure que lorsque l’humidité est « globalement » en train d’augmenter c’est suite à l’arrivée d’un astronaute. Comment cependant détecter ces phases étant donnés les oscillations importantes ? Ils ont alors proposé de calculer les moyennes de dix valeurs (nombre établi par essai-erreur jusqu’à obtenir une courbe « globalement régulière ») pour comparer une moyenne avec la précédente. En observant le graphique obtenu où l’on observe 5 phases différentes :

il restait encore quelques variations mineures perturbatrices, les élèves ont choisi de ne tenir compte de la variation de ces valeurs qu’au-delà d’une variation de 0,02 (en valeur absolue), seuil défini empiriquement en observant ce graphique.

Étant donné que nous ne disposions pas d’information sur le nombre d’astronautes présents dans le module Columbus au moment de l’enregistrement des données, tout cela ne restait que des conjectures. Il ne manquait plus qu’à passer à la programmation

Ils ont donc été formés sur les concepts de base de programmation, notamment l’usage de listes, inévitable pour ce genre de programme.

Initialement, je ne comptais pas faire de programmation en Python (notamment pour éviter que de futurs élèves de Terminale S spécialité ISN ne redécouvrent ce langage deux ans après), mais il était évident que l’entorse était inévitable pour ce projet !

Nous avons testé à deux reprises le code réalisé ensemble, sans grand succès il faut l’avouer ! La première dans une salle de cours, les élèves entrant et sortant successivement de la salle et allant voir si l’écran LCD affichait le bon message. La seconde s’est effectuée dans la salle des serveurs, climatisée, et se rapprochant vraisemblablement plus des conditions de l’ISS.

Pour le premier test, les radiateurs de la salle semblait trop chauffer pour que les variations du taux d’humidité soient significatives, pour le second… c’est la climatisation qui semblait trop importante !

Les résultats n’étaient pas forcément probants, mais ce n’était pas le principal de mon point de vue. Le code fourni était réalisé par les élèves, suite à leurs idées, et la démarche scientifique était bien réelle…

La date butoir approchant, les élèves n’ont pas eu le temps de remettre en question leur projet et de réfléchir à d’autres solutions.

Partie III : Seconde phase du challenge : mission secondaire et géolocalisation

Pour la mission secondaire, le travail réalisé sur la géolocalisation nous a bien servi. En épluchant les nombreuses pages mises à disposition par le CNES, nous avons notamment été intéressé par les problèmes de perturbations électromagnétiques, apparaissant lorsque les satellites sont proches de l’Atlantique Sud comme mentionné dans le dernier paragraphe de cette page :
https://www.raspberrypi.org/learning/astro-pi-flight-data-analysis/worksheet/

L’idée qui a émergé était donc assez simple : prévenir les astronautes via l’écran de l’AstroPi qu’une perturbation électromagnétique était possible lorsque l’ISS se situait dans la zone à risque (même si nous somme convaincus que l’ISS possède toutes les sécurités pour éviter ces perturbations !)

Seul problème : les capteurs de l’AstroPi ne donnent pas la position de l’ISS … Cependant, parmi les nombreux capteurs, on trouve les trois composantes du champ magnétique (les élèves venant de voir les coordonnées de vecteurs du plan en Mathématiques, un rapide complément de géométrie analytique dans l’espace a été utile).

On pouvait donc calculer la norme du champ magnétique et envoyer un message lorsque celle ci se situait en dessous de 30 000 nano Tesla (valeur donnée dans le lien précédent).

Afin de vérifier les valeurs, les élèves ont une nouvelle fois utilisé le fichier CSV mis à disposition.
Et là, surprise, au lieu d’osciller entre 20 000 et 70000 nano Tesla, la norme calculée descendait jusque 3 000…

Une vérification s’imposait ! Je demandais alors à l’élève ayant travaillé sur le projet d’affichage de la position de l’ISS de compléter le tableau CSV, en interrogeant le serveur WHERISSAT et ajoutant deux colonnes donnant la longitude et la latitude de l’ISS en fonction de la date.

Voici un extrait du fichier CSV obtenu avec son code Python : (les dates de février 2016 avaient été converties au format Time Epoch - ou timestamp, nombre de secondes écoulées depuis le 1er janvier 1970 - utilisé par le serveur WHERISSAT, on observe les enregistrements de l’AstroPi toutes les dix secondes) :

A noter qu’une difficulté a été de relancer le programme plusieurs fois, le serveur distant WHERISSAT se méfiant d’un programme lui envoyant plusieurs milliers de requêtes…

Ce fichier CSV a alors été transmis à mon collègue Arnaud Anquetil qui faisait travailler certains élèves sur la géolocalisation, ils ont pu concevoir la carte suivante :

Nous en avons conclu qu’il pouvait y avoir par exemple des erreurs au niveau des capteurs de l’AstroPi, la zone à risque au vu de ces valeurs était donc a priori entre 3 000 et 20 000.

Code python : fichier Mission2_Maurois_ICN.py

Voir ci-dessous :

  1. # Principe de la mission : en calculant la norme du champ magnétique, on teste si l'ISS est au dessus
  2. # de l'amérique du sud où des interférences éléctromagnétiques sont possibles, on prévient alors les membres de l'équipage
  3.  
  4. # Import des librairies utilisées
  5. from sense_hat import SenseHat
  6. #from datetime import datetime
  7. from time import strftime
  8. from time import sleep
  9. from math import *
  10.  
  11. #création du fichier csv pour enregistrement des informations
  12. file = open('datas_mission2_maurois_icn.csv','w')
  13. file.write('Heure (Jour : '+strftime('%x')+'), Champ magnetique, Message\n')
  14.  
  15. # fonction récupérant la norme du champ magnétique
  16. def recuperation():
  17.     #initialisation de la liste retour et récupération des composantes du vecteur champ magnétique
  18.     champ=[]
  19.     mag = sense.get_compass_raw()
  20.     mag_x = mag["x"]
  21.     mag_y = mag["y"]
  22.     mag_z = mag["z"]
  23.     # On calcule la norme du champ magnétique en microTesla
  24.     champ_mag=1000*sqrt(mag_x*mag_x+mag_y*mag_y+mag_z*mag_z)
  25.     # le premier élément de la liste retournée sera cette valeur
  26.     champ.append(champ_mag)
  27.     # on enregistre également l'heure
  28.     champ.append(strftime('%X'))
  29.     return champ
  30.  
  31.  
  32. sense=SenseHat()
  33. sense.clear()
  34. sense.set_rotation(90)
  35.  
  36. # On a constaté que les  premià¨res valeurs des calculs étaient erronées (pb d'initialisation des capteurs ?)
  37. # d'où l'ajout d'un compteur (on s'en sert aussi pour fermer le fichier csv, sous linux le fichier était vierge sinon - pas sous d'autres OS)
  38. compteur=0
  39.  
  40. while compteur < 535: #on limite à  1h30 en gardant une petite marge pour àªtre sà»r de fermer le fichier
  41.     compteur += 1
  42.     champ = recuperation()
  43.     if compteur > 15:
  44.         if champ[0]<20000:  # a priori on est au dessus de l'amerique du sud (valeur 20000 estimée à  partir des données collectées de l'ISS en février 2016 - voir document complété),
  45.                             # un single event upset est possible, on avertit l'équipage
  46.             sense.show_message("! SEU possible !")
  47.             file.write(champ[1]+','+str(champ[0])+', SEU possible\n')
  48.         else:
  49.             sense.show_message("No risk")
  50.             file.write(champ[1]+','+str(champ[0])+', Pas de risque\n')
  51.     sleep(10)
  52.  
  53. # fermeture du fichier csv
  54. file.close()

Télécharger

Fichier Python à télécharger ci-dessus au format txt ou ci-dessous (format py mais zippé) :

Le message d’alerte s’afficherait donc lorsque la norme serait inférieure à 20 000 nanoTesla.

Les deux codes ont ainsi pu être envoyés au CNES comme prévu fin février.

Partie IV : Exécution des codes dans l’ISS et récupération des résultats.

La réponse est arrivée comme convenu à la mi-mars :

Dear Astro Pi Team,

ESA, in collaboration with the Raspberry Pi Foundation, would like to congratulate you all for your excellent work. Considering the high calibre of your mission, your code has been selected as a ‘Highly Commended’ entry and has been qualified to fly to the International Space Station (ISS) on the same SD cards as the winning codes.

After receiving more than 180 entries, it was very difficult to choose the best experiments to run on the ISS. An evaluation panel, composed of ESA, CNES and the Raspberry Pi Foundation, selected the experiments that have been qualified to fly. The submissions were evaluated based on the following criteria : scientific value, innovation, feasibility of the mission within the ISS environment, clarity, comprehensiveness, and code quality, and readability.

Your code will now be uplinked to the ISS to run on the Astro Pis in the Columbus module, under the careful supervision of ESA astronaut Thomas Pesquet. The collected data will be downlinked to Earth and distributed to the teams by 15 May 2017. You will then have the chance to analyse the data collected in space and to continue your amazing work – like a real space scientist !

Once again, we would like to congratulate all of the teams, students, and teachers, that participated in this project.

Kind Regards,
The ESA Education Team

Les codes n’ont donc pas été sélectionnés comme vainqueurs, mais suffisamment intéressants pour être executés pendant 3 heures dans l’ISS sous la surveillance de Thomas Pesquet, ce qui était bien l’objectif initial !

Les résultats officiels sont apparus par la suite sur cette page : https://proxima.cnes.fr/fr/astro-pi-les-vainqueurs-du-defi-europeen

Avec un message de félicitations de la part de Thomas Pesquet :

Durant la seconde quinzaine du mois de mai, j’ai reçu par mail le résultat de l’exécution de nos deux scripts Python (ceux-ci généraient des fichiers CSV pour pouvoir garder une trace de nos expériences).

Concernant la mission primaire voici les résultats obtenus :

Étant donné les très faibles variations sur les moyennes de taux d’humidité calculées, on peut douter de l’efficacité du programme… mais étant donné la démarche scientifique des élèves, leur implication dans la résolution d’un problème concret, la résolution complète n’est finalement pas le plus important.

Concernant notre mission secondaire, le message affiché a toujours été ‘Pas de risque’, les valeurs de la norme du champ magnétique ne descendant jamais en dessous de 20000 nanoTesla :

Il restait donc, à partir de ce fichier csv, de reproduire le travail initial pour vérification. Les dates ont été converties au format timestamp puis en réinterrogeant le serveur WHEREISSAT afin de compléter ce fichier CSV, voici la carte obtenue :


Pas de chance ! durant les 90 minutes d’exécution du code, l’ISS n’est pas passée au-dessus de la zone à risque, ce qui ne permet pas de mettre en défaut notre programme… On visualise bien sur cette carte que l’ISS fait le tour de la Terre en 1h30 environ.

Les cours s’arrêtant début juin, cette phase de vérification n’a pas pu être effectuée en classe, les élèves devant terminer les autres projets sur lesquels ils travaillaient.

Partie V : Réutilisation de l’AstroPi

Il aurait été dommage de ranger au placard l’AstroPi. Enseignant également la spécialité ISN en Terminale S, il m’est venu une idée de projet, que mon collègue d’ISN et moi avons proposée à un trinôme d’élèves : utiliser le gyroscope de l’AstroPi et son écran LCD pour programmer sur celui-ci un petit jeu de labyrinthe matérialisé par des pixels rouges pour les murs, un pixel représentant la bille et un autre l’objectif.

Il restait à l’utilisateur d’orienter l’AstroPi pour déplacer la bille.

Les élèves ont été motivés et intéressés par ce projet et ont dû faire face à une difficulté liée aux capteurs gyroscopiques de l’AstroPi : en revenant en position initiale les valeurs s’éloignaient énormément de la normale (0 ou 360). Aucune solution satisfaisante n’a été trouvée, le projet n’en est pas moins resté intéressant !

Pour terminer je tiens à remercier particulièrement le CNES et l’ESA pour l’organisation du Challenge AstroPi.

Il nous reste un dernier objectif à réaliser : rencontrer Thomas Pesquet ! S’il souhaite faire un crochet par le Lycée Maurois d’Elbeuf lors d’un retour en Normandie afin d’échanger avec les élèves, il est le bienvenu !