Tabla de contenido:

[WIP] Creación de un Drawbot controlado por un brazalete Myo: 11 pasos
[WIP] Creación de un Drawbot controlado por un brazalete Myo: 11 pasos

Video: [WIP] Creación de un Drawbot controlado por un brazalete Myo: 11 pasos

Video: [WIP] Creación de un Drawbot controlado por un brazalete Myo: 11 pasos
Video: 20 самых крутых олигархов в России (2018-2021) 2024, Noviembre
Anonim
[WIP] Creación de un Drawbot controlado por un brazalete Myo
[WIP] Creación de un Drawbot controlado por un brazalete Myo

¡Hola a todos!

Hace unos meses, decidimos intentar abordar la idea de construir un robot de tracción de marco abierto que solo usara una banda Myo para controlarlo. Cuando iniciamos el proyecto por primera vez, sabíamos que tendría que dividirse en un par de fases diferentes. Nuestra primera fase principal fue intentar comprender un diseño de marco abierto para nuestro robot de dibujo. Esta es una configuración no estándar y queríamos ver cuáles eran los beneficios de este diseño.

En segundo lugar, sabíamos que construir este prototipo solo resultaría útil para nosotros. Nuestro diseño y plan era mover nuestro marco final en metal y, usando un arduino, recibir nuestra posición del acelerómetro y el giroscopio integrados en la banda Myo. Esa información luego se enviaría a los motores y replicaría el movimiento del usuario. Sabíamos que esto haría que nuestra segunda fase se dividiera en tres aspectos principales:

  1. programación de Myo a motores, a través del Arduino
  2. diseño eléctrico para traducir nuestros datos en movimiento
  3. diseño mecánico para crear un marco de tamaño razonable que facilitará nuestro movimiento

Cada miembro de nuestro equipo se sintió más cómodo con una parte única de nuestro proceso de diseño, por lo que decidimos dividir nuestro trabajo entre cada persona. También mantuvimos un blog durante todo nuestro proceso de diseño para rastrear nuestro pensamiento diario, en lugar de un aspecto más global.

Paso 1: lo que planeamos hacer

Image
Image

Nuestro objetivo era combinar estos dos productos de una manera que nunca antes habíamos visto. Nos propusimos hacer una transmisión en vivo entre nuestro brazalete Myo y nuestra propia versión de un diseño inspirado en AxiDraw de Evil Mad Scientist.

Paso 2: Lista de ingredientes del prototipo

2 Tablas de madera de 2 x 4 1 Cinturón o cadena de medida> = 65”4 Clavos de madera 3 Engranajes con dientes que se ajustan al cinturón o cadena 4 Placas perforadas de 3 x 8 vex Separadores de goma de 30 ⅜” 8 Arandelas de 1”de diámetro 1 Madera de 1” de diámetro espiga 1 'de largo 8 tornillos Vex 1”8 ½” Tornillos Vex 8 2”tornillos Vex 8 ¼” Separadores de goma 48 Tuercas Vex 1 Brida pequeña

Paso 3: [Prototipo] Carpintería de nuestros brazos y el interior del carro

[Prototipo] Carpintería de nuestros brazos e interior del carro
[Prototipo] Carpintería de nuestros brazos e interior del carro

Agarramos dos 2x4 y los cortamos en longitudes iguales (33 ¼ )

Usando una sierra de mesa, hicimos una muesca a lo largo del lado de la parte estrecha de las tablas de ¼”de profundidad y ⅛” de ancho en el medio.

Corte la clavija en trozos de 4 2 "y taladre un agujero en el medio de la clavija de aproximadamente ¼" de diámetro con una taladradora.

Paso 4: [Prototipo] Fabricación de nuestro carro

[Prototipo] Fabricación de nuestro carro
[Prototipo] Fabricación de nuestro carro
[Prototipo] Fabricación de nuestro carro
[Prototipo] Fabricación de nuestro carro
[Prototipo] Fabricación de nuestro carro
[Prototipo] Fabricación de nuestro carro

Lo ideal sería utilizar dos piezas de 7x7 de acero perforado vex, pero todo lo que teníamos a nuestra disposición eran las tiras de 2x7, por lo que las atornillamos juntas en una configuración en "X".

Apile 5 de los espaciadores de goma de ⅜”y asegure las esquinas de las placas vex entre sí.

Asegure sin apretar las clavijas de madera como se muestra en la figura 1 para que giren libremente con aproximadamente 2”de espacio entre ellas use la imagen para ver dónde deben colocarse los engranajes en este punto usamos arandelas pero luego descubrimos que los engranajes pequeños de plástico vex funcionan mejor.

Usando tornillos de ½ "vex, espaciadores de goma de ¼" y arandelas de 1 "de diámetro, asegure las arandelas en una posición elevada como se muestra en la figura 1 (usamos engranajes de plástico verde porque no pudimos encontrar las arandelas correctas) asegúrese de que las arandelas puedan para girar fácilmente y encajar en las muescas de la tabla.

Paso 5: [Prototipo] Poniéndolo todo junto

[Prototipo] Poniéndolo todo junto
[Prototipo] Poniéndolo todo junto
[Prototipo] Poniéndolo todo junto
[Prototipo] Poniéndolo todo junto
[Prototipo] Poniéndolo todo junto
[Prototipo] Poniéndolo todo junto
[Prototipo] Poniéndolo todo junto
[Prototipo] Poniéndolo todo junto

Coloque una tabla sobre una superficie y deslice el carro hacia el medio para que las arandelas sostengan el carro sobre la tabla y en cada lado de la tabla claven los engranajes hacia abajo para que giren libremente. Clave un engranaje en un extremo de la segunda tabla asegurándose de que esté centrado y deslícelo en el carro perpendicular a la primera tabla.

Ahora el cinturón debe estar enrollado a través del sistema como se muestra, preste especial atención a cómo están las clavijas en el exterior del cinturón y cómo no hay nada en el centro del chasis que pueda obstaculizar el cinturón mientras se está moviendo.

Ahora el cinturón debe abrocharse en el lado de la tabla que no tiene engranaje. Usamos un clavo adicional y una brida para sujetar el nuestro. Pero el método utilizado no importa siempre que el cinturón esté anclado en ese punto.

Paso 6: [Prototipo] ¡Terminado y en movimiento

Image
Image

¡Eso debería ser, tira del cinturón en diferentes combinaciones y mira los diferentes efectos que tiene en el brazo!

Paso 7: Traducir nuestro modelo a nuestro diseño terminado

Traduciendo nuestro modelo en nuestro diseño terminado
Traduciendo nuestro modelo en nuestro diseño terminado
Traduciendo nuestro modelo en nuestro diseño terminado
Traduciendo nuestro modelo en nuestro diseño terminado

Una vez que completamos nuestro prototipo, estábamos extasiados. Ninguno de nosotros estaba seguro de cómo funcionaba el sistema antes del montaje. Pero, una vez que nuestras piezas se unieron, rápidamente descubrimos lo que nos gustaba y cómo lo mejoraríamos al crear el diseño final. Nuestras principales quejas con el sistema a resolver fueron:

  1. Escala
    1. Nuestro prototipo era enorme y difícil de manejar, lo que lo hacía propenso a volcarse en el borde de nuestros brazos.
    2. El carruaje era mucho más grande de lo necesario y tenía mucho espacio desperdiciado.
    3. Nuestro cinturón (una banda de rodadura de tanque vex) era mucho más grande de lo necesario, lo que introducía un exceso de espacio entre los brazos.
  2. Fricción

    1. Nuestras vex bandas de rodadura no pasaban fácilmente sobre los rodillos de espiga de madera en todos los puntos.
    2. El plástico sobre la madera hizo que el carruaje no estuviera dispuesto a moverse en muchos casos.
  3. Motorización

    Necesitábamos hacer que el sistema pudiera funcionar

Con estas cosas en mente, dibujamos nuestros planos para el diseño final. Queríamos que el robot de tracción se controlara con un Myo a través de un arduino, y queríamos que el marco fuera de aluminio y más pequeño.

Para hacer esto, tomamos un porcentaje de nuestro prototipo original y nos dispusimos a trabajar a partir de ese tamaño. Al utilizar láminas de metal que se mecanizarían para tener canales lo suficientemente anchos como para que pasara un rodamiento blindado, tendríamos un diseño ligero pero robusto que tendría una mayor tolerancia de uso.

Nuestro prototipo también nos permitió, en solo unos minutos, determinar cómo la rotación del motor afectaba la cabeza de nuestro robot de tracción. Esto nos llevó a comprender que nuestro diseño de control sería más simple de lo que habíamos anticipado. Tras una inspección más cercana, descubrimos que el movimiento del motor es aditivo. Esto significa que cada motor tiene un efecto deseado independiente sobre nuestro movimiento, pero cuando los combinamos, comienzan a cancelarse.

Por ejemplo, si se considera como un plano de coordenadas, el motor que se encuentra en el extremo x negativo siempre tenderá a tirar de nuestro cajón hacia el segundo y cuarto cuadrantes. Por el contrario, el motor que se encuentra en la extremidad x positiva siempre tenderá el cajón hacia el primer y tercer cuadrante. Si combinamos el movimiento de nuestros motores, cancelará las partes de dirigir ese conflicto y amplificará las partes que concuerden.

Paso 8: codificación

Si bien trabajé bastante en C hace unos años, no tenía experiencia con lua o C ++, y esto significaba que necesitaba dedicar una cantidad considerable de tiempo a revisar la documentación. Sabía que la tarea general que intentaría lograr era obtener la posición del usuario en intervalos de tiempo y luego pasarla a los motores. Decidí dividir la tarea por mí mismo para digerir mejor las partes que necesitaría.

1. Obtener datos de Myo (lua)

Sabía que necesitaba encontrar una manera de recopilar la información del Myo. Esta fue la primera parte del desafío que quería abordar. Para hacer esto, quería que el usuario calibrara el tamaño de su lienzo antes de comenzar a dibujar. Esto me permitiría tener un límite desde el que trabajar. Entonces podría normalizar el programa entre diferentes usuarios simplemente tomando un porcentaje del lienzo máximo como mis puntos de datos para pasar. Decidí tener un evento con guión que haría una comprobación de getOrientation cada medio segundo, ya que permitiría que las comprobaciones nunca realizaran un salto salvaje del que tendrías que adivinar (por ejemplo, si el usuario se balanceaba salvajemente hacia atrás y adelante).

Esto fue el primer obstáculo que encontré. Descubrí una limitación muy grande de lua, y que no me permitiría esperar antes de continuar con el guión. La única forma de realizar esta acción era pausar la CPU (lo que la pausaría globalmente, incluso manteniendo el reloj del sistema) o usar comandos específicos del sistema operativo. En mi código de ejemplo, dejé en la verificación del sistema operativo original que realicé (comenté). Esto fue después de hacer una gran cantidad de investigación en la documentación de lua, y se realizó verificando el formato de la ruta del sistema. Fue entonces cuando decidí que necesitaba mirar la documentación de los proyectos que se habían publicado anteriormente. Inmediatamente me di cuenta de cuánto tiempo perdí, e inmediatamente fui conducido a la variable de plataforma. Con él, pude implementar comandos de espera específicos del sistema operativo casi de inmediato, a diferencia de los días que me tomó improvisar mi solución anterior.

Fue en esta época del diseño que comenzó el trabajo en el aspecto eléctrico, y suspendí el trabajo en este aspecto del código. La intención es aprender cómo nuestros motores interactúan con el arduino.

2. Trabajando con Arduino (C ++)

A medida que el trabajo con nuestra placa de pruebas se hizo cada vez más complejo, descubrí que el arduino era incapaz de realizar múltiples subprocesos. Esta fue una gran llave en mi diseño de código original, y después de leer más sobre las limitaciones presentadas con nuestro controlador, descubrí que necesitaría programar cómo el arduino cambiaría entre los dos. Este se convirtió en el centro de mis esfuerzos a medida que se acercaba la fecha límite. Tuve que eliminar grandes porciones de mi secuencia de comandos original, ya que estaban diseñadas para escribir datos en un archivo sincrónicamente con el controlador del motor que lee el archivo. Esto fue para permitir una función de cola para asegurarse de que incluso si el usuario estaba por delante de nuestro cajón, no arruinaría el proyecto.

