Scratch et SenseHat : de la station spatiale à ICN

dimanche 24 septembre 2017
par  Alain BUSSER

Le projet Astro Pi est un corpus d’expériences scientifiques menées dans la station spatiale internationale, sur des ordinateurs Raspberry Pi, et sélectionnées parmi des travaux de projet menés, entre autres, par des collégiens. Les capteurs sont des Sense Hat, traditionnellement programmés en Python [1], mais depuis peu, également en Scratch.

Montage

Pour monter un AstroPi, il faut fixer sur un Raspberry Pi, une extension Sense Hat.
Ci-dessous le Raspberry Pi est à gauche et le Sense Hat à droite :

On doit donc d’abord brancher le Sense Hat sur le Raspberry Pi. La rangée de broches qui fait de belles ombres à droite du Raspberry Pi s’appelle GPIO (General Purpose Input-Output). Le Sense Hat (du moins s’il est livré complet, ça n’a pas toujours été le cas) est muni d’une rangée de prises correspondant au GPIO. Les élèves ont eu à adapter eux-mêmes le Sense Hat sur le GPIO, sans se tromper de sens, histoire de les habituer à ce que l’informatique est avant tout une histoire d’électronique, donc, in fine, de branchements. Le tout (Raspberry Pi + Sense Hat = AstroPi) est un ordinateur que voici :

Pour s’en servir on doit encore y brancher

  • un câble HDMI allant vers l’écran d’un PC
  • un clavier USB, par une des prises USB
  • une souris USB (optionnelle mais pour programmer en Scratch il la faut), par une autre prise USB
  • un câble USB pour alimenter l’AstroPi

Le tout prend presque une heure pour l’ensemble de la classe, certains groupes ayant des problèmes techniques ou de lenteur.

Comme c’est par le GPIO que le Raspberry Pi communique avec le Sense Hat, il faut, pour pouvoir utiliser Scratch avec le Sense Hat,

  • créer une variable appelée AddOn et lui donner la valeur SenseHAT
  • envoyer au Sense Hat le message gpioserveron.

Comment ?

Mais le seul moyen, avec Scratch, d’envoyer un message au Sense Hat, est d’envoyer le message à tous.

Alors, on va dans le menu des variables et on crée une nouvelle variable et on la nomme AddOn :

À ce stade on ne voit rien de nouveau, par exemple le Sense Hat n’est pas encore visible dans la liste des capteurs :

Mais il suffit d’envoyer à tous le message gpioserveron pour démarrer le GPIO :

Après avoir exécuté ces deux blocs, on voit que le nombre de capteurs a considérablement augmenté :

Ceci prouve que le SenseHat est maintenant fonctionnel (c’est lui qui abrite le thermomètre, l’hygromètre, l’accéléromètre et même un magnétomètre, pour l’instant non encore reconnu par Scratch). Il est donc possible d’allumer des LEDs, de lire les pression, température, humidité et champ gravitationnel et même d’utiliser le joystick du Sense Hat en lieu et place des flèches du clavier, dès lors que le script commence par ces deux blocs :

I/ Allumer des LEDs

Pour allumer une LED, il est nécessaire de fournir ses coordonnées, qui sont des nombres entiers entre 0 et 7. Alors une première activité peut être d’allumer directement un motif de LEDs, en l’occurence un caractère. Pour cela il suffit d’envoyer à tous le message ledshowchar concaténé avec le caractère à afficher (unicode non reconnu). Par exemple

  • Pour écrire un « a » on envoie le message ledshowchara
  • Pour écrire un « b » on envoie le message ledshowcharb
  • Pour écrire un « A » on envoie le message ledshowcharA

Comme il y a 127 caractères ASCII, les plus rapides ont de quoi s’occuper pendant que les maladroits se dépatouillent avec le prof (tout doit être écrit en minuscules dans les messages envoyés au SenseHat). Mais ce n’est pas tout : Si, avant d’envoyer un message ledshowchar, on envoie le message ledforeground concaténé avec un nom de couleur (en anglais, voire en html, soit un dièse suivi de 6 chiffres hexadécimaux), le caractère s’allumera dans la couleur voulue.

Par exemple ledforegroundred suivi de ledshowcharD donne la lettre D en rouge :

Le script donnant cela est celui-ci :

Jusque là, on n’est pas encore vraiment dans de la création numérique. Mais, outre ledscrollstring qui, concaténé avec un mot ou une phrase, fait défiler du texte sur la matrice de LEDs, il est bel et bien possible d’allumer une LED avec Scratch. Mais le message à envoyer est plus compliqué puisqu’il contient les coordonnées de la LED à allumer ainsi que sa couleur. Par exemple, si on veut allumer en cyan la LED d’abscisse 5 et d’ordonnée 3, on « envoie à tous » le message ledpixelx5y3colourcyan. On est donc plus près de la programmation textuelle que de l’esprit Scratch.

Création numérique par les élèves

Au passage ce binôme a personnalisé le look du chat :

Ce script dessine un « L » (majuscule) mais en deux couleurs :

Voici le dessin créé (et il s’agit bien là de création numérique) :

Les deux autres scripts ont pour effet d’afficher un texte défilant sur la matrice de LED ; et l’un d’eux se déclenche par le joystick du Sense Hat. Il est à noter que l’utilisation du joystick a été découverte par les élèves, seuls, par essais : Le prof ignorait totalement cette possibilité !

Ce script, créé par un autre binôme, dessine une framboise :

Et l’effet obtenu :

Les élèves météorologistes évoqués dans la partie suivante ont créé tellement de scripts que certains portaient aussi sur cette partie : Affichage de trois LEDs alignées, en jaune, et même une animation, en affichant les LEDs l’une après l’autre, à l’aide de l’instruction « attendre » de Scratch.

Pour aller plus loin

Il y a en tout, 64 LEDs sur le Sense Hat. Ça fait long pour les allumer toutes, aussi est-il intéressant d’utiliser des boucles pour changer automatiquement les coordonnées voir les couleurs des LEDs à allumer. Cela fait 5 nombres à insérer dans du texte :

  • L’abscisse de la LED (entre 0 et 7)
  • L’ordonnée de la LED (entre 0 et 7)
  • L’intensité de la composante rouge (entre 0 et 255)
  • L’intensité de la composante verte (entre 0 et 255)
  • L’intensité de la composante bleue (entre 0 et 255)

Mais en dehors du fait que les élèves qui entrent en Seconde n’ont guère l’habitude de créer des boucles en Scratch [2], il faut utiliser « joindre » pour effectuer des concaténations. On verra dans la partie sur l’accéléromètre que c’est une complication supplémentaire, les textes devenant vite longs à construire (il s’agissait d’allumer une LED dont la position dépend de l’inclinaison du Raspberry Pi).

II/ Station météo

Une fois le Sense Hat initialisé avec le message gpioserveron, le lutin (ici une grenouille, plus appropriée qu’un chat pour annoncer la météo) peut « dire » la valeur d’un capteur météorologique :

  • température (en degrés Celsius) ;
  • humidité (en pourcentage de saturation : à 100% il pleut dans la salle d’info, à éviter) ;
  • pression atmosphérique, en hectoPascals (hPa).

C’est donc simple à mettre en œuvre :

L’effet obtenu est saisissant [3] :

Pour aller plus loin

L’affichage de la pression atmosphérique permet de faire travailler la notion de test :

  • Si la pression est supérieure à 1015 hPa le chat annonce qu’il est dans un anticyclone ;
  • Sinon il annonce qu’il est en dépression.

En fait, d’après l’exercice 2 de ce sujet de bac, l’exercice était mal calibré, d’une part parce que la pression atmosphérique moyenne n’est pas 1015 hPa mais 1013,25 et d’autre part parce que cette pression moyenne n’est atteinte qu’au niveau de la mer. En effet le sujet de bac raconte que :

En 1648, Blaise Pascal a demandé à son beau-frère Florin Périer de mesurer la hauteur de mercure dans deux baromètres, l’un situé à Clermont-Ferrand et l’autre en haut de la montagne la plus proche, le Puy-de-Dôme.
Florin Périer a constaté que la hauteur de mercure dans le baromètre situé en haut du Puy-de-Dôme était inférieure à la hauteur de mercure dans le baromètre situé plus bas, à Clermont-Ferrand.
Cette expérience a permis de montrer que la pression atmosphérique diminue lorsque l’altitude augmente.

On rappelle que la pression atmosphérique vaut 1013,25hPa au niveau de la mer.

Pour évaluer la pression atmosphérique, les alpinistes utilisent la règle simplifiée suivante : « la pression atmosphérique diminue de 0,11 hectopascal quand l’altitude augmente de 1 mètre ».

Or d’après le GPS, la salle d’ICN est à 615 mètres d’altitude, et la pression atmosphérique moyenne y est donc de 1013,25-615×0,11=945,6.

Il aurait donc fallu que le chat annonce un anticyclone et non une dépression [4].

Création numérique par les élèves

Voici une réalisation d’élèves, qui ont déjà commencé par personnaliser le chat en lui mettant un casque :

Les scripts sont assez nombreux, tant ils ont expérimenté :

Scripts Effets
animation (changement de
couleur et de position
de la LED)
autre animation (défilé de
pointillés)
le chat annonce la météo
le chat et les LEDs
annoncent la pression
atmosphérique

III/ Faire bouger le chat

alternative

Le plus simple pour faire bouger le chat avec le Sense Hat, c’est d’utiliser le joystick, lequel, après l’envoi du message gpioserveron, simule les appuis sur les 4 touches avec des flèches. Les sujets Amérique du Nord et Asie du brevet des collèges 2017 deviennent intéressants à expérimenter avec le joystick du Sense Hat. Las, ignorant que Scratch permettait de connaître l’état du joystick, je n’ai pas évoqué cette possibilité avec les élèves, et ai préparé à la place mon classique niveau à bulle d’air mais cette fois-ci en Scratch :

L’activité suivante consistait à faire bouger le chat en inclinant le Raspberry Pi. Là encore, la recette est simple, grâce à l’instruction « aller vers » de Scratch, laquelle permet de téléporter le chat vers un point dont les coordonnées sont juste celles fournies par l’accéléromètre.

Problèmes d’échelle

Pour cette activité il est intéressant d’utiliser une de ces redoutables boucles sans fin : Le chat bouge tout le temps et on voit ainsi, en live, l’effet de l’inclinaison du Raspberry Pi. Cela permet de comprendre par expérimentation comment sont orientés les axes du repère local du Raspberry Pi.

En fait l’accéléromètre mesure les coordonnées du champ de gravitation, et ces coordonnées, il y en a 3. On laisse donc tomber (c’est le cas de le dire) accelZ qui n’est pas lié de manière simple au repère local du Raspberry Pi, et on envoie le chat au point de coordonnées accelX et accelY.

On constate alors une autre difficulté : Le chat bouge peu, et il s’avère nécessaire de multiplier par 100 (découvert empiriquement) les coordonnées. Des élèves ont exploré, à leur malheur, un facteur plus grand. Ils ont ainsi mis au point un jeu d’agilité, où le gagnant est celui qui arrive à trembler le moins. De toute façon, à ce stade, on n’est pas tant dans la création numérique, que dans la création d’outils de création numérique : En abaissant préalablement le stylo, le chat fait des dessins « à main levée » pilotés par l’inclinaison du Raspberry Pi, ce qui est d’un maniement assez différent de celui d’un pinceau (suggestion faite par des élèves, qui ne semblent pas intéressés par un projet portant là-dessus).

