Todas las entradas por Rideonbeat

Diario de armado de mi CNC.

Al día de hoy son varias personas las que me preguntan diversas cosas relacionadas con la construcción de un CNC casero por lo cual he decidido crear esta entrada para generalizar los puntos recurrentes en las platicas que he tenido a lo largo de varias semanas, pero antes un poco de historia, es un poco extenso pero si os da flojera leer seguramente os rendiréis al armar la maquina por que dependiendo de nuestras elecciones vamos a necesitar leer mucho en diversas partes. Espero no sea el caso de nadie y trataré de hacer mínima la investigación poniendo tanta info como el tiempo me permita en esta misma pagina.

10678772_1481167978837955_1894119581948475618_n
 Mi proyecto personal es armar controladores MIDI basados en Arduino como se puede ver en otras entradas de este blog, gracias a los de Texas Instruments que amablemente me han mandado circuitos integrados para este proyecto adquirí consciencia de que el método del acido no es precisamente el mas amigable para crear PCB con componentes SMD a doble capa.
 Necesito crear PCB para los integrados 4051 y sus 8 pots correspondientes, para los medidores de volumen, etc, ademas de crear las partes físicas en las que irán montados los componentes electrónicos, crear el gabinete, tapas, montajes para los encoders… En fin, muchas cosas que no puedo crear si no tengo una maquina que lo haga a mi gusto y necesidad y la solución para estos problemas es simplemente el CNC.
En México según he visto no existen muchas fuentes para obtener los materiales y menos si no se tiene el dinero necesario para comprar las partes recomendadas así que tuve que ingeniármelas para crear sistemas que pudieran replicar las funciones de otros componentes mas caros.
Una maquina CNC basicamente requiere de:
  • Un software que controle la maquina, y transmita el Gcode a la maquina.
  • Un sistema electrónico encargado de comunicarse con el software para mover los motores.
  • Un sistema de transmisión para que los motores “pasen” su fuerza al mecanismo y se produzca el movimiento.
  • Un sistema de guias que permita movimientos fluidos y suaves en los ejes que se necesiten para nuestra maquina.
El software y la electrónica están estrechamente relacionados ya que dependiendo de nuestras posibilidades económicas tenemos la opción de comprar una placa dedicada que trabaje por ejemplo con MACH3, Linux CNC o USB CNC.
En mi caso decidi mover los motores con una electronica basada en Arduino, en realidad mas económico que la opción de comprar la placa para Mach 3, que aunque técnicamente es lo mismo presenta algunas desventajas para mi gusto como es el caso de que esas placas trabajan aún con el puerto paralelo del que no dispongo desde hace tiempo en ningúna maquina así que… Arduino.
Como ya tenía una Arduino Leonardo investigue en esa dirección y encontré un software libre llamado CNC control que se comunica perfectamente con la Leonardo, solo es necesario visitar la pagina, descargar el firmware, subirlo a la Leonardo, hacer lo propio con el software y básicamente ya estamos mandando Gcode a la Leonardo.
Después de este punto necesitamos, una fuente de por lo menos 12 volts y tantos amperios como nos pidan nuestros motores con algo mas de potencia de reserva.
También necesitamos Drivers para los motores, que es la electrónica encargada de recibir la instrucción de Arduino y activar los motores de la manera adecuada.
Obviamente, los motores, mi configuración en este punto es: Arduino Leonardo, fuente ATX de 15 amperios en la salida de 12v, drivers Pololu A4988 y motores Nema 17 de 1.7 amperios todo montado sobre un protoboard que reemplazare próximamente.
Ojo, en México los distribuidores que he encontrado venden comúnmente Nema 17 y 23 pero entre motores de la misma serie (ej. Nema 17) varían las especificaciones por ejemplo de tamaño y amperaje, los drivers A4988 entregan sin problemas un amperio pero son capaces de manejar 2 amperios si se enfrían correctamente con un disipador y un ventilador adecuado ademas de ajustar correctamente el limite de corriente en el mismo driver pero de esto hablare probablemente en el siguiente post.
Para daros una idea correcta de la parte mecánica, construcción de la maquina, guías y transmisión recomiendo ampliamente darse una vuelta por la siguiente pagina y después regresar aquí o seguirse leyendo temas en los foros de esa misma pagina.
No pretendo armar una guía completa de como armar un CNC en realidad si no contar mas o menos los problemas que he encontrado en el proceso y quizá con esto evitar a otros los problemas que he encontrado así que sigamos.
IMG_1097
Uno de los problemas encontrados de inicio es que no conseguí correderas lineales, de hecho no las conseguí por ningún lado ya que si las busque, así que tuve que diseñar un sistema basado en baleros comunes y corrientes que rodaran sobre un eje cilíndrico, ajustados con tuercas y empaques.
El sistema funciono bien de inicio, corriendo suavemente pero tuve que ajustar las perforaciones al milímetro para que no tuviera juego y ajustar con tuercas y empaques para que entre el balero exterior e interior presionaran ligeramente contra la varilla, este sistema tiene la desventaja que ejerce una fuerza de manera lateral en el balero y reduce su vida útil aunque no llegue a apreciar esto en ningún momento por lo siguiente.
Varillas cilíndricas: Para que realmente funcionen bien es necesario comprar diámetros alrededor de los 18 mm que es donde se elimina mas o menos la flexión y deben ser rectificadas para que sean perfectamente lineales,  hay que recordar que estas varillas sobre todo en el eje Y están cargando el peso de todo el mecanismo, conseguir esos diámetros rectificados es caro y un poco difícil.
La flexión de los ejes, por mínima que parezca es excesiva cuando hablamos de precisión, yo tenia varillas de 12 milímetros que presentaban una flexión de un par de décimas de milímetros, en el eje Y (que es el que carga el peso) es casi inapreciable pero en el eje X este par de décimas producen un error terrible en la punta por que hay que recordar que de la transmisión X a la punta del Router o Dremel hay una relación angular y el peso de la herramienta acentúa la flexión de modo que terminaba con un error del orden de 1.8mm en el eje X y Z.
Captura de pantalla 2015-05-10 a las 18.28.54
 La solución cambiar el sistema de guía en el eje X y ya puesto, rearmar toda la maquina con el sistema reforzado para que pueda cargar una herramienta de mayor peso, en eso estoy en estos días precisamente, de aquí me atrevo a dar un consejo, Investigar bien las ventajas y desventajas de cada sistema y seguir leyendo mis desventuras para no cometer los mismos errores, “Lo barato sale caro”, esto es muy conocido y en parte cierto pero mas que comprar barato mi problema fue que todo el trabajo se fue basando en experimentación por que estoy seguro que a cualquier problema hay una solución, buena o mala pero existe.
Diseño reforzado:Captura de pantalla 2015-05-07 a las 22.23.41
VBit
Un problema para las PCB, por muy planas que parezcan no lo son, tienen errores de décimas de milímetros, estas placas se fresan con puntas V-bit que terminan en punta así que si perforan demasiado eliminan cobre de mas dejando mas angostas las pistas y si se deja muy poco margen en algunos puntos la V-bit no toca la placa que es un problema mas que obvio.
 La solución a esto. Leyendo por todo internet me di cuenta que esto no es un problema propio o de la flexión particular de mi maquina, es generalizado para muchas personas que arman sus propias maquinas destinadas a esto o incluso gente que compra la maquina. Existen algunos programas en internet como el Autoleveller que resuelve la situación haciendo una serie de mediciones en malla sobre la placa y compensando el eje Z en el  código g para así excavar solamente lo que la placa requiere para eliminar el cobre, tener menos esfuerzo en el sistema y la herramienta lo que alarga la vida y precisión del sistema completo.
