Table des matières

Charlyrobot GRBL

Description

Passer en grbl une fraiseuse numérique Charlyrobot CRA4

Les Charlyrobot ont envahi les collèges dans les années 90, ce sont des machines robustes, mais leur logiciel est un peu archaïque.
Nous décidons de remettre a jour une CRA4 récupérée à l'ESADMM (Beaux-Arts de Marseille) en changeant l'électronique par une Arduino qui permettra une gestion en Grbl avec des logiciels comme Universal Gcode sender.

charly robot grbl

Inspiration : http://www.usinages.com/threads/retrofit-charlyrobot.42233/print

Nous n'allons certainement pas garder :

Matériaux

Notes

Code test drivers pas à pas :

Nous allons tester les moteurs et drivers un par un avec ce code test :

ps : nous règlons les DIPSWITCHs :

//Relier les entrées du driver à l'Arduino
int dirPin = 2;
int pulPin = 3;
int enblPin = 4;
 
void setup(){
    pinMode(dirPin, OUTPUT);
    pinMode(pulPin, OUTPUT);
    pinMode(enblPin, OUTPUT);
    digitalWrite(enblPin, HIGH);
}
 
void loop(){
    slide('L', 500, 500); //go Left for 500 steps at speed 500, (the lower the number is the faster the motor will go)
    delay(2000);
    slide('R', 500, 500); //go Right for 500 steps at speed 500
    delay(2000);
}
 
void slide(int dir, int steps, int sspeed){
    if (sspeed < 50) sspeed = 10; //keeps the speed above 10
    if (dir == 'L') digitalWrite(dirPin, HIGH);
    else if (dir == 'R') digitalWrite(dirPin, LOW);
 
    while (steps > 0){
        digitalWrite(pulPin, HIGH);
        delayMicroseconds(10);
        digitalWrite(pulPin, LOW);
        delayMicroseconds(10);
        delayMicroseconds(sspeed);
        steps--;
    }
}

Configuration GRBL

Nous devons configurer le grbl … https://github.com/grbl/grbl/wiki/Configuring-Grbl-v0.9

$0=10 (step pulse, usec)
$1=255 (step idle delay, msec)
$2=0 (step port invert mask:00000000)
$3=0 (dir port invert mask:00000000)
$4=1 (step enable invert, bool)
$5=1 (limit pins invert, bool)
$6=0 (probe pin invert, bool)
$10=3 (status report mask:00000011)
$11=0.010 (junction deviation, mm)
$12=0.002 (arc tolerance, mm)
$13=0 (report inches, bool)
$20=0 (soft limits, bool)
$21=0 (hard limits, bool)
$22=0 (homing cycle, bool)    // homing ne marche pas bien , donc desactivé pour le moment
$23=4 (homing dir invert mask:00000001)
$24=250.000 (homing feed, mm/min)
$25=1500.000 (homing seek, mm/min)
$26=250 (homing debounce, msec)
$27=1.000 (homing pull-off, mm)
$100=640.000 (x, step/mm)
$101=640.000 (y, step/mm)
$102=640.000 (z, step/mm)
$110=3000.000 (x max rate, mm/min)
$111=3000.000 (y max rate, mm/min)
$112=500.000 (z max rate, mm/min)
$120=100.000 (x accel, mm/sec^2)
$121=100.000 (y accel, mm/sec^2)
$122=40.000 (z accel, mm/sec^2)
$130=320.000 (x max travel, mm)
$131=220.000 (y max travel, mm)
$132=80.000 (z max travel, mm)

Si vous utilisé UGS le reglage de la vitesse de deplacement (Feedrate) manuelle est tres lente par defaut, il faut penser à la regler sinon vous penserez que ca ne marche pas !

note : sur WIn 10 UGS platform ne marche pas… il faut utiliser le Classic GUI il semble…

Code allumage fraiseuse bouton de façade

Nous avons choisi d'ajouter une petite Arduino nano et un relai 5V>220V pour contrôler avec les bouton de façade l'allumage de la défonceuse. Les boutons sont en pullUp, et le stop est inversé… de plus nous obtenons pas mal de bruit qui déclenche l'allumage intempestif de la fraiseuse …. du coup nous rajoutons des condensateurs antibruit en parallèle et un code arduino tarabiscoté pour attendre que les boutons soit amaintenu appuyé quelques centaines de millisecondes pour agir…

float Compteur = 0;
 
int StartBouton = 4;
int StopBouton = 5;
int RelayPin = 3;
 
void setup(){
  pinMode(StartBouton, INPUT_PULLUP);
  pinMode(StopBouton, INPUT_PULLUP);       
  pinMode(RelayPin, OUTPUT); 
  //Debug
  Serial.begin(9600);                                     
} // close setup
 
 
void loop() {
  while (digitalRead(StartBouton) == LOW ){ 
 
    delay(100);  //resolution
    Compteur = Compteur + 100;   
 
    //Afficher le temps allumé
    Serial.print("ms_start = ");
    Serial.println(Compteur);
 
                  if (Compteur >= 600){
                  digitalWrite(RelayPin, HIGH);
                  Serial.print("START");     
                } 
 
  }  //close while
 
 
 // attention le bouton stop est inversé !
  while (digitalRead(StopBouton) == HIGH ){ 
 
    delay(100);  //resolution
    Compteur = Compteur + 100;   
 
    //Afficher le temps allumé
    Serial.print("ms_stop = ");
    Serial.println(Compteur);
 
                  if (Compteur >= 300){
                  digitalWrite(RelayPin, LOW);
                  Serial.print("STOP");                   
                } 
 
  }  //close while
 
//reset compteur
Compteur = 0;
}

Photos