Interfacer le sonar GY-US42V2

Interfacer le sonar GY-US42V2

Chez Yoctopuce, on aime bien acheter des capteurs un peu au hasard, juste pour voir si on arrive à les interfacer avec du matériel Yoctopuce. Cette semaine on a jeté notre dévolu sur le télémètre à ultra-son GY-US42V2 acheté sur Play-Zone.ch sous le nom "SRF02".


Ce type de capteur Sonar fonctionne en émettant une onde sonore et en mesurant le temps que met pour lui parvenir une réflexion de l'onde sur un éventuel obstacle. Ce modèle peut mesurer des distances entre 0.2 et 7.2m. L'intérêt du GY-US12V2, c'est qu'il utilise le même transducteur pour l'émission et la réception, ce qui en fait un capteur assez compact d'environ 22x22mm.

Le GY-US12V2, à ne pas confondre avec le SRF02
Le GY-US12V2, à ne pas confondre avec le SRF02


Après réception de notre capteur, on a constaté avec stupeur qu'il n'existe aucune documentation officielle pour ce module... On a fait quelques recherches et on a découvert que SRF02 est en fait un cousin du GY-US42V2 il sont presque compatibles, mais il y a quelques différences significatives tant au niveau hardware qu'au niveau software. Malgré cela, on trouve le GY-US12V2 un peu partout, on soupçonne que sa popularité est due au fait qu'il peut être utilisé par le contrôleur de vol Pixhawk. En recoupant diverses documentations artisanales et le code source de software écrit pour le GY-US12V2 et le SRF02 on a pu plus ou moins retomber sur nos pattes, et vous concocter un petit mode d'emploi. Il existe en fait trois manières d'interfacer le GY-US12V2 : I2C , port série et signal PWM. Ça tombe bien, on a ce qu'il faut pour les trois.

I2C

Par défaut, le GY-US12V2 fonctionne en I2C même si le marquage sur le PCB laisse un peu supposer le contraire. Pour utiliser le GY-US42V2 avec Yocto-I2C, il faut connecter:

  • Vcc à I2C power. Notez que le capteur marche aussi bien en 3.3V qu'en 5V
  • CR à SCL
  • DR à SDI
  • Les deux GND ensemble

Connexion du GY-US42V2 au Yocto-I2C
Connexion du GY-US42V2 au Yocto-I2C


L'adresse I2C par défaut est 0x70 ce qui signifie que toutes les communications I2C devront commencer par 2*0x70 = 0xE0 pour les opérations en écriture ou 2*0x70+1 = 0xE1 pour les opérations en lecture. Pour lancer une mesure avec un résultat en centimètres, il faut envoyer la commande 0x51. La mesure prend au maximum 65ms, pour lire le résultat il simplement de lire deux bytes qui donnent la distance en centimètres sous la forme d'un entier 16 bit big endian. On peut donc facilement écrire un petit job pour que le Yocto-I2C déclenche des mesures, lise le résultat et le présente sous la forme d'un capteur Yoctopuce.

writeLine {S}E051{P} expect 70:{A}{A} wait 70 writeLine {S}E1xx{A}xx{N}{P} expect 71:{A}($1:WORD)


S'il est possible de changer l'adresse I2C du SRF02, la séquence pour le faire ne semble pas marcher avec le GY-US12V2, vous ne pourrez donc à priori pas contrôler plusieurs capteurs GY-US12V2 depuis le même Yocto-I2C. Ce qui est bien dommage.

Port série

Sous le PCB du GY-US12V2 il y a trois petits pads alignés, avec ceux des extrémités marqués H et L. Pour configurer le capteur en mode série, il faut faire un pont entre le pad central et celui marqué "H".

Configuration du GY-US12V2 en mode série
Configuration du GY-US12V2 en mode série


Pour connecter le GY-US12V2 au Yocto-Serial vous devrez lier:

  • Vcc à Pwr
  • CR à TD
  • DT à RX
  • Les deux GND ensemble

Connection GY-US12V2 en mode série
Connection GY-US12V2 en mode série


Dans ce mode, le comportement par défaut consiste à envoyer en continu le résultat des mesures en centimètres. La fréquence de mesure est d'environ 10Hz. Les mesures sont envoyées sous forme de trames de 7 bytes:

5A 5A 45 02 XX YY CS


La distance est encodée dans les bytes XX et YY. Le septième byte CS est une somme de contrôle calculée comme le byte le moins significatif de la somme des 6 premiers bytes.

Pour utiliser Le GY-US12V2 en mode série avec un Yocto-Serial, il faut donc le configurer ce Yocto-Serial en "Frame-based binary protocol", 9600, 8N1.

configuration du Yocto-Serial
configuration du Yocto-Serial


Une fois qu'on a vérifié que l'on reçoit bien les trames de données, il aisé d'écrire un petit job qui parse les données pour les présenter sous la forme d'un capteur Yoctopuce. Ce job est constitué d'une seule tâche réactive et qui contente de parser chaque trame

expect 5A5A4502($1:WORD)(BYTE)




PWM

Pour passer GY-US12V2 en mode PWM il faut faire un pont en le pad central et celui marqué "L". Dans ce mode, le capteur envoie des impulsions électriques dont la longueur est proportionnelle à la distance mesurée.

configuration du GY-US12V2 en mode PWM
configuration du GY-US12V2 en mode PWM


Le Yocto-PWM-Rx n'a pas de sortie d'alimentation explicite, mais vous pouvez prélever du 5V sur le bus USB. Pour cela vous pouvez utilisez les pads placés derrière le connecteur USB. N'oubliez pas de mettre en commun les masses de l'USB du capteur et de l'entrée PWM, c'est important parce que le Yocto-PWM-Rx est un module isolé. Le signal PWM se trouve sur la pin DT du capteur.

Connection GY-US12V2 en mode PWM
Connection GY-US12V2 en mode PWM


Dès que le capteur est alimenté le signal PWM apparaît sur la pin DT. Par contre le résultat obtenu en sortie du Yocto-PWM-Rx est plutôt décevant parce que très bruité. Un simple coup d'oscilloscope permet de découvrir l'explication: le signal émit par le capteur n'est pas toujours un vrai signal PWM, ce qui empêche le Yocto-PWM-Rx de le reconnaître à coup sûr.


Signal PWM Pas vraiment un signal PWM
Le signal PWM qui sort du GY-US12V2 a parfois une allure un peu étrange."


Par contre on peut exploiter le fait que le Yocto-PWM-Rx interprète le faux signal PWM comme comme des impulsions trop longues pour correspondre à une mesure réaliste. La durée des impulsions semble calibrée à pile 3ms / mètre. L’intervalle de mesures crédibles est donc entre 1.2ms ...21ms pour 20..700cm. Si on configure ces correspondance dans le generic sensor correspondant à l'entré PWM utilisée, non seulement on obtient un résultat directement en centimètres mais les impulsions incorrectes sont ignorées ce qui rend le mode PWM à peu près utilisable.

Configuration du generic sensor
Configuration du generic sensor




Conclusion

Utiliser le capteur GY-US12V2 avec un Yocto-I2C, Yocto-Serial ou encore un Yocto-PWM-Rx est finalement assez trivial une fois on qu'a trouvé un minimum d'informations sur le fonctionnement de son interface. Si les modes I2C et série semblent fonctionnent de manière satisfaisante, on ne recommande pas trop le mode PWM.

Pour conclure, notez tout de même la technologie de mesure de distance par sonar a des limitations importantes: sa précision dépend de la température et de la pression atmosphérique. D'autre part si le capteur est monté sur une partie mobile, la vitesse du son étant relativement basse, il est assez facile de retrouver dans une situation où le capteur s'est déplacé, ou a simplement pivoté, suffisamment vite pour ne plus être en mesure le "voir" l'écho. Et vous pourriez ainsi vous retrouver avec un capteur qui vous annonce que le champ est libre alors que vous êtes face à un obstacle.

Commenter aucun commentaire Retour au blog












Yoctopuce, get your stuff connected.