5/13/2017

Haptic con xbee

Saludos

hoy me han pedido que haga un “Haptic” para las manos.  O un sistema que dé una respuesta táctil al interactuar con el entorno virtual. Algo muy simple, instalar unos vibradores en unos guantes, para cuando toques algo del entorno virtual tengas una respuesta táctil.


http://www.eodyne.com/es/


Esto no es nada nuevo, todos estamos acostumbrados que el mando de la consola vibre al recibir nuestro personaje un impacto o golpe, pues hacer algo similar económico y funcional. En definitiva en colocar un motor vibrador, que ha de funcionar cuando entremos en contacto con algún objeto, controlar este tipo de motores es muy simple.





Para la comunicación entre el ordenador y los guantes desempolvare unos viejos conocidos los Xbee, no es una opción muy económica, pero si los tienes es una rápida solución para hacer este setup. En este caso simplemente con los Xbee podríamos prescindir de microcontrolador para activar los motores, pero he optado por incorporar un pic12fl1840 en comunicación serial por si hay que añadir algún otro sensor.


El setup de los Xbee es muy sencillo con la aplicación XCTU, el setup básico para configurar la red es:



Menú del XCTU Setup del sistema



El emisor enviara a los guantes y recibirá de los guantes, se podría emplear otro tipo de sistemas por wifi, como Omega2 Plus, Particle Photon, etc. Pero he optado por el xbee porque es simple rápido y tenía el material. Para hacer el setup utilizo una de las placas xbee shield montadas sobre el Arduino, en la foto se ve un Mega, pero normalmente utilizo un Arduino antiguo sin el microcontrolador para hacer de emisor, si queréis hacerlo “bonito” adquirir esta placa.






La conexión entre el xbee y el pic es muy simple, hay que cruzar el Tx-- DIN y el Rx--DOUT, el programa para este caso son pocas líneas de código  y solo contemplo recibir un byte por mensaje.






Esquema del proyecto para mostrar las conexiones. Modelo final para instalar en los guantes.





#include <12LF1840.h>
#device ADC=16

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES NOMCLR                   //Master Clear pin used for I/O
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP         //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O

#use delay(internal=8000000)
#use FIXED_IO( A_outputs=PIN_A5 )
#use rs232(baud=9600,parity=N,xmit=PIN_A0,rcv=PIN_A1,bits=8,stream=PORT1)
int8 dato;
#INT_RDA
void  RDA_isr(void) 
{
dato=getc();
putc(dato);
}

void main()
{
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);
   while(TRUE)
   {
      if(dato==0x32){ // 0x31 derecha 0x32 izquierda
      output_high(PIN_A5);
      delay_ms(500);
      output_low(PIN_A5);
      dato=0;
      }else
      {
      output_low(PIN_A5);
      delay_ms(500);
      }
   }
}


El programa es muy simple recibe un byte si es 0x31, en Ascii 1, se activa el motor de la mano derecha durante 500 milisegundos, si es un 0x32, en Ascii 2, se activará el motor de la mano izquierda. En cualquier caso, ambos guantes reciben el mensaje el microntrolador decide quien actúa y quien no, la opción de ponerlo es porque nos permite añadir más sensores o realizar algún otro calculo, el número de veces que se activado, etc. 




Anakleto.