2 capteurs laser VL53L0X

Bonjour,

Je souhaiterai programmer 2 capteurs VLL53L0X avec un seul et unique programme qui mesure la distance. J'ai fait un programme qui permet d'en programmer un seul, le voici:

#include "Adafruit_VL53L0X.h"

Adafruit_VL53L0X lox = Adafruit_VL53L0X();

void setup() {
  Serial.begin(115200);

  // wait until serial port opens for native USB devices
  while (! Serial) {
    delay(1);
  }
  
  Serial.println("Adafruit VL53L0X test");
  if (!lox.begin()) {
    Serial.println(F("Failed to boot VL53L0X"));
    while(1);
  }
  // power 
  Serial.println(F("VL53L0X API Simple Ranging example\n\n")); 
}


void loop() {
  VL53L0X_RangingMeasurementData_t measure;
    
  Serial.print("Reading a measurement... ");
  lox.rangingTest(&measure, false); // pass in 'true' to get debug data printout!

  if (measure.RangeStatus != 4) {  // phase failures have incorrect data
    Serial.print("Distance (cm): "); Serial.println(measure.RangeMilliMeter/10.0);
  } else {
    Serial.println(" out of range ");
  }
    
  delay(100);
}

Quelqu'un saurait-il comment faire pour 2 capteurs ?
Merci et bonne journée.

Bonjour

Si l'adresse I2C n'est pas configurable (switch ou registre interne) il faut passer par un multiplexeur I2C pour gérer sur le même bus des composants d'adresses identiques.

http://www.hobbytronics.co.uk/pca9544a-i2c-mux

Je mets à part les détournements de multiplexeurs analogiques (CD405x) pour faire du multiplexage de signaux I2C........ ça peut parfois marcher.....pour de l'I2C lent et sous réserve que leur résistance à l'état ON soit assez faible.....Avec ces réserves voilà le genre (trouvé sur le net et non testé):

Merci al1fch pour ton aide. Je vais regarder les liens que tu as mis

Salut al1fch,
J'ai trouvé ce lien partie 2.2, il parle de l'utilisation multiple des capteurs VL53L0X

http://www.st.com/content/ccc/resource/technical/document/application_note/group0/0e/0a/96/1b/82/19/4f/c2/DM00280486/files/DM00280486.pdf/jcr:content/translations/en.DM00280486.pdf

Bonjour
je commençais ma réponse précédente par

Si l'adresse I2C n'est pas configurable (switch ou registre interne) il faut passer par un multiplexeur I2C

Or la note d'application mentionne une possibilité de redéfinition de l'adresse d'un VL53L0X, rendant alors possible la cohabitation de plusieurs d'entre eux sur un bus I2C unique.

Since the VL53L0X can have the I2C device address changed by doing an I2C write once it is booted, a unique reset pin would be needed for each VL53L0X 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

Un retour à la notice technique du composant permettra peut être de trouver la procédure détaillée pour indiquer à chaque capteur sa nouvelle adresse puis le resetter pour que cette adresse soit activée.

Il faut donc 2 GPIO pour reseter individuellement les 2 capteurs

la librairie Pololu pour ce capteur comporte une fonction de redéfinition d'adresse I2C :

void VL53L0X::setAddress(uint8_t new_addr){  writeReg(I2C_SLAVE_DEVICE_ADDRESS, new_addr & 0x7F);  address = new_addr;}

Peut être faut-il :
-mettre l'un des capteurs en veille par XSHUT
-aciver l'autre (XSHUT)
-lui envoyer (à l'adresse par défaut) sa nouvelle adresse, puis le resetter (actualisation d'adresse)
-réveiller l'autre capteur (XSHUT)
-lui envoyer (à l'adresse par défaut) sa nouvelle adresse et ensuite le resetter (XSHUT)

  • par la suite les deux capteurs sont individualisés....... ou pas ..... si la procédure à suivre diffère !!

N.B : je n'ai pas de capteur pour tester cette procédure !!

Merci pour ton aide. Je vais tester ce que tu as dit et je te dirai si ça marche

après avoir mis XSHUT à l'état haut il faut sans doute attendre 1,2ms (tboot) avant d'envoyer la nouvelle adresse

le changement d'adresse I2C n'est pas beaucoup documenté par ST !!

EDIT :
+++++ Voir sur le forum Pololu !!!, un exemple de code pour 6 capteurs !! (oleglyan 2 nov 2016)

Merci ça a marché

:slight_smile:
peux-tu, s'il te plait :
-ajouter Résolu dans le titre de ton message initial
-poster le code d'intitialisation utilisé avec succès pour séparer les adresses des deux capteurs, ça fera gagner du temps à un prochain utlisateur (librairie Adafruit ou Plololu ? code trouvé sur le forum Pololu ou code perso ?)