L’idée d’un jeu de labyrinthe où le chat serait guidé par l’inclinaison du Raspberry Pi n’est venue à aucun élève. Pourtant il doit exister ce genre d’applications sur leur smartphone mais ils sont en ce moment plus intéressés par les jeux au joystick, comme les jeux que voici.

LEDs et chat : Les déchets ?

L’inconvénient de la pédagogie différenciée est qu’on a parfois du mal à imaginer comment occuper les plus rapides. Aussi la fin de la séance a-t-elle été occupée à une activité plus difficile, à savoir :

Comment peut-on repérer la position actuelle du chat par l’allumage d’une LED ?

Mathématiquement, il y a deux difficultés :

  1. L’intervalle n’est pas le même : de -1 à 1 pour accelX, de 0 à 7 pour l’abscisse de la LED ;
  2. Le type n’est pas le même : L’abscisse de la LED est un entier alors qu’accelX est un réel.

Apparemment la principale difficulté est la première : Il faut appliquer une fonction affine et cette notion est peu maîtrisée par les élèves qui entrent en Seconde. Il a fallu un dialogue assez poussif pour arriver à :

  • en triplant un nombre entre -1 et 1 on obtient un nombre entre -3 et 3 ;
  • en additionnant 3,5 à ce nombre on obtient un nombre entre 0,5 et 6,5 ;
  • en arrondissant le résultat on obtient un nombre entier entre 0 et 7.

Les tentatives plus ou moins abouties de certains groupes d’élèves sont décrites ci-dessous.

Créations d’élèves

Dans la production de ce binôme, on peut deviner une ébauche de création de jeu (couleur du stylo, enrichissemment du décor) :

Mais le fichier était en cours de formation, comme en témoigne le fait que l’ordonnée est sortie du script pour la modifier :

Ce groupe a commis une autre erreur assez intéressante : Recopier le texte explicatif du tableau, dans le nom d’une variable (laquelle ne sert à rien) :

Pour finir voici un corrigé partiel (il manque à affiner ou supprimer le discours du chat, et surtout envoyer un message clearleds pour ne pas laisser trop longtemps de trace sur l’écran, qui sinon est vite encombré) :

Des idées de projet sont données au fil de cet article, et d’autres, relativement simples et donc raisonnables à mettre en œuvre, pourraient être suggérées par la lecture de l’article. Le matériel est « fun » et en même temps « sérieux » de par sa présence dans la station spatiale internationale, et la programmation, parce qu’elle se fait avec Scratch, est relativement simple, même sans connaître toutes les notions du cours de Seconde. Par exemple voici un script affichant la courbe de température et qui pourrait bien servir d’introduction au cours (de maths) sur les fonctions :

Exercice : Combien de temps dure le tracé de la courbe ?


[1Voir par exemple cet article sur une expérience menée entre une classe d’ICN et ... Thomas Pesquet !

[2Cette information pourrait intéresser les concepteurs de sujets de brevet, mais aussi les correcteurs.

[3Cette copie d’écran a été prise au Tampon, à plus de 600m d’altitude, durant l’hiver austral, et la température était largement inférieure à la valeur affichée : Le processeur ARM du Raspberry Pi émet de la chaleur qui biaise la mesure de température du Sense Hat ; en ventilant bien le Raspberry Pi, la mesure est plus fiable, et plus faible d’au moins une dizaine de degrés.

[4Au même moment, l’actualité regorgeait de dépressions tropicales, mais pas à La Réunion, laquelle n’est pas encore, et de loin, en saison cyclonique.


Portfolio

GIF - 9.8 kio

Commentaires

Logo de Ariane
samedi 17 novembre 2018 à 09h18 - par  Ariane

Bonjour

votre article est très intéressant mais...je ne vois pas le bloc « Valeur du capteur » dans Scratch. Y a-t-il une astuce pour le faire apparaitre ?

Merci !