Autoleveller solo funciona de momento con Linux CNC y Mach 3, pero.
El software CNC Control que he estado usando es un software libre que muy amablemente ha creado el Administrador de la pagina que anteriormente les comenté y que distribuye gratuitamente para quien quiera, aún mas, es muy accesible para realizar peticiones acerca de nuevas funciones y mejoras en el soft que va actualizando como el tiempo se lo permite, ha prometido implementar un sistema parecido al Autoleveller en alguna versión próxima de su software, este programa hace uso del firmware que se distribuye también en la pagina pero en las próximas versiones se centrara en trabajar con el firmware GRBL que técnicamente se ha convertido en un estándar para quienes construyen maquinas basadas en hardware y software libre que tienen que ver con las maquinas de control numérico computarizado (CNC), tales como impresoras 3D maquinas de corte o grabado láser o routers.
Mi hermosa Leonardo no soporta el GRBL, existen mods para adaptar otras placas al GRBL pero lo mas sencillo es comprar una Arduino Uno que es perfectamente compatible, ya la tengo montada con el firmware y estará montada en la nueva maquina en un par de días, ahora, investigando acerca del autolevel y GRBL encontré esta aplicación web llamada ChilliPeppr que es una interface para controlar maquinas basadas en GRBL y que ya tiene la opción para hacer la medición y adaptar el código de manera adecuada al crear nuestras PCB, sin embargo como aún no la he probado escribiré acerca de esto en otra entrada aunque en la misma pagina existe un video que explica el proceso.
Ya me extendí bastante así que lo dejo aquí por el momento esperando que esta info sea útil e interesante para vuestros trabajos.
Anuncios

Samples gratuitos de Texas Instruments.

Captura de pantalla 2015-03-27 a las 10.07.35

Algunas personas lo saben y otras no pero Texas Instruments y otras compañías productoras de circuitos integrados envían muestras completamente gratis con todo y envío a estudiantes, desarrolladores y empresas que se desenvuelven en el sector tecnológico.

Importante. Antes que todo es necesario comentar que almenos Texas Instruments permite registrarse con cualquier correo pero desde hace por lo menos un año para el envío de samples NO acepta correos con dominios gratuitos como yahoo, hotmail, gmail, etc, por lo cual es necesario tener un correo con dominio personalizado, los estudiantes o miembros de una institución educativa o de desarrollo es probable que tengan correos de la institución y esos sirven para este fin. 

Si no se pertenece a una institución se puede comprar un dominio de internet con cualquier compañía que los registre pero hay que checar que al comprar el dominio la compañía registradora nos ofrezca cuando menos un correo con el dominio que hemos comprado, en mi caso corrí con suerte y registre mi dominio rideonbeat.com y me dieron un correo *****@rideonbeat.com, es con este con el que me registre en Ti y con el que he recibido samples para mi proyecto, esta parte del proceso si tiene costo pero puede ir desde 10 hasta 200 MXN o mas por un año dependiendo de la compañía, promociones y terminación, en este caso nos basta con un .com.

Ahora bien.

Para solicitar los samples es necesario registrarse en la pagina de Texas Instruments http://www.ti.com (esquina superior izquierda) una vez registrado y con la sesión iniciada buscamos la parte que requerimos, en la pagina del producto aparece la pestaña sample & buy.

Captura de pantalla 2015-03-27 a las 10.24.33

Damos click ahí y nos lleva a otra pagina donde podemos ver si tienen muestras disponibles.

Captura de pantalla 2015-03-27 a las 10.27.32

En esta pagina damos click en request samples y nos llevara al carrito de compra donde podremos ver cuantos chips podemos pedir de este modelo

. Captura de pantalla 2015-03-27 a las 10.41.56

 

Procedemos al checkout y rellenamos los formularios que nos soliciten, en esta parte del proceso se nos pide dirección de envío, y una justificación del proyecto para el que solicitamos las muestras.

Importante: No todos los productos del catalogo están disponibles como muestras gratis, en mi experiencia son los chips relativamente nuevos de los cuales desean promocionar su uso los que son mas fáciles de solicitar.

En la siguiente pagina podemos ver otras compañías que ofrecen muestras gratuitas (gracias a Marco Antonio Salas por el dato).

http://www.ladyada.net/library/procure/samples.html

(DIY) Controlador Midi con Arduino Leonardo prototipo terminado. Actualización.

El proyecto consta del desarrollo de un controlador MIDI basado en Arduino Leonardo, la elección de esta placa en particular esta basada en el uso del micro AT Mega32u4 que es capaz identificarse como un dispositivo MIDI-USB sin la necesidad de hacer una conversión por hardware.

Otra razón es que es fácilmente posible encontrar la placa o incluso clones de la placa a muy bajo costo.

Para que la placa se identifique como un dispositivo MIDI es necesario instalar en el entorno Arduino las librerías “arcore” de Rkistner disponibles en el siguiente enlace. En el mismo enlace se encuentran  en ingles las instrucciones para instalar.

Una vez instalado arcore debemos seleccionar en el menú herramientas/board la placa Arduino Leonardo (arcore)

Y el puerto:

El entorno de desarrollo recomendado es Arduino 1.5.4

Arcore de momento trabaja con las placas Arduino Leonardo, Arduino Micro y Bare Conductive Touch Board. Algunos usuarios reportan que arcore funciona con otras placas basadas en el mismo micro que son compatibles con el entorno de programación Arduino.

¿Que es Arduino?

Arduino es una plataforma de hardware libre, basada en una placa con un micro controlador y un entorno de desarrollo, diseñada para facilitar el uso de la electrónica en proyectos multidisciplinarios.

El hardware consiste en una placa con un micro controlador Atmel AVR y puertos de entrada/salida. Por otro lado el software consiste en un entorno de desarrollo que implementa el lenguaje de programación Processing/Wiring y el cargador de arranque (bootloader) que es ejecutado en la placa. (Wikipedia)

¿Que necesitamos?

Conocer cuando menos básicamente el entorno de software de Arduino y los comandos básicos, para un usuario novato se recomienda leer y estudiar el documento en el siguiente enlace

La placa, los botones, potenciometros o leds que deseemos utilizar ademas del gabinete donde se colocarán.

Consideraciones.

Leonardo tiene 20 entradas/salidas digitales que pueden ser configuradas de distintos modos.

Por ejemplo en este proyecto se implementan 8 potenciometros, 8 botones, un codificador rotativo (que usa dos entradas digitales) y dos salidas led que responden a los mensajes enviados por el host con el cual se desea trabajar.

Sin embargo con las características de esta placa es posible configurar por ejemplo 12 potenciometros y 8 botones.

O simplemente 20 botones.

Notas: Las entradas análogas necesarias para los potenciometros se limitan a 12.

Cada codificador rotativo hace uso de 2 entradas digitales para funcionar.

Código 1.0 esta disponible aqui.

Correccion 1.1 del código 24/8/2014 aquí.

*Los mensajes del encoder han sido cambiados de 0-127 a 1-127 para corregir el funcionamiento del encoder en el host, anteriormente funcionaba de manera limitada en algunos hosts.

*En la recepcion de los mensajes midi provenientes del host se ha cambiado el comando “while” por “if” para optimizar la respuesta.

*”while” se ejecuta cíclicamente mientras cierta condicion ocurre por lo que ralentizaba el encendido de los leds al recibir constantemente mensajes del host.

Con el cambio a if solamente comprueba el mensaje del host y ejecuta la función sin hacerlo en ciclo.

Correccion 1.2 del código 25/8/2014 aquí.

*Ahora los leds medidores de señal funcionan de manera semi-analoga mediante PWM con una curva logarítmica.

Correccion 1.3    31/10/2014 aquí.

*Se ha elevado la resolucion del encoder al doble.

Y este es el diagrama de conexiones.

*Actualizo el diagrama ya que con el update 1.2 es necesario usar también una resistencia de 220 Homs en el led del pin 13, aunque este pin tiene una resistencia integrada y en teoría no es necesario usar un resistor externo, en la practica el PWM mete ruido en las lecturas análogas.

