Plotter casero con Raspberry pi


Muchos de nosotros recordamos que nos enseñaron, o incluso fabricamos, trazadores de pantógrafos antes de que las herramientas gráficas formaran parte del conjunto de características informáticas estándar en el hogar o la oficina. Daniele Procida, gurú de la informática de código abierto, se acordó de un dispositivo de este tipo cuando, durante la planificación de la conferencia PyCon Namibia, pensó en un ejemplo de baja tecnología de las posibilidades de Raspberry Pi. El resultado, BrachioGraph, que dibuja retratos y reproduce imágenes de objetos, fue un éxito instantáneo, inspirando a un grupo de entusiastas creadores.

Daniele señala el contraste entre los recursos que suelen estar disponibles en las conferencias del Reino Unido y Europa y los de los países africanos anfitriones: «Una cosa es hacer cosas con robótica si tienes acceso a impresoras 3D, cortadoras láser y piezas y componentes disponibles en el mercado, y otra muy distinta si eres un estudiante universitario de la Universidad de Namibia, o un estudiante de secundaria y probablemente tienes que compartir un portátil o un ordenador». Combinado con el propio interés de Daniele, pero su falta de experiencia en robótica, decidió «hacer algo que fuera lo más asequible posible, pero también significativo y también accesible, que no requiriera un mínimo absoluto de materiales y conocimientos e instalaciones».

Captura de movimiento


Jugar con servos y Raspberry Pi fue el punto de partida del proyecto del dispositivo de trazado de Daniele. Moverlos era bastante fácil, pero él estaba ansioso por ver un resultado práctico: «¿Qué podemos hacer realmente?». Con la nostalgia de los pantógrafos y los trazadores aéreos XY en común, Daniele explica que encontró «su capacidad para reproducir algo que hacemos con las manos intrínsecamente fascinante. Cuando ves un bolígrafo moviéndose, parece que tiene un propósito».

Aunque los servomotores pueden utilizarse para accionar un dispositivo a lo largo de líneas rectas, traducir los movimientos y las líneas dibujadas a mano en una página es más una cuestión de ángulos. La cuestión, dice Daniele, era si podía convertir los movimientos en líneas sobre una página. «Claro que se puede, porque tu propio brazo, si estás dibujando con un bolígrafo, tampoco tiene motores que vayan en línea recta. Sólo utiliza ángulos». Empezó modelando el diseño a partir del de un pantógrafo, que imita fielmente el movimiento del brazo humano. Un BrachioGraph, por su parte, es un «trazador de brazo».

Se anima a los imitadores


El BrachioGraph se puede configurar para que funcione solo, lo que lo convierte en un expositor ideal para conferencias. «En una conferencia, pasé mucha vergüenza porque cogí prestada una mesa en la sala de los patrocinadores y dejé algo funcionando, trazando». Cuando volvió, había tres o cuatro personas alrededor de la mesa en la que estaba el BrachioGraph, acaparando toda la atención de los patrocinadores que habían comprado mesas.

Dada una imagen para copiar, el BrachioGraph es capaz de reproducirla. Daniele dice que, tras muchos borradores de diseño y experimentación, lo más importante no es que «haya construido esta cosa y funcione», sino que sea reproducible por otras personas y con materiales domésticos como palitos de helado, o cartón y lápiz, o ropa.

«Lo más bonito para mí es que, de vez en cuando, alguien me envía un correo electrónico y me dice: ‘Oh, era el cumpleaños de mi sobrina de 12 años y, cuando estaba de visita, cogí una Raspberry Pi y tres servomotores, y nos pasamos el fin de semana ‘haciendo un BrachioGraph'».

Construir el trazador


Este tutorial te lleva a través del proceso de construcción de un plotter con brazos de 8cm. Los brazos de 8 cm son adecuados para dibujar un área de aproximadamente 14 cm de ancho por 9 cm de alto. Esto se ajusta bien a una hoja de papel A5.

Componentes y materiales

Necesitaremos:

  • una Raspberry Pi
  • tres servomotores (modelo recomendado: TowerPro SG90 – ver servomotores para más información)
  • palos o cartulina rígida para hacer dos brazos de unos 10 cm de largo cada uno
  • cables de puente y conector GPIO para conectar la Pi a los servos
  • una pinza de la ropa
  • un tablero o una hoja de cartulina, de tamaño A4 aproximadamente
  • pegamento fuerte o pistola de pegamento caliente

