Conception du détecteur de l’imagerie oxymétrique

Pour pouvoir mesurer le signal dans chaque fibre, je devais trouver un moyen de les imager avec ma caméra à haute sensibilité. J’ai tout d’abord réussi à trouver une lentille en ménisque convergent qui a une distance focale de 35 mm, en la collant directement sur l’objectif de la caméra, cela permet de rapprocher l’objet de la distance hyperfocale (approx 30 cm je crois) jusqu’à 35 mm, en diminuant le champ de vue par la même occasion.

J’ai donc imprimé deux pièces s’emboîtant en une boite en prisme cubique. La première est une plaque comportant 49 trous afin de faire passer toutes les fibres et de les aligner sur un même plan. La deuxième a un trou au centre pour y insérer la caméra ainsi qu’un petit remontant cylindrique afin d’y fixer la lentille. Le tout permet de bien maintenir toute l’optique solidement en position et dans l’obscurité, autant les fibres que la lentille et la caméra.

Une fois la boîte refermée, cela donne le détecteur assemblé visible sur les deux photos ci-dessus. D’un côté, il y a la caméra, bien insérée et collée, et de l’autre, le paquet de 49 fibres formant l’image. On peut voir le résultat capté par la caméra ci-dessous. L’espacement entre les fibres est tel qu’il permet à chacune d’être bien résolue et échantillonnée sur un bon nombre de pixels, même lorsque l’intensité lumineuse dans la fibre optique est très élevée. Dans le cas présent, j’avais pointé quelques fibres directement sur une ampoule incandescente. Bien évidemment, comme je n’utilise pas de lentille de champ à la sortie des fibres, celles sur le bord de l’image vont avoir une intensité captée par la caméra beaucoup plus faible que celles au centre, il va donc falloir faire une calibration pour appliquer la correction sur le signal mesuré.

 

Test du LCD sur le télescope LCD

J’ai testé l’écran LCD de mon télescope LCD hier. Après moult essais, je ne suis pas parvenu à afficher quoi que ce soit dessus. Tout semblait pourtant fonctionner, je n’avais pas de message d’erreur dans le logiciel. Je me suis rendu compte en fait que je l’avais brisé en l’insérant dans ma monture, comme en témoigne la photo ci-dessous.

C’est bien plus fragile que je le pensais en fait, les bords supportent peu les stress mécaniques.

Je me suis donc rabattu sur mon autre écran LCD modifié, celui qui est branché sur une carte Nextion que j’avais utilisé comme preuve de concept au tout début du projet. Sa conception mécanique est un peu différente, ce qui fait que j’avais gardé la monture métallique qui fait la bordure du verre, lui donnant tout de même une bonne résistance au stress mécanique lors de l’insertion dans ma monture. En fait, je pense que c’est le poids du raspberry pi qui a joué, fissurant le verre et les connecteurs internes.

Cela donne donc les résultats suivants, ce qui est très satisfaisant, et ça l’est encore plus lorsque l’on place un oeil face à l’oculaire au lieu de l’objectif d’une caméra.

Les lentilles de champ permettent d’avoir une bonne luminosité de l’image malgré l’atténuation du LCD lorsque l’oeil est bien aligné avec l’optique. Le vignettage que l’on peut observer sur les images est dû à l’aperture stop de la caméra, pour l’oeil, on voit surtout des aberrations sur les bords de l’image.

Mais tout fonctionne bien, les images réelles et virtuelles se combinent à merveille dans mon système, et tout est à l’endroit!

Assemblage mécanique pour le traitement laser de l’asclépiade

J’ai terminé l’assemblage mécanique de mon laser 3W. L’objectif était de le monter à la verticale, de manière à ce que le faisceau pointe vers le sol, puis de l’aligner sur la sortie de ma buse par laquelle sort la fibre. Pour cela, j’utilise principalement des extrusions d’aluminium. Il y avait plusieurs trous filetés dans le boîtier du laser, dont le diamètre était parfait pour y visser mes vis de 2mm. J’ai donc simplement imprimé en 3D une plaque avec des trous aux bons endroits (3e photo). Un arduino connecté sur l’entrée TTL de la carte de contrôle du laser permet de sélectionner la puissance de sortie du laser. Pour faire l’alignement, j’utilise la puissance la plus basse possible, en deçà du 1mW (non mesuré pour de vrai). Je porte tout de même des lunettes classées OD5 à 450nm en tout temps, les lunettes fournies avec le laser lors de l’achat sont une vraie blague, mais vraiment pas drôle en fait, puisqu’elles ne bloquent (à peu près) rien, elles sont très probablement fausses, mais bon, au prix que m’a coûté le laser, c’est normal. On peut voir sur la 4e photo le faisceau vu par la caméra à cette puissance. Le focus se fait en tournant la petite lentille à la sortie du laser. Sur la 5e photo, c’est le laser lorsqu’il est à pleine puissance (supposément 3W, non mesuré). On peut voir que c’est amplement suffisant pour passer au travers d’une feuille de papier en une fraction de seconde (dernière image). Le tout sera utilisé dans une boîte fermée, pour limiter les risques laser au maximum.

Défrichage de fibre optique pour l’imagerie oxymétrique

Parce que oui, c’est possible de faire autre chose que des sapins de Noël avec de la fibre en PMMA à 10¢ le mètre. Je me suis lancé sérieusement, dans les derniers jours, dans mon projet d’imagerie oxymétrique. Pour commencer, j’ai découpé 147 bouts de 30 centimètres afin d’avoir une image composée d’un carré de 7×7 (ou toute autre forme comprenant 49 bouts de fibre sur l’image de la caméra).

Sources lumineuses

En utilisant deux sources de longueur d’onde différente, l’une dans le rouge, l’autre dans l’infrarouge, il est possible de déterminer le taux d’hémoglobine oxygénée par rapport à l’hémoglobine désoxygénée, en se basant sur les courbes d’absorption particulières. Ce principe est largement utilisé dans les sphygmo-oxymètres optiques, mesurant la concentration d’oxygène en un point (normalement un doigt) et supposant qu’elle est homogène dans le reste du corps. Or, la consommation d’oxygène par les organes varie selon l’effort énergétique qu’ils doivent fournir. En ayant une méthode qui permet de mesurer les variations d’oxygénation dans un volume donné, on ouvre la porte à toutes sortes d’applications intéressantes, comme l’imagerie spectroscopique proche infrarouge fonctionnelle (functional near-infrared imaging, fNIR, en anglais), ce qui est très excitant puisqu’elle permet de visualiser les processus mentaux en temps réel avec, ce que je souhaite vérifier, du matériel très peu coûteux et facile à trouver.

 (source : http://www.oximetry.org/pulseox/principles.htm)

Atténuation de la fibre

Résultats de recherche d'images pour « attenuation pmma fiber »

L’atténuation dans le proche-infrarouge pour le PMMA grimpe rapidement, comme on peut le voir sur le graphique. À 850nm, on a environ 5dB/m d’atténuation. Il faut donc garder les bouts de fibre très courts. Avec 30 centimètres, les pertes sont de 1,5dB (~71% du signal est transmis), ce qui fait mal, mais pas trop, espérons-le.

Matériel

Pour mes sources lumineuses, j’utilise deux DEL à très haute puissance optique (2,6W) afin d’être certain d’avoir suffisamment de signal. J’aurais pu utiliser des lasers, mais mon objectif était d’injecter simultanément toutes les fibres, le plus simplement possible. De plus, les DEL sont moins coûteuses et moins dangereuses (quoique à cette puissance, même si ce n’est pas un faisceau cohérent, j’ai tendance à être prudent quand même).

Je les avais déjà préalablement soudées l’année passée, lorsque j’avais commencé ce projet. Je leur ai rajouté un petit cylindre imprimé en 3D, qui se met directement autour du petit bulbe-lentille de la DEL et qui est suffisamment large pour y faire tenir les 49 fibres.

J’utilise pour les alimenter un power supply d’ordi, qui me donne 15V et 5A, le tout régulé à 700mA par diode par des régulateurs spécialisés pour cette application.

J’ai remarqué qu’allumées à pleine puissance, elles deviennent très chaudes très rapidement, ce qui va être à tenir en compte dans la suite du projet. Il va falloir soit les utiliser périodiquement avec un rapport cyclique faible, soit rajouter un système de refroidissement adéquat, ou bien y aller avec une combinaison de ces deux approches.

À 850nm, l’oeil perçoit un rouge très faible, sûrement la limite inférieure du spectre de la diode, qui est en fait bien plus lumineuse, tel qu’on peut l’observer avec la caméra qui lui donne une couleur mauve.

  

La DEL à 660nm est extrêmement brillante, puisque la quasi-totalité de son spectre est dans le visible. On peut voir que les fibres contiennent bien le faisceau.

Pour la caméra, j’utilise une caméra de drone de marque RunCam qui a une sensibilité absolument phénoménale pour son prix abordable : jusqu’à 0,0001 Lux (elle m’avait coûté 50$US si je me souviens bien). Je lui ai imprimé en 3D un petit adaptateur qui rassemble toutes les fibres et y fait tenir la caméra. Toutefois, comme on peut le voir sur la dernière image, ce sera à refaire puisque le focus de la caméra est à l’infini, ce qui mélange toutes les fibres en un gros blob de lumière. Il va donc falloir rajouter de l’optique pour imager correctement les fibres et arriver à les distinguer individuellement afin de pouvoir traiter le signal. C’est le pari à relever en ce moment dans ce projet.

Installation du sandbox d’algèbre géométrique sur Fedora

Il y a de cela quelques années, j’avais assisté à une présentation sur l’algèbre géométrique qui m’avait beaucoup intéressée. Voulant en apprendre davantage, je me suis procuré le livre : Geometric Algebra for Computer Science, qui m’avait séduit par son approche pratique, étant un matheux qui préfère voir les choses (cf. Borra pour les GPH qui me lisent en ce moment 😉

Je n’avais jamais eu le temps de le lire, ayant d’autres priorités de lectures pour mes cours, mais maintenant que l’école est définitivement F.I.N.I.E je peux enfin lire des manuels de mathématiques obscures pour le plaisir! (oui ce genre de personne existe pour de vrai). En ce moment je viens de finir le chapitre 2, et j’ai tenté de faire les exercices de programmation, mais comme d’habitude avec tout ce qui touche à du C++, il faut passer des heures à installer toutes les librairies et comprendre comment les «linker» comme du monde.

Sur le site web du livre, on trouve le lien pour installer le sandbox dans la section Downloads. Pour avoir toutes les libraires, il faut installer les packages suivants (tel qu’énumérés sans spécification dans le fichier user_manual.txt) :
sudo dnf install freeglut freeglut-devel antlr antlr-C++

Puis peut-être d’autres choses qui était déjà installé sur mon système, genre OpenGL puis FLTK. Donc avec un terminal, on ouvre le dossier ga_sandbox-1.0.7 puis on écrit :
./configure
make

Ce qui va récursivement construire tous les fichiers C++, partout. Le plus important en fait c’est que la librairie «libgasandbox » se compile sans erreur.

Lorsque le make s’est rendu dans les dossiers des exemples, il m’a sorti l’erreur suivant à l’exemple 1 du premier chapitre (qui est présente dans tous les makefile de tous les exemples…) :

/usr/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/7/../../../../lib64/libglut.so: référence au symbole non défini «glGetFloatv»
//usr/lib64/libGL.so.1: error adding symbols: DSO missing from command line

Après quelques heures de fouilles sur internet et d’essais pathétiques de gossage dans le makefile de l’exemple 1, j’ai finalement compris comment résoudre le problème : la librairie d’OpenGL n’était pas correctement liée. Il faut modifier la ligne 87 du makefile propre à l’exemple (GLUT_LIBS = -lglut) par : GLUT_LIBS = -lGL -lGLU -lglut , ce qui rajoute les deux librairies d’OpenGL GL et GLU nécessaires à la compilation du programme. Donc on enregistre le makefile, on exécute la commande make puis tadam! Ça compile enfin pour générer l’exécutable chap1ex1, que l’on peut ouvrir dans le terminal avec le classique « ./ » : ./chap1ex1 ce qui ouvre la fenêtre suivante avec les objets géométriques donnés en exemple, et la possibilité de faire tourner la vue en 3D.

Maintenant je peux enfin me concentrer à comprendre les maths et devenir un pro des espaces vectoriels à 5 dimensions! 😀

Monture optique du télescope LCD

L’ensemble des pièces utilisées pour la conception de mon télescope LCD : en haut à gauche, un raspberry pi avec un shield d’écran LCD, en haut à droite, les 4 lentilles (lentille érectrice, oculaire ainsi que 2 field lenses), à droite, un objectif à focale variable et en bas en noir, toutes les pièces imprimées en 3D pour obtenir un télescope fonctionnel : 4 tubes exactement de la bonne longueur pour correspondre aux distances focales des lentilles, et 4 paires de demi-montures circulaires pour fixer et centrer les lentilles aux bons endroits.

J’y suis allé fort avec mon imprimante 3D cette semaine, passant environ 500g de plastique noir afin de créer toutes les pièces nécessaires à la monture mécanique de l’optique de mon télescope LCD. J’y suis peut-être allé un peu fort avec mon 3mm d’épaisseur, mais je voulais être sûr de la robustesse de l’ensemble.

La première pièce a été intéressante à faire, puisque j’ai copié l’attache de mon objectif à focale variable, qui tenait avec 4 petites vis déjà présentes, à même des filets déjà faits dans l’objectif. J’ai donc imprimé une pièce de test pour voir si mes dimensions fonctionnaient, avant d’imprimer ma vraie pièce comprenant un tube de 150mm (ce fut sans nul doute l’impression la plus haute que j’ai réalisé à ce jour, mon imprimante se rendant à 180mm maximum en z). Ça a été tout juste pour le diamètre interne du tube, parce que je voulais pouvoir le visser par l’extérieur tout en laissant suffisamment de place à l’intérieur pour les rayons et la lentille de champ.

 Parlant de lentille de champ, la voici, positionnée à la première image produite dans mon système. Elle est fixée à l’aide d’un anneau imprimé en deux parties, verticalement, qui permet de maintenir la lentille en place par simple pression, sans avoir besoin de colle, de vis, ou d’ajustement en position. Je suppose qu’elle est placée au centre de l’axe optique, et malgré les tolérances assez élevées que j’ai dû mettre pour tenir en compte des défauts d’impression (surtout dans la partie supérieure de l’arche du cercle), je pense que c’est la méthode la plus précise à ma disposition pour monter une lentille dans un tube.

Je place ensuite un second tube du même diamètre avec une hauteur calculée pour correspondre à ma distance objet de ma seconde lentille (lentille érectrice). Le même principe de monture est utilisé, sauf que cette fois-ci se rajoute un adaptateur de diamètre de tuyau, d’un côté, il y a le petit diamètre, et de l’autre, le plus gros diamètre.

 

Ensuite, je place un des deux gros tubes de 100mm de haut, afin de placer mon système d’écran LCD. Celui-ci est composé de mon classique écran LCD modifié (voir ma vidéo CrystalCam pour plus d’informations) et d’une seconde lentille de champ plano-convexe du plus gros diamètre que j’ai pu trouver à cette courte focale (D=45mm, f=50mm).

 

 

Pour imprimer la monture en 3D, j’ai dû faire une fente juste assez grande pour y insérer l’écran LCD, tout en donnant le plus strict espace pour donner une petite pression sur la lentille pour la maintenir en place. Le côté plat de la lentille aide beaucoup à la positionner directement en contact avec l’écran, sauf que l’autre côté, très bombé, provoque des aberrations importantes qui ne sont pas corrigées par mon système. Je n’ai pas le choix de placer la lentille uniquement de ce côté, puisque je veux pouvoir observer l’écran LCD directement avec mon oculaire de l’autre.

Pour l’oculaire, j’ai continué avec ma méthode super efficace des moitiés de montures centrées retenant la lentille. On peut en voir les détails sur la photo ci-contre. Deux petites bandes de plastique permettent de retenir la lentille en z, tandis qu’elle est confinée dans un cylindre qui fait un cheveu de plus que sa dimension (un cheveu en tolérance de ma vieille prusa i3, soit 1mm au total sur le diamètre). J’ai rajouté un petit cache-oeil de 6mm avec un diamètre légèrement plus gros afin d’être confortable pour visionner l’écran et de s’assurer que peu de lumière externe entre par l’oculaire dans le système. Puisque l’écran LCD atténue beaucoup la lumière provenant du télescope, c’est important si l’on veut voir quelque chose.

Voici le résultat, une fois monté sur le second tube de 100mm. Bien que la majorité des pièces tenaient simplement par contact, j’ai rajouté de la colle chaude entre toutes les pièces. La pièce critique est l’adaptateur entre les deux diamètre de tuyau, il fallait absolument le coller et en essayant de lui donner un angle nul par rapport à l’axe optique (pas facile). Je n’ai pas pris de chance et j’ai mis de la colle chaude partout, ce qui fait que la monture est extrêmement solide. Afin d’éviter toute intrusion de lumière dans le montage, j’ai rajouté du duct tape noir pour boucher les mini-fentes (surtout celles entre les deux moitiés de monture de lentille). Le tout est un petit peu overkill, mais je me disais que ce ne serait pas un vrai montage d’ingénierie physique sans quelques bâtons de colle chaude et quelques longueurs de duct tape.

Le résultat final est surprenamment beau et aligné, pour des pièces imprimées en 3D. Le télescope est à peine plus long qu’une longue vue standard, à cause de l’ajout de l’étage du LCD et de l’érecteur pour avoir une image à l’endroit. Il fait environ 400cm, ce qui reste très maniable avec les bras. L’ajustement du focus se fait avec la rotation de l’embout de l’objectif, qui déplace l’une des deux lentilles à l’intérieur, modifiant la longueur focale du premier système d’imagerie.

La présence des lentilles de champ dans le système fait toute la différence pour un télescope aussi long et ayant autant de transformations optiques. On peut voir un aperçu du résultat ci-contre, bien que cette photo ait été prise rapidement avec ma caméra sans retirer l’oculaire. À l’oeil, c’est franchement plus impressionnant. L’image arrive directement sur l’écran LCD, à l’endroit et bien nette (lorsque l’on ajuste le focus). Elle occupe approximativement 23 degrés du champ de vue, ce qui est très satisfaisant sans être exceptionnel, mais d’autres contraintes ont eu préséance dans la conception du système. La principale aberration est la courbure de champ, elle est vraiment très forte dans les coins de l’image. Les autres aberrations sont sans doute masquées par la présence de l’écran LCD qui induit lui-même quelques modifications à l’image, entre autres une atténuation forte ainsi que l’ajout du micro-grillage des pixels. Une étude plus formelle des aberrations produites par les lentilles serait nécessaire pour identifier des solutions. Mais comme d’habitude, tout est affaire de compromis, puisque sans lentille de champ pour imager l’ensemble des rayons sur les autres lentilles, on ne verrait tout simplement rien à cause de l’atténuation trop importante du système.

On se laisse sur cette merveilleuse photo de moi-même en train d’utiliser de manière ludique ce télescope :

Test de transmission d’un faisceau à 1310nm à travers un objectif

Au printemps dernier, j’ai acheté quelques composantes pour faire un projet de microscope confocal à fibre optique. Il y a tout d’abord un laser, une photodiode avalanche (APD) et un coupleur 2×1, le tout fonctionnant à 1310nm.

Construction

Pour alimenter la diode laser, j’utilise un régulateur de courant LM350. Pour ce qui est de la photodiode, c’est un peu plus compliqué. Pour profiter du gain de l’effet d’avalanche, il faut lui fournir un voltage inverse d’environ 50V. Je me suis donc procuré un convertisseur DC-DC qui prend 12V en entrée et qui peut fournir jusqu’à 80V en sortie, dont la tension de sortie est ajustable. Par la suite, l’amplificateur intégré dans la puce de l’APD a besoin d’une tension de -5,2V. Je lui fournis avec un autre LM350 monté en régulateur de voltage cette fois-ci.

  

Pour ce qui est du montage optique, je me suis arrangé pour que tous les composants à fibre utilisent la même sorte de connecteur, soit du LC/PC. Il n’y avait que le laser qui n’était pas de ce type, j’ai donc dû acheter une patchfiber pour passer du connecteur FC/PC à LC/PC.

L’arduino dans la photo ne sert pour l’instant qu’à donner du 5V pour le laser, l’objectif était d’utiliser l’ADC pour numériser le retour produit par l’amplificateur de l’APD.

À la sortie de la fibre, j’ai rajouté un objectif 10X afin de focuser le faisceau sortant de la fibre en un point donné, avec l’hypothèse que je serais capable de mesurer la réflexion avec l’APD. J’ai donc construit un petit support permettant de positionner la sortie de la fibre (donc le connecteur LP/PC) à une position calculée pour optimiser l’ouverture numérique du système (voir la photo en bas). Bien sûr, l’alignement n’est pas exact, puisque c’est imprimé en 3D.

Problèmes rencontrés

En premier lieu, je n’ai jamais réussi à obtenir le signal à la sortie de l’amplificateur situé sur la puce d’APD. Il faut croire que le hack que je voulais faire a atteint sa limite. Ne connaissant pas les propriétés de cette amplificateur, outre qu’il est AC-coupled à la sortie, j’ai décidé d’abandonner une façon de le faire marcher, puisque cela pourrait être dû à une multitude de raisons (la première étant qu’il soit tout simplement brisé). De toute manière, je m’intéresse beaucoup plus à la valeur DC du signal sur la photodiode puisqu’elle est directement proportionnelle à la puissance reçue.

Ce que j’ai fait pour obtenir une mesure malgré tout, ça a été de placer un multimètre en mode courant entre la source de 50V et l’entrée de la photodiode. Rappelons que seule une des deux broches de la diode étant accessible, c’était la seule manière de se brancher dessus. Cela a fonctionné, je mesurais environ 2mA lorsque le laser est branché direct dessus, et environ 30µA lorsque le système est branché tel que décrit, autrement dit, lorsque l’on «regarde» une clive droite qui renvoie 4% du signal (cela est confirmé en pliant la fibre de sortie pour constater que les pertes viennent de la clive et pas du coupleur). En faisant les mathématiques, on serait supposé d’observer environ 20µA (2000/2*0.04/2), c’est donc raisonnable.

Une autre hypothèse que je devais vérifier, c’est si mon objectif transmet à une longueur d’onde de 1310nm. Pour cela, je me suis rendu compte qu’il était possible de détecter cette longueur d’onde avec ma caméra, qui apparaît comme une lueur faiblement bleuâtre). Voici les photos que j’ai obtenues :

On peut donc constater que l’optique de mon objectif laisser très bien passer cette longueur d’onde. N’ayant pas de carte IR, je ne sais pas si le faisceau se focusse bel et bien, mais un test fait avec une diode laser rouge montrait que oui, donc le changement de longueur d’onde devrait normalement déplacer légèrement le point focal, mais ça devrait fonctionner.

J’ai été incapable d’observer une réflexion avec ce système, probablement parce que le signal est caché dans le bruit dû à la réflexion de la clive. Cependant, il y aurait deux pistes à explorer :

  • Faire un capteur de contact direct entre la fibre et un milieu. En plaçant le connecteur directement sur des surfaces (chose qu’il ne faut jamais faire si on ne veut pas se ramasser avec un motton de poussière dessus), on peut remarquer une bonne fluctuation du signal, dépendamment de la lumière réfléchie. On pourrait essayer de s’en servir pour détecter des défauts de surface, etc. Il faudrait explorer davantage en faisant l’acquisition du signal et en observant si c’est possible de le corréler à quelque chose.
  • Faire un capteur de l’état de polarisation de la fibre. Le coupleur va laisser passer plus ou moins de signal sur l’APD dépendamment de l’état de polarisation du faisceau réfléchi par la clive. En pratique, cela signifie que lorsque l’on perturbe physiquement la fibre en la pliant légèrement (sans se rendre au rayon critique non plus), la modification de la biréfringence agit sur l’état de la polarisation du signal (une fois à l’aller et une autre fois au retour). Ce sont bien entendu de petites modifications, mais l’APD amplifie suffisamment le signal pour que cela soit aisément très perceptible (de l’ordre de quelques µA). L’effet pourrait être optimisé en créant une lame quart d’onde ou carrément un polariseur complet avec un segment de fibre.

En outre, je crois que je vais abandonner pour l’instant l’idée d’en faire un microscope confocal, à moins d’avoir du meilleur équipement (cliveuse à angle, monture d’alignement, etc.). Toutefois, le montage actuel offre quelques promesses.

Test du micro lidar vl6180x

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.