Impresión 3D y CNCComandante

Plotter de pluma controlado por Raspberry Pi con GRBL

Construye una máquina de dibujo de dos ejes que convierte arte SVG en tinta sobre papel, con un Pi que prepara y envía el G-code.

NivelComandante
Tiempo8 h
Costo est.~$181
Pasos6

Un plotter de pluma es una máquina CNC que dibuja en vez de cortar. Un Arduino Uno con GRBL mueve dos motores paso a paso con aceleración suave, un servo pequeño levanta la pluma y el Pi usa vpype para optimizar los trazos SVG y enviarlos por USB.

⚠ SEGURIDAD
Los drivers de los motores se calientan: agrega un ventilador o disipadores y nunca desconectes un motor con el shield encendido. Mantén los dedos lejos de correas y poleas mientras se mueve.

Pasos de la misión

  1. Arma el marco

    Imprime o compra un pórtico XY; las correas y varillas lisas dan líneas más limpias que las varillas roscadas. Monta el portaplumas en una bisagra que un servo pueda levantar.

  2. Graba GRBL

    Carga GRBL en el Uno R3 desde el Arduino IDE, o una variante de GRBL que mueva un servo de pluma con M3/M5 si no usas motor en Z.

  3. Conecta y ajusta la corriente

    Coloca los drivers A4988 en el CNC shield, conecta los motores a X y Y y ajusta el límite de corriente de cada driver con un multímetro.

  4. Configura GRBL

    Ajusta los pasos por mm ($100, $101), las velocidades máximas y la aceleración; luego dibuja un cuadrado de prueba y mídelo.

  5. Prepara el arte

    En el Pi corre pip install vpype vpype-gcode y convierte un SVG con un perfil que defina tus comandos de subir y bajar la pluma.

  6. Envía y dibuja

    Corre el script de envío con el archivo .gcode y mira cómo dibuja el plotter.

Código

python3 -m venv ~/plot && source ~/plot/bin/activate
pip install vpype vpype-gcode pyserial
# 'myplotter' is a profile you define in ~/.vpype.toml with your pen up/down codes
vpype read drawing.svg linemerge linesort gwrite --profile myplotter drawing.gcode
# stream.py — send G-code to GRBL line by line, waiting for 'ok'
import serial, sys, time

port = serial.Serial('/dev/ttyUSB0', 115200)   # genuine Unos often show as /dev/ttyACM0
port.write(b"\r\n\r\n"); time.sleep(2); port.reset_input_buffer()

for raw in open(sys.argv[1]):
    line = raw.split(';')[0].strip()
    if not line:
        continue
    port.write((line + '\n').encode())
    reply = port.readline().decode().strip()
    if reply != 'ok':
        print(f"{line!r} -> {reply}")
print('Done')

Code comments are in English, like most libraries and docs — a good habit for makers.

Preguntas

¿Por qué el Uno R3 y no el Uno R4 WiFi?

El GRBL clásico está escrito para el chip ATmega328P del Uno R3. El R4 usa otro procesador, así que GRBL no corre en él.