Pen Plotter CnC

Este proyecto se va a mostrar el desarrollo de un ”Pen Plotter CnC”, el cuál, será capaz de escribir cualquier palabra o frase solo usando Arduino y sus bibliotecas no hará falta usar ningún programa externo.

A lo largo de la publicación, se explicará los distintos pasos que hemos dado para realizar este proyecto, además se mostrarán qué materiales se han usado, y cómo se ha trabajado tanto con el hardware como con el software y qué dificultades, soluciones y mejoras se podrían realizar.

Imagen 1. Estructura final Proyecto.

Para poder explicar el desarrollo de este proyecto se va separar en 2 partes: Hardware y Software explicando el planteamiento inicial y luego el que se llegó a aplicar.

Lo primero que hicimos, fue montar la estructura ya que sin ella no podíamos empezar con la parte del Software no podíamos probar de manera correcta lo que estábamos haciendo.

El planteamiento inicial era de realizar figuras de manera estática con el uso de un solo eje para subir y bajar el boli con un servo motor.

Esta idea evolucionó a una idea para poder escribir en una hoja Din-A4, esto hizo que montásemos un proyecto con varios ejes que pudieran cubrir el tamaño de una hoja fácilmente, para estos ejes se usaría motores paso a paso (Motor Nema 17) para realizar movimientos determinados y precisos según las instrucciones que se quería enviar, un eje horizontal que se ha llamado eje X, y un eje vertical denominado eje Y donde se usarían estos motores y luego un ultimo movimiento simple que se realizaría con el servo motor de subir y bajar el bolígrafo.

Además, durante el desarrollo de la practica fue evolucionando según se iba viendo progresos y se decidió meter finales de carrera, estos eran unos botones que daban la indicación que había un limite en los ejes, y asi evitar el deterioro de los motores y la posibilidad de poder seguir escribiendo no solo en una línea de la hoja si no en varias líneas, porque posteriormente se crearía una fase previa y final para reubicar donde se quería escribir en una coordenada conocida, usando la fase «Homing».

Imagen 2. Conexiones de motores y fin de carrera al controlador CnC shield.
Imagen 3. Vista frontal del proyecto.

También se diseñó piezas para la estructura, ya que necesitábamos que las piezas encajasen, así como un soporte para colocar el bolígrafo o proteger la placa Arduino. Cabe mencionar que la estructura a pesar de que las medidas de encaje de las piezas fueran standard como los V-Slots o las ruedas dentadas, no se tenía claro que diseño o forma se quería dar, por lo que se pidió consejo externo para ver como se podría plantear la estructura de la misma.

Imagen 4. Diseño de estructuras 3D.

En un principio, la práctica iba a estar enfocada de otra manera, solo se iba a usar Arduino para cargar un Firmware «Grbl», ya que de esta manera se reducía mucho el esfuerzo que se tenía que hacer en la parte de software, donde los motores paso a paso utilizaban un lenguaje de programación denominado «G-code», por lo que este código se generaba en un programa y luego mediante «Grbl» de Arduino se cargaba a la placa Arduino.

Pero como se ha indicado en la introducción, el objetivo de este proyecto era crearlo enteramente con Arduino, donde se utilizado tres librerías que servían para poder mover los motores : «accelstepper.h», «multistepper.h» y «servo.h».

Por otra parte, para el planteamiento de como queríamos mandar la instrucción para dibujar los caracteres alfanuméricos, se realizó mediante un sistema de puntos en un plan matricial, esto consistía en crear una matriz de coordenadas 3×3 donde pudiéramos indicar por coordenadas desde que punto a que punto queríamos que se pintase.

Imagen 5. Evolución de modelo del sistema matricial de coordenadas
Imagen 6. Ejemplos de figuras alfabéticas con el sistema de matrices.

A continuación se muestra un diagrama de flujo que explica los pasos de ejecución del programa y acompañado de un link que se ha facilitado para visualizar el código de manera más cómoda.

