Fresadora CNC 3 Ejes DIY: Construye una Máquina de Precisión
Componentes y materiales
| Componente | Cantidad |
|---|---|
| Arduino Nano R3 | 1 |
| Raspberry Pi 3 Model B | 1 |
| Driver de motor paso a paso A4988 (SparkFun) | 1 |
| Shield RepRap Arduino Nano 4-step 1-DC (Adafruit) | 1 |
| Separadores aluminio OpenBuilds | 1 |
| Fuente alimentación 12V/5A | 1 |
| Soporte en L OpenBuilds | 1 |
| Tuercas en T M5 OpenBuilds (pack 10) | 1 |
| Tornillos perfil bajo M5 OpenBuilds (pack 10) | 1 |
| Tornillos cabeza cilíndrica M3 OpenBuilds | 1 |
| Tornillo prisionero OpenBuilds | 1 |
| Arandela ranurada 15x5x2mm OpenBuilds | 1 |
| Bloque tuerca anti-retroceso husillo Acme 8mm OpenBuilds | 1 |
| Placa husillo roscado NEMA 17 OpenBuilds | 1 |
| Husillo Acme métrico 8mm OpenBuilds | 1 |
| Rodamiento 625 2RS 5x16x5 OpenBuilds | 1 |
| Barra lisa guiada | 1 |
| Ventilador refrigeración BLDC | 1 |
| Motor DC genérico | 1 |
| Servomotor Tower Pro MG996R | 1 |
| Driver doble puente H L293D (Texas Instruments) | 1 |
Herramientas necesarias
- Destornilladores
- Taladro
- Dremel / herramienta rotativa de corte
- Pistola de pegamento
- Soldador
- Amoladora angular
Aplicaciones y servicios online
- Linux
- ArtCAM
- GRBL 0.9
- Autodesk Fusion 360
- Arduino IDE
- Google Android Things
- VNC
Descripción del proyecto
Nuestro prototipo es basado en IoT, lo que le da una arquitectura escalable para controlarlo desde prácticamente cualquier lugar con conexión a internet. Es una CNC de 350x350 mm con área de trabajo 250x240 mm, funcionando con software de control de movimiento open-source (GRBL). El hardware también es mayormente open-source, reduciendo drásticamente costes. La máquina está construida íntegramente con componentes locales y puede mecanizar madera, plásticos, goma dura, resina dura, etc. El objetivo principal es fabricación de PCB de bajo coste; también permite grabado en madera.
Planeamos añadir soporte para mecanizado láser en futuras versiones.
Actualmente el sistema se controla desde una red local inalámbrica; queremos escalarlo a una aplicación web distribuida para conectar un ecosistema de múltiples dispositivos.
Especificaciones mecánicas
- Estructura base: Perfiles aluminio 2020 ranurados en T y uniones en L.
- Potencia husillo: ~80-85 W, 2000 rpm, control DC.
- Movimiento: Husillo roscado y varilla roscada con barras lisas guiadas y rodamientos de bolas a presión para suavidad en los 3 ejes.
- Resolución: Paso mínimo 0.8 mm/rev, 2000 pasos/rev → 1600 pasos/mm en todos los ejes.
- Dimensiones máquina: ~430x430x330 mm.
- Área trabajo: ~270x170x65 mm con precisión posicional 0.04 mm.
- Eje Z: Gantry impreso en 3D con doble barra guiada, recorrido 4.8 cm con fresa montada.
- Herramientas: Fresa en V 45° para PCB, soporta fresas cilíndricas 0.2-1.8 mm.
- Motores: NEMA 23, 3A máx por eje.
- Drivers: A4988 2.5A con microstepping 1/16 para máxima precisión a coste económico.
Arquitectura IoT / Industria 4.0
El control remoto se realiza desde pantalla sin cabeza (móvil/tablet como HMI) vía internet. Usamos Raspberry Pi + router (seguridad) con servidor web para interfaz de control inalámbrico. También planeamos monitorizar en tiempo real: par motor, consumo, vibración, ruido, etc., y visualizar insights en plataforma web para mejor colaboración. Esto es lo que en manufactura se llama IIoT (Industria 4.0).
Código
G-code de ejemplo (VHDL)
(Scribbled version of C:\Users\ABDERR~1\AppData\Local\Temp\ink_ext_XXXXXX.svgISF45X @ 3000.00)
(unicorn.py --tab="plotter_setup" --pen-up-angle=50 --pen-down-angle=30 --start-delay=160 --stop-delay=150 --xy-feedrate=3000 --z-feedrate=150 --z-height=0 --finished-height=0 --register-pen=true --x-home=0 --y-home=0 --num-copies=1 --continuous=false --pause-on-layer-change=true C:\Users\ABDERR~1\AppData\Local\Temp\ink_ext_XXXXXX.svgISF45X)
G21 (métrico) G90 (modo absoluto) G92 X0.00 Y0.00 Z0.00 (origen)
M300 S30 (pluma abajo) G4 P160 (espera 160ms)
M300 S50 (pluma arriba) G4 P150 (espera 150ms)
M18 (desactivar drivers) M01 (¿test registro ok?)
M17 (activar drivers si SÍ) M01 (Capa 'Calque 1')
(Poliínea 29 segmentos)
G1 X16.85 Y4.97 F3000.00 M300 S30.00 G4 P160
G1 X14.07 Y5.98 F3000.00 ... (archivo truncado, descargar completo)
Código control paso a paso (Arduino)
// AMIT
#include <Servo.h>
#include <AFMotor.h>
#define LINE_BUFFER_LENGTH 512
char STEP = MICROSTEP;
const int penZUp = 115;
const int penZDown = 83;
const int penServoPin = 10;
const int stepsPerRevolution = 48;
Servo penServo;
AF_Stepper myStepperY(stepsPerRevolution,1);
AF_Stepper myStepperX(stepsPerRevolution,2);
struct point { float x; float y; float z; };
struct point actuatorPos;
float StepInc = 1; int StepDelay = 0; int LineDelay = 0; int penDelay = 50;
float StepsPerMillimeterX = 100.0; float StepsPerMillimeterY = 100.0;
float Xmin = 0, Xmax = 40, Ymin = 0, Ymax = 40, Zmin = 0, Zmax = 1;
float Xpos = Xmin, Ypos = Ymin, Zpos = Zmax;
boolean verbose = false;
void setup() {
Serial.begin(9600);
penServo.attach(penServoPin);
penServo.write(penZUp); delay(100);
myStepperX.setSpeed(600); myStepperY.setSpeed(600);
Serial.println("Mini CNC Plotter vivo!");
Serial.print("Rango X: "); Serial.print(Xmin); Serial.print(" a "); Serial.print(Xmax); Serial.println(" mm.");
Serial.print("Rango Y: "); Serial.print(Ymin); Serial.print(" a "); Serial.print(Ymax); Serial.println(" mm.");
}
void loop() {
delay(100);
char line[LINE_BUFFER_LENGTH]; char c; int lineIndex=0; bool lineIsComment=false, lineSemiColon=false;
while(1) {
while(Serial.available()>0) {
c = Serial.read();
if(c=='\n' || c=='\r') {
if(lineIndex>0) {
line[lineIndex]='\0';
if(verbose){ Serial.print("Recibido: "); Serial.println(line); }
processIncomingLine(line, lineIndex);
lineIndex=0;
}
lineIsComment=false; lineSemiColon=false; Serial.println("ok");
} else {
if(lineIsComment || lineSemiColon) {
if(c==')') lineIsComment=false;
} else {
if(c<=' ') {} // ignorar espacios/control
else if(c=='/') {} // block delete no soportado
else if(c=='(') lineIsComment=true;
else if(c==';') lineSemiColon=true;
else if(lineIndex>=LINE_BUFFER_LENGTH-1) { Serial.println("ERROR - desbordamiento buffer"); lineIsComment=false; lineSemiColon=false; }
else if(c>='a' && c<='z') line[lineIndex++]=c-'a'+'A';
else line[lineIndex++]=c;
}
}
}
}
}
void processIncomingLine(char* line, int charNB) {
int currentIndex=0; char buffer[64]; struct point newPos; newPos.x=0; newPos.y=0;
while(currentIndex=Xmax) x1=Xmax; if(x1<=Xmin) x1=Xmin;
if(y1>=Ymax) y1=Ymax; if(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(); }
x1=(int)(x1*StepsPerMillimeterX); y1=(int)(y1*StepsPerMillimeterY);
float x0=Xpos, y0=Ypos;
long dx=abs(x1-x0), dy=abs(y1-y0);
int sx=x0dy) {
for(i=0;i=dx){ over-=dx; myStepperY.onestep(sy,STEP); } delay(StepDelay); }
} else {
for(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("Yendo a ("); Serial.print(x0); Serial.print(","); Serial.print(y0); Serial.println(")"); }
delay(LineDelay); Xpos=x1; Ypos=y1;
}
void penUp() { penServo.write(penZUp); delay(penDelay); Zpos=Zmax; digitalWrite(15,LOW); digitalWrite(16,HIGH); if(verbose) Serial.println("Pluma arriba!"); }
void penDown() { penServo.write(penZDown); delay(penDelay); Zpos=Zmin; digitalWrite(15,HIGH); digitalWrite(16,LOW); if(verbose) Serial.println("Pluma abajo."); }
Librería AFMotor (Arduino)
Librería completa para control de motores DC y paso a paso con shield Adafruit Motor Shield. Incluye gestión PWM, microstepping (8/16 pasos), y control de hasta 4 motores DC o 2 paso a paso. Código demasiado extenso para incluir completo; disponible en el repositorio oficial Adafruit.
Piezas personalizadas y envolventes
cnc_contour_SNa09InGkY.gm1cnc_coppertop_PIxEVyoMWI.gtl
Esquemáticos
Proceso de manufactura
- Construya su propio LUMAZOID: Visualizador de música DIY con Arduino
- Construye un Voltímetro Inteligente con Arduino y Smartphone – Proyecto DIY Fácil
- Construye un Skateboard VR Casero con Arduino, Google Cardboard y Bluetooth
- Máquina CNC Triple – Mejora Premium
- Mesa Auxiliar Zen Garden con Control CNC: Construye tu Propio Mueble Inteligente
- Construye un dispositivo de tratamiento radiónico EMR con Arduino DIY
- Construye una Máquina CNC Totalmente Funcional con Arduino Nano R3
- Simulador de Carreras 2D DIY con Arduino Nano y Servos SG90
- Construye tu Propia Máquina CNC Universal – Guía DIY Completa
- Mecanizado Vertical y CNC VMC: Introducción Completa
- Máquina VMC Mini Explicada: Fresado CNC Compacto para Proyectos de Pequeña Escala