Decidí que la función de cola debería guardarse, si no implementada de la misma manera que antes. Para hacer esto, creé un vector de matrices. Esto me permitió no solo mantener relativamente intacto el espíritu de mi diseño anterior, sino que también significó que no tenía que hacer un seguimiento de mi lugar en el archivo para leer o escribir. En cambio, ahora todo lo que necesitaba hacer era simplemente agregar un nuevo valor en mi vector si el usuario se estaba moviendo (las pruebas preliminares fueron menos del 1% de la diferencia de tamaño del lienzo tanto en x como en y desde la última posición registrada y no dieron como resultado el registro de datos). Entonces podría tomar el valor más antiguo en mi vector y de un solo golpe, enviarlo al control del motor, escribirlo en nuestro archivo y luego eliminarlo de mi vector. Esto limpió muchas de mis preocupaciones sobre tener un flujo constante de IO en ejecución.

Paso 9: Eléctrico

Image
Image
Eléctrico
Eléctrico

Si bien tomé una clase de electrónica en el pasado y trabajé bastante con arduinos. Nunca me he sumergido profundamente en hacer que el arduino reciba información de una fuente externa (myo), solo tengo experiencia en la salida de información a través del arduino. Sin embargo, me dediqué a cablear los motores de nuestro robot de dibujo y a trabajar en el código para que pudieran trabajar con el código myo.

Materiales que utilicé:

2 x motores paso a paso

1 x tablero

1 x Arduino (Uno)

2 x controlador IC L293DE

40 x cables de puente

2 x ventiladores

1. Conexión de motores paso a paso y el ventilador a la placa de pruebas

Siguiendo el diagrama del circuito, podemos conectar un motor paso a paso al controlador en la placa de pruebas. Luego, siguiendo el mismo diagrama, aplique eso al segundo controlador y motor, sin embargo, los cables de puente deberán enchufarse en un conjunto diferente de pines en el arduino (ya que el primer motor está ocupando el espacio de otros 4).

Advertencia / Consejo:

Los controladores son muy pequeños y los pines están muy juntos. Sería aconsejable espaciar los dos controladores para que los cables no se confundan.

Lo siguiente es conectar los ventiladores. Esto es bastante simple, los ventiladores que tenía disponibles eran ventiladores de procesador de computadora básicos, que tienen un positivo y tierra. Enchufe esos dos en sus respectivos pines +/- en la placa de pruebas, e incline cada uno hacia cada controlador. (Descubrimos que debido a que los motores paso a paso reciben ráfagas de información y comandos durante un largo período de tiempo, los controladores tienden a sobrecalentarse y oler. Agregar un ventilador para enfriarlo solucionó este problema).

2. Código Arduino

¡Esta es la parte facil!

Abra el IDE de Arduino, vaya a la pestaña "Archivo", luego vaya a la pestaña "ejemplo" que se desplegará aún más y le mostrará una pestaña "paso a paso". Luego, desea abrir "Stepper_OneStepAtATime"

Esto precargará un código de ejemplo que es casi plug-and-play en el cableado arduino / motor. Tendremos que hacer pequeños ajustes porque estaremos funcionando con dos motores, que les mostraré a continuación. Es posible que también tenga que hacer ajustes menores dependiendo de los pines que haya decidido usar, ya que el IDE de Arduino está predeterminado en los pines 8-11.

El código que he usado para hacer que los dos motores se muevan en "sincronización" es el siguiente:

//#incluir

const int stepsPerRevolution = 200;

Stepper myStepper1 (stepsPerRevolution, 9, 10, 11, 12);

Stepper myStepper2 (stepsPerRevolution, 4, 5, 6, 7);

int stepCount = 0;

void setup () {// inicializar el puerto serie: Serial.begin (9600); }

bucle vacío () {

myStepper1.step (1);

Serial.print ("pasos:");

Serial.println (stepCount);

stepCount ++;

retraso (0,5);

myStepper2.step (1); retraso (0,5); }

3. Posibles problemas

Los problemas que encontré durante este proceso fueron no usar el ejemplo de código correcto, usar un cable de puente defectuoso, usar el controlador IC incorrecto.

Asegúrese de que el controlador que está utilizando sea capaz de controlar un motor

Verifique el número de serie y verifique sus especificaciones

Me encontré con el problema de tener un cable de puente muerto, lo que provocó que mis motores giraran de manera extraña

Tuve que usar un multímetro para revisar todos los cables

Y siempre verifique dos veces su código en busca de pequeños errores como faltar un final ";" mando

Paso 10: Mecánico

Mecánico
Mecánico
Mecánico
Mecánico
Mecánico
Mecánico
Mecánico
Mecánico

1. Material

Para el modelo de producción completo de los brazos, se recomienda que estén hechos de un material resistente pero liviano, sentimos que el aluminio encajaba perfectamente.

Usamos láminas de aluminio de calibre 032 cortadas a 9.125 "x 17.5" y trazamos el patrón del dibujo que se muestra en el paso anterior.

2. Fabricación

Usando el dobladillo (la máquina azul) agregamos dobladillos que miran en direcciones opuestas de modo que cuando la pieza se rompe y se dobla, los dos dobladillos se entrelazan formando una sola pieza completa.

Para las curvas grandes utilizamos el tennismith, debido a su alta precisión.

Ahora, para las curvas más pequeñas, querrá usar una máquina con un pie más pequeño, aquí es donde entra una máquina como el roto-die. Debido a su pie más pequeño, permite hacer roturas más pequeñas, desafortunadamente, el roto-die que teníamos a nuestra disposición todavía era demasiado grande para nuestro riel y estaba deformado.

** Alternativamente, si no tiene acceso al equipo o herramientas adecuados, se puede hacer un sustituto. **

En nuestro caso, cortamos nuestros brazos de rieles de paneles solares de aluminio con un cortador de plasma y pulimos los extremos para que queden lisos y luego los atornillamos espalda con espalda para hacer un sistema de riel de doble cara. Idealmente, querríamos soldar los rieles juntos, sin embargo, sin acceso a una estación de soldadura, en lugar de eso, sujetamos los rieles con abrazaderas y perforamos y luego los atornillamos. Pero si se toma esta ruta, se debe tener especial cuidado de usar una contratuerca y una arandela para asegurarse de que la pieza tenga la menor flexión posible.

3. El cinturón

Para los cinturones utilizamos algunos cinturones de impresora 3D antiguos que pudimos recuperar.

Las correas no eran lo suficientemente largas inicialmente, así que usando un poco de tubo termorretráctil combinamos dos piezas para hacer una que fuera lo suficientemente larga.

Los engranajes verdes y las clavijas de madera fueron reemplazados por cojinetes de disco con arandelas extra anchas que se usan para evitar que la correa se salga de su lugar.

4. Transporte

Y finalmente el carro se hizo con una hoja de 5 "x 5" de aluminio 032, con los orificios taladrados donde deben ir los correspondientes tornillos y arandelas. La distancia variará dependiendo de qué tan ancho sea su riel y cuánto espacio libre tenga en sus lavadoras.

Paso 11: Reflexiones

Desafortunadamente, cada lado de nuestro proyecto se topó con la gran barricada del tiempo y no pudimos completar nuestro diseño para la fecha prevista. Cada miembro de nuestro equipo terminó colaborando en todos los demás aspectos de nuestro diseño al menos hasta cierto punto, lo que provocó algunas pérdidas de tiempo en la curva de aprendizaje. Esto, junto con el deseo de diseñar un producto con la menor cantidad de recursos externos posible (ya que todos queríamos crear nuestras respectivas partes desde cero), condujo a una gran cantidad de ruedas reinventadas.

Todos los que trabajaron en el proyecto aprendieron más sobre los otros aspectos del proyecto. Hacer que el software realice una acción específica es una cosa, luego hacer que el software funcione junto con el hardware es otra. Yo diría que es importante que quien esté trabajando en el aspecto de codificación de este proyecto, esté tan familiarizado como nuestro codificador de proyectos.

En general, no pudimos lograr exactamente lo que queríamos. Sin embargo, siento que íbamos por buen camino y todos descubrimos y aprendimos nuevos conceptos que podremos aplicar a proyectos futuros.

Recomendado: