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.
Inspiration : http://www.usinages.com/threads/retrofit-charlyrobot.42233/print
Nous n'allons certainement pas garder :
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--; } }
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…
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; }