Publié le 20 septembre 2015 - par

Sense HAT, un tour dans les étoiles…

sensehat_250pxAvec la sortie de la carte Sense Hat (anciennement Astro Pi) la Fondation fait un pas vers les étoiles.
C’est chez Kubii que j’ai trouvé ma Sense Hat. Le paquet est arrivé rapidement et dès sa réception j’ai voulu tester cette nouveauté.
La Sense Hat partira vers l’ISS avec le Raspberry Pi chargé de mettre en application les expériences proposées par les écoliers, collégiens et lycéens anglais. C’est Tim Peake, l’astronaute anglais de l’ESA qui sera chargé de la mise en œuvre de l’ensemble Raspberry Pi + Sense Hat dans l’ISS.

Sense Hat dans l’espace

Flight-Case

Le Raspberry Pi équipé de la Sense Hat dans sa tenue spatiale.

tim_peake

Timothy Peake

Sense Hat : Le grand Déballage (Out of the box)

sensehat_boite1L’emballage annonce la couleur et un dessin de la Sense Hat figure sur la face avant de la boîte

sensehat_boite2A l’arrière sont résumées les principales caractéristiques et compatibilités.

Pas de surprise à l’ouverture, la carte est protégée par un sachet antistatique. A charge pour vous de la préserver des décharges d’électricité statique si vous voulez la conserver en bonne santé…  (préférez le slip en coton au slip en lycra 😉 )

Allez, cadeau ! la carte Sense Hat sous tous les angles…

Un dépliant rappelle les précautions d’emploi liées à la mise en service de la carte. Prenez garde en particulier à l’échauffement provoqué par les LED lorsqu’elles fonctionnent.

sensehat_boite4

Les capteurs de la Sense Hat

Pitch, Yaw, Roll

pitch_yaw_roll_sensehatLa carte est équipée d’accéléromètres et de gyroscopes réalisés en nano-technologie, qui enregistrent les mouvements selon les 3 axes Pitch, Yaw et Roll. Si ça ne vous parle pas, le schéma ci-dessous devrait vous éclairer 😉

pitch_yaw_rollPitch (tangage) est l’inclinaison que prend l’avion lorsqu’il monte ou descend, Roll (roulis) indique que l’appareil penche à droite ou à gauche autour de l’axe rouge, enfin Yaw (lacet) indique que l’appareil tourne vers la droite ou vers la gauche autour de l’axe vert.

La carte doit être placée en concordance pour que les 3 axes coïncident.

Les capteurs I2C

La carte est équipée d’un certain nombre de capteurs auxquels le RasPi accède via le bus I2C.

capteurs_600px

Cliquer pour agrandir

On trouve les circuits suivants :

Centrale inertielle

  • Capteur de mesure inertielle : ST LSM9DS1. Ce circuit comporte un accéléromètre 3D, un gyroscope 3D et un magnétomètre 3D combinés dans une seule puce.

    accelerometre

    Accéléromètre en nanotechnologie. On distingue la masse inertielle centrale suspendue par 4 ressorts.


    Le LSM9DS1 peut mesurer des accélérations de ±2g/±4g/±8g/±16g, un champ magnétique de ±4/±8/±12/±16 gauss ainsi qu’une vitesse angulaire de ±245/±500/±2000 degrés/seconde. Il est donc capable de fournir des informations de tangage, roulis et lacet sur les mouvements qu’il subit.

    mems_gyroscope

    Gyroscope en nanotechnologie.La masse centrale est suspendue par un système de ressorts. Notez l’échelle de 200µm en bas de l’image.

    Dans l’espace il donnera donc des information sur l’ISS elle-même et pourra également être utilisé pour détecter quand les fusées d’appoint de l’ISS seront actionnées.
    sensehat_capteurs2

Le dessous des choses

sensehat_dessousLe dessous de la carte ne comporte aucun composant, juste des points tests qu’il faudra éviter de mettre en contact avec des objets métalliques. Vous verrez dans la vidéo que cette configuration permet de monter la carte Sense Hat sur un HMIPI sans que cela ne pose problème.

