Vous ne pouvez pas modifier cette page, pour les raisons suivantes :
Documentation:
<center>'''GRAVEUSE CNC''' </center> [[File:GraveuseMaison3.jpg|280px|right]] =Matériel= Châssis « maison » solide en bois Récupération : glissières de tiroir (mouvement X,Y), glissière à roulements en V (mouvement Z), vis sans fin d'une ancienne machine (X, Y), tige filetée de 4mm (Z) Sur châssis horizontal, plateau mobile : moteur et axe Y (longueur) Sur un pont fixé au châssis horizontal : moteurs et axes horizontalX (largeur) et vertical Z (profondeur gravure) Sur l'axe Z : berceau pour Dremel (ou ultérieurement laser), fabrication « maison » en tôle alu 5mm [[Image:]] [[Image:]] Arduino Uno 3 moteurs pas à pas : Epson (récup sur imprimante) : Z 2 x Nema 17 0,9A : X Y 3 shields compatibles A4988 Pololu (courant réglable, 2A max) =Essais moteurs et mécanique= Pour tester (ou vérifier!) les moteurs et les shields (fragiles) il est très utile d'avoir une (autre) platine Arduino connectée sur une « breadboard ». Sur internet j'ai trouvé un modèle de sketch que je modifie à volonté : <syntaxhighlight lang="java"> // --- Commande d'un StepStick/Driver A4988 ---------------------- // A4988_Test.ino // // Commande d'un moteur pas-à-pas à l'aide d'un pilote A4988 avec // Arduino. // // Un projet www.mchobby.be (vente de kit et composant) // Meurisse D. - Licence CC-SA-BY // // Un tutoriel http://mchobby.be/wiki/index.php?title=A4988 // Ou Acheter un StepStick A4988 // http://shop.mchobby.be/product.php?id_product=349 // #define pinEnable 13 // Activation du driver/pilote #define pinStep 9 // Signal de PAS (avancement) #define pinDir 8 // Direction void setup(){ Serial.begin(9600); Serial.println("Test A4988"); pinMode( pinEnable, OUTPUT ); pinMode( pinDir , OUTPUT ); pinMode( pinStep , OUTPUT ); } void loop(){ int i = 0; int d = 3000; digitalWrite( pinDir , HIGH); // Direction avant digitalWrite( pinStep , LOW); // Initialisation de la broche step Serial.println("Fin initialisation + attendre 2 sec"); delay( 2000 ); // Avance de x pas for( i=0; i<5000; i++){ //Serial.println( i ); digitalWrite( pinStep, HIGH ); delayMicroseconds( 1000 ); digitalWrite( pinStep, LOW ); delayMicroseconds( 1000 ); //delay (2000); } // Changer de direction Serial.println("Attendre 2 sec + Retour"); digitalWrite( pinDir , LOW); // Direction avant delay( 2000 ); d = 350; // Refaire x pas dans l'autre sens for( i=0; i<5000; i++){ //Serial.println( i ); digitalWrite( pinStep, HIGH ); delayMicroseconds( 1000 ); digitalWrite( pinStep, LOW ); delayMicroseconds( 1000 ); } // Pas de step et pas d'ordre... // l'axe du moteur est donc bloqué Serial.println("Axe bloque + attendre 2 sec"); delay( 5000 ); // déblocage de l'axe moteur Serial.println("Deblocage axe"); digitalWrite( pinEnable, HIGH ); // logique inversée // Fin et blocage du programme // Presser reset pour recommander Serial.println("Fin de programme"); while( true ); } </syntaxhighlight> Branchement spécial du moteur Epson , à partir repère bleu sur nappe :<br /> 1 1A moteur 1 2 2A moteur 2 3 1B moteur 1 4 2B moteur 2 Pour les deux autres moteurs : ordre normal des fils :<br /> Re 1B moteur 1 Je 1A moteur 1 Nr 2A moteur 2 Vt 2B moteur 2 Réglage courant sur 12V, A4988 <u>enabled (axe bloqué)</u>, <u>sans impulsion step</u> : 0,8A Ne pas négliger l'étape la plus importante (et la plus longue) : la précision de la mécanique. Après un réglage soigneux de la mécanique (<u>ni durs ni jeux</u>) mesurer la course de chaque axe en fonction du nombre de pas pour pouvoir paramétrer le logiciel de traitement de Gcode Axe X 9.000 steps = 18 cm Axe Y 11.000 steps = 22 cm Axe Z 10.000 steps = 3,9 cm =Logiciels (pour Ubuntu 14.04)= ==GRBL (côté Arduino)== Le site : [https://github.com/grbl/grbl/wiki/Connecting-Grbl https://github.com/grbl/grbl/wiki/Connecting-Grbl] donne le détail de la connectique associée à ce logiciel. Le shield est fait « maison » sur circuit imprimé avec des connecteurs mâle (vers Arduino) et femelle (support contrôleurs moteurs). Note : GRBL ne sait pas gérer la vitesse du moteur, mais peut commander sa mise en marche. Installation logicielle d'après : [https://github.com/grbl/grbl/wiki/Compiling-Grbl https://github.com/grbl/grbl/wiki/Compiling-Grbl] paragraphe « Via the Arduino IDE (All Platforms) » un peu adapté comme ci-après. Télécharger le code source Grbl (V0.9i) →Fichier '''grbl-master.zip''' Dézipper dans un dossier de travail → Dossier '''grbl-master''' Changement version Arduino recommandé (>1.6 = 1.6.3 ) (Sous Ubuntu : méthode spéciale car pas possible avec logithèque Ubuntu (note personnelle : voir changements PC-A au 4/4/2015)) Plus simple que la doc Github : Copier dans le dossier libraries <u>du dossier des sketchs</u> le dossier '''Grbl''' du dossier '''grbl-master'''. (ce dossier contient des fichiers source (.c et .h) et un dossier '''examples''') Connecter l'Arduino sur le PC Lancer l'IDE Arduino Vérifier le port série (/dev/ttyACM0) et le type de carte (Arduino Uno) Ouvrir dans l'IDE le sketch '''/examples/grblUpload/grblUpload.ino''' (mis à part les commentaires il n'y a rien dans ce sketch si ce n'est un include) Compiler et charger dans l'Arduino ce sketch : ils flash le programme Grbl dans la mémoire Lancer le moniteur série de l'IDE Modifier les paramètres de transmission : vitesse 115200 bauds, fin de ligne = les deux, NL et CR On doit voir le message « Grbl 0.9i ['$' for help] » indiquant qu'on peut taper des commandes Grbl (par exemple paramétrer la prise en compte de la CNC) ou des commandes Gcode '''Attention''' : depuis la version Grbl 0.9, la broche Z-limit (voir plus loin la fonction « homing ») n'est plus sur la pin 11 mais sur la pin 12 La pin 12 ne peut donc plus servir pour commander un relais qui démarre/arrête un moteur (ordre Gcode M3/M5) Si vous voulez le faire, il faut rendre à la pin 11 sa fonction de Z-Limit et la pin 12 pourra servir pour la fonction Spindle Enable (0V=Off, 5V=On) Pour cela, il faut éditer le fichier /sketchs/libraries/grbl/config.h et mettre en commentaire la ligne qui contient « #define variable_spindle ….. » Ensuite, compiler et recharger dans l'IDE Arduino le sketch : '''/examples/grblUpload/grblUpload.ino''' ==Universal Gcode Sender (UGS) (Côté PC)== Sur le site: [https://github.com/winder/Universal-G-Code-Sender https://github.com/winder/Universal-G-Code-Sender] Dans le paragraphe Downloads : télécharger le fichier zip → '''UniversalGcodeSender-v1.0.8.zip''' Unzip → dossier '''UniversalGcodeSender-v1.0.8''' Copier le contenu du dossier dans '''/home/dom/UGS''' Lancement du programme java : dom@PC-A:~/UGS$ java -jar -Xmx256m UniversalGcodeSender*.jar ==Tests et Réglages== Avec '''UGS''' : Open Connection, /dev/ttyACM0, vitesse 115200 Paramétrer GRBL : onglet Commandes ($$ ou $x=…) ou mieux Settings → Fimware Setting → GRBL) Réglage des pas :<br /> X → $100=50 (9000pas/180mm) Y → $101=50 (11000pas/220mm) Z → $102=256,4 (10000pas/39mm) Réglage direction :<br /> $3=7 (direction Z X Y inversées – sur cette machine et selon mes goûts) Réglage vitesses max:<br /> X → $110=400 Y → $111=400 Z → $112=200 Test des moteurs (onglet Machine Control) '''!!! Attention danger de tout casser en bloquant au bout des axes !!!''' D'ou l'intérêt d'avoir un bouton d'arrêt d'urgence qui coupe l'alimentation des moteurs. '''Passer en mm''' (et pas en inchs) et utiliser des petites valeurs de course (Step size) Tester chaque moteur (touches X+ X- Y+ Y- Z+ Z-) Tester les jeux mécaniques et voir si on ne saute pas des pas moteurs : faire de nombreux aller et retour sur le même axe pour voir si on revient bien à la même position mécanique pour la même position logicielle GRBL possède des fonctions très intéressantes pour contrôler les courses sur les trois axes. Il y a plusieurs méthodes possibles. Voici la mienne : J'ai installé un contact de fin de course (micro-switch) sur chaque axe, à son <u>origine</u> (pas à son maximum) Ceci permet d'utiliser la fonction « homing » qui est le retour à la W<u>ork Position</u> (x,y,z)=(0,0,0) par la commande $H [[file:findecourse.jpg|200px|left]] Le câblage des switchs sur l'Arduino est, à priori et inutilement, très discuté, j'ai utilisé celui-ci qui me paraît logique du point de vue électronique (et très utilisé !). La Limit Pin passe de +5V à 0V quand le contact est poussé. Après réglage des courses des switchs, il faut paramétrer GRBL en fonction (dans l'ordre) Homing Cycle$22=1 Softs Limits$20=1 Pour ma machine : Max TravelX → $130=200 (mm) Y → $131=220 (mm) Z → $132=40 (mm) Homing dir invert$23= 7 Homing feed$24=25.000(Pour info) Homing seek$25=600.000 (Pour info) Close et open de la connexion pour prise en compte. L'alarme est normale, elle sert à nous avertir de la nécessité de calibrer la machine en faisant un homing (commande $H). Ne pas s'inquiéter si les coordonnées Machine Position sont négatives, le principal est que les coordonnées Work Position soient à 0. En positionnant la machine ou en interprétant le Gcode, GRBL bloque quand on dépasse les limites. ==Générer le Gcode avec Inkscape (0.48.4 r9939)== Le logiciel de dessin 2D utilisé est Inskape. Une extension à ce logiciel permet de générer du Gcode : Gcodetools V1.7 ( [http://www.cnc-club.ru/gcodetools http://www.cnc-club.ru/gcodetools] – doc sur [http://www.cnc-club.ru/forum/viewtopic.php?t=35#latest_version http://www.cnc-club.ru/forum/viewtopic.php?t=35#latest_version] (doc pas terrible !)) Pour installer : sudo tar xzvf gcodetools-1.7.tar.gz -c /usr/share/inkscape/extensions/ =Utilisation : généralités= L'utilisation de cette extension est un peu délicate, voici ce que j'ai compris : Pour générer du Gcode, il y a trois étapes, les deux premières étant préparatoires Attention, l'utilisation du point ou la virgule n'est pas très cohérente avec Inkscape ! Extensions → Gcodetools → Orientations points Z surface<nowiki>= coordonnée Z de la surface du matériau à travailler</nowiki> Z depth<nowiki>= profondeur de coupe maximale (nombre algébrique – négatif pour profondeur)</nowiki> → Appliquer :crée les repères dans un cadre de texte du calque en cours (On peut ensuite modifier ce texte) Extensions → Gcodetools → Tools library Choisir le type d'outil → Appliquer : crée un cadre de texte dans le calque en cours qui définit l'outil (On peut ensuite modifier ce texte) Diameter: diamètre outil Feed : vitesse mouvement Penetration feed : vitesse pénétration Shape : Pour les outils coniques (voir : Utilisation : gravure complexe) Depth step : profondeur de chaque passe de coupe Extensions → Gcodetools → Path to Gcode (génération du Gcode) → onglet Préférences nom et emplacement fichier généré <u>Z safe</u> height for G0 move over blank = hauteur de mise en garde de l'outil → onglet Options <u>Scale</u> along Z axis = coefficient (nombre algébrique – négatif pour coupe) Ce coefficient s'applique à Z depth, Z safe, Depth step <u>Offset</u> along Z axis = positionnement outil pour début de travail (en surface pièce) → onglet Path to Gcode → Appliquer pour générer le Gcode Important : on doit faire Appliquer <u>dans cet onglet</u> pour générer le Gcode Après moult essais, voici ce que j'ai compris, c'est à dire pas tout Avant de générer le Gcode : - sélectionner le dessin à traiter et grouper les objets - convertir l'objet en chemin (un seul trait de gravure) et/ou - convertir le contour en chemin (deux traits de gravure entourant le contour) Comme déjà dit, les deux textes générés (outils et orientation points) peuvent être modifiés dans le calque par l'outil texte (icône A majuscule), il peut y avoir autant de ces textes que de calques, la génération du Gcode se faisant par calques et pour le dessin sélectionné, ce qui peut être utile pour changer d'outil Le Gcode généré peut comporter plusieurs passes de coupe Chaque passe comporte au départ trois commandes : G00 Zpp.pppp = positionnement initial de l'outil de coupe sans toucher le matériau (mise en garde) Cette coordonnée dépend des paramètres <u>Zsafe</u>, <u>Offset</u>, <u>Scale</u> G00 Xxx.xxxx Yyy.yyyy = mouvement X Y sur le matériau en début de coupe (avec le Z précédent) G01 Zqq.qqqq Fvv.vvvv (Penetrate) = Plongée de l'outil dans le matériau vv.vvvv = vitesse de pénétration (<u>penetration feed</u> de l'outil) qq.qqqq = profondeur de passe En fin de passe, l'outil est mis en garde : G00 Zpp.pppp Le cas échéant, les autres passes sont enchainées sur le même modèle Le nombre de passes dépend des paramètres : <u>Zdepth</u> (Orientation points) <u>Scale Z</u> (Path Gcode Options) : nombre algébrique (négatif pour coupe) <u>Depth step</u> (Outil) Les formules de calcul : '''G0 Zpp.pppp = Offset Z + (Scale Z * Z safe)''' '''G1 Zqq.qqqq = Offset Z – (Scale Z * Depth step)''' '''G1 Zqq.qqqq = Z précédent – (Scale Z * Depth step)''' Attention, cette formule est algébrique et tient compte du signe de Scale Z ! Le Gcode fait autant de passes de profondeur Depth step que possible, le G01 Zqq.qqqq au début de la passe étant incrémenté par rapport à celui de la passe précédente. La profondeur de la dernière passe est réduite de façon à ne pas dépasser Scale Z * Z depth. Exemples : <u>Zdepth</u> = -2 (profondeur = 2 mm), Scale Z = -1 Si <u>Depth step</u> = 1 il y aura 2 passes de 1mm = 2 Si <u>Depth step</u> = 2 il y aura 1 passe de 2mm <nowiki>= 2</nowiki> <u>Zdepth</u> = -1,5 (profondeur = 1,5mm), Scale Z = -1 Si <u>Depth step</u> = 1 il y aura 1 passe de 1mm et une passe de 0,5mm = 1,5mm En fin de travail, il faut faut arrêter l'interprétation du Gcode suivant la même procédure que pour un arrêt d'urgence : → $C (File Mode) → Soft reset (Machine Control) → $H ou → Pause (File Mode) → Resume → $H (Machine Control) ==Utilisation : Gravure simple== L'outil, cylindre fin ou cône, suit les chemins (Contour ou Path) avec un trait fin et de profondeur constante Exemples : circuit imprimé avec plan de masse : les pistes sont isolées des autres et de la masse par le trait gravure de textes inkscape : deux contours pour chaque lettre (dans ce cas sur du plexi)<br /> [[File:GraveuseMaisonCI.jpg|300px]] [[File:GraveuseMaisonEtiquet.jpg|300px]] Outil : cylindre fin ou cône La découpe déborde de manière égale de chaque côté du chemin (visible dans Inkscape en mode d'affichage contour), elle dépend donc du diamètre de l'outil. Le style du contour (remplissage, épaisseur) n'influe pas sur la gravure mais, s'il est égal au diamètre de l'outil, permet de visualiser celle-ci Sinon on peut mettre sans problème le style à aucun remplissage (donc épaisseur = 0) et travailler en mode d'Affichage Contour dans Inkscape. ==Utilisation : Gravure complexe== L'outil conique suit l'objet dessiné avec une profondeur variable suivant la largeur de l'objet Exemple : lettres avec un seul contour et pleins et déliés (calligraphie) Le paramètre shape de l'outil gère la variation de profondeur ==Utilisation : Détourage (ou découpe)== L'outil cylindrique suit les chemins (contour) Si on veut dimensionner correctement l'objet détouré, dans Inkscape, il faut ajouter (ou soustraire si l'objet est en creux) aux dimensions de l'objet le diamètre de l'outil (demi diamètre de chaque côté du chemin) ==Utilisation : Défonçage ou fraisage== Sélectionner le ou les objet qui délimitent l'aire à défoncer S'il y a plusieurs objets, en sélectionner deux et les associer en faisant : → Chemin ->Union Associer de la même manière les chemins ainsi associés avec chacun des autres objets Sélectionner l'option Aire de GcodeTools (et non pas Path to Gcode) Il y a deux manière de défoncer - soit en positif : l'objet est relief (en sculpture on dit qu'on doit « descendre le fond ») → onglet Aire → Appliquer des chemins de découpe sont générés <u>à l'extérieur</u> des objets sélectionnés - soit en négatif : l'objet est en creux → onglet Fill → Appliquer des chemins de découpe sont générés <u>à l'intérieur</u> des objets sélectionnés <u>Résumé des paramètres essentiels</u> Orientation pointsZ DepthProfondeur max (-) ToolsDepth stepProfondeur de chaque passe Path to GcodeZsafeRetrait outil / Coord. Z surface Scale ZCoefficient (peut être différent de -1) Offset ZCoordonnée pointe outil sur Z surface [[Catégorie:Réalisations]]
Résumé :
Modification mineure Suivre cette page
Annuler