====== Charlyrobot GRBL ====== * Porteur du projet : [[:user:resonance|resonance]] & julien maire * Date : 16/03/2017/ - ... * Licence : [[http://creativecommons.org/licenses/by-sa/3.0/legalcode|CC-by-sa-3.0]] * Description : Passer en GRBL une fraiseuse numérique Charlyrobot CRA4 {{tag>esadmm, ensadmm, cnc, grbl, arduino}} ===== 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 [[logiciels:universal_gcode_sender:accueil|Universal Gcode sender]]. {{projets:charly_robot_grbl:accueil:ecran677.png?200|charly robot grbl}} **Inspiration :** http://www.usinages.com/threads/retrofit-charlyrobot.42233/print Nous n'allons certainement pas garder : * le verrouillage du capot * certains boutons à l'avant de la machine ===== Matériaux ===== * 1 Arduino (uno) * 1 cnc shield * 3 drivers moteur DM420A * du cable électrique ===== Notes ===== * Les steppers ont 8 fils , 4 paire de deux. (il y en a une paire rouge (1e bobine) et une paire marron (2e bobine). * Les end stops sont des fils jaunes vifs (certains sont bariolés), en paire avec les fils rouges (+ dans l'ancienne config). * Le palpeur semble être un fil gris clair. * L'alimentation d'origine délivre 32.5v ==== Code test drivers pas à pas : ==== Nous allons tester les moteurs et drivers un par un avec ce code test : {{:projets:charly_robot_grbl:ecran679.png|}} ps : nous règlons les DIPSWITCHs : * pour un maximum de courant : SW1,SW2,SW3 = OFF OFF OFF, SW4 = ON * pour une résolution au 1/16e de pas : SW5 SW6 SW7 = ON ON OFF //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... {{ :projets:charly_robot_grbl:p1040631.jpg?nolink&600 |}} 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 === {{gallery>?&crop&lightbox}}