Table des matières:

[WIP] Création d'un Drawbot contrôlé par un brassard Myo : 11 étapes
[WIP] Création d'un Drawbot contrôlé par un brassard Myo : 11 étapes

Vidéo: [WIP] Création d'un Drawbot contrôlé par un brassard Myo : 11 étapes

Vidéo: [WIP] Création d'un Drawbot contrôlé par un brassard Myo : 11 étapes
Vidéo: The Chaos of the Somalian Civil War 2024, Septembre
Anonim
[WIP] Création d'un Drawbot contrôlé par un brassard Myo
[WIP] Création d'un Drawbot contrôlé par un brassard Myo

Bonjour à tous!

Il y a quelques mois, nous avons décidé d'essayer d'aborder l'idée de construire un drawbot open-frame qui n'utilisait qu'une bande Myo pour le contrôler. Lorsque nous avons commencé le projet, nous savions qu'il devrait être divisé en plusieurs phases différentes. Notre première phase principale consistait à essayer de nous faire une idée d'un design à cadre ouvert pour notre bot de dessin. Il s'agit d'une configuration non standard, et nous voulions voir quels étaient les avantages de cette conception.

Deuxièmement, nous savions que la construction de ce prototype ne s'avérerait utile que pour nous-mêmes. Notre conception et notre plan étaient de déplacer notre cadre final dans le métal et, à l'aide d'un arduino, de recevoir notre position de l'accéléromètre et du gyroscope intégrés à la bande Myo. Cette information serait ensuite envoyée aux moteurs et reproduirait le mouvement de l'utilisateur. Nous savions que cela ferait éclater notre deuxième phase en trois aspects principaux:

  1. programmation de Myo aux moteurs, en passant par l'Arduino
  2. conception électrique pour traduire nos données en mouvement
  3. conception mécanique pour créer un cadre de taille raisonnable qui facilitera notre mouvement

Chaque membre de notre équipe se sentait plus à l'aise avec une partie unique de notre processus de conception, nous avons donc décidé de répartir notre travail entre chaque personne. Nous avons également tenu un blog tout au long de notre processus de conception pour suivre notre réflexion au jour le jour, par opposition à un look plus global.

Étape 1: ce que nous avons prévu de faire

Image
Image

Notre objectif était de combiner ces deux produits d'une manière que nous n'avions jamais vue auparavant. Nous avons décidé de créer un relais en direct entre notre brassard Myo et notre propre version d'un design inspiré par AxiDraw de Evil Mad Scientist.

Étape 2: Liste des ingrédients du prototype

2 2 x 4 planches de bois 1 Courroie ou chaîne mesurant >= 65" 4 Clous en bois 3 Engrenages avec dents qui s'adaptent à la courroie ou à la chaîne 4 3 x 8 plaques perforées vex 30 ⅜" Espaceurs en caoutchouc 8 Rondelles de 1" de diamètre 1 1" de diamètre en bois cheville 1' de long 8 vis Vex 1”8 ½” vis Vex 8 vis 2” Vex 8” espaceurs en caoutchouc 48 écrous Vex 1 petite attache zippée

Étape 3: [Prototype] Travail du bois Nos bras et l'intérieur de la voiture

[Prototype] Travail du bois Nos armes et l'intérieur de la voiture
[Prototype] Travail du bois Nos armes et l'intérieur de la voiture

Nous avons attrapé deux 2x4 et les avons coupés à des longueurs égales (33 ¼ )

À l'aide d'une scie à table, nous avons fait une encoche le long de la partie étroite des planches de ¼" de profondeur et ⅛" de large au milieu

Coupez le goujon en 4 morceaux de 2" et percez un trou au milieu du goujon d'environ ¼" de diamètre à l'aide d'une perceuse à colonne

Étape 4: [Prototype] Fabrication de notre voiture

[Prototype] Fabrication de notre voiture
[Prototype] Fabrication de notre voiture
[Prototype] Fabrication de notre voiture
[Prototype] Fabrication de notre voiture
[Prototype] Fabrication de notre voiture
[Prototype] Fabrication de notre voiture

Idéalement, nous utiliserions deux pièces 7x7 d'acier perforé vex, mais tout ce que nous avions à notre disposition était les bandes 2x7, nous les avons donc boulonnées ensemble dans une configuration en "X".

Empilez 5 des entretoises en caoutchouc ⅜ et fixez les coins des plaques vex les uns aux autres

Fixez sans serrer les goujons en bois comme indiqué sur la figure 1 afin qu'ils tournent librement avec environ 5 cm d'espace entre eux. Utilisez l'image pour voir où les engrenages doivent être positionnés à ce stade..

À l'aide des vis vex de ½ ", des entretoises en caoutchouc de ¼" et des rondelles de 1" de diamètre, fixez les rondelles dans une position surélevée comme indiqué sur la figure 1 (nous avons utilisé des engrenages en plastique vert car nous ne pouvions pas trouver les bonnes rondelles) assurez-vous que les rondelles sont capables pour tourner facilement et s'insérer dans les encoches de la planche.

Étape 5: [Prototype] Assembler le tout

[Prototype] Tout assembler
[Prototype] Tout assembler
[Prototype] Tout assembler
[Prototype] Tout assembler
[Prototype] Tout assembler
[Prototype] Tout assembler
[Prototype] Tout assembler
[Prototype] Tout assembler

Placez une planche sur une surface et faites glisser le chariot au milieu de sorte que les rondelles maintiennent le chariot au-dessus de la planche et de chaque côté de la planche clouez les engrenages pour qu'ils tournent librement. Clouez un engrenage à une extrémité de la deuxième planche en vous assurant qu'il est centré et faites-le glisser sur le chariot perpendiculairement à la première planche.

Maintenant, la ceinture doit être bouclée à travers le système comme indiqué, faites très attention à la façon dont les goujons se trouvent à l'extérieur de la ceinture et qu'il n'y a rien au centre du châssis qui pourrait gêner la ceinture pendant qu'elle se déplace.

Maintenant, la ceinture doit être attachée du côté de la planche qui n'a pas d'engrenage. Nous avons utilisé un clou supplémentaire et une attache zippée pour attacher les nôtres. Mais la méthode utilisée n'a pas d'importance tant que la ceinture est ancrée à cet endroit

Étape 6: [Prototype] terminé et en mouvement

Image
Image

Ça devrait être ça, tirez la ceinture dans différentes combinaisons et voyez les différents effets qu'elle a sur le bras !

Étape 7: Traduire notre modèle dans notre conception finie

Traduire notre modèle dans notre conception finie
Traduire notre modèle dans notre conception finie
Traduire notre modèle dans notre conception finie
Traduire notre modèle dans notre conception finie

Une fois notre prototype terminé, nous étions ravis. Aucun d'entre nous n'était sûr du fonctionnement du système avant l'assemblage. Mais, une fois nos pièces réunies, nous avons rapidement découvert ce que nous aimions et comment nous allions l'améliorer lors de la création du design final. Nos principales plaintes avec le système à résoudre étaient:

  1. Escalader

    1. Notre prototype était massif et encombrant, ce qui le rendait susceptible de basculer au bord de nos bras
    2. Le chariot était beaucoup plus grand que nécessaire, et il y avait beaucoup d'espace perdu
    3. Notre ceinture (une bande de roulement de réservoir vex) était beaucoup plus grande que nécessaire, ce qui a introduit un excès d'espace entre les bras
  2. Friction

    1. Nos bandes de roulement vex ne passaient pas facilement sur les rouleaux de cheville en bois à tous les points
    2. Le plastique sur le bois a rendu le chariot peu disposé à bouger dans de nombreux cas
  3. Motorisation

    Nous devions rendre le système compatible

Avec ces choses à l'esprit, nous avons dessiné nos plans pour la conception finale. Nous voulions que le drawbot soit contrôlé avec un Myo via un arduino, et nous voulions rendre le cadre en aluminium et plus petit.

Pour ce faire, nous avons pris un pourcentage de notre prototype original et avons commencé à travailler à partir de cette taille. En utilisant une tôle qui serait usinée pour avoir des canaux suffisamment larges pour le passage d'un roulement blindé, nous aurions une conception légère mais robuste qui aurait une tolérance d'utilisation plus élevée.

Notre prototype nous a également permis, en quelques minutes seulement, de déterminer comment la rotation du moteur affectait la tête de notre drawbot. Cela nous a amené à comprendre que notre conception de contrôle serait plus simple que prévu. En y regardant de plus près, nous avons compris que le mouvement du moteur est additif ! Cela signifie que chaque moteur a un effet souhaité indépendant sur notre mouvement, mais lorsque nous les combinons ensemble, ils commencent à s'annuler.

Par exemple, s'il est considéré comme un plan de coordonnées, le moteur situé à l'extrémité x négatif aura toujours tendance à tirer notre tiroir dans les deuxième et quatrième quadrants. Inversement, le moteur posé sur l'extrémité x positive tendra toujours le tiroir dans le premier et le troisième quadrant. Si nous combinons le mouvement de nos moteurs, cela annulera les portions de direction de ce conflit et amplifiera les portions qui s'accordent.

Étape 8: Codage

Bien que j'aie beaucoup travaillé en C il y a quelques années, je n'avais aucune expérience avec Lua ou C++, et cela signifiait que je devais passer un temps appréciable à parcourir la documentation. Je savais que la tâche générale que j'essaierais d'accomplir était d'obtenir la position de l'utilisateur par intervalles de temps, puis de la transmettre aux moteurs. J'ai décidé de me séparer de la tâche pour mieux digérer les parties dont j'aurais besoin.

1. Obtenir des données de Myo (lua)

Je savais que je devais trouver un moyen de collecter les informations du Myo. C'était la première partie du défi que je voulais aborder. Pour ce faire, je voulais que l'utilisateur calibre sa taille de toile avant de commencer à dessiner. Cela me permettrait d'avoir une limite à partir de laquelle travailler. Je pourrais alors normaliser le programme entre différents utilisateurs en prenant simplement un pourcentage du canevas maximum comme points de données à transmettre. J'ai décidé d'avoir un événement scripté qui ferait une vérification getOrientation toutes les demi-secondes, car cela permettrait aux vérifications de ne jamais effectuer un saut sauvage dont vous auriez besoin de deviner (par exemple, si l'utilisateur se retournait sauvagement et en avant).

Cela a fait le premier barrage routier que j'ai rencontré. J'ai découvert une très grosse limitation de lua, et qu'elle ne me permettrait pas d'attendre avant de continuer le script. La seule façon d'effectuer cette action était de mettre en pause le processeur (ce qui le mettrait en pause globalement, même en maintenant l'horloge système), ou d'utiliser des commandes spécifiques au système d'exploitation. Dans mon exemple de code, j'ai laissé la vérification du système d'exploitation d'origine que j'ai effectuée (commentée). C'était après avoir fait une grande quantité de recherches dans la documentation de lua, et a été fait en vérifiant le formatage du chemin du système. C'est à ce moment-là que j'ai décidé que je devais consulter la documentation des projets qui avaient été publiés auparavant. J'ai tout de suite réalisé combien de temps j'avais perdu et j'ai été immédiatement dirigé vers la variable plate-forme. Avec cela, j'ai pu implémenter des commandes d'attente spécifiques au système d'exploitation presque immédiatement, contrairement aux jours qu'il m'a fallu pour bricoler ma solution précédente.

C'est à cette époque de la conception qu'ont commencé les travaux sur l'aspect électrique, et j'ai suspendu les travaux sur cet aspect du code. L'intention étant d'apprendre comment nos moteurs s'interfacent avec l'arduino.

2. Travailler autour de l'Arduino (C++)

Alors que le travail avec notre maquette devenait de plus en plus complexe, j'ai appris que l'arduino était incapable de faire du multithreading. C'était une grosse clé dans ma conception de code d'origine, et après avoir lu plus sur les limitations présentées avec notre contrôleur, j'ai découvert que j'aurais besoin de programmer la façon dont l'arduino basculerait entre les deux. Cela est devenu le centre de mes efforts à mesure que notre échéance approchait. J'ai dû supprimer de grandes parties de mon script d'origine car elles étaient conçues pour écrire des données dans un fichier de manière synchrone avec le contrôleur de moteur qui lisait le fichier. Cela devait permettre une fonction de mise en file d'attente pour s'assurer que même si l'utilisateur était en avance sur notre tiroir, cela ne ruinerait pas le projet.