Para el debounce es buena idea conectar un capacitor de .1 uf entre las entradas digitales y tierra.

Superficie de control MIDI con Arduino Leonardo presentación (DIY).

Hace quizá un par de años decidí construir mi propio controlador midi para personalizarlo completamente, puesto a investigar encontré las placas de desarrollo Teensy basadas en el micro controlador de Atmel mega32u4, este chip tiene la particularidad de soportar MIDI directamente por USB por lo cual era la opción obvia sin tener que hacer una conversión por hardware para conectarla a un PC, por cuestiones geográficas supongo me fue difícil encontrar dicha placa y el envío me resultaba mas caro que la misma placa ademas del tiempo de espera, investigando mas encontré la placa Arduino Leonardo basada en el mismo micro chip y en teoría con las mismas prestaciones según algunos blogs.

La placa la encontre en la ciudad de México de manera relativamente fácil y me puse a aprender programación para poder llevar acabo mi proyecto. Una vez empece a trabajar con ella me di cuenta que en las librerías de dicha placa no existía el soporte MIDI-USB por lo cual tenia que hacer la conexión por hardware y eso no era lo que quería así que deje el proyecto de lado buscando eventualmente si la situación había cambiado.

Después de haber dejado el proyecto unos meses realize una nueva búsqueda y encontré el trabajo de Rkistner quien había modificado el core de las librerías de hardware de la Leonardo para que pudiera ofrecer el soporte que yo necesitaba para realizar mi proyecto, técnicamente el trabajo de Rkistner esta en desarrollo y no ofrece APIs de alto nivel por el momento, sin embargo es fácil entender el protocolo de los mensajes midi para crear el código necesario de entrada y salida, de nuevo me puse a trabajar en ello.

En internet existe bastante documentación de controladores MIDI basados en Arduino por lo cual es relativamente fácil programar la placa para recibir leer potenciometros y botones y enviar los mensajes correspondientes, lo que no encontré y era parte de mi proyecto eran buenas referencias para el uso de un encoder, (si, mi perversión es hacer scratch como los dj famosos) de igual manera me puse a investigar y probar códigos que encontré en internet para leer el encoder. Quizá sea mi completa inexperiencia en programación pero ninguno de los códigos que encontré funciono y no quise tomarme la molestia de entender lo que los autores habían intentado o su método de lectura del rotativo.

Si usamos algo de logica es sencillo entender como funciona uno de estos encoders para detectar el movimiento hacia adelante o hacia atrás, entonces cree un código muy sencillo que detectara dos cosas, una si el encoder se había movido desde su ultima lectura y dos, en que sentido se había movido para enviar el mensaje correspondiente.

Aqui el enlace: Encoder código basico.

Entre una cosa y otra también me puse a diseñar la forma física que tendría mi controlador y llegué mas o menos a esto:

Intente optimizar el diseño para aprovechar al máximo las conexiones que la Leonardo posee, en esta etapa me di cuenta que sería util cuando menos desde el punto de vista estético que mi interface tuviera medidores de nivel de señal aprovechando la posibilidad de configuración de Traktor para proveer salidas de nivel de señal y usando las salidas PWM de Arduino junto con el chip LM3914 de Texas Instruments poder encender una linea de leds.

De nueva cuenta modifique el código para que leyera los mensajes Control Change que salen de Traktor y los utilizara para encender el/los leds.

Usando un solo led con la salida PWM (analogWrite) un solo led parece estar encendido siempre o varía muy poco su brillo, por el momento no he comprado el LM3914, entonces he optado por usar el led de manera digital usando un nivel de referencia para que encienda solo cuando el nivel de la señal exceda cierto parámetro y solo represente los pulsos mas altos, como se puede ver en el siguiente video todo va funcionando como se espera.

Aqui el código basico para enviar y recibir MIDI, un encoder con una salida de nivel de señal para led en dos versiones, led análogo y led digital, es necesario renombrar los archivos eliminando el signo “+”: Encoder code.

 

Espero esta información sea util para alguien mas e ire informando de los progresos.