La paz - Bolivia
pág. 1
INTRODUCCIÓN.
Una máquina CNC es muy importante en las industrias ya que esta máquina
se puede utilizar para cualquier proceso de manufactura, el principal objetivo de la
maquina CNC es el hacer la operaciones de manufactura en menor tiempo y tener
más producción ya que los trabajadores están limitados para hacer una mayor
producción, además estas máquinas hacen el trabajo con calidad, precisión y pueden
tener una cierta repetibilidad del proceso de trabajo. Nuestro proyecto es básicamente
una mini maquina CNC, la cual tiene la capacidad de poder realizar cualquier tipo de
dibujo en 2d que es básicamente la impresión de un dibujo en calidad. Una de las
ventajas de tener una mini CNC que realice dibujos es, que ya no hay que
preocuparnos de la calidad del dibujo y la precisión manual, ya que teniendo esta
máquina podrá realizar sin ningún problema lo que se busca en el proceso de trabajo,
porque la mini CNC estará programada para que pueda realizar cada una de las
ordenes que le dará la computadora, como por ejemplo las coordenadas donde debe
de trabajar el lápiz. La mini CNC trae muchos beneficios para el usuario como lo que
hemos mencionado antes que es la calidad, el tiempo y una mejor producción.
pág. 2
MOTORES PASO A PASO
Los motores paso a paso (P-P) pueden verse como motores eléctricos sin sistema de
conmutación. Típicamente, todas las bobinas del motor están en el estator y el rotor
es, o un imán permanente o, en el caso de motores de reluctancia variables, un bloque
de algún material magnéticamente blando. Toda la conmutación debe ser manejada
externamente por el controlador del motor y, habitualmente, los motores y
controladores están diseñados para que el motor pueda ser mantenido en una
posición o rotar en uno u otro sentido. La mayoría de estos motores pueden ser
manejados a frecuencias de audio permitiendo un giro rápido y, con un controlador
apropiado, pueden ser arrancados y parados en posiciones controladas.
ARDUINO
pág. 3
Una placa electrónica es una PCB (“Printed Circuit Board”, “Placa de Circuito
Impreso” en español). Las PCBs superficies planas fabricadas en un material no
conductor, la cual costa de distintas capas de material conductor. Una PCB es la
forma más compacta y estable de construir un circuito electrónico. Así que la placa
Arduino no es más que una PCB que implementa un determinado diseño de
circuitería interna, de esta forma el usuario final no se debe preocupar por las
conexiones eléctricas que necesita el microcontrolador para funcionar, y puede
empezar directamente a desarrollar las diferentes aplicaciones electrónicas que
necesite.
OBJETIVO
Entre las principales salidas profesionales del Control Numérico CNC destacan
inventores, proyectistas, delineantes, rectificadores, torneros, fresadores, etcétera.
Es decir, todos aquellos profesionales dedicados al diseó, fabricación y/o montaje de
piezas y/o conjuntos industriales.
pág. 4
OBJETIVO ESPECIFICO
MATERIALES:
- 1 ARDUINO UNO
- SHIELD V1 L293D
pág. 5
- 2 LECTORES DVDs DE PC
- 1 SERVO MOTOR
pág. 6
PROCEDIMIENTO:
Primero desmontamos los DVD hasta dejar libre los motores paso a paso que tienen
este tipo de lectores dejándolos así:
Luego lo armamos en una base firme puede ser del material que senos sea más fácil
utilizar en mi caso use madera mdf de 15 mm y escuadrar bien la estructura para el
carril y motores así:
pág. 7
Ahora que lo armamos bien hacemos la prueba los motores paso a paso de los
lectores y el motor servo. Esta llegaría a ser el circuito y las conexiones:
Una vez terminado de armar nuestro control numérico computarizado (CNC) nos
vamos al software que lo haremos con arduino después de instalar el driver
controlador d nuestro módulo shield L293D.
SOFTWARE:
pág. 8
char STEP = MICROSTEP ;
const int stepsPerRevolution = 100; // Debería ser adecuado para los steppers de DVD, puede variar
AF_Stepper myStepperY(stepsPerRevolution,1);
AF_Stepper myStepperX(stepsPerRevolution,2);
// Límites de la CNC, en mm
// Podria ir hasta 50 mm si se calibra bien (depende de la longitud del carril)
float Xmin = 0;
float Xmax = 40;
float Ymin = 0;
float Ymax = 40;
float Zmin = 0;
float Zmax = 1;
pág. 9
// Set to true to get debug output.
boolean verbose = false;
// Needs to interpret
// G1 for moving
// G4 P300 (wait 150ms)
// M300 S30 (pen down)
// M300 S50 (pen up)
// Discard anything with a (
// Discard any other command!
/**********************
* void setup() - Initialisations
***********************/
void setup() {
Serial.begin( 9600 );
penServo.attach(penServoPin);
penServo.write(penZUp);
delay(100);
// Decrease if necessary
myStepperX.setSpeed(600);
myStepperY.setSpeed(600);
/**********************
* void loop() - Main loop
***********************/
void loop()
{
delay(100);
pág. 10
char line[ LINE_BUFFER_LENGTH ];
char c;
int lineIndex;
bool lineIsComment, lineSemiColon;
lineIndex = 0;
lineSemiColon = false;
lineIsComment = false;
while (1) {
pág. 11
lineIsComment = false;
lineSemiColon = false;
}
else if ( c >= 'a' && c <= 'z' ) { // Upcase lowercase
line[ lineIndex++ ] = c-'a'+'A';
}
else {
line[ lineIndex++ ] = c;
}
}
}
}
}
}
newPos.x = 0.0;
newPos.y = 0.0;
// Needs to interpret
// G1 for moving
// G4 P300 (wait 150ms)
// G1 X60 Y30
// G1 X30 Y50
// M300 S30 (pen down)
// M300 S50 (pen up)
// Discard anything with a (
// Discard any other command!
pág. 12
case 0: // G00 & G01 - Movement or fast movement. Same here
case 1:
// /!\ Dirty - Suppose that X is before Y
char* indexX = strchr( line+currentIndex, 'X' ); // Get X/Y position in the string (if any)
char* indexY = strchr( line+currentIndex, 'Y' );
if ( indexY <= 0 ) {
newPos.x = atof( indexX + 1);
newPos.y = actuatorPos.y;
}
else if ( indexX <= 0 ) {
newPos.y = atof( indexY + 1);
newPos.x = actuatorPos.x;
}
else {
newPos.y = atof( indexY + 1);
indexY = '\0';
newPos.x = atof( indexX + 1);
}
drawLine(newPos.x, newPos.y );
// Serial.println("ok");
actuatorPos.x = newPos.x;
actuatorPos.y = newPos.y;
break;
}
break;
case 'M':
buffer[0] = line[ currentIndex++ ]; // /!\ Dirty - Only works with 3 digit commands
buffer[1] = line[ currentIndex++ ];
buffer[2] = line[ currentIndex++ ];
buffer[3] = '\0';
switch ( atoi( buffer ) ){
case 300:
{
char* indexS = strchr( line+currentIndex, 'S' );
float Spos = atof( indexS + 1);
// Serial.println("ok");
if (Spos == 30) {
penDown();
}
if (Spos == 50) {
penUp();
}
break;
}
case 114: // M114 - Repport position
Serial.print( "Absolute position : X = " );
Serial.print( actuatorPos.x );
Serial.print( " - Y = " );
pág. 13
Serial.println( actuatorPos.y );
break;
default:
Serial.print( "Command not recognized : M");
Serial.println( buffer );
}
}
}
/*********************************
* Draw a line from (x0;y0) to (x1;y1).
* int (x1;y1) : Starting coordinates
* int (x2;y2) : Ending coordinates
**********************************/
void drawLine(float x1, float y1) {
if (verbose)
{
Serial.print("fx1, fy1: ");
Serial.print(x1);
Serial.print(",");
Serial.print(y1);
Serial.println("");
}
if (verbose)
{
Serial.print("Xpos, Ypos: ");
Serial.print(Xpos);
pág. 14
Serial.print(",");
Serial.print(Ypos);
Serial.println("");
}
if (verbose)
{
Serial.print("x1, y1: ");
Serial.print(x1);
Serial.print(",");
Serial.print(y1);
Serial.println("");
}
long i;
long over = 0;
pág. 15
delay(StepDelay);
}
}
if (verbose)
{
Serial.print("dx, dy:");
Serial.print(dx);
Serial.print(",");
Serial.print(dy);
Serial.println("");
}
if (verbose)
{
Serial.print("Going to (");
Serial.print(x0);
Serial.print(",");
Serial.print(y0);
Serial.println(")");
}
// Raises pen
void penUp() {
penServo.write(penZUp);
delay(penDelay);
Zpos=Zmax;
digitalWrite(15, LOW);
digitalWrite(16, HIGH);
if (verbose) {
Serial.println("Pen up!");
}
}
// Lowers pen
void penDown() {
penServo.write(penZDown);
delay(penDelay);
Zpos=Zmin;
digitalWrite(15, HIGH);
digitalWrite(16, LOW);
pág. 16
if (verbose) {
Serial.println("Pen down."); } }
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Luego de copilar el código al arduino usamos un ejecutable que se abre con jaba
para poder mandar a imprimir al a nuestra cnc.
El ejecutable es GCTRL.
Para que el ejecutable mande una imagen a imprimir la imagen debe estar en
formato (gcode) para convertir imágenes en gcode que pueda reconocer el
ejecutable y posteriormente mandar a imprimir usamos el programa inkscape que
que es este:
pág. 17
Ahora ya teniendo una imagen vector izada con el inkscape mandamos a imprimir
pág. 18
CONCLUCION:
Con el desarrollo del proyecto se logró apreciar cómo funciona el CNC y los tipos de
grabados que ejecuta con el programa y todos los tipos, herramientas, principios de
funcionamiento y además aplicaciones que se le podrá dar a la maquinas
herramienta denominadas torno y fresadora.
WEB GRAFÍA:
https://www.youtube.com/watch?v=Q5ma1HDuotk&t=66s
https://www.instructables.com/id/Mini-CNC-Machine-Arduino-Based-Adafruit-Driver-Mot/
https://www.youtube.com/watch?v=Uyisg1a7rLg
https://github.com/fmdavid/miniCNC
https://www.labdomotic.com/2019/04/30/youtube-guida-software-cnc-diy/
pág. 19