Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Robot SCARA | Comment construire votre propre robot basé sur Arduino

Dans ce tutoriel, nous allons apprendre à construire un robot SCARA basé sur Arduino. Je vais vous montrer tout le processus de construction, de la conception du robot au développement de notre propre interface utilisateur graphique pour le contrôler.

Vous pouvez regarder la vidéo suivante ou lire le didacticiel écrit ci-dessous.

Aperçu

Le robot a 4 degrés de liberté et il est entraîné par 4 moteurs pas à pas NEMA 17. De plus, il dispose d'un petit servomoteur pour contrôler l'effecteur terminal ou la pince du robot dans ce cas. Le cerveau de ce robot SCARA est une carte Arduino UNO associée à un shield CNC et à quatre pilotes pas à pas A4988 pour contrôler les moteurs.

En utilisant l'environnement de développement de traitement, j'ai créé une interface utilisateur graphique qui comprend à la fois le contrôle de la cinématique directe et inverse. Avec la cinématique avancée, nous pouvons déplacer manuellement chaque articulation du robot afin d'obtenir la position souhaitée. En utilisant les curseurs sur le côté gauche, nous pouvons définir l'angle de chaque articulation. La position finale de l'effecteur terminal, les valeurs X, Y et Z sont calculées et imprimées sur le côté droit de l'écran.

D'autre part, en utilisant Inverse Kinematics, nous pouvons définir la position souhaitée de l'effecteur final, et le programme calculera automatiquement les angles pour chaque articulation afin que le robot atteigne la position souhaitée.

J'ai en fait conçu le programme de manière à ce que nous puissions utiliser les deux méthodes en même temps, sur le même écran. Les angles des articulations ainsi que les valeurs X, Y et Z de l'effecteur terminal sont connectés et toujours présents à l'écran.

Bien entendu, le robot peut également fonctionner automatiquement. En utilisant le bouton "Enregistrer" du programme, nous pouvons enregistrer chaque mouvement ou position du robot. Ensuite, lorsque nous appuyons sur le bouton "Exécuter", le robot exécutera les mouvements stockés en boucle, du premier au dernier, encore et encore. Nous pouvons également régler la vitesse de déplacement et l'accélération depuis l'interface utilisateur.

Modèle 3D du robot SCARA

Pour commencer, regardons le modèle 3D.

J'ai conçu ce robot SCARA à l'aide de 3DEXPERIENCE SOLIDWORKS, qui est également le sponsor de cette vidéo.

3 3DEXPERIENCE SOLIDWORKS est essentiellement SOLIDWORKS avec des fonctionnalités cloud que nous obtenons via la plate-forme 3DEXPERIENCE. Tout fonctionne via le cloud, de sorte que vous ou n'importe quel membre de votre équipe pouvez avoir accès aux données ou aux modèles à tout moment, de n'importe où dans le monde. La plate-forme 3DEXPERIECE comprend également de nombreuses applications de productivité et de gestion utiles.

Par exemple, le planificateur de projet est un excellent moyen d'organiser vos tâches, de fixer des délais et de suivre vos progrès. Avec l'application 3D Markup, vous pouvez visualiser, explorer et prendre des notes sur les modèles depuis n'importe quel appareil, comme un ordinateur portable, une tablette ou même un smartphone.

Il existe également un modeleur 3D distinct basé sur le cloud appelé SOLIDWORKS xDesign, qui s'exécute dans votre navigateur. Il peut être utilisé conjointement avec Solidworks ou seul et est idéal pour la modélisation, n'importe où, n'importe quand et sur n'importe quel appareil.

Alors, un grand merci à Solidworks pour avoir parrainé un contenu éducatif comme celui-ci. Si vous souhaitez savoir si SOLIDWORKS et la plate-forme 3DEXPERIENCE peuvent fonctionner pour vous, consultez les liens suivants ci-dessous.

Essayez 3DEXPERIENCE gratuitement avec mon lien spécial :www.solidworks.com/HTMTryNow

En savoir plus sur 3DEXPERIENCE SOLIDWORKS : www.solidworks.com/HTMLearnMore

Ok, revenons au modèle et expliquons comment j'ai trouvé ce design. Mon objectif pour le robot était que la plupart des pièces soient imprimées en 3D. Ainsi, tout ce que vous voyez ici peut être imprimé en 3D même sur une imprimante 3D avec un lit d'impression plus petit. Les poulies GT2 sont également imprimables en 3D. J'ai utilisé la conception paramétrique pour les fabriquer, donc si nécessaire, nous pouvons facilement changer leurs tailles. Nous n'avons qu'à changer le nombre de dents, et toutes les dimensions seront automatiquement mises à jour pour que la poulie ait la bonne taille.

Pour le premier joint, nous avons un rapport de réduction de 20:1, réalisé en deux étapes avec ces poulies conçues sur mesure. Les deux courroies GT2 que j'utilise ici sont en boucle fermée avec une longueur de 200 mm et 300 mm. Les articulations du robot sont composées de deux paliers de butée et d'un palier radial.

Pour le deuxième joint, nous avons un rapport de réduction de 16:1, obtenu de la même manière, et le troisième joint a un rapport de réduction de 4:1 avec une seule étape de réduction. Les joints sont creux, nous pouvons donc les utiliser pour faire passer les fils des moteurs et des micro-interrupteurs. Pour chacune des courroies, il y a des fentes sur lesquelles on peut fixer des poulies folles pour les tendre.

Le préhenseur du robot est entraîné par un servomoteur MG996R et nous pouvons facilement changer les extrémités du préhenseur pour obtenir différentes tailles de préhension. L'axe Z du robot est entraîné par une vis mère de 8 mm, tandis que l'ensemble du bras glisse sur quatre tiges lisses de 10 mm et des roulements à billes linéaires. La hauteur du robot dépend simplement de la longueur des tiges lisses, qui dans ce cas sont de 40 cm. La vis mère doit être plus courte de 2 cm pour s'adapter à cette configuration, ou sinon, le moteur Z peut être relevé de 2 cm à l'aide d'écrous d'espacement.

Vous pouvez trouver et télécharger ce modèle 3D, ainsi que l'explorer dans votre navigateur sur Thangs :

Téléchargez le modèle 3D d'assemblage sur Thangs.

Fichiers STL pour l'impression 3D :

Impression 3D des pièces du robot

Très bien, nous pouvons donc passer à l'impression 3D des pièces. J'ai utilisé mon imprimante 3D Creality CR-10 pour imprimer toutes les pièces, ce qui est vraiment une excellente imprimante 3D à un prix abordable. Comme je l'ai mentionné, les pièces sont conçues pour s'adapter également à une imprimante 3D plus petite, par exemple l'Ender3.

Pour la plupart des pièces, j'ai utilisé du matériau PLA+, le bleu, ainsi que du PLA normal pour les poulies et la pince. Il m'a fallu environ 120 heures pour imprimer toutes les pièces à une vitesse d'impression de 60 mm/s. La base était la plus grande partie à imprimer, ce qui a pris environ 32 heures. Cependant, si nous augmentons la vitesse d'impression, nous pouvons certainement imprimer les pièces plus rapidement.

Voir également : Meilleures imprimantes 3D pour les débutants et les créateurs [Mise à jour 2021]

Voici toutes les pièces imprimées en 3D.

Juste une note rapide ici, que je les ai toutes imprimées avec une expansion horizontale activée de -0,1 mm dans le logiciel de découpage. Cela permet aux pièces d'avoir des dimensions plus précises et de mieux s'adapter aux autres pièces mécaniques comme les roulements, les tiges et les boulons.

Assemblage du robot

Voici une liste des composants nécessaires pour assembler ce robot SCARA basé sur Arduino. La liste des composants électroniques se trouve ci-dessous dans la section schéma de circuit de l'article.

  • 4x Arbre de tige lisse - 10mm 400mm……… AmazonBanggood /AliExpress
  • 1x vis mère – 8 mm 400 mm  ………………… AmazonBanggood /AliExpress
  • 4x Roulements linéaires 10mm …………………..……. AmazonBanggood /AliExpress
  • 1x roulement à billes 40x60x13mm   …..… Amazon /AliExpress
  • 2x roulement à billes 35x52x12mm   …..… Amazon /AliExpress
  • 5x Roulement à billes radial 8x22x7mm ……………. AmazonBanggood /AliExpress
  • Diverses longueurs de boulons et écrous M3, M4 et M5

Voici les tailles de boulons nécessaires pour ce projet :

Nous commençons l'assemblage avec la base. Ici, nous insérons d'abord un roulement à billes radial avec un diamètre intérieur de 35 mm et un diamètre extérieur de 47 mm.

Ensuite, il y a le premier palier de butée qui a un diamètre intérieur de 40 mm et un diamètre extérieur de 60 mm. Ce roulement se placera entre la poulie et la base.

De l'autre côté de la base, nous utilisons un autre palier de butée de la même taille avec un coupleur de joint.

Ensuite, nous pouvons coupler la poulie et la partie supérieure à l'aide de quatre boulons M4 de 55 mm de longueur. Nous devons utiliser des écrous autobloquants ici et les serrer de manière appropriée afin que le joint soit solide tout en pouvant tourner librement.

Ensuite, nous devons installer la poulie du milieu. Cette poulie est associée à la poulie articulée avec une courroie GT2 de 300 mm. Pour installer cette poulie, nous utilisons deux roulements à billes 608, l'un sur le dessus et l'autre sur le côté inférieur de la base. Ensuite, à l'aide d'un boulon M8 de 45 mm, d'une rondelle et d'un écrou autobloquant, nous pouvons fixer la poulie en place.

Ensuite, nous devons installer le moteur pas à pas pour cette articulation. Le stepper sera associé à la poulie centrale avec une courroie de 200 mm. Pour le fixer à la base, nous avons besoin de quatre boulons M3.

Avant de serrer les boulons, nous devons étirer la ceinture autant que possible. Juste une note rapide ici que j'ai en fait remplacé le boulon M8 pour la poulie du milieu avec sa tête en bas afin qu'il puisse s'adapter à la base.

À ce stade, nous devons vérifier si les ceintures sont suffisamment serrées. Sinon, nous pouvons utiliser des poulies folles pour mieux les serrer. Ici, j'utilise un boulon M5 de 35 mm et des écrous pour fabriquer la poulie de serrage.

Il peut être attaché sur les fentes des deux côtés de la ceinture et nous pouvons donc serrer la ceinture autant que nous le voulons. J'ai fini par serrer la ceinture des deux côtés. Avec cela, le premier joint est terminé.

Je suis passé à l'installation du micro-interrupteur pour ce joint. Avant de le fixer en place, j'ai déjà soudé les fils dessus, car c'est un peu serré ici pour le faire après. Nous avons besoin de boulons M3 de 20 mm et d'un écrou pour fixer le micro-interrupteur en place.

Le coupleur de joint passe si près de l'interrupteur que j'ai fini par n'utiliser qu'un seul boulon pour fixer l'interrupteur. Sur l'autre trou, j'ai juste inséré un boulon plus court et je l'ai collé sur le côté inférieur. De cette façon, le commutateur est suffisamment sécurisé et peut fonctionner correctement.

Ok, alors nous pouvons commencer à assembler l'axe Z. Tout d'abord, au-dessus du coupleur de joint, nous devons fixer la partie de la plaque inférieure de l'axe Z.

En plus, nous pouvons fixer les quatre pinces pour les tiges lisses. Ensuite, nous pouvons insérer les tiges lisses en place. Ils doivent être bien ajustés et descendre jusqu'à la partie du coupleur de joint. Nous pouvons ensuite serrer les tiges avec les pinces avec des boulons et des écrous M4.

À ce stade, nous devons insérer le roulement de la vis mère. Pour terminer cette section, nous pouvons simplement glisser une simple couverture qui cachera tout et donnera un aspect plus propre au robot.

Ensuite, nous pouvons passer à l'assemblage du premier bras du robot. Le bras sera composé de deux parties boulonnées ensemble. La première partie est celle où nous devons installer les roulements linéaires qui glisseront à travers les tiges lisses. Les insérer en place peut être un peu difficile, car ils sont assez serrés.

En fait, cela dépend de la précision avec laquelle votre imprimante peut imprimer les pièces. Par conséquent, je suggère d'utiliser la fonction d'expansion horizontale lors de l'impression des pièces et de l'ajuster en fonction de votre imprimante. Dans mon cas, je n'ai pas pu installer deux des roulements pour descendre complètement, mais ce n'est pas grave.