Capteur de pression et température

  • Capteur de pression barométrique et capteur de température : ST LPS25H. Ce circuit peut mesurer une pression absolue comprise entre 260 et 1260 hPa avec une précision d’1Pa. Il intègre une compensation de la température et un convertisseur analogique-numérique 24 bits. Il peut donner la pression atmosphérique en pascals ou en millibars, ainsi que la température en °C. (pour les plus observateurs je confirme l’orthographe de pascal avec une minuscule…).

    capteurs2_600px

    On distingue mieux les ouvertures permettant les mesures de pression et d’humidité sur cette vue (Cliquez pour agrandir)

    Capteur d’humidité et de température

  • Capteur d’humidité relative et capteur de température: ST HTS221. Ce capteur fournit le pourcentage d’humidité relative ainsi que la température en degrés centigrades. Le capteur est assez sensible pour détecter la vapeur d’eau contenue dans l’haleine humaine de sorte qu’il sera possible de détecter la présence de l’équipage lorsqu’il travaillera près de l’Astro Pi. Il peut mesure l’humidité relative de 0 à 100% avec une précision de 4,5% entre 20% et 80% d’humidité relative. Le capteur est calibré à la fabrication et les corrections sont stockées dans des registres internes.
    Il mesure la température avec une précision de ±0,5°C entre 15 et 40°C. Néanmoins, les mesures de température sur cette carte sont à considérer avec méfiance dans la mesure ou l’échauffement des composants (en particulier lorsque les LED fonctionnent) provoque une élévation de la température ambiante à proximité de la carte…

Le joystick (bâton de joie ?)

sensehat_joystick

Le joystick au premier plan, un peu flou

sensehat_capteurs2

Sur cette vue, le joystick se trouve à gauche. Remarquez sa faible épaisseur.

Le joystick est un modèle CMS (composant monté en surface). Il dispose de 5 contacts : Haut, bas, droite, gauche et clic vertical. C’est un modèle Alps SKRHABE010. Il pourra émuler les touches de direction du clavier et la touche Entrée avec le clic central. Il est accessible via le système standard de gestion des événement Linux /dev/input/event*

Atmel Tiny88

La gestion de la matrice de LED et du joystick ont été délégués à un micro-contrôleur ATMEL Tiny88.

ATMEL_Tiny88

La matrice de LED est pilotée par une combinaison formée d’un pilote de LED à courant constant (un LED2472G) et d’un ATTiny88 Atmel exécutant un firmware « maison » qui gère l’affichage 8×8 en RVB avec une résolution de 15 bits. Si vous voulez vous faire mal à la tête, le firmware AVR est disponible sur Github.

LED2472G

Le circuit LED2472G devant la matrice de LED.

L’ATTiny88 est également chargé de gérer le joystick (faut bien qu’il bosse un peu). Il n’y avait pas assez de connexions disponibles sur le micro-contrôleur Atmel pour en dédier cinq à la gestion du joystick. Du coup le joystick a été intégré à la matrice de LED qui est balayée à environ 80 Hz. C’est donc à cette fréquence que les informations du joystick sont lues.

Tous les capteurs (et le firmware de base pour l’Atmel) sont accessibles à partir du Raspberry Pi via le bus I2C. Et vous avez même un bonus ! Juste pour le « fun », le bus SPI du micro-contrôleur Atmel a été relié au bus SPI du RasPi ! Vous pouvez reprogrammer votre carte Hat à la volée ! C’est la méthode utilisée pour envoyer le firmware dans l’Atmel lors des tests en production – et il n’y a aucune protection de sorte que vous pouvez remplacer le firmware d’origine pour lui faire faire ce que vous voulez. Sérieusement. La première personne qui réussira à transformer cette carte HAT en contrôleur de vol pour un quadcopter gagnera… toute ma considération 😉

Schéma

Si vous voulez découvrir le schéma de la carte, celui-ci est disponible en ligne…

schema

Quelques exemples d’utilisation

Vous aurez une illustration de certains tests dans la vidéo en fin d’article. Mais voici quelques exemples de programmes utilisant la bibliothèque SenseHat. L’installation se résume à la bibliothèque sense-hat et à pillow (Python Imaging Library).

Vous trouverez toute l’information souhaitée sur la page de référence consacrée à l’API Sense Hat.

Installation de la bibliothèque SenseHat

sudo apt-get update
sudo apt-get install sense-hat
sudo pip-3.2 install pillow

Mesure de température – Affichage écran

La mesure de température utilise un sense.get_temperature() suivi d’un envoi à l’écran de la valeur lue…
sense.clear() met toutes les LED à la même couleur. Sans paramètre la couleur est 0 (toutes les LED sont éteintes).

from sense_hat import SenseHat

sense = SenseHat()
sense.clear()

temp = sense.get_temperature()
print(temp)

écran_mesure_température

Mesure de température – Affichage LED

Ah ! Là si vous voulez voir ce que ça donne, il faudra regarder la vidéo un peu plus bas sur la page.

from sense_hat import SenseHat

sense = SenseHat()
sense.clear()

tmax = 35
tmin = tmax - 8

while True:
    temp = sense.get_temperature()
    print(temp)
    temp = int(temp) - tmin
    for x in range(0, 8):
        for y in range(0, temp):
            sense.set_pixel(x, y, 255, 0, 0)
        for y in range(temp, 8):
            sense.set_pixel(x, y, 0, 0, 0)

