Table des matières:
- Fournitures
- Étape 1: Les encodeurs optiques
- Étape 2: Pièces imprimées en 3D
- Étape 3: Schéma de câblage
- Étape 4: Code Arduino
- Étape 5: Première numérisation
Vidéo: Scanner de points XYZ utilisant des encodeurs rotatifs récupérés : 5 étapes
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:06
Ayant acquis un assez grand nombre d'encodeurs optiques rotatifs mis au rebut sur mon lieu de travail, j'ai finalement décidé de faire quelque chose d'amusant/utile avec eux.
J'ai récemment acheté une nouvelle imprimante 3D pour ma maison et quoi de mieux qu'un scanner 3D ! Ce projet m'a également fourni l'opportunité parfaite d'utiliser mon imprimante 3D pour fabriquer les pièces requises.
Fournitures
Codeurs optiques et capteurs optiques correspondants
Arduino UNO
bouclier de prototypage en option
rails en acier
accès à une imprimante 3D
Étape 1: Les encodeurs optiques
Presque n'importe quel encodeur rotatif peut être utilisé pour ce projet, à condition qu'il vous fournisse un nombre relativement élevé de « clics » par mm. De toute évidence, différents codeurs nécessiteront une solution de montage appropriée.
J'ai utilisé un compteur de continuité pour tracer le schéma de câblage des photo-capteurs.
Étape 2: Pièces imprimées en 3D
Ces pièces abritent les codeurs rotatifs et fournissent une glissière pour le rail. Le boîtier d'encodeur unique a deux trous à l'arrière pour le montage des rails transversaux. Le boîtier de l'encodeur double est simplement composé de deux boîtiers simples fusionnés à angle droit.
J'ai conçu ces supports sur fusion360 en fonction de mon choix d'encodeurs et de rails, l'arbre de l'encodeur a un petit morceau de gaine en caoutchouc fronde, pour l'aider à mieux saisir l'arbre en acier inoxydable.
Vous voulez que l'arbre glisse librement et tombe à travers le boîtier lorsqu'il est maintenu verticalement, mais il doit exercer une pression suffisante sur le codeur pour ne pas glisser. Ce qui a fonctionné pour moi, c'est de permettre à la glissière de l'arbre de chevaucher l'arbre du codeur de 0,5 mm. Le caoutchouc de la fronde est suffisamment souple pour se déformer de cette quantité et offrir une bonne traction.
Étape 3: Schéma de câblage
Le circuit est très simple. Les opto-capteurs nécessitent un peu de courant pour les diodes émettrices IR, une masse et des résistances de rappel pour les photodiodes.
J'ai opté pour 5mA pour les diodes émettrices en série, dans cet encodeur particulier, la chute de tension aux bornes des diodes est de 3,65V. J'utilise une alimentation 5V de l'Arduino, qui laisse 1,35V pour la résistance, à 5mA, cela équivaut à 270 ohms.
10k ohms ont été sélectionnés pour les pull-ups car les photodiodes ne peuvent absorber qu'un faible courant, 10k ohms ont également été utilisés pour le bouton-poussoir. Il y a un bouton disponible pour une utilisation sur la carte prototype déjà connectée à la terre, il suffit de lui fournir une résistance de rappel et de la câbler à la broche d'entrée souhaitée.
Étape 4: Code Arduino
Le code a besoin d'une petite explication car son fonctionnement n'est peut-être pas immédiatement évident, pourtant il a dû être optimisé de cette manière pour pouvoir traiter 3 encodeurs assez rapidement.
Tout d'abord, nous voulons uniquement traiter les données de direction S'il y a eu un changement de position du codeur.
change = new_value ^ valeur stockée;
Afin d'obtenir plus de résolution de mes encodeurs, j'ai dû traiter à la fois les fronts montants et descendants.
Sur ma configuration, ma résolution est de 24 clics par 1 cm.
Cela nous laisse quelques scénarios.
S1 est constant 0 et S2 basculé de 0 à 1
S1 est constant 0 et S2 basculé de 1 à 0
S1 est constant 1 et S2 bascule de 0 à 1
S1 est constant 1 et S2 bascule de 1 à 0
S2 est constant 0 et S1 basculé de 0 à 1
S2 est constant 0 et S1 basculé de 1 à 0
S2 est constant 1 et S1 bascule de 0 à 1
S2 est constant 1 et S1 bascule de 1 à 0
Ces conditions sont mieux comprises dans les tables de vérité ci-dessus, chaque condition donne également une "direction", arbitrairement nommée 0 ou 1.
Les graphiques nous donnent deux indices essentiels:
1) un graphique est l'inverse complet de l'autre, donc si nous en avons un, nous pouvons facilement calculer l'autre en inversant simplement la sortie. Nous inversons la sortie uniquement si une broche change et pas l'autre, nous pouvons en choisir une arbitrairement.
2) le graphique lui-même est simplement le XOR des signaux S1 et S2. (l'autre graphique est le PAS de cela).
Maintenant, comprendre le code est simple.
// lire dans PORT en parallèle // rappelez-vous que les paires adjacentes appartiennent au même état du codeur = PINB & 0x3f; // quelles broches ont changé s'il y en a diff = hold ^ state; // OU exclusif des signaux S1 et S2 adjacents pour obtenir la table de vérité // le moyen le plus simple est de faire une copie de l'état actuel // et de le décaler vers la droite d'un bit lookup = state >> 1; // maintenant les bits sont alignés pour XOR dir = lookup ^ state; // rappelez-vous, la table doit être inversée si l'une // des entrées est restée constante, nous n'avons pas besoin d'une instruction IF // pour cela. Actuellement, le bit de direction souhaité // est le bit de droite de chaque paire dans la variable 'dir' // le bit de gauche n'a pas de sens // la variable 'diff' a le bit qui a changé 'set' // donc nous avons soit '01' ou '10' // XOR ceci avec l'octet 'dir' // inversera ou non le bit significatif. dir ^= diff; // maintenant mettre à jour la variable hold hold = state; // si l'un des bits a changé pour cet encodeur if(diff & 0x03) { // déterminer la direction if(dir & 0x01) { // basé sur votre logiciel et votre câblage ++ ou -- --z; } else { ++z; } } // idem pour le reste if(diff & 0x0c) { if(dir & 0x04) { ++y; } else { --y; } } if(diff & 0x30) { if(dir & 0x10) { --x; } else { ++x; } }
Lorsque le bouton est enfoncé, nous envoyons la valeur XYZ actuelle à un programme de terminal.
Les données série sont lentes, mais pendant le fonctionnement normal, les positions des encodeurs ne changeront de toute façon pas pendant ce temps.
Les données sont envoyées sous forme de comptes bruts. Vous pouvez faire le calcul et envoyer les données en mm ou en pouces, etc. Je trouve que les valeurs brutes sont tout aussi bonnes car nous pouvons mettre l'objet à l'échelle plus tard dans le logiciel.
Étape 5: Première numérisation
La collecte des points est un processus lent, je pose la sonde dans le coin supérieur gauche et réinitialise l'Arduino.
Cela met à zéro la position de domicile.
Ensuite, déplacez la sonde vers l'emplacement sur la cible, maintenez-la stable et appuyez sur le bouton « instantané ».
Pour cet échantillon assez grand, je n'ai pris que ~140 points, donc les détails ne sont pas très bons sur le produit final.
Enregistrez les données dans un fichier. PCD et ajoutez l'en-tête
#. PCD v.7 - Format de fichier de données de nuages de pointsVERSION.7 CHAMPS x y z TAILLE 4 4 4 TYPE F F F COMPTAGE 1 1 1 LARGEUR (votre nombre de points) HAUTEUR 1 POINT DE VUE 0 0 0 1 0 0 0 POINTS (votre nombre de points)
Mettez votre nombre de points dans l'en-tête, c'est facile pour tout éditeur qui vous fournit des numéros de ligne.
Au-dessus des points peuvent être vus dans freeCad, ils sont ensuite exportés de freeCad sous forme de fichier. PLY.
Ouvrez le. PLY sur MeshLab et faites surfacer l'objet. Terminé!!
Conseillé:
Le préampli à lampes PA1 DIY : construit efficacement avec des composants récupérés : 13 étapes
Le préampli à lampes PA1 DIY : construit efficacement avec des composants récupérés : Il existe de nombreuses ressources sur la construction de préamplis à lampes sur le Web et sur papier, alors j'ai pensé partager quelque chose d'un peu différent. Cette instructable couvre la construction d'un préampli à lampes open source de ma conception et non seulement c'est un u
Comment utiliser des encodeurs industriels avec Arduino : 6 étapes
Comment utiliser des encodeurs industriels avec Arduino : Les encodeurs incrémentaux sont souvent utilisés pour des applications industrielles telles que la robotique ou le suivi de positionnement. Les encodeurs pour applications industrielles sont principalement livrés avec une interface RS422 différentielle. Je montrerai dans ce petit projet comment utiliser un
Comment faire un home cinéma avec des haut-parleurs récupérés : 5 étapes (avec photos)
Comment faire un home cinéma avec des haut-parleurs récupérés : Bonjour les gars, dans ce Instructables, je vais vous expliquer comment j'ai fait un home cinéma simple haute puissance à l'aide de haut-parleurs récupérés. C'est très simple à faire, je vais l'expliquer plus simplement. Pour plus d'informations, visitez Electronics Projects HubLets
Scanner corporel 3D utilisant des caméras Raspberry Pi : 8 étapes (avec photos)
Scanner corporel 3D utilisant des caméras Raspberry Pi : Ce scanner 3D est un projet collaboratif de BuildBrighton Makerspace dans le but de rendre la technologie numérique abordable pour les groupes communautaires. Les scanners sont utilisés dans l'industrie de la mode, pour personnaliser la conception de vêtements, dans l'industrie des jeux pour
Lanceurs de LED rotatifs entraînés par un moteur Stirling (eVoltis Stirlingmachine) : 12 étapes (avec photos)
Rotation LED Throwies Driven by a Stirlingengine (eVoltis Stirlingmachine): Il s'agit d'une machine à air chaud (stirlingengine), construite avec de vieilles pièces d'ordinateur (dissipateur thermique et la tête d'un vieux disque dur). Ce moteur Stirling (et tous les autres également) fonctionne avec une différence de température entre la face inférieure chaude (par exemple, un radiateur avec un