J'ai décidé que la fonction de mise en file d'attente devrait être enregistrée, si elle n'est pas implémentée de la même manière qu'auparavant. Pour ce faire, j'ai créé un vecteur de tableaux. Cela m'a permis non seulement de garder l'esprit de ma conception précédente relativement intact, mais cela signifiait également que je n'avais pas à garder une trace de ma place dans le fichier pour la lecture ou l'écriture. Au lieu de cela, il ne me restait plus qu'à ajouter une nouvelle valeur dans mon vecteur si l'utilisateur se déplaçait (les tests préliminaires étaient inférieurs à 1% de la différence de taille de la toile en x et y par rapport à la dernière position enregistrée, n'entraînant aucun enregistrement de données). Je pourrais alors prendre la valeur la plus ancienne de mon vecteur et d'un seul coup, l'envoyer au contrôle moteur, l'écrire dans notre fichier, puis la supprimer de mon vecteur. Cela a nettoyé beaucoup de mes inquiétudes concernant l'exécution d'un flux d'E/S constant.

Étape 9: Électricité

Image
Image
Électrique
Électrique

Alors que j'ai suivi un cours d'électronique dans le passé et que j'ai beaucoup travaillé avec des arduinos. Je n'ai jamais plongé profondément dans le fait que l'arduino reçoive des informations d'une source extérieure (myo), je n'ai que l'expérience de la sortie d'informations via l'arduino. Cependant, j'ai commencé à câbler les moteurs de notre drawbot et à travailler sur le code pour qu'ils puissent fonctionner avec le code myo.

Matériel que j'ai utilisé:

2 x moteurs pas à pas

1 x planche à pain

1 x Arduino (Uno)

2 x CI pilote L293DE

40 x fils de cavalier

2 ventilateurs

1. Connexion des moteurs pas à pas et du ventilateur à la planche à pain

En suivant le schéma de circuit, nous pouvons câbler un moteur pas à pas au pilote sur la planche à pain. Ensuite, en suivant le même schéma, appliquez celui du deuxième pilote et du moteur, cependant, les fils de liaison devront être branchés sur un autre ensemble de broches dans l'arduino (puisque le premier moteur occupe l'espace de 4 autres).

Avertissement/Astuce:

Les pilotes sont très petits et les broches sont très proches les unes des autres. Il serait sage d'espacer les deux conducteurs afin que les fils ne soient pas confus.

Ensuite, c'est de câbler les ventilateurs. C'est assez simple, les ventilateurs dont j'avais à disposition étaient des ventilateurs de processeur informatique de base, qui ont un positif et une masse. Branchez ces deux-là dans leurs broches +/- respectives sur la planche à pain, et inclinez-les chacun vers chaque conducteur. (Nous avons constaté que parce que les moteurs pas à pas reçoivent des rafales d'informations et de commandes sur une longue période de temps, les pilotes ont tendance à surchauffer et à sentir. L'ajout d'un ventilateur pour le refroidir a résolu ce problème).

2. Code Arduino

C'est la partie facile !

Ouvrez l'IDE Arduino, allez dans l'onglet « Fichier » puis passez à l'onglet « exemple » qui descendra encore plus loin et vous montrera un onglet « pas à pas » Ensuite, vous voulez ouvrir « Stepper_OneStepAtATime »

Cela préchargera un exemple de code qui est presque plug-and-play sur le câblage arduino/moteur. Nous devrons faire de petits ajustements car nous utiliserons deux moteurs, que je vais montrer ci-dessous. Vous devrez peut-être également effectuer des ajustements mineurs en fonction des broches que vous avez décidé d'utiliser, car l'IDE Arduino utilise par défaut les broches 8-11.

Le code que j'ai utilisé pour faire bouger les deux moteurs en « synchronisation » est ci-dessous:

//#comprendre

const int étapesParRévolution = 200;

Stepper myStepper1(stepsPerRevolution, 9, 10, 11, 12);

Stepper myStepper2(stepsPerRevolution, 4, 5, 6, 7);

int stepCount = 0;

