L’Internet des Objets

L’Internet des Objets

5.1 Capteurs géographiques

Page précédente Page suivante

5.1.1 La carte fille GNSS1A1

La carte X-NUCLEO-GNSS1A1 est une carte de localisation par satellite. On parle actuellement de GNS (Global Navigation System) . Le vieux système GPS (Global Positionning System) est la version des États Unis d’Amérique. Il a été rejoint par les systèmes européens Gallileo, russe (GLONASS) et chinois (Beidou), voire d’autres. Les récepteurs modernes utilisent plusieurs systèmes pour le positionnement.

(image)

Fig. 5.1 : La carte GNSS GNSS1A1.

La documentation est disponible en ligne.

Nous avons utilisé cette carte comme fille de la WB55 (voir 2.1.1). Nous l’avons manipulé avec l’IDE Arduino. Elle est utilisable directement avec les exemples dédiés :. Les informations peuvent utiliser une connexion I\( ² \)C ou une liaison série. Elle transmet des phrases (sentences) NMEA. Ce protocole est décrit à la section 7.2.

Elle communique avec le microcontrôleur de plusieurs façons. Elle peut utiliser le bus I2C ou une transmission série par UART. Pour activer la transmission par UART, il faut déplacer quelques cavaliers depuis la version usine de la figure 5.1. Pour activer la transmission sur l’UART 2, il faut modifier trois cavaliers comme dans la figure 5.2. Il est possible d’utiliser une autre UART pour laisser les broches connectées au ST-LINK.

Il faut :

  • Déconnecter J11

  • Déconnecter J12

  • Déconnecter J4

  • Connecter J5

(image)

Fig. 5.2 : Les cavaliers pour activer la communication sur l’UART 2.

Pour régler l’horloge du microcontrôleur à partir des satellites, il faut récupérer le message NMEA, en extraire l’heure. Il faut estimer le temps de transmission entre le composant GNSS et le microcontrôleur, Pour définir avec précision l’instant de synchronisation, il faut utiliser le signal PPS (Plse per Second) et déclencher la mise à l’heure à cet instant.

La communication s’établit à une vitesse de 9600bauds. La transmission d’un octet utilise environ 12 ou 13 bits. Le debits en octets est donc d’environ \( 9600 / 13 = 738,4 \). c’est à dire 738 octets/s. Un message RMC contient 79 caractères, donc 1/10s.

La documentation indique que le signal PPS est diffusé sur la broche D6, si le cavalier J6 est fermé et D2, si le J8 est ouvert. La figurefOscillo-gps présente le signal sur les broches Tx (du GNSS vers le MC) et PPS. La transmission sur la liaison série commence avec le PPS montant, elle dure environ 0,7s. Il doit donc y avoir plusieurs trames NMEA à chaque seconde.

(image)

Fig. 5.3 : 

5.1.1.1 GNSS et micropython

Nous avons posé ce code sur une WB55 avec la carte fille branchée. Il faut bien faire attention au positionnement des cavaliers pour obtenir une lecture sur l’UART 2.

import uasyncio as asyncio
from machine import UART
from time import sleep

uart = UART(2,9600)
fin=999
while (fin != 0):
    r = uart.read()
    print(r)
    fin = fin - 1
    sleep(1)

Il y a des lignes en trop dans ce code, mais pour le moment, nous n’en tiendrons pas compte. L’attente de 1 seconde dans la boucle permet de limiter les lectures sans données (elles affichent none).

La commande minicom -D /dev/ttyACM0 -C gnss.log permet de conserver une copie des messages reçus depuis le microcontrôleur. Le fichier produit contient des lignes avec des préfixes :

  • GNGSA

    • GN Combination of multiple satellite systems (NMEA 1083)

  • GL :GLONASS

    • GSV

  • GP Global Positioning System receiver

    • GLL Geographic Position - Latitude/Longitude

    • RMC Recommended Minimum Navigation Information

    • GSV Satellites in view

    • VTG Track made good and Ground speed

  • PSTMCPU ?? Relatif au CPU ?

  • GSV - Satellites in view

Et des lignes de chiffres sans préfixes.

En sélectionnant les lignes GPRMC et en sélectionnant les colonnes donnant la longitude et lattitude nous obtenons un fichier de données que gnuplot peut transformer en courbe (figure 19.2).

(image)

Fig. 5.4 : Le déplacement de la position en 17 minutes.

La documentation technique du capteur Teseo-liv3 indique qu’il convertit les signaux et est capable de faire du signal augmenté, par exemple en différentiel. Les constellations suivies sont par défaut uniquement GPS et Glonass.

Et je ne sais comment convertir les données lattitudes longitudes en mètres.

5.1.1.2 Extrayez les données

Le composant envoie un flux binaire sur la liaison série. Avec MicroPython, cela s’affiche avec un caractère “b” suivi d’une chaîne d’octets.

b'$GPRMC,173120.000,A,4327.10912,N,00541.62380,E,0...,A'

Pour le transformer en chaîne de caractère, il faut utiliser l’instruction decode :

 print(type(ligne)) // 
 s = ligne.decode('UTF-8')

Le résultat est une chaîne qui peut être composée de plusieurs lignes. Pour récupérer les coordonnées, on peut faire :

if (h == '$GPRMC' ):
     print('Valeurs recommandée')
     Latt = s[20:32]
     Long = s[34:46]
     print (Latt, " / ", Long)

Page précédente Page suivante