GAFAS “OCULUS RIFT” LOW COST Y PERIFÉRICOS

El proyecto que vamos a realizar es un visor de realidad virtual o HDM (Head Display Mounted) y un conjunto de periféricos para capturar movimiento del usuario y poder utilizarlos como entrada para entornos virtuales, y en particular, videojuegos.

El proyecto contaría de las siguientes partes:

-Visor o gafas de realidad virtual:

Consta de:
-Una pantalla que muestra imágenes 3D estereoscópicas mediante un software (Vieiro..)
-Unas lentes asféricas para aumentar la imagen y dar sensación inmersiva
-Acelerómetro que capta los movimientos de la cabeza del usuario y los envía  al arduino, convirtiéndolos en movimiento del ratón (control de cámara)
SEÑALES DE ARDUINO: 2 Acelerómetro mpu

-Periféricos:

– Mando de movimiento: Incluye un joystick para controlar el movimiento del avatar virtual, además de varios botones para controlar otras opciones.

SEÑALES DE ARDUINO: 2 señales analógicas para el joystick (x,y)

– Mando pistola: Mando implementado en una pistola de juguete, que permite capturar la señal del gatillo para poder disparar en videojuegos FPS(Firts Person Shooter). Incluye varios botones para capturar más opciones para el arma, como recargar, apuntar, cambiar arma…
 
SEÑALES DE ARDUINO: 4 analógicas: Gatillo, 3 botones personalizables

Visor o Head Mount Display

Materiales para el visor:

COMPONENTE                  PRECIO
 -Pantalla y circuito                    100€ 
-Lupas asféricas x5 aumentos      30€
                                                     -Cartón pluma                              7€ 
                                                     -Gafas snowboard                         8€
                                                     -Acelerómetro/Giroscopo MPU   3€
                                                     -Velcro                                          1€
                                                     -Cable                                            3€

Pasos realizados:


Lo primero que hacemos es hacer una caja con una base abierta con el cartón pluma en la que entre con holgura la pantalla. Para trabajar con comodidad, dejamos una de los lados abiertos para seguir trabajando en ella.

En la cara posterior pegamos una pieza de madera y sobre la madera la placa controladora de la pantalla.

A unos 2cm de la base, colocamos una pieza de
cartón pluma para que soporte la pantalla, y luega otra pieza Encima que sujete la pantalla, como se muestra en las fotos

Por otro lado, con 2 cuello de botella de 1 litro de Aquarius, se corta por la parte estrecha con un diámetro un poco menor
que el diámetro de las lupas . Se hacen unos cortes para utilizar la parte de arriba como pestañas que sujetan la lupa.

En la parte de abajo, se hacen unos cortes a 1cm aproximado cada uno, y se doblan creando pestañas que luego servirán para unir a una madera que sujete los cuellos de la botella. A la madera se le hace un corte interno de tal forma que se pueda ver a través de las lupas.

Para la distancia entre las dos lupas y la distancia entre las lupas y la pantalla, reproducimos en la pantalla un video estereoscópico y confirmamos que se produce efecto 3d correctamente y se ve con nitidez.

Con el cartón pluma, hacemos unas guías que sujeten el soporte que incluye las lupas. Tenemos en cuenta la distancia óptima entre lupas y pantalla a la hora de poner las lupas.

Ponemos la tapa que le falta a la caja con cartón pluma. Para poder hacer futuros cambios, esta tapa se une a los lados con velcro. En esta tapa hacemos un hueco para poder conectar correctamente el HDMI y la alimentación.En la parte inferior de nuestra caja, insertamos en Acelerómetro y colocamos una clema para colocar con más facilidad los cables del acelerómetro.
Para sujetar las gafas, colocamos la correa a la caja y dejamos la parte interna de las gafas hacia fuera. Hacemos unos retoques para mayor comodidad, como dejar hueco para la nariz, y pintamos con spray negro la caja para lograr un mejor acabado.

Esquema Arduino de conexión con Acelerómetro

Vcc – 3,3 V
GND ‘ GND
SCL- SCL
SDA –SDA

Código:


//avisamos al acelerómetro y definimos la orientación actual como 0,0.
void setup(){
Mouse.begin();
Wire.begin();
Wire.beginTransmission(MPU);
Wire.write(0x6B);
Wire.write(0);
Wire.endTransmission(true);
Serial.begin(9600);
}

//Leer los valores del Acelerometro de la IMU
   Wire.beginTransmission(MPU);
   Wire.write(0x3B); //Pedir el registro 0x3B – corresponde al AcX
   Wire.endTransmission(false);
   Wire.requestFrom(MPU,6,true); //A partir del 0x3B, se piden 6 registros
   AcX=Wire.read()<<8|Wire.read(); //Cada valor ocupa 2 registros
   AcY=Wire.read()<<8|Wire.read();
   AcZ=Wire.read()<<8|Wire.read();
   if(AcX==-1){
       setup();
   }
   //Lecturas directas del acelerometro
   Serial.print(“ACX: “); Serial.print(AcX); Serial.print(“n”);
   Serial.print(“AcY”); Serial.print(AcY); Serial.print(“n————n”);
 
 
    //Se calculan los angulos Y, X respectivamente.
   Acc[1] = atan(-1*(AcX/A_R)/sqrt(pow((AcY/A_R),2) + pow((AcZ/A_R),2)))*RAD_TO_DEG;
   Acc[0] = atan((AcY/A_R)/sqrt(pow((AcX/A_R),2) + pow((AcZ/A_R),2)))*RAD_TO_DEG;

   //Leer los valores del Giroscopio
   Wire.beginTransmission(MPU);
   Wire.write(0x43);
   Wire.endTransmission(false);
   Wire.requestFrom(MPU,4,true); //A diferencia del Acelerometro, solo se piden 4 registros
   GyX=Wire.read()<<8|Wire.read();
   GyY=Wire.read()<<8|Wire.read();
   //Lectura directa del giroscopo
   Serial.print(“GX: “); Serial.print(GyX); Serial.print(“n”);
   Serial.print(“GY”); Serial.print(GyY); Serial.print(“n————n”);
 
   //Calculo del angulo del Giroscopio
   Gy[0] = GyX/G_R;
   Gy[1] = GyY/G_R;

 
   //Aplicar el Filtro Complementario
   Angle[0] = 0.98 *(Angle[0]+Gy[0]*0.010) + 0.02*Acc[0];
   Angle[1] = 0.98 *(Angle[1]+Gy[1]*0.010) + 0.02*Acc[1];
    Serial.print(“angle X: “); Serial.print(Angle[0]); Serial.print(“n”);
   Serial.print(“angle Y: “); Serial.print(Angle[1]); Serial.print(“n————n”);
   //Diferencia con el angulo anterior
   diff[0] = AnteriorAngulo[0]-Angle[0];
   diff[1] = AnteriorAngulo[1]-Angle[1];
   //Comprobamos que no lectura errones, en caso de que asi sea reiniciamos el mpu
   if (isnan(diff[0])||isnan(diff[1])){
     diff[0]=0;
     diff[1]=0;
     setup();
     }
      AnteriorAngulo[0]=Angle[0];
     AnteriorAngulo[1]=Angle[1];
 
   //Se mueve el raton la diferencia en su eje
    Mouse.move(-diff[1]*amplificador[1],-diff[0]*amplificador[0]);

Amplificador se utiliza para aumentar el valor de la diferencia entre angulos aumente y se haga efectivo en el movimiento del ratón. Los valores del acelerómetro que hacen el movimiento más efectivo en nuestras pruebas han sido amplificador[0]=20(x) y amplificador [1]= 10(y).

Joystick

Hacemos una pequeña caja para que quepa el Joystick. Soldamos a unos cable largos los pines 5v, gnd ,swx, swy.

COMPONENTE                  PRECIO
-Cartón pluma                              7€
-Joystick                                       3€
-Cable                                          6 €

Esquema Arduino:
  -5v-5v
-GND-GND
-SWX – A4
-SWY – A5

Código:
void joystick(){
    float signalX;
   float signalY;
   signalX = analogRead(A4);
   signalY = analogRead(A5);

   if (signalX<400){
   //mover izquierda
     Keyboard.press(‘d’);

 }
 if (signalX> 700){
     Keyboard.press(‘a’);
 //mover derecha
 }
 if (signalY< 400){
     Keyboard.press(‘w’);
//mover adelante
 }
 if (signalY> 700){
     Keyboard.press(‘s’);
//mover atras
     }

Pistola:
Pasos realizados:

Compramos una pistola en cualquier tienda de juguetes de niños que no tenga más que un gatillo para poder disparar sin botones, le hicimos tres agujeros en los que metimos 3 pulsadores comprados en cualquier tienda de electrónica que consisten en que dejan de pasar corriente cuando les pulsas, para que pase tienes que conectar un lado de cada pulsador a el positivo de una fuente de alimentación en este caso (se podría haber utilizado una pila que sería mas cómodo pero optamos por esto porque una pila se gastaba enseguida de tenerlo conectado) y el otro lado de el pulsador lo conectamos a el Arduino en la parte digital o analógica, en este caso usamos las entradas analógicas porque nos pareció más cómodo, por lo que tenemos 3 entradas de Arduino analógicas reservadas para estos tres pulsadores, en cuanto al gatillo tan solo es un cable con forma de gatillo que al chocar con un metal conectado a el Arduino dejaba pasar corriente. Para comprobar que los botones
 están  pulsados, esperamos un valor alto. En el caso del gatillo es al contrario, al pulsar el gatillo da valor 0.




COMPONENTE                  PRECIO
-Pulsadores                                 3€
-Pistola de juguete                      2€
-Cable                                         3 €

Esquema Arduino:
  -Botón 1 – A0
-Botón 2 – A1
-Botón 3 – A2
-Gatillo – A3

Código:

  void pistola(){
    //SensorPistola
int btn1;
int btn2;
int btn3;
int gatillo;

    btn1 = analogRead(A0);
    btn2 = analogRead(A1);
   btn3 = analogRead(A2);
   gatillo= analogRead(A3);
    if (btn1 >0) {
            Keyboard.press(‘y’);
            Keyboard.release(‘y’);
    }
    if (btn2>0){
           Keyboard.press(‘r’);
           Keyboard.release(‘r’);
    }
    if(btn3>0){
           Keyboard.press(‘t’);
           Keyboard.release(‘t’);
    }
    //Comprueba que el gatillo da 0 2 veces seguidas para eliminar falsos positivos
   if(gatillo==0&&aux1==0){
           Mouse.click();
   }
   aux1=gatillo;
   delay(1);        // delay in between reads for stability
  }

Videos:

También te podría gustar...

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *