J’avais acheté en février dernier une coupe de capteurs vl6180x dans l’optique éventuelle de faire une troisième version à mon robot écholocateur qui soit d’un autre ordre de grandeur de rapidité (rappelons que la limitation de la vitesse du robot était la fréquence d’acquisition des retours d’ultrasons qui sont limités par la vitesse du son, faire le tour des 5 capteurs consécutivement prenait une éternité).
Il sont essentiellement restés dans une boîte tout ce temps, mais j’en ai sorti un hier pour le tester. L’avantage de cette carte d’évaluation est qu’elle amène toutes les pins de la mini-puce à un terminal pouvant être facilement branché avec des câbles ordinaires. On peut trouver les spécifications sommaires ici.
Comme d’habitude, Adafruit a devancé tout le monde en créant sa propre carte et sa propre librairie arduino intégrant ce mini capteur. Je ne me souviens plus, mais je pense qu’il était back-ordered sur le magasin d’Adafruit lorsque je voulais me le procurer, mais de toute manière, je préfère la version de ST qui en donne deux pour approximativement le même prix. Et puis j’avais passé le tout dans une grosse commande chez mouser, qui n’avait pas la version d’Adafruit.
Le hic, c’est que la version de ST, joliment prénommée sans originalité « Satellites », n’a pas de convertisseurs de niveau logique, mais il a tout de même un régulateur 2.8V d’inclus (ce qui est vraiment d’une utilité limitée puisque les pin du I²C doivent aussi être dans cette logique de 2.8V). N’ayant pas de convertisseur logique à ma disposition (dans ma grande naïveté j’avais mis de côté un 74LVC245N sans trop regarder le datasheet, pour m’apercevoir que c’est une puce pas tant utile puisqu’elle est unidirectionnelle à direction variable, donc à la rigueur on pourrait l’utiliser dans un montage impliquant une communication asynchrone, mais pour du I²C c’est complètement inadapté). Donc j’ai regardé une coupe de schémas sur internet, en commençant par celui qu’Adafruit a publié pour sa carte. Cette utilisation des mosfets est vraiment créative, bon je sais qu’Adafruit n’en est pas l’inventeur, mais je n’étais jamais tombé sur ce genre de circuit auparavant.
J’ai donc fait ce petit convertisseur de logique avec des composants que j’avais heureusement sous la main : un LM350 pour réguler le 5V à 2,8V, deux mosfet MTP3055E (un pour chaque ligne de l’I²C), une coupe de résistances. C’est certainement une version de puissance des millions de fois overkill pour les courants impliqués ici, mais ça marche!
J’ai téléversé le code d’Adafruit dans mon arduino, et ça a marché tout seul, sans plus de tracas. Le capteur pouvait mesurer des distances jusqu’à environ 180 millimètres, en plus de la luminosité en lux sur une plage immense qui donne une foule de possibilités pour des utilisations dans des robots (je suis encore en train d’y penser). Le seul problème, c’est que la version démo d’Adafruit est terriblement lente, dans le style d’une quinzaine de mesures par secondes, ce qui ne va pas du tout pour mon application. Mais c’est juste le début, c’est certain que l’on peut crinquer la fréquence de plusieurs ordres de grandeur avec le bon programme et l’utilisation de la pin d’interrupt sur le vl6180x.
Prochains trucs à faire : mettre deux capteurs sur la même ligne d’I²C, trouver la façon pour reseter leurs adresses respectives (puisqu’elles ont la même par défaut) et récupérer les données provenant des deux! Heureusement, ST a publié une application note expliquant comment faire. En plongeant dans la documentation, je devrais aussi être capable de trouver comment augmenter la vitesse des données pour que la contrainte devienne la rapidité du microcontrôleur à les analyser.