void setup() { // initialise le port série: Serial.begin(9600); }

boucle vide() {

monpas1.step(1);

Serial.print("steps:");

Serial.println(stepCount);

nombre de pas++;

retard (0,5);

monpas2.step(1); retard (0,5); }

3. Problèmes possibles

Les problèmes que j'ai rencontrés au cours de ce processus n'étaient pas l'utilisation du bon exemple de code, l'utilisation d'un câble de connexion défectueux, l'utilisation du mauvais circuit intégré de pilote.

Assurez-vous que le pilote que vous utilisez est capable de contrôler un moteur

Vérifiez le numéro de série et vérifiez ses spécifications

J'ai rencontré un problème d'avoir un fil de liaison mort, ce qui a fait tourner étrangement mes moteurs

J'ai dû utiliser un multimètre pour vérifier chaque fil

Et vérifiez toujours votre code pour les petites erreurs comme manquer une fin ";" commander

Étape 10: Mécanique

Mécanique
Mécanique
Mécanique
Mécanique
Mécanique
Mécanique
Mécanique
Mécanique

1. Matériel

Pour le modèle de production complet des bras, il est recommandé qu'ils soient fabriqués dans un matériau solide mais léger, nous avons estimé que l'aluminium était un ajustement parfait.

Nous avons utilisé des feuilles d'aluminium de calibre 032 coupées à 9,125 "x 17,5" et tracé le motif à partir du dessin illustré à l'étape précédente.

2. Fabrication

À l'aide de l'ourlet (la machine bleue), nous avons ajouté des ourlets qui font face à des directions opposées de sorte que lorsque la pièce est cassée et pliée, les deux ourlets s'imbriquent pour former une seule pièce complète.

Pour les grands virages, nous avons utilisé le tennismith, en raison de sa haute précision.

Maintenant pour les petits virages, vous allez vouloir utiliser une machine avec un pied plus petit, c'est là qu'une machine comme la roto-die entre en jeu. En raison de son pied plus petit, elle permet de faire des pauses plus petites, malheureusement, la roto-die à notre disposition était encore trop grande pour notre rail et elle était déformée.

** Alternativement, si vous n'avez pas accès à l'équipement ou aux outils appropriés, un substitut peut être fait. **

Dans notre cas, nous avons découpé nos bras dans des rails de panneaux solaires en aluminium à l'aide d'un coupe-plasma et nous avons poncé les extrémités, puis nous les avons boulonnés dos à dos pour créer un système de rails double face. Idéalement, nous voudrions souder les rails ensemble, cependant, sans accès à une station de soudage, nous avons plutôt serré les rails ensemble et percé, puis boulonné ensemble. Mais si cette voie est empruntée, une attention particulière doit être portée à l'utilisation d'un écrou de blocage et d'une rondelle pour s'assurer que la pièce a le moins de flexion possible.

3. La ceinture

Pour les courroies, nous avons utilisé de vieilles courroies d'imprimantes 3D que nous avons pu récupérer.

Les courroies n'étaient pas assez longues au départ, donc en utilisant des tubes thermorétractables, nous avons combiné deux pièces pour en faire une qui serait suffisamment longue.

Les engrenages verts et les chevilles en bois ont été remplacés par des roulements à disque avec des rondelles extra larges utilisées pour empêcher la courroie de glisser.

4. Transport

Et enfin, le chariot était constitué d'une feuille d'aluminium 032 de 5 "x 5" avec des trous percés là où les vis et les rondelles correspondantes sont censées aller. La distance variera en fonction de la largeur de votre rail et du dégagement dont vous disposez sur vos rondelles.

Étape 11: Réflexions

Malheureusement, chaque côté de notre projet s'est heurté à la grande barricade du temps et nous n'avons pas pu terminer notre conception à la date cible. Chaque membre de notre équipe a fini par collaborer dans tous les autres aspects de notre conception au moins dans une certaine mesure, ce qui a entraîné des pertes de temps dans la courbe d'apprentissage. Ceci, associé à la volonté de concevoir un produit avec le moins de ressources extérieures possible (comme nous voulions tous créer nos pièces respectives à partir de zéro), a conduit à une grande quantité de roues réinventées.

Tous ceux qui ont travaillé sur le projet en ont appris davantage sur les autres aspects du projet. Faire en sorte que le logiciel effectue une action spécifique est une chose, puis faire fonctionner le logiciel avec le matériel en est une autre. Je dirais qu'il est important que quiconque travaille sur l'aspect codage de ce projet soit aussi familier que notre codeur de projet.

Dans l'ensemble, nous n'avons pas pu réaliser exactement ce que nous voulions. Cependant, je pense que nous étions sur la bonne voie et nous avons tous découvert et appris de nouveaux concepts que nous pourrons appliquer à de futurs projets.

Conseillé: