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

Comment créer un mini traceur CNC 2D à l'aide d'un lecteur de DVD de récupération, L293D

Composants et fournitures

Arduino UNO
Cerveau de la machine
× 1
Bouclier moteur L293D
Contrôler les moteurs pas à pas de l'axe
× 1
Servomoteur Tower pro 9g
Stylo de mouvement Zaxis UP &Pen DOWN
× 1
Scrap DVD Dr
axe X et axe Y mécaniques
× 1
Câbles de raccordement (générique)
× 1

Applications et services en ligne

Arduino IDE
Traitement IDE
Inkscape

À propos de ce projet

Disposez deux lecteurs de DVD de rebut comme indiqué sur l'image

1. Télécharger l'IDE Arduino

2. Télécharger l'IDE de traitement

3. Ouvrez l'IDE Arduino et chargez le code téléchargé depuis ici .

4. Ouvrez Processing IDE et chargez le code téléchargé depuis ici .

Ouvrez le lecteur de DVD de rebut et retirez le plateau mobile interne. Ce plateau doté d'un mécanisme pas à pas, agira comme notre axe X et notre axe Y. Parcourez les images ci-jointes pour comprendre comment assembler votre machine. Faites un trou sur le boîtier du lecteur de DVD vide, montez nos axes X et Y sur le boîtier du DVD respectif à l'aide de boulons à écrou.

Placez-les maintenant perpendiculairement les uns aux autres.

Code G

Pour créer des fichiers g-code compatibles avec cette machine CNC, vous devez utiliser Inkscape.

Inkscape est un logiciel de graphisme vectoriel de qualité professionnelle qui fonctionne sous Windows, Mac OS X et Linux. Il est utilisé par les professionnels du design et les amateurs du monde entier pour créer une grande variété de graphiques tels que des illustrations, des icônes, des logos, des diagrammes, des cartes et des graphiques Web. Inkscape utilise le standard ouvert W3C SVG (Scalable Vector Graphics) comme format natif et est un logiciel gratuit et open source. Téléchargez et installez Inkscape à partir d'ici.

(Important :télécharger la version 0.48.5) Vous devez maintenant installer un module complémentaire qui permet d'exporter des images vers des fichiers g-code. Ce module complémentaire peut être trouvé ici avec les notes d'installation.

Veuillez suivre la vidéo sur YouTube pour savoir comment créer un fichier G-code.

  • Téléchargez le fichier gctrl dans l'IDE de traitement et cliquez sur le bouton PLAY dans la fenêtre de traitement.
  • Appuyez d'abord sur 'p' pour sélectionner votre port de communication
  • Si vous le souhaitez, vous pouvez régler la vitesse de jogging en appuyant sur le bouton 1, 2 ou 3 du clavier
  • Appuyez sur "g" pour charger le fichier G-code
  • Votre machine est prête à tracer dès que vous appuyez sur Entrée en sélectionnant le fichier g-code

Votre traceur est maintenant prêt. Quelques liens de téléchargement de fichiers G-code prêts à l'emploi :

  • https://www.dropbox.com/s/bazynxife4k1trv/Hisoka.gcode?dl=0
  • https://www.dropbox.com/s/h6bkdr5lhegbj6a/papay.gcode?dl=0
  • https://www.dropbox.com/s/ueku5ckt6m4cmg4/spong1.gcode?dl=0

Merci de votre attention! Visitez ce lien pour une illustration complète.

Vidéo pour voir la machine en direct :

Code

  • Code CNC Arduino
  • Code de traitement
Code CNC ArduinoArduino
Téléchargez ce code sur Arduino
#include #include #define LINE_BUFFER_LENGTH 512char STEP =MICROSTEP;// Servo position pour haut et bas const int penZUp =95;const int penZDown =83; // Servo on PWM pin 10const int penServoPin =10;// Devrait convenir aux DVD pas à pas, mais n'est pas trop important iciconst int stepsPerRevolution =48; // créer un objet servo pour contrôler un servo Servo penServo; // Initialiser les pas à pas pour les axes X et Y à l'aide de ces broches Arduino pour le L293D H-bridgeAF_Stepper myStepperY(stepsPerRevolution,1) ; AF_Stepper myStepperX(stepsPerRevolution,2) ; /* Structures, variables globales */struct point { float x; flotter y ; flotteur z; };// Position actuelle du plotheadstruct point actatorPos;// Paramètres de dessin, devraient être OKfloat StepInc =1;int StepDelay =0;int LineDelay =0;int penDelay =50;// Pas du moteur pour aller de 1 millimètre.// Utiliser croquis d'essai pour faire 100 étapes. Mesurez la longueur de la ligne. // Calcul des pas par mm. Entrez ici.float StepsPerMillimeterX =100.0;float StepsPerMillimeterY =100.0;// Dessiner les limites du robot, en mm// OK pour commencer. Pourrait aller jusqu'à 50 mm si bien calibré. flotteur Xmin =0; flotteur Xmax =40; flotteur Ymin =0; flotteur Ymax =40; flotteur Zmin =0; flotteur Zmax =1; flotteur Xpos =Xmin; flotteur Ypos =Ymin; flotteur Zpos =Zmax; // Mettre à true pour obtenir la sortie de débogage.boolean verbose =false;// Doit interpréter // G1 pour le déplacement// G4 P300 (attendre 150 ms)// M300 S30 (stylo vers le bas)// M300 S50 (stylo vers le haut)/ / Abandonner tout ce qui a un (// Abandonner toute autre commande !/************************ * void setup() - Initialisations ******* ****************/void setup() { // Setup Serial.begin(9600); penServo.attach(penServoPin); penServo.write(penZUp); delay(100); // Diminuer si nécessaire myStepperX.setSpeed ​​(600); myStepperY.setSpeed ​​(600); // Définir et déplacer à la position par défaut initiale // À déterminer // Notifications !!! Serial.println ("Mini traceur CNC vivant et efficace ! "); Serial.print("La plage X va de "); Serial.print(Xmin); Serial.print(" à "); Serial.print(Xmax); Serial.println(" mm."); Serial. print("La plage Y va de "); Serial.print(Ymin); Serial.print(" to "); Serial.print(Ymax); Serial.println(" mm."); }/***** ******************* * void loop() - Boucle principale *************************/void loop() { delay(100); char line[ LINE_BUFFER_LENGTH ]; caractère c; int lineIndex; bool lineIsComment, lineSemiColon; indexligne =0 ; ligneSemiColon =false; lineIsComment =false; while (1) { // Réception en série - Principalement de Grbl, ajout de la prise en charge du point-virgule while ( Serial.available()>0 ) { c =Serial.read(); if (( c =='\n') || (c =='\r') ) { // Fin de ligne atteinte if ( lineIndex> 0 ) { // La ligne est complète. Alors exécutez ! line[ lineIndex ] ='\0'; // Termine la chaîne if (verbose) { Serial.print( "Received :"); Serial.println( ligne ); } processIncomingLine( line, lineIndex ); indexligne =0 ; } else { // Ligne vide ou de commentaire. Ignorer le bloc. } lineIsComment =false; ligneSemiColon =false; Serial.println("ok"); } else { if ( (lineIsComment) || (lineSemiColon) ) { // Jeter tous les caractères de commentaire if ( c ==')' ) lineIsComment =false; // Fin du commentaire. Reprendre la ligne. } else { if ( c <=' ' ) { // Jeter les blancs et les caractères de contrôle } else if ( c =='/' ) { // Blocage non pris en charge. Ignorer le caractère. } else if ( c =='(' ) { // Activer l'indicateur de commentaires et ignorer tous les caractères jusqu'à ')' ou EOL. lineIsComment =true; } else if ( c ==';' ) { lineSemiColon =true; } else if ( lineIndex>=LINE_BUFFER_LENGTH-1 ) { Serial.println( "ERROR - lineBuffer overflow" ); lineIsComment =false; ligneSemiColon =false; } else if ( c>='a' &&c <='z' ) { // Upcase minuscule line[ lineIndex++ ] =c-'a'+'A'; } else { line[ lineIndex++ ] =c; } } } } }}void processIncomingLine( char* line, int charNB ) { int currentIndex =0; tampon de caractères [ 64 ] ; // Espérons que 64 suffisent pour 1 paramètre struct point newPos; nouvellePos.x =0.0 ; nouvellePos.y =0,0 ; // Doit interpréter // G1 pour se déplacer // G4 P300 (attendre 150ms) // G1 X60 Y30 // G1 X30 Y50 // M300 S30 (stylo vers le bas) // M300 S50 (stylo vers le haut) // Jeter tout ce qui a un ( // Ignorer toute autre commande ! while( currentIndex =Xmax) { x1 =Xmax; } si (x1 <=Xmin) { x1 =Xmin; } si (y1>=Ymax) { y1 =Ymax; } si (y1 <=Ymin) { y1 =Ymin; } if (verbose) { Serial.print("Xpos, Ypos:"); Serial.print(Xpos); Serial.print(","); Serial.print(Ypos); Serial.println(""); } if (verbose) { Serial.print("x1, y1:"); Serial.print(x1) ; Serial.print(","); Serial.print(y1) ; Serial.println(""); } // Convertir les coordonnées en pas x1 =(int)(x1*StepsPerMillimeterX); y1 =(int)(y1*PasParMillimètreY); flottant x0 =Xpos ; float y0 =Ypos; // Voyons le changement pour les coordonnées long dx =abs(x1-x0); long dy =abs(y1-y0) ; entier sx =x0 dy) { pour (i=0; i=dx) { over-=dx; monpasY.onestep(sy,STEP); } delay(StepDelay); } } else { pour (i=0; i=dy) { over-=dy; myStepperX.onestep(sx,STEP); } delay(StepDelay); } } if (verbose) { Serial.print("dx, dy:"); Serial.print(dx); Serial.print(","); Serial.print(dy); Serial.println(""); } if (verbose) { Serial.print("Aller à ("); Serial.print(x0); Serial.print(","); Serial.print(y0); Serial.println(")"); } // Délai avant la soumission des lignes suivantes delay(LineDelay); // Mettre à jour les positions Xpos =x1; Ypos =y1;}// Augmente penUp () penvoid { penServo.write(penZUp); retard(penDelay); Zpos=Zmax ; digitalWrite(15, FAIBLE); digitalWrite (16, HAUT); if (verbose) { Serial.println("Pen up!"); } }// Abaisse penDown penvoid() { penServo.write(penZDown); retard(penDelay); Zpos=Zmin ; digitalWrite(15, ÉLEVÉ); digitalWrite (16, FAIBLE); if (verbose) { Serial.println("Stylo baissé."); } }
Code de traitementJava
Téléchargez ce code dans Processing IDE
import java.awt.event.KeyEvent;import javax.swing.JOptionPane;import processing.serial.*;Serial port =null;// sélectionnez et modifiez la ligne appropriée pour votre système d'exploitation/ / laisser comme null pour utiliser le port interactif (appuyez sur 'p' dans le programme)String portname =null;//String portname =Serial.list()[0]; // Mac OS X//String nom_port ="/dev/ttyUSB0"; // Linux//String nom_port ="COM6"; // Windowsboolean streaming =false;float speed =0,001;String[] gcode;int i =0;void openSerialPort(){ if (portname ==null) return; if (port !=null) port.stop(); port =new Serial(this, portname, 9600); port.bufferUntil('\n');}void selectSerialPort(){ String result =(String) JOptionPane.showInputDialog(frame, "Sélectionnez le port série qui correspond à votre carte Arduino.", "Sélectionnez le port série", JOptionPane. QUESTION_MESSAGE, null, Serial.list(), 0); if (résultat !=null) { portname =result; openSerialPort(); }}configuration vide(){ size(500, 250); openSerialPort();}void draw(){ background(0); remplir(255); entier y =24, dy =12 ; text("INSTRUCTIONS", 12, y); y +=dy; text("p:sélectionnez le port série", 12, y); y +=dy; text("1 :régler la vitesse sur 0,001 pouce (1 mil) par jogging", 12, y); y +=dy; text("2 :régler la vitesse sur 0,010 pouce (10 mil) par jogging", 12, y); y +=dy; text("3 :régler la vitesse sur 0,100 pouce (100 mil) par jogging", 12, y); y +=dy; text("touches fléchées :jog dans le plan x-y", 12, y); y +=dy; text("page up &page down :jogging sur l'axe z", 12, y); y +=dy; text("$:afficher les paramètres grbl", 12, y); y+=dy; text("h:rentrer à la maison", 12, y); y +=dy; text("0:zero machine (set home à l'emplacement actuel)", 12, y); y +=dy; text("g :diffuser un fichier g-code", 12, y); y +=dy; text("x :arrêter la diffusion du g-code (ceci n'est PAS immédiat)", 12, y); y +=dy; y =hauteur - dy; text("vitesse de jogging actuelle : " + vitesse + " pouces par pas", 12, y ); y -=dy; text("port série actuel :" + nom de port, 12, y); y -=dy;}void keyPressed(){ if (key =='1') speed =0,001; si (touche =='2') vitesse =0,01 ; si (touche =='3') vitesse =0,1 ; if (!streaming) { if (keyCode ==LEFT) port.write("G91\nG20\nG00 X-" + speed + " Y0.000 Z0.000\n"); if (keyCode ==RIGHT) port.write("G91\nG20\nG00 X" + vitesse + " Y0.000 Z0.000\n"); if (keyCode ==UP) port.write("G91\nG20\nG00 X0.000 Y" + vitesse + " Z0.000\n"); if (keyCode ==DOWN) port.write("G91\nG20\nG00 X0.000 Y-" + vitesse + " Z0.000\n"); if (keyCode ==KeyEvent.VK_PAGE_UP) port.write("G91\nG20\nG00 X0.000 Y0.000 Z" + vitesse + "\n"); if (keyCode ==KeyEvent.VK_PAGE_DOWN) port.write("G91\nG20\nG00 X0.000 Y0.000 Z-" + vitesse + "\n"); if (clé =='h') port.write("G90\nG20\nG00 X0.000 Y0.000 Z0.000\n"); if (clé =='v') port.write("$0=75\n$1=74\n$2=75\n"); //if (clé =='v') port.write("$0=100\n$1=74\n$2=75\n"); if (clé =='s') port.write("$3=10\n"); if (clé =='e') port.write("$16=1\n"); if (clé =='d') port.write("$16=0\n"); if (clé =='0') openSerialPort(); if (clé =='p') selectSerialPort(); if (clé =='$') port.write("$$\n"); } if (!streaming &&key =='g') { gcode =null; je =0 ; Fichier fichier =nul ; println("Chargement du fichier..."); selectInput("Sélectionnez un fichier à traiter :", "fileSelected", file); } if (key =='x') streaming =false;}void fileSelected(File selection) { if (selection ==null) { println("La fenêtre a été fermée ou l'utilisateur a cliqué sur annuler."); } else { println("Utilisateur sélectionné " + selection.getAbsolutePath()); gcode =loadStrings(selection.getAbsolutePath()); if (gcode ==null) return ; diffusion = vrai ; flux(); }} void stream(){ if (!streaming) return ; while (true) { if (i ==gcode.length) { streaming =false; retourner; } if (gcode[i].trim().length() ==0) i++; sinon casser; } println(gcode[i]); port.write(gcode[i] + '\n'); i++;}void serialEvent(Serial p){ String s =p.readStringUntil('\n'); println(s.trim()); if (s.trim().startsWith("ok")) stream(); if (s.trim().startsWith("error")) stream(); // XXX :vraiment ?}

Schémas

connectez tous les composants comme indiqué sur la figure

Processus de fabrication

  1. Fabriquer une machine à écrire pour les devoirs à la maison
  2. Créer un moniteur Ambilight à l'aide d'Arduino
  3. Système robotique de détection humaine utilisant Arduino Uno
  4. Jouet contrôlé par Android utilisant un bouclier de moteur Raspberry
  5. Comment créer un bouton de clavier personnalisable personnalisable
  6. Comment mesurer la masse de la Terre à l'aide d'Arduino
  7. Comment créer un site web communiquant Arduino en utilisant PHP
  8. Comment faire de la musique avec un Arduino
  9. Comment faire une boussole en utilisant Arduino et Processing IDE