. Montaje
La siguiente imagen muestra la construcción básica del trazador BrachioGraph y los nombres de algunas piezas clave. En este ejemplo, la hoja de dibujo es de tamaño A5.

El motor de hombro
El motor de hombro debe colocarse en la posición correcta. Puedes encontrar una posición adecuada utilizando la imagen de arriba como guía, pero mejor aún, imprime la plantilla suministrada. Fíjala a la placa. El eje del motor deberá colocarse en la posición 0, 0 según la cuadrícula, como se muestra a continuación:

El servomotor debe elevarse unos milímetros (entre 4 y 6 mm debería estar bien), por ejemplo con algunas capas de cartulina. Pégalo en su sitio.

El brazo interior
Pega los servocuernos -los pequeños brazos de plástico que se fijan a los husillos del motor- al brazo interior, de modo que los centros de rotación estén separados exactamente 8 cm.

El brazo exterior, la pinza y los servos
Pega un servo y una pinza de la ropa al brazo exterior, de modo que un bolígrafo en la pinza y el centro de rotación del brazo estén también exactamente a 8 cm de distancia.

Pega el servo final en una posición tal que su cuerno pueda girar con seguridad, y sea capaz de levantar el bolígrafo del papel – mira el primer plano de arriba.

Instalar el software


El siguiente paso es instalar el software. La biblioteca BrachioGraph requiere algunos componentes adicionales. Necesita ejecutarse en un entorno Python 3, utilizando Python 3.6 o posterior.

Instalar los paquetes del sistema

Es posible que ya tengas instalados algunos de ellos, pero eso no debería importar. Los paquetes incluyen:

  • venv, para gestionar entornos virtuales bajo Python 3
  • PIGPIO, una excelente librería que proporciona control por hardware de los pines GPIO de la Pi – importante para la sincronización precisa de los pulsos. Viene con una interfaz Python para el código de bajo nivel.
  • varias librerías de sistema requeridas por la librería de imágenes Pillow Python
  • libatlas3-base y libgfortran5, requeridas por la librería matemática Numpy Python
  • python3-tk, para la integración gráfica de Turtle
  • Git

Si su SO es Raspberry PiOS ejecutaremos los siguintes comandos en nuestra Pi:

sudo apt install -y python3-venv python3-tk pigpiod libjbig0 libjpeg-dev liblcms2-2 libopenjp2-7 libtiff5 libwebp6 libwebpdemux2 libwebpmux3 libzstd1 libatlas3-base libgfortran5 git

Configurar un entorno virtual
Crea y activa un entorno virtual Python en el que trabajar:

python3 -m venv env
source env/bin/activate

El entorno debe estar activo siempre que utilices el trazador. Puede saber cuando el entorno virtual está activo desde el prompt de bash:

(env) pi@raspberrypi:~ $


Si necesita reactivar el entorno, ejecuta source env/bin/activate una vez más, en este directorio,

Clonar el repositorio BrachioGraph
Utiliza Git para clonar el repositorio BrachioGraph desde https://github.com/evildmp/brachiograph:

git clone https://github.com/evildmp/BrachioGraph.git


O, si ya ha configurado una clave pública usando ssh-keygen y ha añadido su clave pública a su cuenta de GitHub, puede usar SSH en su lugar:

git clone [email protected]:evildmp/BrachioGraph.git

Instalar paquetes Python
Las versiones fijas de los paquetes Python están listadas en requirements.txt en el directorio BrachioGraph. Instálelos ejecutando

cd BrachioGraph
pip install -r requirements.txt


Esto instalará:

  • Numpy, una biblioteca matemática de Python
  • La biblioteca Python de PIGPIO
  • Pillow, la biblioteca de imágenes de Python más utilizada.
  • tqdm, para el indicador de progreso mientras se dibuja
  • readchar, para permitir que los métodos BrachioGraph.drive() acepten entradas del usuario
  • pytest, para ejecutar el conjunto de pruebas

Sólo tiene que instalarlos una vez en tu entorno virtual. La próxima vez que actives el entorno virtual, verás que siguen ahí.

Cablear el plóter


Asegúrese de que la Raspberry Pi está apagada mientras la conecta. Aunque las Raspberry Pis pueden soportar una cantidad francamente asombrosa de abuso, corre el riesgo de causar daños si se equivoca en el cableado. Hazlo con la alimentación apagada, tómese su tiempo y compruebe dos veces tu trabajo.

Hay que conectar los tres servos a la Raspberry Pi. Cada servo tiene tres cables:

  • 5V (alimentación) – normalmente naranja o rojo
  • Tierra – normalmente marrón
  • Señal – normalmente amarillo

5V y tierra son necesarios para alimentar el servo; el cable de señal lleva un pulso, cuya anchura (su longitud en microsegundos) determina la posición del motor.

Al menos dos de los servos tendrán que compartir una conexión de 5V, ya que la Raspberry Pi sólo tiene dos disponibles. La forma de conseguirlo dependerá de lo que tengas disponible.


Este es el listado de cada conexión desde el servo hasta la Raspberry Pi:

Es decir usamos la alimentación de 5v DC para alimentar los tres servos , y luego como cables de señal usamos los GPIO 14,15 y 18.

Poner en marcha el BrachioGraph

Antes de hacer nada, separe el brazo interior de los servos; de lo contrario, corre el riesgo de que la áquina se agite salvajemente cuando se activen los servos.

Crear una instancia de BrachioGraph
Encienda la Raspberry Pi. Ejecúte:

sudo pigpiod
source env/bin/activate
cd BrachioGraph
python

Y a continuación, en la shell de Python, importa la clase BrachioGraph del módulo brachiograph:

from brachiograph import BrachioGraph


Cree una instancia de BrachioGraph a partir de la clase:

bg = BrachioGraph()


Esto inicializa una instancia de BrachioGraph bg con la que puedes interactuar. Oirá el zumbido de los motores mientras los coloca en su posición por defecto, aparcados.

Colocación y prueba del brazo interior
Ahora vuelva a colocar el brazo interior, de modo que la máquina tenga más o menos este aspecto.

Debe estar lo más cerca posible de -90˚ (como se marca en la cuadrícula), pero no te preocupes si no lo está, lo ajustaremos más tarde.

Haga una prueba rápida:

bg.set_angles(0, 90)


El primer valor es el ángulo del brazo interior, el segundo el ángulo del brazo exterior. El brazo interior debería girar en el sentido de las agujas del reloj hasta aproximadamente 0˚. Devuélvelo a su punto inicial con:

bg.park()

Colocación y prueba del brazo exterior

Ahora vuelve a colocar el brazo exterior. Debe estar en una posición lo más cercana posible a 90˚ respecto al brazo interior:

Pruébas:

bg.set_angles(-90, 120)


El brazo debería girar en el sentido de las agujas del reloj desde su posición de 90˚ unos 30˚. Vuelve a aparcar los brazos con bg.park().

Ajuste el mecanismo de elevación de la pluma

Prueba a bajar y subir el motor de la pluma:

bg.pen.abajo()
bg.pen.up()


Ajuste la bocina del motor y la posición de la pluma en la pinza de la ropa para que en la posición baja la pluma toque firmemente el papel, y en la posición alta lo despeje uno o dos milímetros.

Comprobación del estado


Ejecutar:

bg.status()


El BrachioGraph informará de su estado:

Iniciar el trazado

Mover los brazos


El método set_pulse_widths() es una forma manual de establecer los anchos de pulso que determinan la posición de un servo. Prueba esto:

bg.set_pulse_widths(1500, 1500)


No debería pasar nada, porque esos ya son los anchos de pulso que está aplicando. Pero intenta incrementar el ancho de pulso del primer servo en 100 (microsegundos) – asegúrate de que los números son correctos, porque un valor erróneo puede hacer que los brazos vuelen:

bg.set_pulse_widths(1400, 1500)


Esto debería mover el brazo interior unos pocos grados en el sentido de las agujas del reloj. El primer valor controla el ancho de pulso del servo del hombro, y el segundo el ancho de pulso del servo del codo. Prueba diferentes valores para los dos servos, cambiándolos no más de 100 cada vez, hasta que los brazos parezcan perpendiculares entre sí y al área de dibujo.

Anote esos dos valores en un trozo de papel; los utilizaremos en el siguiente paso.

Servo

ancho de pulso en ángulo estacionado

Hombro (estacionado a -90˚)

Codo (estacionado a 90˚)

Inicializar un BrachioGraph personalizado

Por defecto, un BrachioGraph se inicializa con valores de 1500 para ambos servos (para la mayoría de los servos, 1500 µs los sitúa en el centro de su movimiento). Sin embargo, es probable que hayas encontrado que se necesitan valores ligeramente diferentes para alinear los brazos en los ángulos correctos. Digamos que los dos valores que anotaste en el paso anterior fueron:

1570 para el motor del hombro

1450 para el motor del codo.

En ese caso, reinicie el BrachioGraph utilizando los valores que has descubierto:

bg=BrachioGraph(servo_1_parked_pw=1570, servo_2_parked_pw=1450)

Empieze a dibujar
Ahora debería ser capaz de dibujar una caja:

bg.box(bounds=[-2, 7, 2, 11])


Esto significa: dibuja un rectángulo definido por las coordenadas -2, 7 en la esquina inferior izquierda y 2, 11 en la esquina superior derecha. Todo es siempre relativo al eje del motor del hombro en 0,0):

El BrachioGraph dibujará tu cuadrado. Será un cuadrado tambaleante e imperfecto, pero debería ser un cuadrado reconocible, de unos 4 cm de ancho y alto.Pruebe a aumentar progresivamente las dimensiones del recuadro, por ejemplo:

bg.box(bounds=[-3, 6, 3, 12])

Si tiene suerte, debería poder dibujar una caja que tenga el tamaño completo del área de dibujo por defecto. El comando status() que usaste arriba lo muestra:

abajo a la izquierda: (-8, 4) arriba a la derecha: (6, 13)
Para dibujar una caja alrededor de esta área, utilice el comando box() sin ningún parámetro:

bg.box()


Pruebe algunos patrones de prueba

Y ahora dibuja un patrón de prueba:

bg.test_pattern()


¿Qué ocurre si dibuja el patrón de prueba al revés?

bg.test_pattern(inverso=Verdadero)


Verá que los patrones se alinean de forma muy imperfecta. Esto se debe a la holgura y la fricción del sistema. En la próxima sección trataremos de mitigar esto, y en general mejorar la exactitud y precisión del trazador. Mientras tanto, vamos a dibujar una imagen de prueba.

Haga un dibujo

En el directorio de imágenes, encontrarás un archivo llamado demo.json. Éste contiene las líneas y los puntos a lo largo de ellas, representados como coordenadas en formato JSON, y es lo que el trazador utiliza para dibujar

Traze el archivo:

bg.plot_file("images/demo.json")

Mas información en https://www.brachiograph.art

Cómo convertir su impresora 3D en un plotter en dos pasos


Un plotter o trazador es un dispositivo que puede dibujar texto e imágenes en papel con un utensilio ( por ejemplo un bolígrafo). 

Si pensamos en en el hardware necesario , podemos pensar que un buen atajo puede ser una vieja ( o no) impresora 3D pues estas ya incluyen todo el hardware y la electrónica que necesitamos: sólo hay que encontrar la manera de adjuntar un utensilio de dibujo y cómo decirle que dibuje.

En realidad como vamos a ver es mucho más fácil de lo que nos podemos imaginar, asi que en esta publicación de blog, aprenderá cómo puede hacer su propio dibujo de impresora.

Convertir una impresora 3D en una impresora 2D

Quizás se pregunte cuál es la utilidad de convertir una impresora 3D en algo que pueda dibujar imágenes 2D en un papel. Después de todo, las impresoras convencionales hacen eso desde hace varias décadas, ¿no es eso un paso atrás?

Pues , un plotter le permitirá dibujar con bolígrafo, lápices de colores, crayones, marcadores e incluso una pluma (básicamente todo lo que pueda dejar marcas en un papel). Pero no solo eso, incluso podemos dibujar en diferentes materiales, como cartón o vidrio. También puede ser creativo con tipos de tinta únicos, como dorada, plateada o que brillan en la oscuridad

Una utilidad innegable para los electrónicos es ayudar en la fabricación de circuitos impresos pues normalmente el diseño de la pcb se realiza calcando el diseño en la parte del cobre y luego hay que volver hay que repintar el diseño con un rotulador edding ( Además incluso puede ayudar en el taladrado con un cnc los orificios para los componentes)

Paso 1 – Colocación de un utensilio de dibujo

Desea montar de manera confiable un bolígrafo en el cabezal de la impresora y asegurarse de que la punta del bolígrafo quede un poco por debajo de la boquilla. Empecé diseñando una pequeña parte de este propósito. Se sujeta al cabezal de la impresora utilizando un pequeño tornillo M3 para fijar el bolígrafo en él:

Puede conseguir el modelo en thingiverse aquí . Debe adaptarse a cualquier impresora Creality Ender-3 o CR-20, y posiblemente a otras impresoras Creality. También es personalizable, por lo que puede modificar las dimensiones (si desea colocar un marcador más grande o necesita un ajuste más ajustado con la impresora).

Para otras impresoras, deberá diseñar su propio mecanismo de montaje (cuando lo haga, comparta un enlace en los comentarios). Si bien también es posible usar tornillos para montar el bolígrafo, personalmente prefiero el mecanismo de recorte, ya que me permite cambiar entre los modos de impresora 3D y trazador muy rápido, y también cambiar los bolígrafos muy rápido.

Paso 2 – Calibración

Una vez que haya montado correctamente su lápiz en su impresora, es hora de calibrarlo. Deberá adjuntar una hoja de papel a la cama de la impresora:

A continuación, deberá encontrar la altura correcta para imprimir. Se recomiendo usar Repetier Host pen lugar del clasico Cura, pues Repetier Host hara todo mucho más fácil ).

Antes de comenzar, asegúrese de que la plataforma de la impresora esté nivelada y que tanto la boquilla como la plataforma de la impresora estén frías.

Después de ubicar su impresora, vaya a la pestaña «Control manual» dentro de Repetier y mueva el cabezal de impresión hacia arriba hasta que la punta del bolígrafo esté por encima del papel. Luego, mueva su eje X / Y al borde de donde desea que esté su dibujo. Finalmente, mueva el eje Z hacia abajo en incrementos de 0,1 mm, hasta que vea que la punta del bolígrafo toca el papel. A continuación, puede mover un poco la X / Y y comprobar que el bolígrafo realmente deja un rastro en el papel. Cuando termine, observe los valores X / Y / Z que aparecen en la línea superior:

En mi caso, los valores fueron 47 para X, 40 para Y y 14,6 para Z. Usaremos estos valores en breve cuando generemos el archivo GCode para imprimir.

Paso 3: elegir qué imprimir y generacion del gcode

Esa es una dificil pues existen infinitass opciones. Sin embargo, deberá obtenerlo en formato vectorial, por lo que si usa Google Imágenes, agregue el texto type:svg al final de su consulta de búsqueda. También puede convertir imágenes JPEG y PNG a SVG , pero sugeriría comenzar con algo que ya viene como un vector para simplificar las cosas.

Cuando se comenza un proyecto asi seguro que se piensa en el tiempo para conseguir el hardware correcto, pero se sorprenderalo rápido que se hace funcionar la parte del hardware. Sin embargo, el software es otra historia completamente diferente; como siempre, el software es donde reside la verdadera complejidad .

 Además de Repetier Host mencionado anteriormente, también necesita obtener Inkscape (que, por cierto, ¡también es útil si desea crear arte de PCB !).

Dentro de Inkscape, cree un nuevo archivo y vaya al menú Archivo → Propiedades del documento (Acceso directo: Ctrl + Shift + D). Luego, establezca el tamaño del documento un poco más pequeño que el tamaño de la cama de impresión y asegúrese también de usarlo mm para las unidades.

Una vez que haya establecido el tamaño, puede importar cualquier archivo SVG que desee o simplemente dibujar un texto con la herramienta Texto:

Cuando termine, con el texto aún seleccionado, haga clic en el menú Ruta → Objeto a ruta (Mayús + Ctrl + C). Esto convertirá el texto en una serie de puntos conectados por líneas, lo cual es necesario para alimentar la impresora. Puede agregar más elementos como espirales y formas de estrella, repitiendo la operación «Objeto a ruta» para cada uno:

Al imprimir, los objetos no se rellenarán, por lo que es posible que desee eliminar su color de relleno y establecer su color de trazo en negro (o el color de su lápiz), para obtener una representación más precisa del resultado final. Seleccione todos los objetos (Ctrl + A) y luego elimine el relleno y aplique color negro para el trazo (Ctrl + Shift + F):

Cuando esté satisfecho con el resultado, es hora de generar el GCode para la impresora. Usaremos una extensión llamada «Gcodetools», que viene incluida con Inkscape (si no, tiene una versión anterior y necesita actualizar).

Comenzaremos definiendo los puntos de orientación, que le dicen a la impresora cómo mapear las líneas en la pantalla en el papel. Vaya al Menú de extensiones → Gcodetools → Puntos de orientación  y después de asegurarse de que el modo “2 puntos” esté seleccionado, haga clic en Aplicar y luego en Cerrar . Ahora debería ver dos nuevos elementos de texto agregados en la parte inferior de su dibujo:

Estos son los puntos de orientación. Cada punto es una lista de coordenadas X, Y, Z que especifica la ubicación de destino de ese punto en el sistema de coordenadas de la impresora. Debe editarlos para que coincidan con la X / Y que encontró en el paso de calibración y establecer la Z (la tercera coordenada) en 0.

Edite el texto en el punto izquierdo y actualícelo para que contenga las coordenadas X / Y que encontró. En mi caso lo fue (47; 40; 0). Para el punto correcto, agregue 100 al valor X, copie el Y / Z del primero, por ejemplo (147; 40; 0):

A continuación, necesitamos generar una herramienta y configurar su velocidad. Este paso es opcional, pero si no lo hace, su impresora se dibujará realmente muy lento. Vaya al menú Extensiones → Gcodetools → Biblioteca de herramientas  y seleccione «predeterminado» en «Tipos de herramientas»:

Haga clic en Aplicar y luego en Cerrar, y debería ver un rectángulo verde con muchas configuraciones agregadas a su dibujo:

Puede alejar este rectángulo (junto con todos los valores) para que no se sobreponga en su dibujo. Luego, desea editar el texto y cambiar los valores de «Alimentación», «Alimentación de penetración», «Alimentación de paso» para establecer la velocidad de movimiento de la impresora al dibujar. Yo uso 4500 para todos ellos (la unidad es mm / min, por lo que este valor corresponde a 75 mm / seg).

¡Finalmente estamos listos para generar el GCode! Seleccione todos los elementos en su dibujo (Ctrl + A) y vaya a Extensiones → Gcodetools → Ruta a Gcode…

Allí, vaya a la pestaña Opciones y establezca «Escala a lo largo del eje Z» en 1, y «Desplazamiento a lo largo del eje Z» al valor Z que encontró en el paso de calibración, menos uno (encontré 14.6, así que lo configuré aquí a 13.6):

A continuación, vaya a la pestaña Preferencias y establezca el nombre del archivo de salida y la ruta del directorio cuando desee que se guarde. También puede configurar la altura segura Z en un valor más bajo, para acelerar la impresión (yo uso 5):

Finalmente, cambie a la pestaña Ruta a Gcode , configure la Función de profundidad en 1y haga clic en Aplicar. Tardará unos segundos y es posible que muestre una advertencia acerca de que no se han seleccionado rutas, que puede ignorar con seguridad. Debería ver una nueva capa en la parte superior de su dibujo, mostrando los movimientos del cabezal de impresión en el archivo Gcode generado:

En este punto, sugiero abrir el archivo .gcode en un editor de texto y verificar que se vea legítimo, especialmente que los valores Z coincidan con el valor de calibración que encontró:

También sugiero editar la primera linea G00 y agregar F4500 al final, de lo contrario, su impresora podría hacer que el movimiento inicial del cabezal sea realmente lento:

¡Eso es! Estás listo para imprimir. Cargue su archivo Gcode en el host de Repetier y debería ver su dibujo en la pantalla:

Diga su oración, haga clic en el botón «Iniciar impresión» y … ¡disfrute del espectáculo!

Fuente :https://urish.medium.com/