Mesure de pression – Affichage écran

Ce programme utilise le capteur de pression pour afficher la pression atmosphérique absolue en hPa.

from sense_hat import SenseHat
sense = SenseHat()
sense.clear()
while True:
    pressure = sense.get_pressure()
    pressure = round(pressure, 1)
    print(pressure)

écran_mesure_pression

Mesure d’humidité – Affichage écran

De la même manière, vous pourrez interroger le capteur d’humidité pour afficher la valeur de l’humidité relative.

écran_mesure_humiditéOui, je sais, il n’y a pas le programme, mais bon, vous allez peut-être bosser un peu aussi, non ? 😉

Mesure accéléromètre – Affichage écran

Ici on va afficher les informations fournies par la centrale inertielle. Il existe de nombreuses possibilités de les exploiter, depuis le mode brut jusqu’à un mode combinant les informations des différents capteurs.

from sense_hat import SenseHat
sense = SenseHat()
sense.clear()
while True:
    accel_only = sense.get_accelerometer()
    print("p: {pitch}, r: {roll}, y: {yaw}".format(**accel_only))

écran_mesure_accelero

Vidéo

Conclusion

Une carte « officielle » pleine de possibilités, en particulier grâce au capteur regroupant accéléromètre, gyroscope et magnétomètre. Les LED permettent un affichage directement sur le Raspberry Pi, soit sous forme de points individuels ou de barres, éventuellement animées. Un regret cependant, celui de ne pas avoir trouvé dans la boîte les entretoises et la visserie permettant de solidariser la Sense Hat et le Raspberry Pi sur lequel elle est montée.

La programmation en Python est on ne peut plus simple avec l’utilisation de la bibliothèque Sense HAT.

Je voudrais souligner le travail formidable de traduction de la documentation de la Sense Hat réalisé par Dominique sur son wiki. Tout  n’est pas encore traduit mais une grande partie de la documentation est disponible en français.

Pour ma part je vais continuer à découvrir les possibilités de cette petite carte pleine de ressources. L’objectif serait à terme de remplacer la carte de commande de vol d’un drone (une CC3D) par un RasPi et la Sense Hat pour voir ce que ça donne… Mais ça… c’est une autre histoire !

Comme d’habitude vous trouverez ci-dessous des liens vers de la lecture pour occuper vos longues soirées d’hiver… 😉

Sources

À propos François MOCQ

Électronicien d'origine, devenu informaticien, et passionné de nouvelles technologies, formateur en maintenance informatique puis en Réseau et Télécommunications. Dès son arrivée sur le marché, le potentiel offert par Raspberry Pi m’a enthousiasmé j'ai rapidement créé un blog dédié à ce nano-ordinateur (www.framboise314.fr) pour partager cette passion. Auteur de plusieurs livres sur le Raspberry Pi publiés aux Editions ENI.