Imagen 7. Diagrama de flujo del proceso de ejecución del proyecto.

Durante la elaboración de del proyecto hubo varios problemas que supusieron un reto para el correcto desarrollo de la practica, estos problemas fueron:

  • Rotura de driver y cnc shield
    • Al inicio del proyecto, se dio prioridad al diseño del hardware antes que al software para garantizar tiempo suficiente. La falta de experiencia en diseño de circuitos llevó a un error en el cálculo del voltaje soportado por el driver. Esto, junto con problemas de adherencia del disipador de calor, resultó en daños tanto en el driver como en la CNC shield utilizada en ese momento, lo que obligó a adquirir reemplazos nuevos.
  • Desarrollo sistema de letras
    • En una etapa avanzada del proyecto, se enfrentó la dificultad de cómo incorporar las 27 letras del abecedario español. Implementarlas sin un sistema concreto resultaría costoso en tiempo y generaría un código caótico y de difícil revisión en caso de errores. Para simplificar y optimizar, se ideó un sistema matricial para luego enviar órdenes a los motores, lo que redujo la complejidad del código y facilitó la detección de posibles fallos en el futuro. Esta implementación no solo optimizó el tiempo del proyecto, sino que también mejoró la legibilidad y la velocidad de desarrollo.
  • Diagonales en las letras del sistema
    • A pesar del sistema matricial para las letras, se necesitaba implementar líneas horizontales, verticales y diagonales. Las dos primeras se manejaban con uno o dos motores, pero las diagonales, que requerían los tres motores, presentaron dificultades. Se intentó mover simultáneamente los ejes x e y, limitando las diagonales a 45º y complicando la representación de letras como la W. Esto llevó a buscar una solución para generar cualquier tipo de diagonal entre dos puntos, con el uso del Algoritmo de Bresenham como inspiración y el uso de la librería «multistepper.h».
Imagen 8. Algoritmo de Bresenham.
  • Ángulo y pieza del servomotor
    • Para permitir el movimiento del bolígrafo necesario para escribir con las letras previamente programadas, diseñó una pieza 3D que se acopló al servomotor del kit de Arduino. Se dedicó tiempo a ajustar el ángulo de movimiento del servomotor y se adquirieron bolígrafos adicionales y agujas de punto para mejorar la pieza. Una vez completados los ajustes, se integró la pieza al conjunto estructural y se posicionó el servomotor en su ubicación designada.
  • Universal Gcode Sender
    • Inicialmente, durante las primeras etapas del diseño del software, se empleó el programa Universal Gcode Sender para interactuar con los motores. Más adelante, se reconoció que limitar el uso de Arduino únicamente para cargar un firmware era poco práctico. Por ende, se optó por cambiar a Arduino y se enfocaron en utilizarlo desde ese momento en adelante.

Esta práctica, nos ha permitido ampliar nuestros conocimientos sobre Arduino dado que ninguno de nosotros habíamos usado los motores paso a paso y nos hemos tenido que familiarizar con ellos tanto a nivel de Software como a nivel de Hardware. En general, hemos sentido que el proyecto era demasiado complejo en determinadas ocasiones, pero creemos que hemos conseguido superar los problemas que nos han ido surgiendo a lo largo de ella. Como conclusión, diríamos que hemos mejorado nuestro nivel con Arduino desde que empezamos esta práctica hasta que la terminamos.

Sin embargo, nos hubiera gustado poder añadirle mejoras como es la optimización del «Homing» ya que el proceso de reorientación para poder escribir, era lento. Además, una posibles mejoras e ideas que se han tenido para una versión mejorada hubiera permitido mandar mensajes desde el teléfono móvil o mediante una tarjeta SD en vez de solo por la terminal, así como no limitar a escribir caracteres alfanuméricos si no crear figuras con un interprete de G-code a Arduino.

  • Sohaib Tarfi Elidrissi
  • Guillermo Arenal Estebaranz
  • Mario Diaz Gomez
  • Alberto Contreras Ruiz

También te podría gustar...

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *