¿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.
El objetivo de este proyecto es desarrollar y construir un periférico que controle una impresora 3D, exactamente, la Voladora V2 de Tumaker.
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.

Programación
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 trozos 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.
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.
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.
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.



El interruptor con el sistema pull-up se conecta en el pin 2.