Ok, alors maintenant nous pouvons associer les deux parties du bras ensemble. Pour cela, nous utiliserons quatre boulons M5 de 25 mm.

Ensuite, nous pouvons installer le deuxième moteur pas à pas. Ici, je vais utiliser une poulie GT2 imprimée en 3D avec 20 dents. J'ai fabriqué cette poulie en utilisant la conception paramétrique que j'ai mentionnée plus tôt et cela fonctionne très bien. Ici, nous devons également fixer l'écrou de la vis mère en place.

Ensuite, nous pouvons installer les courroies et les poulies pour la deuxième articulation. Ici, nous avons besoin d'une courroie de 400 mm et d'une autre de 300 mm de longueur. La procédure pour les installer est à peu près la même que celle expliquée pour le premier joint.

Ici, pour le deuxième joint et le troisième, nous utilisons en fait des roulements plus petits par rapport au premier. Le roulement à billes radial a un diamètre intérieur de 30 mm et un diamètre extérieur de 42 mm, et le roulement de butée a un diamètre intérieur de 35 mm et un diamètre extérieur de 52 mm.

Avant d'installer le deuxième coupleur de joint, nous devons insérer six boulons M4 de 20 mm dans les fentes hexagonales.

Ils serviront à attacher le deuxième bras à l'articulation. Si nécessaire, pour tendre les courroies, nous pouvons utiliser la même méthode que celle expliquée précédemment avec les poulies folles. Enfin, j'ai fixé le deuxième micro-interrupteur en place et l'assemblage du bras numéro un a été terminé.

J'ai continué en attachant le deuxième bras au coupleur de joint. Ici, nous utilisons ces boulons dans le coupleur de joint que nous avons installé précédemment, pour fixer la partie supérieure du deuxième bras.

À ce stade, je voulais tester le jeu des articulations. Bien sûr, je m'attendais à un jeu dû aux courroies, mais il y avait en fait beaucoup plus de jeu entre deux parties des articulations. J'ai remarqué que le problème était que les trous où vont les boulons sont légèrement plus grands que les boulons eux-mêmes. Afin de résoudre le problème, nous avons besoin d'un ajustement plus serré entre les boulons et les trous.

Ainsi, dans mon cas, j'ai élargi les trous à l'aide d'une perceuse de 4,5 mm et j'ai utilisé des boulons M5, au lieu des boulons M4, pour fixer les deux parties du joint ensemble. Cependant, j'ai mis à jour le modèle 3D afin que les trous soient de 3,5 mm et que vous puissiez utiliser les boulons M4 pour assembler ces deux pièces. Je suis également retourné au premier joint et j'ai fait la même chose. Maintenant, le jeu dans les articulations a presque disparu, à l'exception du petit jeu des courroies.

Très bien, alors maintenant nous pouvons continuer avec l'assemblage du deuxième bras. Ici, nous devons d'abord installer le moteur pas à pas pour la troisième articulation.

J'utilise un moteur pas à pas plus petit dans ce cas pour que le bras soit un peu plus léger. Pourtant, c'est un moteur pas à pas NEMA 17 mais avec une longueur plus courte de 24 cm.

Encore une fois, nous avons la même procédure pour installer les courroies et la poulie pour le troisième joint, sauf qu'ici nous n'utilisons qu'une seule étape de réduction avec une courroie de 400 mm. Ensuite, avant de fixer cette partie inférieure du bras à la partie supérieure, nous devons connecter le moteur et le micro-interrupteur et passer leurs fils à travers la deuxième articulation.

À ce stade, nous devons également insérer les fils pour l'effecteur terminal. Dans mon cas, j'ai inséré un câble à 4 fils d'un moteur pas à pas que j'utiliserai pour entraîner le servomoteur de ma pince qui nécessite 3 fils.

Ensuite, nous devons insérer des écrous M4 dans les fentes du bras supérieur qui serviront à y fixer la partie inférieure.

Juste avant de les fusionner, nous devons passer les fils sous ces crochets afin qu'ils restent à l'écart des pièces mobiles.

Les fils sortant du deuxième joint peuvent en fait se coincer dans les écrous de la poulie, j'ai donc fabriqué un simple support de fil pour maintenir les fils éloignés des écrous.

Il faut faire passer les fils d'un côté du bras pour éviter tout contact avec les pièces mobiles. Enfin, nous pouvons insérer le couvercle du premier bras.

Le couvercle est fixé au bras avec un joint encliquetable. Avec cela, l'assemblage des bras du robot est terminé.

Ensuite, nous pouvons insérer tout cet assemblage dans les tiges de l'axe Z.

Ensuite, nous devons préparer la plaque supérieure de l'axe Z qui tiendra les extrémités supérieures des tiges. Ici, nous pouvons d'abord installer le micro-interrupteur pour l'axe Z et fixer les pinces à la plaque.

Avant de mettre la plaque supérieure en place, j'ai d'abord inséré un simple couvercle comme celui ci-dessous, pour cacher les pinces, les boulons et le micro-interrupteur. Ensuite, nous pouvons insérer et serrer la plaque supérieure aux tiges à l'aide des pinces.

Ensuite, nous devons insérer la vis mère en place.

Celui que j'avais était un peu plus long, je l'ai donc coupé à 38 cm à l'aide d'une scie à métaux. Ensuite, nous pouvons fixer le quatrième moteur pas à pas en place. Ici, nous devons utiliser un coupleur d'arbre de 5 mm à 8 mm pour connecter le moteur à la vis mère.

Enfin, nous pouvons faire passer les fils à travers le couvercle et le fixer à la plaque supérieure à l'aide de deux boulons.

Ok donc, ensuite, nous pouvons faire de la gestion des câbles. J'ai utilisé des manchons de câble pour assembler les fils et nettoyer le désordre. J'ai également utilisé des attaches à glissière à cette fin.

Avant de mettre les fils dans les manchons de câble, il est conseillé de marquer chacun d'eux afin de ne rien connecter de mal.

Il ne reste plus qu'à fabriquer l'effecteur final du robot. Nous pouvons en fait fabriquer et fixer n'importe quel type d'effecteur final au robot. J'ai choisi de faire une pince simple qui est entraînée par un servomoteur MG996R. Le préhenseur repose sur deux tiges de 6mm sur lesquelles coulissent les deux côtés.

Les deux côtés coulissants sont reliés au servo avec un palonnier, des maillons imprimés en 3D et des boulons et écrous M3. J'ai utilisé des boulons et des écrous M3 pour l'ensemble de la pince. Vous pouvez en fait trouver une liste complète des boulons et écrous requis pour ce projet sur l'article du site Web. L'espace pour fixer les boulons et les écrous est assez serré, vous avez donc besoin de nerfs pour assembler certaines de ces pièces.

Cependant, ce qui est bien avec cette conception, c'est que nous pouvons facilement changer les extrémités de la pince. Ils peuvent être plus larges ou plus étroits ou avoir une forme spécifique. Nous pouvons fixer la pince au bras du robot à l'aide de boulons et d'écrous M4.

Enfin, nous pouvons connecter le servomoteur aux fils que nous avons installés précédemment.

Et voilà, notre bras robot SCARA est complètement assemblé. Il ne reste plus qu'à connecter les composants électroniques de ce projet.

Schéma du circuit du robot SCARA

Nous allons donc utiliser une carte Arduino UNO en combinaison avec un shield CNC et quatre variateurs pas à pas A4988.

Bien que ce soit un robot et que cela semble plus compliqué, c'est toute l'électronique dont nous avons besoin pour ce projet. Il convient de noter qu'au lieu d'Arduino UNO, nous pourrions également utiliser un Arduino MEGA en combinaison avec une carte contrôleur d'imprimante 3D RAMPS.

Néanmoins, j'ai imprimé en 3D un boîtier pour l'Arduino UNO qui peut être facilement attaché à la base du robot. J'utiliserai la résolution d'un quart de pas pour piloter les steppers, j'ai donc placé des cavaliers dans les broches appropriées. Nous pouvons maintenant connecter les moteurs pas à pas et les micro-interrupteurs au blindage CNC.

Voici le schéma de circuit de ce robot SCARA et comment tout doit être connecté.