10 réflexions au sujet de « Sense HAT, un tour dans les étoiles… »

  1. Nicolas Steinmetz

    Le seul « problème » que j’ai c’est que si tu mets la carte SenseHat directement sur ton RPI, c’est la température du RPi que tu mesures et non la température de ton environnement. C’est admis par leur auteur (https://www.raspberrypi.org/forums/viewtopic.php?f=104&t=111457) et donc idéalement il faut placer une carte entre le RPi et le SenseHat. Dommage que cela ne soit pas dit dès le départ.

    Idem, le manque d’entretoise & visserie est dommage.

    Il est possible d’acquérir le case « officiel » du projet ou pas d’ailleurs ?

    Répondre
    1. François MOCQ Auteur de l’article

      Bonjour Nicolas
      c’est signalé dans l’article « Néanmoins, les mesures de température sur cette carte sont à considérer avec méfiance dans la mesure ou l’échauffement des composants (en particulier lorsque les LED fonctionnent) provoque une élévation de la température ambiante à proximité de la carte… »
      pour le boîtier la Fondation a dit qu il ne serait pas vendu car il est fabriqué à l’unité dans un alliage aéronautique et coûte excessivement cher 😉
      cordialement
      François

      Répondre
  2. Tom

    Bonjour François,
    Merci pour cet article (et le reste !).
    Question totalement hors-sujet : vous utilisez quoi pour créer vos animations aux début de la vidéo ? 🙂
    Cdlt,
    Tom

    Répondre
  3. Ping : Sense HAT, un tour dans les étoiles&hell...

  4. Vlad

    Pour que les mesures de températures puissent etre exactes il aurait fallu que le capteur soit externe, sur un cable avec une connexion simple par exemple.
    Ça autait permis par la même occasion de le mettre à l’exterieur d’un boitier étanche

    Répondre
  5. RogetT

    Bonjour,

    Savez-vous comment configurer une carte Sense HAT pour pouvoir accéder aux LEDs (et au Joystick) depuis un RPi3B ?

    avec un RPi3B et une carte Sense HAT neuve (achetée en 08/2018), je rencontre une difficulté comme de _nombreux_ autres utilisateurs _looooonguement bloqués_ (cf. forums).
    On a accès à tous les capteurs (RTIMULibDrive11 permet de lire les mesures) mais on ne peut pas accéder aux LEDs et au Joystick accessibles tous les deux via l’Atmel ATTINY88.
    Du coup, la bibliothèque sense_hat.py râle quand elle tente d’y accéder (à SENSE_HAT_FB_NAME)
    Tout premier exemple Hello Wordl! :
    $ python main.py
    Traceback (most recent call last):
    File « main.py », line 2, in
    sense = SenseHat()
    File « /home/pi/Documents/SenseHAT/Helloworld/sense_hat/sense_hat.py », line 39, in __init__
    raise OSError(‘Cannot detect %s device’ % self.SENSE_HAT_FB_NAME)
    OSError: Cannot detect RPi-Sense FB device

    On voit bien l’IMU (0x1c et 0x6a), le capteur P/T (0x5c) et hygro/T (0x5f) su rle bus I2C, mais pas les LEDs et le Joystick (0x46 ; à vérifier : le Joystick a-t-il la même adresse I2C que les LEDs ou une adresse distincte ? 0xf3, par déduction)

    $ i2cdetect -y 1
    0 1 2 3 4 5 6 7 8 9 a b c d e f
    00: — — — — — — — — — — — — —
    10: — — — — — — — — — — — — 1c — — —
    20: — — — — — — — — — — — — — — — —
    30: — — — — — — — — — — — — — — — —
    40: — — — — — — — — — — — — — — — —
    50: — — — — — — — — — — — — 5c — — 5f
    60: — — — — — — — — — — 6a — — — — —
    70: — — — — — — — —

    J’ai essayé tous les trucs proposés, notamment d’ajouter à /boot/config.txt la ligne suivante :
    dtoverlay = rpi-sense
    Ca n’a pas marché dans mon cas.

    Je me suis arrêté à flasher l’EEPROM du Sense HAT sans réussite.
    cf. https://www.raspberrypi.org/documentation/hardware/sense-hat/
    Notez l’avertissement :
    « These steps may not work on Raspberry Pi 2 Model B Rev 1.0 and Raspberry Pi 3 Model B boards. The firmware will take control of I2C0, causing the ID pins to be configured as inputs. »
    or j’ai un Pi3B. »

    Je n’ai pas de Pi2 sous la main. mais cette solution a marché pour un certain ‘sisomm/Simen Sommerfeldt’ qui a flashé avec succès l’EEPROM de la carte Sense HAT montée sur un Pi2. Après réinstallation sur son Pi3, le Sens HAT fonctionnait :
    https://github.com/raspberrypi/documentation/issues/326
    (message du 15 mars 2016)

    Voilà.
    Donc, savez-vous comment configurer une carte Sense HAT pour pouvoir accéder aux LEDs (et au Joystick) depuis un RPi3B ?

    Merci… pour vos lumières !

    Cordialement
    RogerT

    Répondre
  6. RogerT

    PS
    1/ J’ai finalement trouvé une ressource pour flasher le Sense HAT
    https://github.com/raspberrypi/rpi-sense

    $ make flash

    avrdude: error: AVR device not responding
    A ce niveau là, le problème indique que l’AVR (Atmel ATTINY88) ne répond pas et n’est peut être pas du tout en bonne santé.

    2/ J’ai récupéré un Sense HAT tout neuf.
    Dans le magasin, posé sur mon RPi3B, il a immédiatement affiché un arc-en-ciel au démarrage.
    Ensuite, j’ai pu faire fonctionner le tout premier exemple « Hello World! ». et tous les autres (pygame_joystick.py, etc.)
    🙂

    Maintenant, la question que je pose à François l’électronicien, et qui devrait intéresser beaucoup de monde, est la suivante :

    Comment peut-on tester le hardware d’un Pi ou d’un HAT? (version d’EEPROM ? Les composants répondent-ils tous ?)
    Quels outils et méthode ?
    Ca sauvera du temps à beaucoup de monde. Comme ça, on saura tout de suite s’il faut faire un échange en magasin au lieu de perdre des heures ou des jours !

    Merci
    Cordialement
    RogerT

    Répondre
  7. Ping : Sense Hat – Framboise Pi

  8. Ping : Un Raspberry PI sur la planète MARS ? - Framboise 314, le Raspberry Pi à la sauce française....

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Complétez ce captcha SVP *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.