Déclanchement d'une caméra par un Yocto-RangeFinder

Déclanchement d'une caméra par un Yocto-RangeFinder

Les modules Yoctopuce sont particulièrement adaptés à la mise en place rapide de petites solutions d'automatisation sur mesure. Nous en avons fait l'expérience une fois de plus cette semaine, dans le cadre de la mise à jour de notre système de gestion de l'inventaire des composants.




But du projet

En raison des difficultés croissantes d'approvisionnement, nous avons dû - comme la plupart des fabricants d'électronique - augmenter considérablement nos stocks de composants durant les six derniers mois. Mais l'augmentation des stocks représente aussi un risque pour certains composants, qui ont une durée de stockage limitée. Il est donc impératif de pouvoir s'assurer d'utiliser toujours les composants les plus anciens, avant que ceux-ci dépasse leur durée de stockage permise.

En plus des composants stockés, il est aussi indispensable de surveiller avec soin l'arrivée des commandes différées, qui représentent désormais une grande partie des approvisionnements, car les distributeurs ne sont pas toujours en mesure d'honorer les dates de livraisons annoncées initialement. Nous avons donc décidé de mettre en place un système de scan systématique de toutes les bobines de composants entrant dans le stock et en sortant, afin de pouvoir tracer précisément chaque bobine.

Heureusement, tant les distributeurs que les fabricants de composants impriment désormais sur les étiquettes des code 2D de type DataMatrix qui permettent d'obtenir d'un coup toutes les informations essentielles: référence du composant, nombre de pièces, code de datation de la production. Notre objectif est donc de mettre en place une solution permettant de scanner très rapidement le code 2D des composants entrant et sortant du stock, et d'archiver une image témoin de la bobine. Pour cela, nous avons choisi d'utiliser une caméra industrielle ethernet dédiée avec décodage intégré, plus efficace que les solutions basées sur une caméra traditionnelle avec traitement ultérieur par un PC.

La petite caméra OMRON MicroHAWK V430-F
La petite caméra OMRON MicroHAWK V430-F



Problématique

Comme le scan de composants entrants et sortants est une activité sporadique, on ne veut pas laisser la caméra tourner en continu, ce serait inutile et userait inutilement les LEDs qui servent à contrôler l'exposition. On aimerait donc simplement déclancher automatiquement la lecture active de la caméra lorsqu'une bobine est présentée devant la caméra.

Dans une chaîne de production, ce genre de déclanchement se fait à l'aide d'une barrière lumineuse, et la caméra dispose même d'un signal d'entrée à cet effet. Mais dans notre cas, comme la bobine est portée à la main par un opérateur, on aimerait en plus s'assurer que la bobine ne bouge plus afin d'avoir une bonne image pour les archives. Une fois la détection réussie, on veut mettre à jour le stock avec le résultat de la détection et archiver l'image correspondante.

Solution

La solution choisie consiste à installer la caméra V430-F face à l'un des derniers segments de mur inutilisé qu'il nous reste, et à installer un Yocto-RangeFinder parallèle au mur pour détecter la présence d'un objet dans la zone filmée. En temps normal, la distance mesurée correspond à la réflexion quasi tangentielle du capteur contre le mur, à un peu plus de 80mm. Lorsqu'une bobine est présentée dans la zone, le capteur détecte l'objet, qui n'est alors qu'à 20 ou 30mm. Le logiciel de contrôle, écrit en TypeScript, attend que cette distance mesurée soit stable, typiquement le temps de quelques dixièmes de seconde, avant de déclancher la prise de vue et l'analyse d'image par la caméra.

Le logiciel de contrôle vérifie aussi que le code lu correspond à une description de bobine de composants, et si c'est le cas il archive les information détaillées et charge l'image entière depuis la caméra pour archivage.

Notre installation de scan de composants
Notre installation de scan de composants


Pour simplifier l'installation, tout est fait à travers un réseau Ethernet: la caméra est entièrement pilotable par son interface réseau, et le Yocto-RangeFinder est monté sur un YoctoHub-Ethernet en déportant la partie de mesure à proximité de la caméra. Un deuxième YoctoHub-Ethernet avec un écran et un buzzer, dont nous disposions à proximité, permet de donner un feedback visuel et auditif à l'opérateur.

Détails d'implémentation

Pour être le plus réactif possible, le Yocto-RangeFinder est configuré en mode mode instantané (fenêtre d'acquisition minimale). On utilise par contre le mode haute-précision, pour avoir des mesures peu bruitées. Le logiciel lit les mesures par callback à 10Hz et garde une liste tournante des cinq dernières mesures, sur lesquelle il calcule la moyenne et l'écart-type. On obtient ainsi une mesure très réactive, largement assez fiable, ainsi qu'une estimation de la stabilité de l'objet en face de la caméra.

async function timedReportCallback(obj_fct: YFunction, value: YMeasure): Promise<void>
{
    // Keep last 5 measures
    lastMeasures.push(value.get_averageValue());
    let n: number = lastMeasures.length;
    if(n < 5) return;
    let sum: number = 0;
    let sumsq: number = 0;
    for(let i = 0; i < n; i++) {
        sum += lastMeasures[i];
        sumsq += lastMeasures[i] * lastMeasures[i];
    }
    let avg = sum / n;
    let stddev = Math.sqrt(sumsq / n - avg*avg);
    // console.log('Average: ' + avg + ', std dev: ' + stddev);
    lastMeasures.splice(0, 1);
    if(avg < THRESHOLD_DISTANCE_MM && stddev < 1) {
        camera.triggerCapture();
    } else if(avg < THRESHOLD_DISTANCE_MM || stddev > 1) {
        camera.setTargetPattern(true);
    } else if(avg > THRESHOLD_DISTANCE_MM && stddev < 1) {
        camera.setTargetPattern(false);
    }
}


Pour piloter la caméra OMRON MicroHAWK V430-F en TypeScript sous node.js, il suffit d'utiliser un socket TCP et d'envoyer les commandes documentées que l'on peut utiliser sur la ligne série. Nous avons fait une petite classe TypeScript à cet effet, qui permet aussi par exemple d'activer la mire bleue dès qu'un objet est détecté mais non stabilisé, et de supprimer la mire une fois la photo terminée. Pour télécharger la dernière image analysée depuis la caméra, on utilise la même URL que celle utilisée par l'interface Web de configuration de la caméra.

Si vous êtes intéressé à examiner le code en entier, vous pouvez consulter le projet sur GitHub.

Le système est très réactif
Le système est très réactif



Conclusion

Le Yocto-RangeFinder et le YoctoHub-Ethernet nous ont permis avec très peu d'effort d'intégrer la caméra OMRON au mieux par rapport à nos besoins. Nous allons probablement continuer à l'améliorer durant les prochains mois, donc n'hésitez pas à nous contacter si vous êtes intéressé à développer votre propre solution de ce type à l'aide de modules Yoctopuce.

Commenter aucun commentaire Retour au blog












Yoctopuce, get your stuff connected.