Auteur Sujet: Capteur de proximité VL6180X  (Lu 32010 fois)

Tony04

  • Hero Member
  • *****
  • Messages: 549
    • Voir le profil
Re : Capteur de proximité VL6180X
« Réponse #15 le: mai 14, 2020, 05:20:51 pm »
J'avance péniblement avec mon anglais de 6è mais j'ai réussi à changer l'adresse I2C du module laser.
Avec le scanner I2C je trouve bien l'une ou l'autre des adresses.

Mais comment adresser l'un ou l'autre des modules car à aucun moment on ne définie cette adresse dans le code de démo (ci-joint), d'ailleurs je ne trouve pas non plus de mot clé qui permette cette définition ?

Merci d'avance pour vos conseils.

Pierre59

  • Sr. Member
  • ****
  • Messages: 321
    • Voir le profil
Re : Capteur de proximité VL6180X
« Réponse #16 le: mai 14, 2020, 05:34:38 pm »
Bonjour

Apparemment l'adresse I2C se trouve dans le registre 0x212, elle peut être changée après la mise sous tension (7 bits).

Pierre

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1691
    • Voir le profil
Re : Capteur de proximité VL6180X
« Réponse #17 le: mai 14, 2020, 05:36:49 pm »
Regarde dans VL6180X.h, il y a une méthode setAddress ...

Qui écrit dans le registre 0x212, bien vu Pierre.

Par contre j'ai du mal à voir le mise en œuvre quand tu as plusieurs modules. En effet, setAddress change l'adresse dans l'instance de l'objet (membre address) et dans le registre 0x212. J'imagine que ce registre est en mémoire non volatile (j'ai pas vérifié dans la datasheet). On peut imaginer de brancher les modules et de leur donner une nouvelle adresse mais ensuite, une fois qu'on a plusieurs modules avec des adresses différentes, il n'y a pas moyen de donner une adresse de module à l'objet sans qu'il écrive cette adresse dans le registre 0x212.
« Modifié: mai 14, 2020, 05:46:01 pm par Jean-Luc »
Cordialement

Tony04

  • Hero Member
  • *****
  • Messages: 549
    • Voir le profil
Re : Re : Capteur de proximité VL6180X
« Réponse #18 le: mai 14, 2020, 05:51:05 pm »
La mesure est-elle rapide ? Dit autrement, si on va très vite, peut-on quand même compter les wagons ?

Je viens de découvrir qu'avec le sketch de démo "RangeSingleShot.ino" la mesure est continue et du coup beaucoup plus rapide que mon premier essai, du coup le comptage des wagons est parfaitement envisageable, mais certainement pas en vitesse maximum.

Pyk35

  • Full Member
  • ***
  • Messages: 110
    • Voir le profil
Re : Capteur de proximité VL6180X
« Réponse #19 le: mai 15, 2020, 12:44:05 am »
Tony,

A priori le changement d'adresse se fait de manière logiciel.
Le datasheet : https://www.st.com/resource/en/datasheet/vl6180x.pdf
Paragraphe 6.2.55, page 76 :
Je comprends qu'il est de base à l'adresse 0x29 et qu'en envoyant sur le registre 0x212 une valeur compris en 0 et 127 (7 bits), ça doit programmer la nouvelle adresse. Je n'ai pas lu si c'était persistant mais cela me semble évident.

[6:0] super_i2c_slave__device_address: User programmable I2C address (7-bit). Device address
can be re-designated after power-up.
A+
Cédric

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1691
    • Voir le profil
Re : Capteur de proximité VL6180X
« Réponse #20 le: mai 15, 2020, 10:17:23 am »
Bonjour,

En furetant un peu j’ai trouvé que l’adresse en question n’est pas en mémoire permanente et est donc remise à sa valeur par défaut à chaque mise sous tension.

ST a publie une note d’application : https://www.st.com/resource/en/application_note/dm00114403-using-multiple-vl6180xs-in-a-single-design-stmicroelectronics.pdf

On y trouve notamment la phrase :

Citer


Since the VL6180X can have the I2C device address changed by doing an I2C write once it is booted, a separate reset pin would be needed to each VL6180X used in a design. Each device is then taken out of reset one at a time, and then the I2C Device Address is changed to a new unique address. This can be done by using multiple GPIO pins from the microprocessor on the board.

Cordialement

Tony04

  • Hero Member
  • *****
  • Messages: 549
    • Voir le profil
Re : Re : Capteur de proximité VL6180X
« Réponse #21 le: mai 15, 2020, 10:58:26 am »
Regarde dans VL6180X.h, il y a une méthode setAddress ...

Qui écrit dans le registre 0x212, bien vu Pierre.

Par contre j'ai du mal à voir le mise en œuvre quand tu as plusieurs modules. En effet, setAddress change l'adresse dans l'instance de l'objet (membre address) et dans le registre 0x212. J'imagine que ce registre est en mémoire non volatile (j'ai pas vérifié dans la datasheet). On peut imaginer de brancher les modules et de leur donner une nouvelle adresse mais ensuite, une fois qu'on a plusieurs modules avec des adresses différentes, il n'y a pas moyen de donner une adresse de module à l'objet sans qu'il écrive cette adresse dans le registre 0x212.

Bonjour tout le monde,

j'ai parfaitement réussi à changer l'adresse de manière non volatile en "désalimentant" après chaque changement d'adresse le module et en passant le module par le scanner I2C qui trouve bien la nouvelle adresse. Le problème n'est plus là, il faut maintenant savoir comment adresser ces différentes adresses I2C car à aucun endroit on précise une adresse sauf si on travaille directement avec la librairie wire sans passer par la librairie VL6180X comme dans cet exemple: https://www.redohm.fr/2018/02/tutoriel-arduino-communication-i2c-1-maitre-2-esclaves/

Je viens d'en commander un second pour voir si en utilisant la broche GPIO0/CE on arrive à sélectionner l'un ou l'autre sans y croire vraiment.
 
Cordialement

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1691
    • Voir le profil
Re : Capteur de proximité VL6180X
« Réponse #22 le: mai 15, 2020, 11:48:16 am »
Veux tu que je modifie la bibliothèque Pololu pour rajouter un constructeur auquel on passe une adresse ?

EDIT: C'est fait, tu peux récupérer la version modifiée ici : https://github.com/Locoduino/vl6180x-arduino

Lors de l'instanciation d'un objet VL6180X, tu peux spécifier l'addresse, par exemple :

VL6180X sensor(56);

C'est évidemment pas testé, je n'ai pas de VL6180X. Si ça fonctionne correctement je ferai une pull request à Pololu et une version 1.2.1 sortira dans les prochains jours si ils sont réactifs.
« Modifié: mai 15, 2020, 12:08:29 pm par Jean-Luc »
Cordialement

Tony04

  • Hero Member
  • *****
  • Messages: 549
    • Voir le profil
Re : Capteur de proximité VL6180X
« Réponse #23 le: mai 15, 2020, 06:50:15 pm »
Un grand merci à toi Jean-Luc,

mais je n'arrive plus à changer l'adresse de façon non volatile alors que ce matin cela fonctionnait bien. Ce n'est pas encore gagné mais je continue mes essais.

Bonne soirée
Antoine

Tony04

  • Hero Member
  • *****
  • Messages: 549
    • Voir le profil
Re : Re : Capteur de proximité VL6180X
« Réponse #24 le: mai 24, 2020, 07:11:28 pm »
Veux tu que je modifie la bibliothèque Pololu pour rajouter un constructeur auquel on passe une adresse ?
C'est évidemment pas testé, je n'ai pas de VL6180X. Si ça fonctionne correctement je ferai une pull request à Pololu et une version 1.2.1 sortira dans les prochains jours si ils sont réactifs.

Bonsoir à tous,

voila Jean-Luc, c'est testé avec 2 capteurs sur le même port I2C et.... ça fonctionne super bien. Je n'ai pas compris pourquoi l'initialisation des capteurs ne se fait pas avec les lignes qui sont commentées, mais cette initialisation se passe bien dans les dernières lignes du setup, mystère.

Par contre il faut quand même une sortie par capteur pour sa pin CE afin de pouvoir changer l'adresse de chacun des capteurs au moment de l'initialisation (dommage que l'adresse ne soit pas en EEPROM).
Ci-joint mon sketch de test.

Encore merci à toi pour la modification de la librairie.

Bon dimanche soir à tous.
Bien cordialement.
Antoine


simontpellier

  • Full Member
  • ***
  • Messages: 115
    • Voir le profil
Re : Capteur de proximité VL6180X
« Réponse #25 le: mai 24, 2020, 10:57:34 pm »
Bonsoir Antoine,

Je suis ces essais avec beaucoup d'intérêt étant de mon côté en test sur un détecteur voisin (CJMCU3216) en remplacement de barrières IR. Tests très encourageants et dont les résultats rejoignent les vôtres.

Si j'interviens, c'est en fait pour savoir pourquoi ne pas avoir utilisé ce module :
https://learn.adafruit.com/adafruit-tca9548a-1-to-8-i2c-multiplexer-breakout
pour régler ce problème d'adresse unique des capteurs (pareil avec ceux que je teste). Un module = 8 sorties I2C, chaque module pouvant avoir 8 adresses, on peut donc avoir 64 capteurs, même ayant la même adresse. De quoi voir venir !
(et pas de pins "consommés" sur l'arduino).



CATPLUS

  • Sr. Member
  • ****
  • Messages: 407
    • Voir le profil
Re : Capteur de proximité VL6180X
« Réponse #26 le: mai 25, 2020, 07:11:09 am »
Bonjour Simon

Ce fameux capteur "TCA9548A" je l'ai acheté pour branché les RFID avec la même adresse. Résultat destruction des plusieurs RFIDs
Il me semble qu'il faut être prudent avec ce Multiplexeur (voir la programmation => un programme de test serait le bien venu "hélas au-delà de mes compétences")
Il existe un  appareil pour changer l'adresse I2c (impossible de le commander, de plus il coûte un bras et pas sur qu'il soit possible de changer les adresses sur tout type de matériel)

https://modernroboticsinc.com/core-device-discovery/

Quelqu'un a-t-il une piste (logiciel) pour changer ces adresses figées sur un appareil?

Marcel



Best Regards

DDEFF

  • Hero Member
  • *****
  • Messages: 738
    • Voir le profil
Re : Capteur de proximité VL6180X
« Réponse #27 le: mai 25, 2020, 11:56:53 am »
Bonjour,

Ce matin, Youtube m'a gratifié d'une vidéo :


C'est une vidéo du 15/12/19 qui parle d'un ToS plus simple que le VL6180X, le VL53L0X. Il a seulement 2 trous et donc, ne tient pas compte de la lumière ambiante.
C'est effectivement moins bien.

Mais l'intérêt de cette vidéo (en américain, désolé Antoine  :(), c'est le fait qu'elle est accompagnée par un lien Github.
On voit le fonctionnement avec ESP32 et MQTT, très bien détaillé sur la fin de la vidéo, et le sketch arduino est fourni.
Je ne suis pas spécialiste, mais je pense qu'il y a des infos intéressantes à glaner dans ce sketch.

Sinon, on a un fonctionnement au mm près ! C'est assez impressionnant. :o

Denis
"Ce n'est pas le puits qui est trop profond, c'est ta corde qui est trop courte" (proverbe chinois)

Pyk35

  • Full Member
  • ***
  • Messages: 110
    • Voir le profil
Re : Capteur de proximité VL6180X
« Réponse #28 le: mai 25, 2020, 01:00:46 pm »
[Hors sujet] Je serais ravis que l’on commence à envisager MQTT dans le domaine ferroviaire !
C’est ce à quoi je vais m’atteler dans le projet « La Box » pour faire une passerelle CAN/MQTT.  ;)
A+
Cédric

Tony04

  • Hero Member
  • *****
  • Messages: 549
    • Voir le profil
Re : Re : Capteur de proximité VL6180X
« Réponse #29 le: mai 25, 2020, 05:23:42 pm »
Si j'interviens, c'est en fait pour savoir pourquoi ne pas avoir utilisé ce module :
https://learn.adafruit.com/adafruit-tca9548a-1-to-8-i2c-multiplexer-breakout

Bonsoir Simon,

tout simplement parce que je ne connaissais pas ce produit, mais ma joie a été de courte durée avec le message de Marcel...

De plus cela rajoute encore un composant et je pense avoir des pins disponibles pour la sélection de chaque capteur puisque j'étais parti pour des barrières IR classiques.

En tous cas le produit semble plaisant à utiliser même à titre d'expérience simplement.

Pour Denis, j'étais déjà tombé sur une vidéo qui en parlait et je viens d'en commander 2 exemplaires chez Ali pour tester car pour mon usage la mesure de luminosité est inutile.
Merci pour ton message.

A Pyk35, une question très bête... C'est quoi MQTT, c'est du langage SMS ?  :-[

Cordialement
Antoine