Vous pouvez obtenir les composants nécessaires à ce projet à partir des liens ci-dessous :

  • Moteur pas à pas – NEMA 17……………… 
  • Pilote pas à pas A4988…………………..… 
  • Bouclier CNC Arduino ………………………. AmazonBanggood /AliExpress
  • Arduino Uno………………………………..… 
  • Servomoteur MG996R………………….….
  • Interrupteur de fin de course …………………………………. AmazonBanggood /AliExpress
  • Alimentation CC …………………………. Amazon  / Bonjour /AliExpress

Pour alimenter le robot, nous avons besoin d'une alimentation 12V capable de fournir un minimum de 4A, mais je suggérerais une alimentation 12V 6A. Bien sûr, cela dépend de la façon dont la limitation actuelle du pilote pas à pas est définie, et je suggérerais de la définir au niveau le plus bas possible.

À la fin, j'ai serré tous les fils dans le boîtier, tout en essayant de laisser les dissipateurs de chaleur des disques libres, et j'y ai ajouté le couvercle.

Finir l'assemblage

Le robot SCARA est maintenant terminé, et ce que nous devons faire maintenant, c'est fixer la base à quelque chose. Pour cela, j'utiliserai un morceau de bois de 20 mm. Au bas de la base du robot, nous avons 12 trous disponibles pour le fixer. J'ai donc imprimé un dessin de la base du robot et je l'ai utilisé pour faire les trous dans le bois.

En bas, je les ai fraisés car j'utiliserai des boulons à tête plate pour qu'ils soient en contact avec la surface du bois. J'ai inséré des écrous M4 dans les fentes de la base, puis j'ai fixé la base en bois à la base du robot.

Idéalement, pour fixer le robot en place, nous pourrions le boulonner à la table ou j'utiliserais simplement des pinces à cet effet.

Voilà, notre robot SCARA est maintenant complètement terminé. Ce qu'il reste dans cette vidéo, c'est de voir comment fonctionne le robot.

Voir aussi : Bras robotique Arduino DIY avec contrôle par smartphone

Comment fonctionne le robot SCARA

Il existe deux méthodes pour contrôler les robots en termes de positionnement et d'orientation, et cela utilise la cinématique avant ou inverse.

La cinématique avant est utilisée lorsque nous devons trouver la position et l'orientation de l'effecteur terminal à partir des angles d'articulation donnés.

D'autre part, la cinématique inverse est utilisée lorsque nous devons trouver les angles articulaires pour une position donnée de l'effecteur. Cette méthode a plus de sens en robotique car la plupart du temps, nous voulons que le robot positionne son outil à un emplacement particulier ou à des coordonnées X, Y et Z particulières.

Avec la cinématique inverse, nous pouvons calculer les angles des articulations en fonction de coordonnées données.

Les équations que j'utiliserai pour la cinématique directe et inverse proviennent de règles et de formules de trigonométrie.

Programmation du robot SCARA – Arduino et code de traitement

Au bas de l'article, vous trouverez à la fois les codes Arduino et de traitement.

Voici à quoi ressemblent les équations dans un code, écrit dans l'environnement de développement Processing.

// FORWARD KINEMATICS
void forwardKinematics() {
  float theta1F = theta1 * PI / 180;   // degrees to radians
  float theta2F = theta2 * PI / 180;
  xP = round(L1 * cos(theta1F) + L2 * cos(theta1F + theta2F));
  yP = round(L1 * sin(theta1F) + L2 * sin(theta1F + theta2F));
}Code language: Arduino (arduino)

Ainsi, avec la cinématique directe, nous calculons la valeur X et Y de l'effecteur terminal, en fonction des angles d'articulation définis des deux bras du robot, theta1 et theta2, ainsi que de leurs longueurs L1 et L2.

D'autre part, avec la cinématique inverse, nous calculons les angles des articulations, theta2 et theta1, en fonction de la position donnée ou des coordonnées X et Y.

