miércoles, 25 de junio de 2014

TWI-TWI, impresora 3D controlada por Android

¿Que es el proyecto TWI - TWI?

De manera sencilla y resumida, la Voladora V2 de Tumaker utiliza una placa llamada Megatronics V3, simplemente es un Arduino Mega 2560 con los pines adaptados para controlar impresoras 3D. Se le ha añadido un modulo Bluetooth a la placa electrónica y se ha creado una aplicación, mediante el programa App Inventor de Google, para controlar la impresora 3D Voladora V2 de Tumaker desde cualquier periférico que utilice el sistema operativo Android.


Impresora 3D Voladora V2 de Tumaker controlado por móvil

El objetivo de este proyecto es desarrollar y construir un periférico que controle una impresora 3D, exactamente, la Voladora V2 de Tumaker.

Este proyecto esta formado por tres partes, la comunicación entre el móvil y la impresora 3D Voladora V2 de Tumaker, la aplicación que se crea con App Inventor y el firmaware (el programa que se carga en la placa Megatronics V3) que se llama Marlin.




Comunicación Bluetooth y comunicación Serie

La comunicación  Bluetooth es un protocolo de comunicación inalámbrica de voz y datos.
La comunicación Serie o Serial es un protocolo de comunicación mediante cables de voz y datos que se envía y recibe mediante RX y Tx.

El proyecto TWI - TWI funciona,se envían "comandos" desde el móvil, a la impresora 3D y viceversa. El modulo Bluetooth hace de intermediario entre la impresora 3D y el móvil. El modulo Bluetooth recibe los "comandos" desde el móvil y la impresora 3D. Se utilizan dos tipos de comunicación, la comunicación Serie y la comunicación Bluetooth. La comunicaciòn entre el móvil y el modulo Bluetooth es comunicación Bluetooth, es decir, la información es enviado mediante ondas y la comunicación entre el modulo Bluetooth y la impresora 3D es una comunicación Serie.

Esquema de los 2 protocolos de comunicación

Programación

En este proyecto se ha llevado a cabo modificando el Marlin en el sketch de Arduino, el lenguaje en el que se basa Arduino es en C y C++.
Arduino es una plataforma de hardware libre, basada en una placa con un microcontrolador y un entorno de desarrollo, diseñada para facilitar el uso de la electrónica en proyectos multidisciplinares.


Firmware (Marlin)

Firmware es un programa que es grabado en una memoria, normalmente de lectura/escritura (ROM, EEPROM, flash, etc.), que establece la lógica de más bajo nivel que controla los circuitos electrónicos de un dispositivo de cualquier tipo.
El firmware que utiliza la impresora 3D Voladora V2 de Tumaker es uno llamado Marlin. El mismo firmware sirve para diferentes impresoras 3D, pero se tiene que modificar adaptándolo a la impresora 3D en funciones.

El primer y gran dilema de este proyecto es que se tiene que crear un nuevo puerto serie, muchos os preguntareis porque si puedes utilizar el puerto serie que trae predeterminado la placa. Si se utiliza el mismo puerto serie, la trasmisión de datos se colapsa y ademas no se podrá utilizar la impresora 3D mediante el uso normal, para ello se modifica el firmware "Marlin". La placa electrónica Megatronics V3 de la impresora 3D te da la opción de abrir puertos serie mediante software y hardware.

Los trozo de programa que se modifica en el Marlin.



#include "NewSoftSerial.h"  // Llamada a la libreria NewSoftSerial
#define rxPin 11  //  Declara el pin 11 con el nombre de rxPin
#define txPin 15  //  Declara el pin 15 con el nombre de rxPin
NewSoftSerial miSerial(rxPin, txPin);  //  declara en nombre del puerto serie y define los pines rx y tx

void setup()
{
  miSerial.begin(9600);  // Abre en nuevo puerto serie
  pinMode(3,INPUT);  // declara el pin 3 como entrada
  pinMode(2,OUTPUT);  // declara el pin 2 como salida
  pinMode(rxPin, INPUT); // declara el pin rxPin como entrada
  pinMode(txPin, OUTPUT); // declara el pin txPin como salida  

  




Con el trozo de código de arriba  se consigue abrir el nuevo puerto serie y en este caso el pin 11 es Rx y el pin 15 es Tx. Sin olvidar la velocidad en baudios del nuevo puerto serie, en este caso es de 9600 baudios, es una de las razones por las que puede que al dibujar a mano alzada la impresión se atasque, ya que la impresora 3D y el ordenador se comunican a 115200 baudios. 12 veces mas lento.


void loop()
{
 int estado;  // crear una variable con el nombre estado
 estado=digitalRead(3);  // guardar la lectura del pin 3 en la variable estado
 switch(estado) // mira el valor de la variable estado y ejecutara lo que este dentro del caso 0: caso 1: ...
 {
   case 0: //  ejecutara lo que este dentro siempre que el valor de estado sea 0

   if(buflen < (BUFSIZE-1))


     get_command();
   #ifdef SDSUPPORT
   card.checkautostart(false);
   #endif
   if(buflen)
   {
     #ifdef SDSUPPORT
       if(card.saving)
       {
  if(strstr_P(cmdbuffer[bufindr], PSTR("M29")) == NULL)
  {
    card.write_command(cmdbuffer[bufindr]);
    SERIAL_PROTOCOLLNPGM(MSG_OK);
  }
  else
  {
    card.closefile();
    SERIAL_PROTOCOLLNPGM(MSG_FILE_SAVED);
  }
       }
       else
       {
  process_commands();
       }
     #else
       process_commands();
     #endif //SDSUPPORT
     buflen = (buflen-1);
     bufindr = (bufindr + 1)%BUFSIZE;
   }
   //check heater every n milliseconds
   manage_heater();
   manage_inactivity();
   checkHitEndstops();
   lcd_update();
          break;

   case 1:

 if(buflen < (BUFSIZE-1))


  get_command_bluetooth();
   #ifdef SDSUPPORT
   card.checkautostart(false);
   #endif
   if(buflen)
   {
     #ifdef SDSUPPORT
       if(card.saving)
       {
  if(strstr_P(cmdbuffer[bufindr], PSTR("M29")) == NULL)
  {
    card.write_command(cmdbuffer[bufindr]);
    SERIAL_PROTOCOLLNPGM(MSG_OK);
  }
  else
  {
    card.closefile();
    SERIAL_PROTOCOLLNPGM(MSG_FILE_SAVED);
  }
       }
       else
       {
  process_commands();
       }
     #else
       process_commands();
     #endif //SDSUPPORT
     buflen = (buflen-1);
     bufindr = (bufindr + 1)%BUFSIZE;
   }
   //check heater every n milliseconds
   manage_heater();
   manage_inactivity();
   checkHitEndstops();
   lcd_update();
          break;
  
  
}

}

void get_command_bluetooth() // es una funcion que se ha creado para interpretar los datos recibidos desde el móvil y ejecutar las acciones
{ 
  while( miSerial.available() > 0  && buflen < BUFSIZE) { // mientras reciba algo superior a 0 por el puerto serie
    serial_char = miSerial.read();




Dentro del Void loop, que es la función principal, se crea este trozo de código para elegir mediante un interruptor la forma de utilizar la impresora 3D Voladora V2 de Tumaker, de manera normal, es decir, controlado por ordenador o controlado por el móvil.

Se ha creado la función void get_command_bluetooth() para interpretar los datos recibidos desde el móvil y ejecutar las acciones.


App Inventor 


App Inventor es un entorno de desarrollo visual de aplicaciones para los teléfonos Android desarrollado por el MIT. Para desarrollar aplicaciones con App Inventor sólo necesitas un navegador web y un teléfono Android.

Al construir las aplicaciones para Android se trabaja con dos herramientas: App Inventor Designer y App Inventor Blocks Editor. En Designer se construye el Interfaz de Usuario, eligiendo y situando los elementos con los que interactuará el usuario. Con el Blocks Editor se define el comportamiento de los componentes de la aplicación.



La parte visual de la aplicación




Esta es la parte visual de la aplicación se ha creado utilizando la herramienta Designer, simplemente son botones, textBox (que es un texto vació para rellenar), texto.

En la imagen de abajo se aprecia el programa entero, mediante el editor de bloques conseguimos asignar acciones a los diferentes objetos de la parte visual.

El editor de bloques, con el programa entero

Todos los bloques tienen una condición, si el modulo bluetooth esta conectado, entonces ejecuta las acciones.

Componentes

-Modulo Bluetooth
-Interruptor
-Voladora V2
-Móvil sistema operativo Android
-Tarjeta SD

Cambios en la impresora 3D Voladora V2 de Tumaker


Se ha modificado la impresora 3D Voladora V2 de Tumaker físicamente para llevar a cavo este proyecto.
Utilizando un pin digital libre de la placa Megatronics V3 se ha colocado un interruptor en forma de pull-up, cuando el interruptor este levantado significa que se controla desde el ordenador y cuando el interruptor este abajo significa que se controla desde el móvil.

Interruptor amarillo
Aparte de colocar el interruptor es necesario conectar el modulo Bluetooth e introducir la tarjeta SD con algún G-code cargado en la tarjeta SD.

Modulo Bluetooth y tarjeta SD
Esquema de Megatronics V3


Esquema final de la placa Megatronics V3 con las modificaciones

En el esquema de arriba se aprecia el conexionado de la placa Megatronics V3, los pines del modulo Bluetooth se conectan Rx al pin 11 y Tx al pin 15 y dos mas que son 5v y 0v.
El interruptor con el sistema pull-up se conecta en el pin 2.


Descargar archivos del proyecto.













1 comentario: