LOCODUINO

Parlons Arduino => Composants => Discussion démarrée par: Dominique le février 15, 2015, 09:08:37 pm

Titre: Un nouveau composant prometteur : le VL6180
Posté par: Dominique le février 15, 2015, 09:08:37 pm
https://cdn.sparkfun.com/datasheets/Sensors/Proximity/VL6180_ApplicationNote.pdf
On le trouve en breakout à 14$50 chez Sparkfun, mais le mieux serait de le placer seul dans le décor car il mesure 4.8 x 2.8 x 1.0 mm
Il remplace les détecteurs Sharp infrarouge au moins 10 fois plus gros

il mesure des distances de 1 à 50 cm (plutôt moins de 20 cm)

Je vois plein usages dans les trains échelle N :

Detection de train devant un heurtoir
Arret précis des trains
Déclenchement d'animations

Titre: Re : Un nouveau composant prometteur : le VL6180
Posté par: Jean-Luc le février 16, 2015, 09:06:45 am
Bonjour Dominique.

Très intéressant du fait de la très petite taille. La datasheet chez ST (http://www.st.com/web/en/resource/technical/document/datasheet/DM00112632.pdf)

Pour la distance je lis plutôt une distance utile de 1cm à 15cm et un Max de 20cm

Ça va être coton à souder  :P

J'ai cherché un peu et l'engin n'est pas donné. Vers les 6$ en petites quantité. On le trouve d'ailleurs difficilement, j'ai trouvé le prix chez Digikey
Titre: Re : Un nouveau composant prometteur : le VL6180
Posté par: Dominique le février 16, 2015, 09:31:27 am
L'idéal serait de le trouver soudé au bout d'une petite nappe comme les caméras pour le RPi ou certains décodeurs DCC.

Je connais un gars qui soude des fils sur des leds CMS microscopiques (au microscope d'ailleurs)
J'essaierai un de ces jours.
Titre: Re : Un nouveau composant prometteur : le VL6180
Posté par: Jean-Luc le février 16, 2015, 09:43:33 am
Attention aux capas de découplage. Dans la datasheet, il indiquent bien qu'elles doivent être le plus près possible des broches. Je verrais bien une languette de PCB un peu plus large que le composant avec les capas de découplage au dos et les composants pour l'alim régulée 2,8V sous la table. Comme ceci :

(https://dl.dropboxusercontent.com/u/67740546/montageVL6180.png)
Titre: Re : Un nouveau composant prometteur : le VL6180
Posté par: Dominique le février 16, 2015, 10:31:14 am
Oui tu as raison, il faut monter les capas, le régulateur et l' i2c. Ce serait un breadboards adapté au train miniature.
Titre: Re : Un nouveau composant prometteur : le VL6180
Posté par: francis8 le février 17, 2015, 09:49:03 pm
Vu la taille du capteur, pourquoi ne pas l'intégrer directement dans la traverse du heurtoir avec les condos de découplage.

Ensuite, on fait suivre avec du fil émaillé sous la table pour relier au reste de l'électronique.

Dans une gare ou en pleine voie, on peut intégrer ce même capteur dans un mat/nacelle de feu. Ainsi, on règle l'arrêt du train (qui doit cependant arriver au ralenti) pile poil devant le signal.
Titre: Re : Un nouveau composant prometteur : le VL6180
Posté par: Jean-Luc le février 18, 2015, 06:41:19 pm
Ca me semble effectivement faisable en HO  :)
Titre: Re : Un nouveau composant prometteur : le VL6180
Posté par: francis8 le février 19, 2015, 05:19:34 pm
4,8 x 2,8 mm ça donnerais :

Je pense que ça passe en longueur pour les deux échelles (intégré dans une traverse), en revanche, ça coince pour la largeur en N.

En effet, une traverse fait généralement 2,6m de long sur 25cm de large.

Au pire, en N, il suffit de faire des heurtoirs en béton plein.
Titre: Re : Un nouveau composant prometteur : le VL6180
Posté par: dudule le janvier 12, 2016, 07:19:43 pm
ce produit m'a l'air super mais peut on avoir une doc en français?
Titre: Re : Un nouveau composant prometteur : le VL6180
Posté par: Dominique le janvier 12, 2016, 09:48:13 pm
Ah, la doc en français !!!
Bien que ST soit franco-italienne, je doute que les datadheet (fiches de caractéristiques) existent en français .
Comme pour la plupart des produits electroniques.

Alors, que faire ?

- apprendre l'anglais !
- utiliser le traducteur de Google ou un autre.

En général l'anglais technique se comprend bien. Et il n'est pas nécessaire de tout traduire.
Essayez et, si besoin, revenez vers nous.
Titre: Re : Un nouveau composant prometteur : le VL6180
Posté par: Dominique le janvier 12, 2016, 10:03:15 pm
Un autre composant du même genre : le TCRT5000 qu'on trouve très facilement.

Mais il est un peu plus gros ( 10 x 5 mm environ)
Titre: Re : Un nouveau composant prometteur : le VL6180
Posté par: Tony04 le mai 14, 2020, 11:12:54 am
Bonjour,

vous trouverez sur le fil suivant mes premiers essais du capteur VL6180X qui semble prometteur: https://forum.locoduino.org/index.php?topic=993.msg10527#msg10527

Cordialement
Antoine
Titre: Re : Un nouveau composant prometteur : le VL6180
Posté par: simontpellier le mai 15, 2020, 02:56:36 pm
Bonjour,

suivant avec un intérêt particulier tout ce qui a trait à la détection, je me suis bien sûr arrêté sur ce fil.

Sans avoir été y regarder de plus près, notamment la datasheet, en quoi ce composant est-il différent du VL53L0X  qui y ressemble à s'y méprendre mais est donné pour une détection à plus d'un mètre (... de quoi réaliser des arrêts sur ralentis de rêve) ?
https://www.youtube.com/watch?v=gGtD93wb7xI

J'en attends un exemplaire (2euro50... ça ne peut dont pas être le même !), je pourrai peut-être bientôt rapporter mon expérience
Titre: Re : Un nouveau composant prometteur : le VL6180
Posté par: Jean-Luc le mai 15, 2020, 03:59:00 pm
Ouais. L'angle de « vision » est de 25° (comme sur le VL6180X), à un mètre ça donne une zone de 42 cm de large. Dans la datasheet les mesures typiques suppose que l'objet occupe tout l'angle de vision. Faut voir mais en situation réelle je pense qu'il ne faut pas espérer détecter la distance d'une rame dans l'axe du capteur tout en ignorant celles qui sont sur la voie voisines.

Titre: Re : Un nouveau composant prometteur : le VL6180
Posté par: bobyAndCo le mai 15, 2020, 06:20:03 pm
Un autre composant du même genre : le TCRT5000 qu'on trouve très facilement.

C'est le composant que je montre en vidéo sur un autre fil : https://forum.locoduino.org/index.php?topic=986.msg10553#msg10553 (https://forum.locoduino.org/index.php?topic=986.msg10553#msg10553)

Mais c'est justement l'objet de la discussion dans ce fil, il ne réagit que très peu aux surfaces sombres, or les dessous de nos locos sont souvent noirs.

Mais si on colle une étiquette blanche, alors là effectivement, ça marche bien (pour moi dans tous les cas) Voir vidéo.
Titre: Re : Re : Un nouveau composant prometteur : le VL6180
Posté par: Dominique le mai 15, 2020, 07:33:44 pm
... donné pour une détection à plus d'un mètre (... de quoi réaliser des arrêts sur ralentis de rêve)

Mais je fais la même chose (un ralenti de rêve) avec de simples détecteurs de consommation de canton et un peu de mesures et de calculs (voir mon va-et-vient).
 ;) :D
Titre: Re : Un nouveau composant prometteur : le VL6180
Posté par: simontpellier le juin 07, 2020, 07:14:05 pm
@ Dominique... et à tout le monde !

Je suis allé re-regarder ce va-et-vient : vraiment super !
Il me manque quelques éléments pour comprendre ce qu'il est capable ou non de faire, par exemple si ça marche avec un convoi poussé ?

Et depuis j'ai avancé sur le capteur laser VL53L0X puisque j'en ai (enfin) reçu deux exemplaires.
Voici un petit compte rendu, rapide, plus une vidéo pour illustrer.

En résumé, il peut trouver son usage. Avec de grosses limites, mais pour ce qui est d'un joli arrêt sur ralenti il peut le faire !

Côté distance de détection (je parle uniquement pour l'échelle N) il faut compter 25cm grand max. Il vaut mieux compter sur 20cm. Mais sur une voie de garage où l'on est déjà, logiquement, en marche lente, ça permet de finir très proprement.
Autre défaut : le réglage de visée est extrêmement pointu ! Mais sa qualité, à l'inverse, c'est qu'il n'est pas significativement influencé par ce qui se passe à côté. Du moins dans ces 25cm utiles. Et même pas du tout dans les 10 derniers centimètres (sur la vidéo, les valeurs sont bien sûr des cm, plus facile à lire).
L'autre contrainte, il me semble mais je n'ai pas tout testé, c'est que le capteur doit être dans l'axe de la voie, ce qui le limite(rait ?) donc aux voies de garage... bien droites.

Voilà une idée de la taille une fois monté (à la sauvage)

(https://i.servimg.com/u/f44/11/73/62/86/20200610.jpg)

Et le résultat sur vidéo : une première approche avec entrée dans la zone de détection à vitesse "relativement 'rapide" (pour une voie de garage), puis une seconde à vitesse nettement plus faible. Celle-ci avec un convoi sur la voie adjacente.

https://youtu.be/EF1OOA5fp7k/

C'est une toute première mise en œuvre, à peu près opérationnelle. Le code n'est pas sorcier : "photographie" de la vitesse PWM au moment où le train est détecté puis un ralentissement proportionnel à la distance restante jusqu'à la PWM limite inférieure de déplacement de la motrice (paramètre obligatoire, propre à chaque motrice, en EEPROM dans mon cas).

Merci par avance à tous les autres retours expériences, il y a forcément moyen de tirer de ce capteur mieux que ce premier essai.

Cordialement
PS

Titre: Re : Un nouveau composant prometteur : le VL6180
Posté par: Dominique le juin 08, 2020, 08:47:14 am
Merci pour ce compte-rendu détaillé  (mais il manque le schéma de montage, l’interaction avec la centrale et le programme qui pourraient intéresser d’autres modélistes).

C’est vrai que mon va-et-vient, tel qu’il est ne fonctionne pas avec un train en pousse, sauf à équiper le wagon de queue d’une lumière qui activerait les détecteurs de consommation.

Ce type de détecteur optique est effectivement intéressant pour une zone d'arrêt devant un heurtoir où le détecteur doit être placé bien en face de la voie. La question qui reste est de savoir quelles détections latérales peuvent perturber son rôle.

Merci encore d’avoir partagé cette expérience, je vois qu’il existe une version plus compacte du détecteur.

Bien cordialement
Dominique
Titre: Re : Un nouveau composant prometteur : le VL6180
Posté par: Jean-Luc le juin 08, 2020, 10:23:21 am
Bonjour

Expérience intéressante et qui m'intéresse d'autant plus que je voudrais détecter la distance au fond des remises à locomotive, que l'arrêt soit automatique ou non reste à déterminer mais avoir juste un affichage est déjà pas mal.

Dans la vidéo on voit dans le second cas, lorsqu'une rame est présente sur la voie de garage voisine, une lecture de 34 ? cm ?
À quelle distance est la voie de garage voisine ? 40 mm ?
Titre: Re : Un nouveau composant prometteur : le VL6180
Posté par: simontpellier le juin 08, 2020, 12:02:57 pm
Bonjour,

Pour répondre à Jean-Luc :
- lorsqu'il n'y a rien à voir, la détection renvoie dans tous les cas une valeur de l'ordre de 35 à 40cm. Je suppose que vue la faible hauteur d'implantation, c'est le plateau qui rentre dans l'angle de vision. Mais dans le code, toute valeur supérieure à 25cm étant éliminée c'est donc sans effet.
- et je viens de mesurer l'entraxe entre mes deux voies : 39mm, très précisément.
Je précise, c'est aussi un élément de réponse à Dominique, que j'ai posé une voie "volante" de l'autre côté pour avoir deux convois encadrant celui visé par le détecteur, ceci sans influence sensible sur l'asservissement de freinage.
(je crois effectivement qu'un arrêt en fond de remise sera la meilleure utilisation possible de ce capteur)

et donc pour répondre à Dominique et compléter le précédent post :

- schéma de montage : bien qu'on voit 6 broches soudées je n'ai utilisé que VCC (3,3V mais prend le 5V), GND et le signal I2C (SDA/SCL, via un multiplexeur tca9548a mais tout à fait falcultatif), c'est tout.

- je crois que je réponds aux deux autres questions avec ceci ?
L'interaction à la centrale ? Conformément à la library, le détecteur s'intègre par :
   - la création d'instance(s)
       VL53L0X laserSensor = VL53L0X();   - et l'initialisation dans le setup :
     laserSensor.setTimeout(500);
if (!laserSensor.init())   {
  Serial.println("Failed to detect and initialize laserSensor!");
  while (1) {}   }
laserSensor.startContinuous(100);  // ( l'argument "100" reste à valider...) 

Puis dans le reste du code : Supposons, pour une section "voie de garage" (siding) donnée :
- d'une part, une fonction qui surveille qu'un CONVOI y est engagé (autrement dit, pas forcément une motrice), LEQUEL, son sens de déplacement et sa vitesse ;
   selon conditions, notamment que le convoi entre (et/ou "recule") sur cette section,  cette fonction en appellera une autre, dédiée par exemple aux sidings équipés de détection laser, laquelle contiendra une instruction de ce type :
engine[train].siding2(laserSensor.readRangeContinuousMillimeters() / 10) ;  // envoi d'une lecture à une instance engine[x] de la classe "HandleEngine"
- d'autre part donc : la classe "HandleEngine" qui gère les paramètres MOTRICE, accélérations, vitesse, arrêts etc ;
Dans cette classe il y aura :
  float _speedRef ;             // variable de calcul (signée)
  byte _latency ;               // sets a minimum PWM ("voltage") applied to the engine (!obligatoire! à prédéterminer pour chaque motrice) (pas "cste" car ajustable dans ma classe)
  (byte _velocity ;             // le pendant de "latency", bride la Vmax à une valeur réaliste (facultatif !)

public :
  float iniSpeed ;              // vitesse relevée au moment où le convoi entre dans le champ de prise en charge (25 cm... dans ma config) du laserSensor
  int speedRef ;                // consigne PWM (signée à ce stade)
  -----------------------------------------------------------------------------------------------------------
  (void siding1() ;             // éventuelle méthode dédiée aux sidings sans détection laser)
  void siding2(int laser) ;     // méthode dédiée aux sidings équipés

et donc la méthode siding2, qui recevra la mesure laser en argument et pourra ressembler à :
void HandleEngine::siding2(int laser)
  { if (joysXaxis > -200 || joysXaxis == -999)                 // ...ou autre chose, signifiant "vas-y, pas de reprise en manuel"
    { if (laser < 25 && joysXaxis < 200)
        { iniSpeed = min(iniSpeed peed, _speedRef) ;               // dans MON CAS, en marche arrière _speedRef augmente lorsque le train ralentit, d'où le "min", qui fige la vitesse initiale
         _speedRef = max(iniSpeed, (0.8*_latency + iniSpeed peed)*(laser-2)/23-0.8*_latency) ;  // idem, la valeur "max" correspond au plus petit des deux termes, le second étant un bête vitesse=a*laser+b
        }
      if ( abs(_speedRef) < 0.8 * latency)  { _speedRef = 0 ; iniSpeed = 0 ; }                       // extinction de la PWM, reset de iniSpeed
      speedRef = _speedRef ;
    }
  }

Quant-aux perturbations latérales, j'ai fait le test en encadrant la voie d'essai avec deux convois, sans perturbation sensible de la mesure.

Cordialement à tous
Phlippe