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

Contrôleur de Bras Robotique MK2 Plus DIY

Composants et Fournitures

Shield CNC×1
Moteurs Pas-à-Pas NEMA 17 (OpenBuilds ou génériques)×3
Arduino UNO×1
Drivers A4988 (SparkFun ou génériques)×3
Fins de course Micro (OpenBuilds)×3

Outils Nécessaires

Logiciels

À Propos du Projet

Le Bras EEZYBOT MK2

Le bras EEZYBOT MK2 (par daghizmo sur Thingiverse) reprend la cinématique de l'ABB IRB460 à l'échelle 1:7. Version originale à servomoteurs : moins précis. La version MK2 Plus (Thingiverse) utilise 3 moteurs pas-à-pas pour les liaisons – bien plus fluide et précis. Impression 3D longue (quelques jours).

Choix de la Position « Home »

Contrairement aux servos, les moteurs pas-à-pas n'ont pas de conscience de position. Routine de « homing » au démarrage via 3 fins de course. La cinématique est complexe mais intuitive une fois le bras assemblé.

Câblage

Shield CNC : bornes repérées. Attention au sens des drivers A4988 !

Alimentation 12V suffisante pour éviter le décrochage des moteurs.

Code (Bibliothèque AccelStepper)

Utilisation de AccelStepper (gestionnaire de bibliothèque Arduino ou site officiel) pour mouvements fluides, accélération/décélération, multi-moteurs simultanés.

Définitions des Pins et Constantes

#define XSTEP 2
#define YSTEP 3
#define ZSTEP 4
#define XDIR 5
#define YDIR 6
#define ZDIR 7
#define ENABLE 8
#define XLIMIT 9
#define YLIMIT 10
#define ZLIMIT 11
#define XMOTORACC 250
#define XMOTORMAXSPEED 1000
#define YMOTORACC 250
#define YMOTORMAXSPEED 1000

#include <AccelStepper.h>
AccelStepper XMOTOR(1, XSTEP, XDIR);
AccelStepper YMOTOR(1, YSTEP, YDIR);
AccelStepper ZMOTOR(1, ZSTEP, ZDIR);

Configuration des Pins

void pinsetup() {
  pinMode(ENABLE, OUTPUT);
  digitalWrite(ENABLE, LOW);
  pinMode(XLIMIT, INPUT_PULLUP);
  pinMode(YLIMIT, INPUT_PULLUP);
  pinMode(ZLIMIT, INPUT_PULLUP);
}

Routine de Homing (Auto-Home)

void autohome() {
  xyhome();
  zhome();
}

void xyhome() {
  int initial_xhome = -1;
  int initial_yhome = -1;
  
  // Vitesses lentes pour précision homing
  XMOTOR.setMaxSpeed(500); XMOTOR.setAcceleration(50);
  YMOTOR.setMaxSpeed(500); YMOTOR.setAcceleration(50);
  
  // 1. X et Y en sens opposés jusqu'à activation fin de course Y
  while (digitalRead(YLIMIT)) {
    XMOTOR.moveTo(initial_xhome);
    YMOTOR.moveTo(initial_yhome);
    initial_xhome--; initial_yhome--;
    XMOTOR.run(); YMOTOR.run(); delay(5);
  }
  XMOTOR.setCurrentPosition(0);
  YMOTOR.setCurrentPosition(0);
  
  // 2. X et Y même sens jusqu'à activation fin de course X
  initial_xhome = -1; initial_yhome = 1;
  while (digitalRead(XLIMIT)) {
    XMOTOR.moveTo(initial_xhome);
    YMOTOR.moveTo(initial_yhome);
    initial_xhome--; initial_yhome++;
    XMOTOR.run(); YMOTOR.run(); delay(5);
  }
  YMOTOR.setCurrentPosition(0);
  
  // 3. Recul léger pour libérer fin de course Y
  YMOTOR.setMaxSpeed(250); YMOTOR.setAcceleration(10);
  initial_yhome = 1;
  while (!digitalRead(YLIMIT)) {
    YMOTOR.moveTo(initial_yhome);
    YMOTOR.run(); initial_yhome++; delay(5);
  }
  YMOTOR.setCurrentPosition(0);
  YMOTOR.setMaxSpeed(YMOTORMAXSPEED); YMOTOR.setAcceleration(YMOTORACC);
  
  // 4. Recul léger pour libérer fin de course X
  XMOTOR.setMaxSpeed(250); XMOTOR.setAcceleration(10);
  initial_xhome = 1;
  while (!digitalRead(XLIMIT)) {
    XMOTOR.moveTo(initial_xhome);
    XMOTOR.run(); initial_xhome++; delay(5);
  }
  XMOTOR.setCurrentPosition(0);
  XMOTOR.setMaxSpeed(XMOTORMAXSPEED); XMOTOR.setAcceleration(XMOTORACC);
}

void zhome() {
  int initial_zhome = -1;
  ZMOTOR.setMaxSpeed(100); ZMOTOR.setAcceleration(100);
  
  while (digitalRead(ZLIMIT)) {
    ZMOTOR.moveTo(initial_zhome);
    initial_zhome--;
    ZMOTOR.run(); delay(5);
  }
  ZMOTOR.setCurrentPosition(0);
  
  ZMOTOR.setMaxSpeed(50); ZMOTOR.setAcceleration(50);
  initial_zhome = 1;
  while (!digitalRead(ZLIMIT)) {
    ZMOTOR.moveTo(initial_zhome);
    ZMOTOR.run(); initial_zhome++; delay(5);
  }
  ZMOTOR.setCurrentPosition(0);
  ZMOTOR.setMaxSpeed(1000); ZMOTOR.setAcceleration(1000);
}

Setup et Boucle Principale

void setup() {
  Serial.begin(9600);
  pinsetup();
  autohome();
  Serial.println("HOMING OK");
}

void loop() {
  // Exemple mouvements : à remplacer par votre logique
  XMOTOR.runToNewPosition(100); delay(1000);
  YMOTOR.runToNewPosition(50); delay(1000);
  YMOTOR.runToNewPosition(-50); delay(1000);
  YMOTOR.runToNewPosition(0); delay(1000);
  XMOTOR.runToNewPosition(0); delay(1000);
}

Conclusion

Alternative au firmware GRBL (nécessite PC) : mouvements codés en dur dans l'Arduino pour autonomie. Possibilité d'ajouter commande série (ex: « 5,6,7* » pour déplacements X,Y,Z) ou cinématique inverse pour coordonnées 3D.

Merci aux concepteurs brillants de Thingiverse !

Code complet : GitHub
Modèle 3D : MK2 Plus sur Thingiverse (crédits ackyltle)

Processus de fabrication

  1. Infineon lance le contrôleur moteur IMC300 avec Cortex-M0 intégré pour flexibilité accrue
  2. Robot SCARA double bras : Solutions avancées d'assemblage et production
  3. Bras Robotique MeArm V1.0 – Construisez Votre Bras Robotisé Arduino et Raspberry Pi
  4. Bras robotique piloté par Ethernet : contrôle à distance simplifié
  5. LittleArm 2C : Bras Robot 3D Imprimé Arduino pour Éducation STEM
  6. Bras robotique Arduino contrôlé par gestes manuels – Construction DIY pas à pas
  7. Realtime Robotics lance un contrôleur avancé pour simplifier l'intégration et accélérer le déploiement
  8. Yama Seiki GA-2000CR : Centre de tournage compact avec bras robot et système palette avancés
  9. KUKA KMR iiwa : bras robotique collaboratif mobile pour l'Industrie 4.0