/ INVERSE KINEMATICS
void inverseKinematics(float x, float y) {
  theta2 = acos((sq(x) + sq(y) - sq(L1) - sq(L2)) / (2 * L1 * L2));
  if (x < 0 & y < 0) {
    theta2 = (-1) * theta2;
  }
  
  theta1 = atan(x / y) - atan((L2 * sin(theta2)) / (L1 + L2 * cos(theta2)));
  
  theta2 = (-1) * theta2 * 180 / PI;
  theta1 = theta1 * 180 / PI;

 // Angles adjustment depending in which quadrant the final tool coordinate x,y is
  if (x >= 0 & y >= 0) {       // 1st quadrant
    theta1 = 90 - theta1;
  }
  if (x < 0 & y > 0) {       // 2nd quadrant
    theta1 = 90 - theta1;
  }
  if (x < 0 & y < 0) {       // 3d quadrant
    theta1 = 270 - theta1;
    phi = 270 - theta1 - theta2;
    phi = (-1) * phi;
  }
  if (x > 0 & y < 0) {       // 4th quadrant
    theta1 = -90 - theta1;
  }
  if (x < 0 & y == 0) {
    theta1 = 270 + theta1;
  }
  
  // Calculate "phi" angle so gripper is parallel to the X axis
  phi = 90 + theta1 + theta2;
  phi = (-1) * phi;

  // Angle adjustment depending in which quadrant the final tool coordinate x,y is
  if (x < 0 & y < 0) {       // 3d quadrant
    phi = 270 - theta1 - theta2;
  }
  if (abs(phi) > 165) {
    phi = 180 + phi;
  }

  theta1=round(theta1);
  theta2=round(theta2);
  phi=round(phi);
  
  cp5.getController("j1Slider").setValue(theta1);
  cp5.getController("j2Slider").setValue(theta2);
  cp5.getController("j3Slider").setValue(phi);
  cp5.getController("zSlider").setValue(zP);
}Code language: Arduino (arduino)

Selon le quadrant dans lequel la position est définie, nous apportons quelques ajustements aux angles des articulations avec ces instructions « si ». Pour cette configuration du robot, nous calculons en fait une cinématique inverse avec seulement deux liaisons. Le troisième angle que j'appelle "phi" est utilisé pour définir l'orientation de la pince.

L'interface utilisateur graphique est réalisée à l'aide de la bibliothèque controlP5 pour l'IDE de traitement. Avec cette bibliothèque, nous pouvons facilement créer des boutons, des curseurs, des champs de texte, etc.

Par exemple, nous utilisons les curseurs sur le côté gauche pour contrôler les angles des articulations, et en utilisant les champs de texte, nous pouvons entrer la position où nous voulons que notre robot aille. À chaque action que nous effectuons ici avec le programme, nous envoyons des données à la carte Arduino via le port série.

if (gripperValuePrevious != gripperValue) {
    if (activeIK == false) {     // Check whether the inverseKinematics mode is active, Executre Forward kinematics only if inverseKinematics mode is off or false
      gripperAdd = round(cp5.getController("gripperValue").getValue());
      gripperValue=gripperAdd+50;
      updateData();
      println(data);
      myPort.write(data);
    }
  }Code language: Arduino (arduino)

Ces données incluent les angles d'articulation, la valeur de la pince, les valeurs de vitesse et d'accélération, et des indicateurs pour savoir si nous avons cliqué sur les boutons enregistrer ou exécuter.

public void updateData() {
  data = str(saveStatus)
    +","+str(runStatus)
    +","+str(round(cp5.getController("j1Slider").getValue())) 
    +","+str(round(cp5.getController("j2Slider").getValue()))
    +","+str(round(cp5.getController("j3Slider").getValue()))
    +","+str(round(cp5.getController("zSlider").getValue()))
    +","+str(gripperValue)
    +","+str(speedSlider)
    +","+str(accelerationSlider);
}Code language: Arduino (arduino)

Toutes ces données se présentent sous la forme d'une longue chaîne sur l'Arduino. Donc, ici, nous devons d'abord extraire les données de cette chaîne et les placer dans des variables distinctes.

if (Serial.available()) {
    content = Serial.readString(); // Read the incomding data from Processing
    // Extract the data from the string and put into separate integer variables (data[] array)
    for (int i = 0; i < 10; i++) {
      int index = content.indexOf(","); // locate the first ","
      data[i] = atol(content.substring(0, index).c_str()); //Extract the number from start to the ","
      content = content.substring(index + 1); //Remove the number from the string
    }
    /*
     data[0] - SAVE button status
     data[1] - RUN button status
     data[2] - Joint 1 angle
     data[3] - Joint 2 angle
     data[4] - Joint 3 angle
     data[5] - Z position
     data[6] - Gripper value
     data[7] - Speed value
     data[8] - Acceleration value
    */Code language: Arduino (arduino)

Maintenant, avec ces variables, nous pouvons prendre des mesures avec le robot. Par exemple, si nous appuyons sur le bouton ENREGISTRER, nous stockons les valeurs actuelles des angles d'articulation dans un tableau séparé.

// If SAVE button is pressed, store the data into the appropriate arrays
    if (data[0] == 1) {
      theta1Array[positionsCounter] = data[2] * theta1AngleToSteps; //store the values in steps = angles * angleToSteps variable
      theta2Array[positionsCounter] = data[3] * theta2AngleToSteps;
      phiArray[positionsCounter] = data[4] * phiAngleToSteps;
      zArray[positionsCounter] = data[5] * zDistanceToSteps;
      gripperArray[positionsCounter] = data[6];
      positionsCounter++;
    }Code language: Arduino (arduino)

Si nous cliquons sur le bouton RUN, nous exécutons les étapes stockées et ainsi de suite.

Pour contrôler les moteurs pas à pas, j'ai utilisé la bibliothèque AccelStepper. Bien qu'il s'agisse d'une excellente bibliothèque pour contrôler plusieurs steppers en même temps, elle présente certaines limites lorsqu'il s'agit de contrôler un robot comme celui-ci. Lors du contrôle de plusieurs steppers, la bibliothèque ne peut pas implémenter l'accélération et la décélération, qui sont importantes pour un fonctionnement plus fluide du robot.

stepper1.moveTo(stepper1Position);
  stepper2.moveTo(stepper2Position);
  stepper3.moveTo(stepper3Position);
  stepper4.moveTo(stepper4Position);

  while (stepper1.currentPosition() != stepper1Position || stepper2.currentPosition() != stepper2Position || stepper3.currentPosition() != stepper3Position || stepper4.currentPosition() != stepper4Position) {
    stepper1.run();
    stepper2.run();
    stepper3.run();
    stepper4.run();
  }Code language: Arduino (arduino)

I still managed to implement acceleration and deceleration with the library, but they are not as smooth as I wanted to be.

Here are full Arduino and Processing codes for this Arduino SCARA robot project:

Wrap up

So finally, once we upload the code to the Arduino, we can run the processing program, connect the power and the scara robot will start moving to its home position.

From there on, we can do whatever we want the it. We can play around manually or set it to work automatically. Of course, we can attach any kind of end-effector and make cool stuff with it. For example, we can even attach a 3D printer hot end to the robot and so make the robot a 3D printer, or attach a laser head and make it a laser cutter. I do plan try these two ideas, so make sure you subscribe to my channel so you don’t miss them in some of my future videos.

Before this video ends, I would like to give you few more notes about this project. I found the robot to be not as rigid as I expected.

I guess the problem is that almost the entire SCARA robot, the Z-axis and the arms are supported only by the first joint. The whole weight and the inertial forces generated when moving, can make quite a stress to base where the first joint is located, and as it’s just a plastic it tends to bend a little bit. Also, these belts are not backlash free so we reduce the robot rigidity with that too. However, I think the overall project is good enough so you to learn how SCARA robots work, and gives you the courage to build one for yourself.

N'hésitez pas à poser des questions dans la section des commentaires ci-dessous et à consulter ma collection de projets Arduino.


Processus de fabrication

  1. Piratage du Lego EV3 :créez votre propre capteur d'objets « yeux »
  2. Créez votre robot de streaming vidéo contrôlé par Internet avec Arduino et Raspberry Pi
  3. Livre blanc :Comment trouver le potentiel de votre robot
  4. Comment construire Sauron le seigneur des robots
  5. Comment créer un moniteur d'énergie et un enregistreur de données Arduino
  6. Comment pirater des télécommandes infrarouges
  7. Guide ultime :Comment choisir un bon robot SCARA
  8. Littlearm 2C :Construire un bras de robot Arduino imprimé en 3D
  9. Comment créer votre feuille de route d'automatisation en 7 étapes