La molette est déposée sur un servomoteur qui tourne de 0° à 180° piloté par un Arduino. Différentes photos sont prises par un microscope USB sous différentes positions (angles de rotation du servomoteur). A l’aide d’algorithmes écrits dans le langage python traitent les images en détectant deux contours : le cercle défini par le bord de l’arrêt et celui délimité par l’alésage de l’axe de rotation de la molette. La distance entre les centres de ces deux cercles est mesurée, ce qui détermine la concentricité des deux cercles. Par ailleurs, l'excentricité (écart de notre contours à un cercle parfait) de chaque cercle est aussi contrôlé. Tous ces acquisitions sont pilotées à partir d’une interface homme machine qui permet une rapide prise en main du banc optique.
Fig. Photo du banc optique
Ci-dessous, notre maquette du banc optique réalisée sous SolidWorks, téléchargeable au format SW ici.
L'acquisition des images du banc optique sont obtenues à l'aide d'une commande sur python. Toute l'interface homme-machine a été rendu plus accessible grâce à l'ouverture d'une fenêtre avec des boutons permettant différentes opérations (démarrage/arrêt de la caméra, prise de photo).
Le traitement des images acquises est réalisé à l'aide de la bibliothèque opencv sur python.
Tout d'abord, l'image est nettoyée pour éliminer des contours parasites dus aux aspérités du support et à la rugosité de la molette. Pour cela les fonctions cv2.Canny et cv2.threshold sont utilisées pour faciliter la détection des contours.
Ensuite, le contour extérieur de la molette est détecté en premier. Pour cela les colonnes sont balayées de bas en haut et de haut en bas jusqu'à ce que l'algorithme rencontre un contour. Puis la même opération est faite sur lignes. les doublons (points obtenus à la fois par le balayage en colonnes et celui en lignes) sont supprimés.
Enfin, la cellule de travail est ajustée pour détecter le contour intérieur. Elle consiste en un carré centré sur le centre du contour extérieur et de côté le rayon du contour extérieur. Le même algorithme que pour le contour extérieur est enfin appliqué pour trouver le contour intérieur.
Ainsi, le programme fourni le centre et le rayon des deux contours. La concentricité des deux contours est mesurée en calculant la distance entre les centres. L’excentricité des contours est calculé en ajustant le contour avec une ellipse en minimisant la distance entre les deux, enfin en appliquant la formule de l'excentricité à cette ellipse on obtient la valeur de l’excentricité.
Pour piloter le banc optique, il est nécessaire d’installer :
Pour pouvoir piloter le servomoteur, le script arduino doit être téléverser sur la carte arduino uno. Ensuite tout est piloté à partir du script python : mise en mouvement du servomoteur, allumage de la caméra, prise de photos et analyse de ces dernières.
L’interface utilisateur du banc se présente comme suit.
Initialement, l’écran est noir. L’utilisateur clique sur le bouton “start movie”, ce qui lance l’acquisition d’image, qui apparaît alors à l’écran. Il peut alors ajuster la position de la molette et de la caméra si nécessaire, de manière à ce qu’elle soit centrée sur l’image. Quand l’image est satisfaisante, l’utilisateur clique sur “analyze image”. Une fenêtre s’ouvre et demande à l’utilisateur d’entrer un nom pour l’image acquise. Ensuite, le logiciel indique sur l’image la distance entre entre les centres des cercles (en microns) ainsi que leur excentricité (mesure du décalage du foyer sur l’axe principal de l’ellipse. Elle est proche de 0 pour un contour presque circulaire, et plus proche de 1 quand l’ellipse est très allongée).
Le logiciel est prévu pour filmer 5 min avant de s’arrêter. Il suffit de cliquer sur “start movie” de nouveau pour le redémarrer.
Nous identifions 2 principaux axes de développement pour le banc optique: améliorer la prise de vue de la face supérieure de la molette, et ajouter une prise de vue latérale de la molette pour observer d’autres caractéristiques.
Pour améliorer la prise de vue la face supérieure, il serait utile d’utiliser une caméra avec une meilleure résolution (davantage de pixels/mm).
L’autre point d’amélioration est la fixation de la caméra et le positionnement de la molette. Une fois la caméra choisie, il faudra la fixer de manière adéquate pour qu’elle soit parfaitement immobile. Pour placer avec précision la molette dans l’axe de la caméra, il serait utile d’utiliser un étau en croix, qui permettrait de déplacer le support de la molette dans 3 directions à l’aide de vis micrométriques (comme celle-ci).
Pour obtenir d’autres caractéristiques de la molette (planéité, parallélisme des faces, épaisseur, …), il serait intéressant d’imager la tranche de la molette, en fixant une seconde caméra sur le côté de la structure. En faisant tourner la molette grâce au servomoteur, on peut obtenir des images de la tranche à différents angles et en déduire les caractéristiques sus-citées de la molette. Pour obtenir ces images il faut ajuster le servomoteur pour que sa rotation soit bien centrée sur son axe.