Table des matières:

Robot de sélection et de placement de base Arduino : 8 étapes
Robot de sélection et de placement de base Arduino : 8 étapes

Vidéo: Robot de sélection et de placement de base Arduino : 8 étapes

Vidéo: Robot de sélection et de placement de base Arduino : 8 étapes
Vidéo: ARDUINO #8 : Programmation [tuto en français] 2024, Juillet
Anonim
Robot de sélection et de placement de base Arduino
Robot de sélection et de placement de base Arduino
Robot de sélection et de placement de base Arduino
Robot de sélection et de placement de base Arduino
Robot de sélection et de placement de base Arduino
Robot de sélection et de placement de base Arduino

J'ai fabriqué un bras robotique industriel très bon marché (moins de 1000 dollars) pour permettre aux étudiants de pirater la robotique à plus grande échelle et pour permettre aux petites productions locales d'utiliser des robots dans leurs processus sans se ruiner. C'est facile à construire et à rendre le groupe d'âge des personnes de 15 à 50 ans.

Étape 1: Exigence des composants

Exigences de composants
Exigences de composants
Exigences de composants
Exigences de composants
Exigences de composants
Exigences de composants
Exigences de composants
Exigences de composants

1. Arduino + Shield + Broches + Câbles

2. Contrôleur de moteur: dm860A (Ebay)

3. Moteur pas à pas: 34hs5435c-37b2 (Ebay)

4. Boulons M8x45+60+70 et boulons M8.

5. Contreplaqué de 12 mm.

6. Nylon de 5 mm.

7. Rondelles aveugles 8mm.

8. Vis à bois 4.5x40mm.

9. Comptoir M3 coulé, 10. Alimentation 12v

11. pilote de servomoteur arduino

Étape 2: Télécharger l'interface graphique

zapmaker.org/projects/grbl-controller-3-0/

github.com/grbl/grbl/wiki/Using-Grbl

Étape 3: Connexion

Lien
Lien
Lien
Lien
Lien
Lien

Connectez les fils qui sont donnés dans l'image est une meilleure compréhension pour vous.

nous devons connecter le pilote du moteur à Arduino et à d'autres connecteurs requis selon votre robot.

Étape 4: Téléchargez le micrologiciel et vérifiez le résultat du code dans le tableau de bord Arduino

Installation du firmware sur Arduino - GRBL:

github.com/grbl/grbl/wiki/Compiling-Grbl

Remarque: vous pouvez rencontrer un conflit lors de la compilation dans Arduino. Supprimez toutes les autres bibliothèques de votre dossier de bibliothèque (../documents/Arduino/libraries).

Configuration du micrologiciel

Réglez l'activation sur un délai d'expiration plus récent. Utilisez une connexion série et écrivez:

$1=255

Définir le référencement:

$22=1

N'oubliez pas de régler la série sur baud: 115200

Codes G utiles

Définir le point zéro pour le robot:

G10 L2 Xnnn Ynnn Znnn

Utiliser le point zéro:

G54

Initialisation typique pour centrer le robot:

G10 L2 X1.5 Y1.2 Z1.1

G54

Déplacez le robot en position rapide:

G0 Xnnn Ynnn Znnn

Exemple:

G0 X10.0 Y3.1 Z4.2 (retour)

Déplacez le robot vers une position à une vitesse spécifique:

G1 Xnnn Ynnn Znnn Fnnn

G1 X11 Y3 Z4 F300 (retour)

F doit être compris entre 10 (slooooow) et 600 (rapide)

Unités par défaut pour X, Y et Z

Lors de l'utilisation des paramètres de pas/unités par défaut (250 pas/unité) pour GRBL et

Entraînement pas à pas configuré pour 800 pas/tour, les unités suivantes s'appliquent à tous les axes:

+- 32 unités = +- 180 degrés

Exemple de code de traitement:

Ce code peut communiquer directement avec l'Arduino GRBL.

github.com/damellis/gctrl

N'oubliez pas de régler la série sur baud: 115200

Code uoload dans ardunio

importer java.awt.event. KeyEvent;

importer javax.swing. JOptionPane;

import processing.serial.*;

Port série = nul;

// sélectionnez et modifiez la ligne appropriée pour votre système d'exploitation

// laissez null pour utiliser le port interactif (appuyez sur 'p' dans le programme)

Chaîne nom de port = null;

//Chaîne nom de port = Serial.list()[0]; // Mac OS X

//Chaîne nom de port = "/dev/ttyUSB0"; //Linux

//Chaîne nom de port = "COM6"; // Les fenêtres

flux booléen = faux;

vitesse flottante = 0,001;

String gcode;

entier je = 0;

void openSerialPort()

{

if (nom de port == null) return;

if (port != null) port.stop();

port = new Serial(this, portname, 115200);

port.bufferUntil('\n');

}

void selectSerialPort()

{

Résultat de la chaîne = (chaîne) JOptionPane.showInputDialog (ceci, "Sélectionnez le port série qui correspond à votre carte Arduino.", "Sélectionner le port série", JOptionPane. PLAIN_MESSAGE, nul, Serial.list(), 0);

if (résultat != nul) {

nom de port = résultat;

openSerialPort();

}

}

void setup()

{

taille (500, 250);

openSerialPort();

}

tirage nul()

{

arrière-plan(0);

remplir(255);

entier y = 24, dy = 12;

text("INSTRUCTIONS", 12, y); y += dy;

text("p: sélectionnez le port série", 12, y); y += dy;

text("1: régler la vitesse sur 0,001 pouce (1 mil) par jogging", 12, y); y += dy;

text("2: régler la vitesse sur 0,010 pouce (10 mil) par jogging", 12, y); y += dy;

text("3: régler la vitesse sur 0,100 pouce (100 mil) par jogging", 12, y); y += dy;

text("touches fléchées: jog dans le plan x-y", 12, y); y += dy;

text("page up & page down: jogging sur l'axe z", 12, y); y += dy;

text("$: afficher les paramètres grbl", 12, y); y+= dy;

text("h: rentrer à la maison", 12, y); y += dy;

text("0: zéro machine (réglé à la maison à l'emplacement actuel)", 12, y); y += dy;

text("g: diffuser un fichier g-code", 12, y); y += dy;

text("x: arrêter la diffusion du g-code (ceci n'est PAS immédiat)", 12, y); y += dy;

y = hauteur - dy;

text("vitesse de jogging actuelle: " + vitesse + " pouces par pas", 12, y); y -= dy;

text("port série actuel: " + nom de port, 12, y); y -= dy;

}

touche videAppuyée ()

{

si (touche == '1') vitesse = 0,001;

si (touche == '2') vitesse = 0,01;

si (touche == '3') vitesse = 0,1;

si (!streaming) {

if (keyCode == LEFT) port.write("G91\nG20\nG00 X-" + vitesse + " Y0.000 Z0.000\n");

if (keyCode == RIGHT) port.write("G91\nG20\nG00 X" + vitesse + " Y0.000 Z0.000\n");

if (keyCode == UP) port.write("G91\nG20\nG00 X0.000 Y" + vitesse + " Z0.000\n");

if (keyCode == DOWN) port.write("G91\nG20\nG00 X0.000 Y-" + vitesse + " Z0.000\n");

if (keyCode == KeyEvent. VK_PAGE_UP) port.write("G91\nG20\nG00 X0.000 Y0.000 Z" + vitesse + "\n");

if (keyCode == KeyEvent. VK_PAGE_DOWN) port.write("G91\nG20\nG00 X0.000 Y0.000 Z-" + vitesse + "\n");

//if (clé == 'h') port.write("G90\nG20\nG00 X0.000 Y0.000 Z0.000\n");

if (clé == 'v') port.write("$0=75\n$1=74\n$2=75\n");

//if (clé == 'v') port.write("$0=100\n$1=74\n$2=75\n");

if (clé == 's') port.write("$3=10\n");

if (clé == 'e') port.write("$16=1\n");

if (clé == 'd') port.write("$16=0\n");

if (clé == '0') openSerialPort();

if (clé == 'p') selectSerialPort();

if (clé == '$') port.write("$$\n");

if (clé == 'h') port.write("$H\n");

}

if (!streaming && clé == 'g') {

gcode = null; je = 0;

Fichier fichier = nul;

println("Chargement du fichier…");

selectInput("Sélectionnez un fichier à traiter:", "fileSelected", file);

}

if (clé == 'x') streaming = false;

}

void fileSelected (Sélection de fichier) {

if (sélection == null) {

println("La fenêtre a été fermée ou l'utilisateur a cliqué sur annuler.");

} autre {

println("Utilisateur sélectionné " + selection.getAbsolutePath());

gcode = loadStrings(selection.getAbsolutePath());

if (gcode == null) return;

diffusion = vrai;

flux();

}

}

flux vide()

{

si (!streaming) retourne;

tandis que (vrai) {

if (i == gcode.length) {

diffusion en continu = faux;

revenir;

}

if (gcode.trim().length() == 0) i++;

sinon casser;

}

println(gcode);

port.write(gcode + '\n');

je++;

}

void serialEvent(Serial p)

{

Chaîne s = p.readStringUntil('\n');

println(s.trim());

if (s.trim().startsWith("ok")) stream();

if (s.trim().startsWith("error")) stream(); // XXX: vraiment ?

}

Étape 5: Concevez et imprimez toutes les pièces en feuille de contreplaqué

Concevoir et imprimer toutes les pièces en feuille de contreplaqué
Concevoir et imprimer toutes les pièces en feuille de contreplaqué

Téléchargez la pièce et la conception du robot dans AutoCAD et imprimez-la sur la feuille de contreplaqué de 12 mm et la partie finition et conception. Si quelqu'un a besoin d'un fichier cad, laissez le commentaire dans la zone de section des commentaires, je vous l'enverrai directement.

Étape 6: Assemblage

Assemblée
Assemblée
Assemblée
Assemblée

rassembler toute la partie et disposer dans la séquence sur image qui est donnée et suivre le schéma de l'image.

Étape 7: Configurer les paramètres GBRL

Réglage qui a fait ses preuves sur nos robots.

$0=10 (step pulse, usec) $1=255 (step inactif delay, msec) $2=7 (step port invert mask:00000111) $3=7 (dir port invert mask:00000111) $4=0 (step enable invert, bool) 5 $ = 0 (inversion des broches de limite, bool) 6 $=1 (inversion des broches de la sonde, bool) 10 $=3 (masque de rapport d'état: 00000011) 11 $=0,020 (déviation de jonction, mm) 12 $=0,002 (tolérance d'arc, mm) 13 $ =0 (rapport pouces, bool) $20=0 (limites souples, bool) $21=0 (limites dures, bool) $22=1 (cycle de référencement, bool) $23=0 (homing dir invert mask:00000000) $24=100.000 (homing feed, mm/min) $25=500.000 (homing cherche, mm/min) $26=250 (homing antibounce, msec) $27=1.000 (homing pull-off, mm) $100=250.000 (x, pas/mm) $101= 250 000 (y, pas/mm) 102 $=250 000 (z, pas/mm) 110 $=500 000 (x taux max, mm/min) 111 $=500 000 (y taux max, mm/min) 112 $=500 000 (z taux max, mm/min) 120 $=10.000 (x accel, mm/sec^2) 121$=10.000 (y accel, mm/sec^2) $122=10.000 (z accel, mm/sec^2) $130=200.000 (x course max, mm) 131 $=200 000 (y course max, mm) 132 $=200 000 (z course max, mm)

Étape 8: téléchargez le code final et vérifiez le résultat virtuel dans le tableau de bord du logiciel Arduino Uno

// Unités: CM

float b_height = 0;

flotteur a1 = 92;

flottant a2 = 86;

float snude_len = 20;

booléen doZ = faux;

float base_angle;// = 0;

float arm1_angle; // = 0;

float arm2_angle; //= 0;

flottant bx = 60; // = 25;

flotter par = 60; // = 0;

flottant bz = 60; // = 25;

flottant x = 60;

flottant y = 60;

flotteur z = 60;

flotteur q;

flotteur c;

flotteur V1;

flotteur V2;

flotteur V3;

flotteur V4;

flotteur V5;

void setup() {

taille (700, 700, P3D);

cam = nouveau PeasyCam (ceci, 300);

cam.setMinimumDistance(50);

cam.setMaximumDistance(500);

}

tirage nul () {

//ligneur:

y = (sourisX - largeur/2)*(-1);

x = (sourisY - hauteur/2)*(-1);

bz = z;

par = y;

bx = x;

float y3 = sqrt(bx*bx+by*by);

c = sqrt(y3*y3 + bz*bz);

V1 = acos((a2*a2+a1*a1-c*c)/(2*a2*a1));

V2 = acos((c*c+a1*a1-a2*a2)/(2*c*a1));

V3 = acos((y3*y3+c*c-bz*bz)/(2*y3*c));

q = V2 + V3;

bras1_angle = q;

V4 = radians(90,0) - q;

V5 = radians (180) - V4 - radians (90);

arm2_angle = radians (180,0) - (V5 + V1);

base_angle = degrés(atan2(bx, by));

bras1_angle=degrés(bras1_angle);

arm2_angle=degrés(arm2_angle);

//println(par, bz);

//bras1_angle = 90;

//bras2_angle = 45;

/*

bras2_angle = 23;

bras1_angle= 23;

bras2_angle=23;

*/

// interactif:

// si (doZ)

//

// {

// angle_base = angle_base+ mouseX-pmouseX;

// } autre

// {

// bras1_angle = bras1_angle+ pmouseX-mouseX;

// }

//

// arm2_angle = arm2_angle+ mouseY-pmouseY;

draw_robot(base_angle, -(arm1_angle-90), arm2_angle+90 - (-(arm1_angle-90)));

// println(base_angle + ", " + arm1_angle + ", " + arm2_angle);

}

void draw_robot (float base_angle, float arm1_angle, float arm2_angle)

{

rotationX(1.2);

rotationZ(-1,2);

arrière-plan(0);

lumières();

pushMatrix();

// BASE

remplir (150, 150, 150);

box_corner (50, 50, b_height, 0);

rotation(radians(base_angle), 0, 0, 1);

// ARM 1

remplir (150, 0, 150);

box_corner (10, 10, a1, arm1_angle);

// ARM 2

remplir (255, 0, 0);

box_corner (10, 10, a2, arm2_angle);

// SNUDE

remplir (255, 150, 0);

box_corner (10, 10, snude_len, -arm1_angle-arm2_angle+90);

popMatrice();

pushMatrix();

float action_box_size=100;

translate(0, -action_box_size/2, action_box_size/2+b_height);

pushMatrix();

translate(x, action_box_size-y-action_box_size/2, z-action_box_size/2);

remplir (255, 255, 0);

boîte(20);

popMatrice();

remplir (255, 255, 255, 50);

box(action_box_size, action_box_size, action_box_size);

popMatrice();

}

void box_corner(float w, float h, float d, float rotation)

{

rotation(radians(rotation), 1, 0, 0);

translate(0, 0, d/2);

boîte(l, h, d);

translate(0, 0, d/2);

}

touche videAppuyée ()

{

si (clé == 'z')

{

doZ = !doZ;

}

si (clé == 'h')

{

// met tout à zéro

bras2_angle = 0;

bras1_angle = 90;

base_angle = 0;

}

si (clé == 'g')

{

println(degrés(V1));

println(degrés(V5));

}

si (keyCode == UP)

{

z ++;

}

if (keyCode == DOWN)

{

z --;

}

si (clé == 'o')

{

y = 50;

z = 50;

println(q);

println(c, "c");

println(V1, "V1");

println(V2);

println(V3);

println(bras1_angle);

println(V4);

println(V5);

println(bras2_angle);

}

}

Conseillé: