AEROMODELISMO VIRTUAL
 

Retroceder   AEROMODELISMO VIRTUAL > R/C PROYECTOS ELECTRONICOS > R/C Electronica
Registrarse FAQ Miembros Calendario Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema
Antiguo 28-10-2009, 15:09   #1
cacer
* * * *
 
Avatar de cacer
 
Registrado: 03 enero 2008
Posts: 705
WII HT Libre - Headtrackin con inclinometro

Por peticion popular modifico este primer hilo para poner las ultimas actualizaciones aportadas por los compis y sobre todo por NONO y FBFOROS:


ULTIMAS VERSIONES DE ESQUEMAS Y CODIGO.

Los ultimos esquemas del post 451


Tener cuidado ya que una conexión erronea puede acabar con la emisora en el servicio técnico

Imágenes Adjuntas




El código ultima versión que procede del post: 452

El código

Bueno pues por último os coloco el código que sirve para los dos esquemas.

Solo teneis que comentar o descomentar NOTRAINER.

El código creo que esta bastante comentado

Código:
/*#####################################################################################
## Wii HeadTracker    Version:  beta 3.20                         Enero 2010         ##
##                                                                                   ##
## Autor: El Nono, Cacer, Fbforos y el foro                                          ##
## Colaboracion:  www.aeromodelismovirtual.com                                       ##
##                www.fpv-bsas.com.ar                                                ##
## Documentacion:                                                                    ##
##                                                                                   ##
## http://www.aeromodelismovirtual.com/showthread.php?t=4300                         ##
## http://randomhacksofboredom.blogspot.com/2009/06/wii-motion-plus-arduino-love.html##
## http://www.windmeadow.com/node/42                                                 ##
## http://ingenegros.com.ar/Microcontroladores/leer-un-wii-nunchuck-con-arduino.html ##
## http://wiibrew.org/wiki/Wiimote/Extension_Controllers#Wii_Motion_Plus             ##
#####################################################################################*/

//see http://wiibrew.org/wiki/Wiimote/Extension_Controllers#Wii_Motion_Plus
//for info on what each byte represents

/* Yaw data[]    3 y 0 
   Pitch data[]  4 y 1
   Roll data[]   5 y 2
   Estos Pich y Roll pueden intercambiarse según se monte el sensor para hacerlo 
   Buscais las lineas donde aparece data[4]   data[1] y las sustituis por 
   data[5] y data[2] o viceversa
*/
/*  define NOTRAINER
    Si en nuestra emisora no podemos seleccior que canales serán controlados por
    el sistema de trainner dejaremos descomentada la línea NOTRAINER si por el contrario
    en nuestra emisora podemos controlar que canales seran manejados por el trainner
    comentraremos esta linea 
*/

//#define NOTRAINER  

/* define FB 
    Esto sirve para poder jugar con los parámetros que hay dentro de esta definición
    en el programa. Cuando lo comentais se cogen los parámetros estandar.,
*/

//#define FB    //Coge mis parámetros del servo, comentar si quereis que los servos
             // tengan recorrido estandar.

#include <Wire.h>

// ************** OPCIONES DE CONFIGURACION ****************************
int pitch_reverse = 0;  // Invierte servo TILT   0 = normal  1 = Reverse
int yaw_reverse = 1;    // Invierte servo PAN    0 = Normal  1 = Reverse
int pitch_gan = 200;     // Relación entre angulo girado por la cabeza y el girado por
int yaw_gan = 200;       // el servo a mayor x_gan menor es en angulo girado
int SwitchPin = 5;      // Ubicacion del interrupter de centrado
                        // conectar un pulsador NA a masa
                        
int ppmOutPin = 4 ;    // Salida de datos al trainner port
int ppmInPin = 2 ;     // Entrada de datros del trainner port futura actualizacion
                       //   otras frec. distintas de 35 y 72
int canales = 6;       // Canal a partir del cual añadiremos el HT  / Canales que se generan                       

// Variables actualización

int refreshTime1= 8;    // Intervalo de generar trama 
long lastPulse1 = 0;

/*    Recorrido maximos de los servos - -2000, 2000 corresponde a un pulso de 1000 a 2000ms
      y es el estandarModificando los valores podemos ajustar el recorrido del servo no utilizar
      valores por encima de +-2500 puede no funcionar
      Si probais los valores FB vereis que el recorrido del servo esta recortado en el pitch
*/
#if defined FB
  int pitch_min = -2200; // TILT Minimo
  int pitch_max = 900;  //      maximo
  int yaw_min = -2300;   // PAN  Minimo
  int yaw_max = 2400;    //      Maximo
#else
  int pitch_min = -2000; // TILT Minimo
  int pitch_max = 2000;  //      maximo
  int yaw_min = -2000;   // PAN  Minimo
  int yaw_max = 2000;    //      Maximo
#endif

//**********************************************************************

volatile int estado = 1 ;
volatile int numPulsos= 0;
volatile int reposo=0;
volatile unsigned long time=0;

byte data[6]; //six data bytes
int yaw, pitch;
int yaw0, pitch0; //calibration zeroes
long pitch_bak1, yaw_bak1; //acumula el movimiento
int pitch_bak2, pitch_bak3; // variables auxiliares
int yaw_bak2, yaw_bak3 ;
int ledPin = 13;

int pulseWidthP = 0, pulseWidthY = 0;
int minPulseP = 1500;
int minPulseY = 1500;
//int dtime = 10;
//int t = 0;
int servoPin=7, servoPin2=6; //Salida de pruebas para servos

void wmpOn()  // Inicializa el Wii Motionplus
{
  Wire.beginTransmission(0x53); //WM+ starts out deactivated at address 0x53
  Wire.send(0xfe); //send 0x04 to address 0xFE to activate WM+
  Wire.send(0x04);
  Wire.endTransmission(); //WM+ jumps to address 0x52 and is now active
}

void wmpSendZero()
{
  Wire.beginTransmission(0x52); //now at address 0x52
  Wire.send(0x00); //send zero to signal we want info
  Wire.endTransmission();
}

void calibrateZeroes(){  // Proceso de calibracion del motionplus al inicio

  for (int i=0;i<300;i++)       //Vacía el buffer del WM+ de basura
  {                             // antes de calibrar el dispositivo
    wmpSendZero();
    Wire.requestFrom(0x52,6);
    for (int i=0;i<6;i++){
      data[i]=Wire.receive();
    } 
  }
  for (int i=0;i<10;i++)
  {
    wmpSendZero();
    Wire.requestFrom(0x52,6);
    for (int i=0;i<6;i++){
      data[i]=Wire.receive();
    }
    yaw0+=(((data[3]>>2)<<8)+data[0])/10; //average 10 readings
    pitch0+=(((data[5]>>2)<<8)+data[2])/10;

  }
}

void siguePPM ()         // Se encarga de seguir la trama de entrada
{
    if (millis() - time < 4 )
      {
        if (numPulsos <= (canales*2))
        {
            digitalWrite(ppmOutPin, estado);
            numPulsos = numPulsos + 1;
            estado= !estado ;
            time = millis();
        }
        else
        {
          updatePPM();
          time = 0;
          estado= HIGH; 
        }
      } 
      else 
      {
       digitalWrite(ppmOutPin, estado);
       estado= !estado ;
       numPulsos = 1;
       time = millis();
      }  
}

void receiveData()  // Recibe y procesa los datos del motionplus
{
  digitalWrite(ledPin, HIGH);  
  wmpSendZero(); //send zero before each request (same as nunchuck)
  Wire.requestFrom(0x52,6); //request the six bytes from the WM+
  for (int i=0;i<6;i++){
    data[i]=Wire.receive();
  }
  digitalWrite(ledPin, LOW);
  
  if (bitRead(data[4],1)==1){
      pitch=((data[5]>>2)<<8)+data[2]-pitch0; 
      if (abs(pitch) <50) pitch=0;     
  } 
  else
  {
      pitch=(((data[5]>>2)<<8)+data[2]-pitch0)*5;
  }  
  if (bitRead(data[3],1)==1){
      yaw=((data[3]>>2)<<8)+data[0]-yaw0;
      if (abs(yaw )<30) yaw=0;
  }
  else
  {
      yaw=(((data[3]>>2)<<8)+data[0]-yaw0)*5;      
  }
  if (pitch_reverse == 1) pitch*=-1;
  if (yaw_reverse == 1) yaw*=-1;
}

void updateServo()  // Calcula el ancho del pulsos para cada servo
{
      // ************** pitch *******************************
     //pitch_bak2= (pitch_bak1 += pitch)/pitch_gan;
     pitch_bak3 = constrain(((pitch_bak1 += pitch)/pitch_gan),pitch_min,pitch_max);
     pulseWidthP = (pitch_bak3/4)+minPulseP;
    // ************ Control para pruebas pitch*********************
    // ** Quitar el comentario a las 2 lineas siguiente para monitorizar con el arduino *******
    // ** Recordar que hay que comentar de nuevo antes del uso definitivo
    
    //Serial.print("\t pulse: ");   Serial.print(pitch); Serial.print("\t ");Serial.print(pitch_bak1); 
    //Serial.print("\t ");  Serial.print(pitch_bak2); Serial.print("\t ");Serial.print(pitch_bak3); Serial.print("\t "); Serial.println(pulseWidthP);
    
    // ************* yaw **********************************    
     //yaw_bak2=(yaw_bak1 += yaw)/yaw_gan  ;
     yaw_bak3 = constrain(((yaw_bak1 += yaw)/yaw_gan),yaw_min,yaw_max);  
     pulseWidthY = (yaw_bak3/4)+minPulseY;

    // ************ Control para pruebas *********************
    // ** Quitar el comentario a las 2 lineas siguiente para monitorizar con el arduino *******
    // ** Recordar que hay que comentar de nuevo antes del uso definitivo
    
    //Serial.print("\t pulse: ");   Serial.print(yaw); Serial.print("\t ");Serial.print(yaw_bak1); 
    //Serial.print("\t ");  Serial.print(yaw_bak2); Serial.print("\t ");Serial.print(yaw_bak3); Serial.print("\t "); Serial.println(pulseWidthY);  
}

void updatePPM()  // Añade los canales del HT 
{
  
  #ifndef NOTRAINER
     // >>>> Genera los primeros canales ficticios <<<<<<<<<
    for (int i=0; i < canales; i++)   // Envia el pulso ficticio de nº canales
    {
      digitalWrite(ppmOutPin,LOW);
      delayMicroseconds(400);
      digitalWrite(ppmOutPin, HIGH);
      delayMicroseconds(650);
    }
    digitalWrite(ppmOutPin,LOW);
    delayMicroseconds(400);
  #endif  

    // >>>> Canal "pan" (Canales+1)  <<<<<<<<<
    digitalWrite(ppmOutPin,HIGH);
    digitalWrite(servoPin2, HIGH);    
    delayMicroseconds(pulseWidthY-400);
  
    // Pulso de separacion de canales 
    digitalWrite(ppmOutPin,LOW);
    delayMicroseconds(400);
   digitalWrite(servoPin2, LOW);
   digitalWrite(servoPin, HIGH);
    
    // >>>> Canal "tilt" (Canales+2) <<<<<<<<<
    digitalWrite(ppmOutPin,HIGH);
    delayMicroseconds(pulseWidthP-400);

   // Pulso de separacion de canales 
    digitalWrite(ppmOutPin,LOW);
    delayMicroseconds(400);
    digitalWrite(ppmOutPin,HIGH);
    digitalWrite(servoPin, LOW);
  #if defined NOTRAINER   
    delayMicroseconds(500);
  #endif    
}

void setup()
{
  Serial.begin(115200);
  pinMode(ppmOutPin, OUTPUT);  
  pinMode(ppmInPin, INPUT);   
  pinMode(ledPin, OUTPUT);  
  pinMode(servoPin, OUTPUT);   
  pinMode(servoPin2, OUTPUT);  
  pinMode(SwitchPin, INPUT);
  digitalWrite(SwitchPin,HIGH); //Pull_up entrada switch centrado
  digitalWrite(ppmOutPin,HIGH);
  Wire.begin();
  wmpOn(); //turn WM+ on
  digitalWrite(ledPin, HIGH);
  calibrateZeroes(); //calibrate zeroes
  digitalWrite(ledPin, LOW);
#if defined NOTRAINER
  attachInterrupt(0,siguePPM, CHANGE);
#endif
}

void loop()
{
   
    receiveData(); 
    updateServo();
#ifndef NOTRAINER    
    if (millis() - lastPulse1 >= refreshTime1){   // Genera la trama PPM
        updatePPM(); 
        lastPulse1 = millis();
       } 
 #endif     
 
   if (digitalRead(SwitchPin) == 0) {
    pulseWidthP = 1500;
    pitch_bak1 = 0;
    pulseWidthY = 1500;
    yaw_bak1 = 0;
  }
}

PCB Para emisoras sin menu de trainer NOTRAINER (NoSepo) Post:
465

Cita:
Empezado por Nosepo Ver Mensaje
Ya lo tengo listo, ahi van los dos esquemas hechos por mi, del circuito de fbforos para adaptar el Ht para emisoras sin menú trainer.





Prodriais hacer un recopilatorio de lo que se necesitaría comprar para montar uno?. Gracias.
Archivos Adjuntos HT_No_Trainer_Pcb_trimmer.LAY (11,3 KB, 11 visitas)

Se actualizara este post con las ultimas modificaciones

Última edición por cacer fecha: 31-01-2010 a las 02:27.
cacer is offline   Responder Con Cita
Antiguo 28-10-2009, 15:29   #2
Wavess
AeromodelismoVirtual
 
Avatar de Wavess
 
Registrado: 30 agosto 2006
Ubicación: Madrid
Posts: 2.062
Me alegra que abras un nuevo hilo ya que se estaban desviando muchos existentes.

Si tu idea no es usar un sensor magnetico deberias cambiarle el titulo a tu hilo, a parte de todo esto con el MHT todos lo conocemos como el de Sinver y compañia, y fueron ellos los que lo llamaron asi.

Salu2
Wavess is offline   Responder Con Cita
Antiguo 28-10-2009, 15:30   #3
merss
* * * * *
 
Avatar de merss
 
Registrado: 26 diciembre 2006
Ubicación: Valencia, Sagunt
Posts: 1.101
cacer, ya me acaba de llegar el nunchuk chinorro. le ha costado un poquito pero al final ya está aquí. Espero tener un rato este fin de semana y probar si funciona el código que hice en el arduino pro mini que tengo. si funciona va a ser una alternativa barata... menos de 25€...

Saludos
merss is offline   Responder Con Cita
Antiguo 28-10-2009, 15:38   #4
Sr.Lobo
* *
 
Registrado: 11 enero 2009
Posts: 116
Hombre para que no indzca a confusión y puesto que tienes pensado usar Wii Motion Plus, puedes ponerle unos acróminos de este estilo:

WMP-HT
WM+HT

A ver que tal evoluciona la cosa.
Sr.Lobo is offline   Responder Con Cita
Antiguo 28-10-2009, 15:50   #5
cacer
* * * *
 
Avatar de cacer
 
Registrado: 03 enero 2008
Posts: 705
Merss.

Estoy seguro que te funcionará. Ya nos contaras.

Sr. Lobo.

La idea no es solo usar unos de los masndos de la WII, ya que inclinometros existen unos cuantos de facil acceso, yo usare el ADXL3xx que es pequeño y muy facil de usar. Pero si estaria bien ponerle un nombre:

IHT
HTDIY
Inclina cabezas
HMHT Libre - Home Meade Head Track.
Reclinator

Se admiten sugerencias
cacer is offline   Responder Con Cita
Antiguo 28-10-2009, 15:59   #6
zotfidjy
* * *
 
Avatar de zotfidjy
 
Registrado: 19 noviembre 2007
Ubicación: Sobrevolando Ourense
Posts: 283
Seguire con atencion el hilo, animo. Saludos
__________________
Zotfidjy en el foro...Telmo para los amigos
zotfidjy is offline   Responder Con Cita
Antiguo 28-10-2009, 22:27   #7
acristóbal
* * * * * *
 
Avatar de acristóbal
 
Registrado: 09 octubre 2006
Ubicación: Madrid, Paracuellos y Maderuelo
Posts: 2.418
Pero lo que pasa es que la parte más complicada de esto es lo relativo a coger el tren de pulsos de la radio y o bien aumentar con un par de canales más o bien sustituir los existetes. (la verdad es que no estaría mal aumentar incluso en la FF9 con 8 canales en PPM ¿¿¿podríamos llegar a 10??? y con el nuevo tren depulsos generado con los de la radio y con los del sensor mandarlo al módulo (el que sea 35, 72, 433, 869 MHz) y que el receptor correspondiente lo reciba bien.

Animos en el proyecto, esto va muy bien encaminado.
__________________
Haz grande nuestra WIKI-FPV
acristóbal is offline   Responder Con Cita
Antiguo 28-10-2009, 22:46   #8
cacer
* * * *
 
Avatar de cacer
 
Registrado: 03 enero 2008
Posts: 705
YA ESTA. Primera piedra lanzada

Acristobal.

YA LO TIENES!!!!


¿Sabes cual era el problema?

Para mis pruebas con el osciloscopio, cambie a pulso positivo y no lo lee bien el receptor


Primera versión, pendiente de afinar con un buen osciloscopio.

Probado con una radio de 4 canales e insertados el 5 y 6 y tratados con el acelerometro.


Decir que: El acelerometro por si solo no vale, le falta la rotación como ya se ha comentado. Añadir un magnetometro, es posible, pero................

Para que.... si tenemos el WII Motion por 19.90 € y nos dará mucho juego...

Agradereos el apoyo a todos.

Agradecer a quin no dio pistas o incluso pistas falsas. Ellos saben quienes son. Lo entiendo, pero no lo comparto.

Pues eso YA LO TENEMOS!!!

cacer is offline   Responder Con Cita
Antiguo 28-10-2009, 22:51   #9
cacer
* * * *
 
Avatar de cacer
 
Registrado: 03 enero 2008
Posts: 705
Y este es el codigo de la primera versión. LIBRE para vuestro disfute y sobre todo aportaciones.

Que eso de mirar y mirar sin currar lo queremos todos.

Falta un poco para que funcione, ya tengo el WMP aqui esperando cablearlo y leero por I2C - Coser y cantar .......

Tiene fallos, como la trama del sensor, que hace que el servo sea un poco lento. Esto con un poco de paciencia se soluciona.

Código:
/*

Lectura Trama PPM
Lectura sensores acelerometro ADXL
Generacion de trama PPM con valor de sensores
Copyleft cacer

*/


const int groundPin = 18;     // analog input pin 4 -- ground
const int powerPin = 19;      // analog input pin 5 -- voltageo
const int xPin = 3;           // x-axis of the accelerometer
const int yPin = 2;           // y-axis
const int ZPin = 1;           // Z-axis

int valX = 0;                 
int valY = 0;
int valZ = 0;
int tiempo = 0;


#define numCanales 6           // Definimos una constante para el numero de canales a transmitir
#define pinSalidaPPM  11      // Definimos cual sera el pin de salida
#define pinEntradaPPM  12      // Definimos cual sera el pin de entrada

#define pulsoSinc  500         // Definimos el tamano del pulso de sincronizacion en microsegundos
#define pulsoMin 1000          // Fijamos el valor minimo en microsegundos para enviar
#define pulsoMax 2000          // Fijamos el valor minimo en microsegundos para enviar

int inicio = 0;
int fin = 0;
int restoTrama = 0;


int valorCanal[numCanales];    // Array donde se guardaran los valores de tiempo para cada canal

int i; 

void setup() {
  pinMode(pinSalidaPPM, OUTPUT); // Ponemos el pin de salida en salida ;)
  pinMode(pinEntradaPPM, INPUT); // Ponemos el pin de entrada en entrada ;)
  
  // Preparamos las entradas salidas para el ADXL y que este se alimente directamente del puerto 
  pinMode(groundPin, OUTPUT);  
  pinMode(powerPin, OUTPUT);
  digitalWrite(groundPin, LOW); 
  digitalWrite(powerPin, HIGH);
  
  Serial.begin(9600);            // Definimos la conexion del puerto serie

 // Inicializamos el array con el valor minimo
 for ( i = 1; i <= numCanales; i = i++ ) {valorCanal[i] = pulsoMin;} 
 
 for ( i = 1; i <= numCanales; i = i++ )
 {
     Serial.print("CH");
     Serial.print(i);
     Serial.print("\t");
 }
 Serial.print(" X ");
 Serial.print("\t");
 Serial.print(" Y ");
 Serial.print("\t");
 Serial.print(" Z ");
 Serial.println();
 
 
}

void loop()  {

  // Estos valores, aunque estan fijos ahora, seran cambiados, para mapear los valores a partir 
  // de la sincronización segn la posición de la cabeza.
  valX = map(analogRead(xPin), 400, 600, 20, 1200);
  valY = map(analogRead(yPin), 400, 600, 20, 1200);
  valZ = map(analogRead(ZPin), 400, 600, 20, 1200);
  
  
  
 for ( i = 1; i <= numCanales; i = i++ ) {valorCanal[i]=pulseIn(pinEntradaPPM, LOW); }
 // Bucle for para el envio del pulso para cada canal
 
 
 int tiempo = 0;                              // Inicializamos para calculo de us de trama
 for ( i = 1; i <= numCanales; i = i++ ) 
 {
   
  // Cargamos los valores leidos y mapeados de los sensores en los canales asignados
  if (i == 5) { valorCanal[i] = valX; }        // Cargamos el valor X del ADX en el canal 5 
  if (i == 6) { valorCanal[i] = valY; }        // Cargamos el valor Y del ADX en el canal 6
  
  digitalWrite(pinSalidaPPM, LOW);              // Inicio del pulso
  delayMicroseconds(pulsoSinc);                  // duracion del pulso de sincronizacion
  digitalWrite(pinSalidaPPM, HIGH);               // Fin del pulso de sincronizacion
  delayMicroseconds(pulsoSinc);                  // duracion del pulso de sincronizacion
  delayMicroseconds(valorCanal[i]);         // Valor mapeado entre 0 y 1000 ms
  tiempo = (tiempo + valorCanal[i]) + (pulsoSinc *2);
  
 }
 
  
 restoTrama = 20000 - tiempo;         // Completamos el tiempo transcurrido hasta los 20 ms
 delayMicroseconds(restoTrama);
 
 // Imprimir los valores de los canales
 for ( i = 1; i <= numCanales; i = i++ ) 
 {
     Serial.print(valorCanal[i]);        // Visualizamos los valores de los canales
     Serial.print("\t");            // Lanzamos un tabulado
 }
 Serial.print(valX);
 Serial.print("\t");
 Serial.print(valY);
 Serial.print("\t");
 Serial.print(valZ);
 Serial.println();


}
Ni que decir tiene que:

QUEDA PROHIBIDA LA COMERCIALIZACION DE ESTA SOLUCION SIN MPREVIA AUTORIZACION.

Los que comercializais soluciones en este foro, que me parece bien y yo las compro, tendreis la oportunidad, cuando salga la PCB, tanto de esta como de la ampliación de radio, que serán muy similares si no la misma.

Espero no arrepentirme de haber publicado las ideas y el código fuente.


Espero y deseo que se respete esta decisión.

Última edición por cacer fecha: 29-10-2009 a las 16:48.
cacer is offline   Responder Con Cita
Antiguo 28-10-2009, 22:57   #10
merss
* * * * *
 
Avatar de merss
 
Registrado: 26 diciembre 2006
Ubicación: Valencia, Sagunt
Posts: 1.101
Cita:
Empezado por cacer Ver Mensaje
Agradecer a quin no dio pistas o incluso pistas falsas. Ellos saben quienes son. Lo entiendo, pero no lo comparto.
?¿?¿?¿?¿?¿?¿?¿?¿?¿?¿?¿?¿?¿?¿?¿? Quien ha dado pistas falsas?

Cacer, trabajas rápido... a mi me costó bastante más realizar el código. También te digo que de programación ni papa.

Espero que funcione bien.

Saludos
merss is offline   Responder Con Cita
Antiguo 28-10-2009, 23:07   #11
cacer
* * * *
 
Avatar de cacer
 
Registrado: 03 enero 2008
Posts: 705
PREPARACION - Desmontar WII MOTION PLUS

Con objeto de poder usar el WII Motion Plus en nuestros proyectos, os presento el como desmontar y posteriormente el como prepararlo para conectarlo al Arduino.

Pido disculpas por las fotos, pero las prisas son mala ayuda.

Paso 1:

Lo compramos y sacamos de su caja y plasticos.
Este paso parece trivial, pero es el más importante.

Paso 2:

Como podeis ver, es bastante pequeño, lo cual nos facilitará su uso incluso con su carcasa de platico, aunque continuamos para Bingo y lo desmontamos entero. Para eso, tenemos que qitar los dos tornillos que trae. Son de cabeza triangular, por lo que con un destornillador plano pequeño, podemos quitarlos sin problemas.


El paso 3:

En este punto, tenemos que librear la placa de la carcasa, con cuidado, separando estas dos pestañas.


Aqui podeis ver el corazon de este accesorio y que lo hace tan especial.
El senso IDG600 dual axis y el gisroscopo x3500w de EPSONTOYOCOM



Paso 4:


Ya tenemos liberada la placa y ahora queda tomar la decisión. Cortar el conector o buscar uno para poder usarlo en su momento. Yo opto por buscar el conector, por lo que dejo de momento este apartado aqui.


Espero no meter la pata y aburriros con todo esto..... Parece trivial, pero creo que a mucha gente le dará impulso para hacerlo.. Eso espero..

Última edición por cacer fecha: 29-10-2009 a las 00:12.
cacer is offline   Responder Con Cita
Antiguo 28-10-2009, 23:08   #12
cacer
* * * *
 
Avatar de cacer
 
Registrado: 03 enero 2008
Posts: 705
Material necesario:

1 Wii motion plus – Fácilmente se encuentra para su compra. Dependiendo del sitio, se puede encontrar Online 19$ en tiendas, dependiendo del pais. En españa se encuentra por 19.50 €
.

1 Arduino – Opciones: – Probado y funcionando por Nono en Arduino mini pro. 16 Mhz. Se recomienda mirar en http:www.arduino.cc en la pagina de Buy para comprarlo, ya que depende mucho del pais, tasas, aduanas, gastos de transporte, etc... Dependiendo de si se dispone de adaptador USB a Serie, es mejor el modelo con o sin el. Va en gustos. – Aun sin pruebas, montar la placa directamente. Solo se requieren unos pocos componentes.

1 Cable o conector de trainer -
Si queremos usar el WIIHT con nuestro simulador de vuelo, tendremos que construir un cable Y de conexión del trainer, que comentaremos más abajo.



Pinout de conectores:


Conector WII:





Conector trainer y tipo de pulso de las distintas radios:

Futaba:

Tipo de pulso: PPM estándar Positivo





Multiplex:


Tipo de pul
so: PPM Estándar Positivo



WFLY:


Tipo de pulso:



Diagrama de conexiones del sistema:

Continuara.......................

Última edición por cacer fecha: 05-11-2009 a las 18:38.
cacer is offline   Responder Con Cita
Antiguo 28-10-2009, 23:08   #13
cacer
* * * *
 
Avatar de cacer
 
Registrado: 03 enero 2008
Posts: 705
Diagrama de conexiones Ardu y WM+

Diagrama de conexiones by Nono





Última edición por cacer fecha: 10-11-2009 a las 08:28.
cacer is offline   Responder Con Cita
Antiguo 28-10-2009, 23:14   #14
cacer
* * * *
 
Avatar de cacer
 
Registrado: 03 enero 2008
Posts: 705
Reservado
cacer is offline   Responder Con Cita
Antiguo 28-10-2009, 23:25   #15
cacer
* * * *
 
Avatar de cacer
 
Registrado: 03 enero 2008
Posts: 705
Cita:
Empezado por merss Ver Mensaje
?¿?¿?¿?¿?¿?¿?¿?¿?¿?¿?¿?¿?¿?¿?¿? Quien ha dado pistas falsas?

Cacer, trabajas rápido... a mi me costó bastante más realizar el código. También te digo que de programación ni papa.

Espero que funcione bien.

Saludos
Lo de las pistas , ellos lo saben perfectamente.... Dejemoslo

Cuando me pican, mi cabeza no para hasta dar con ello. Es uno de los defectos que tengo.

Tengo una duda con el nunchuck, creo que le pasará lo mismo que al ADXL, que no tiene rotación sobre el eje Z. Pero solo lo creo, no me acuerdo y mira que tengo uno desmontadito.

Ya nos contaras.
cacer is offline   Responder Con Cita
Antiguo 28-10-2009, 23:32   #16
merss
* * * * *
 
Avatar de merss
 
Registrado: 26 diciembre 2006
Ubicación: Valencia, Sagunt
Posts: 1.101
cacer, el nunchuk, a través del i2c, te da bastantes datos, entre ellos las 3 aceleraciones en los 3 ejes, 2 datos sobre la posición del joystic y si los dos botones que tiene están pulsados o no. Por tanto si que tiene aceleraciones en los 3 ejes.

Creo que dentro del nunchuk hay dos acelerometros, uno de dos ejes y el otro de uno.. pero de esto no estoy mu seguro...

Saludos
merss is offline   Responder Con Cita
Antiguo 28-10-2009, 23:51   #17
cacer
* * * *
 
Avatar de cacer
 
Registrado: 03 enero 2008
Posts: 705
Es correcto lo que dices, pero para poder usarlo, se neesita la rotación sobre el eje Z, para que al girar la cabeza de derecha a izquierda, se transmita este movimiento.

En el peor de los casos, tienes el Joystick o se añade un Magnetometro.

No estoy seguro. Lo he usado y es facil de utilizar.
cacer is offline   Responder Con Cita
Antiguo 29-10-2009, 00:01   #18
merss
* * * * *
 
Avatar de merss
 
Registrado: 26 diciembre 2006
Ubicación: Valencia, Sagunt
Posts: 1.101
cacer, no problemo, lo pruebo y te cuento.

Saludos
merss is offline   Responder Con Cita
Antiguo 29-10-2009, 00:44   #19
Nosepo
* * * *
 
Avatar de Nosepo
 
Registrado: 12 julio 2009
Ubicación: Elche
Posts: 504
Contactar con Nosepo a través de MSN
Ehh animo a todos los emprendedores que quieren compartir su trabajo sin poco mas beneficio que su merecido reconocimiento por nuestra parte. Vosotros haceis grandioso este hobby y este foro. Basta ya de peloteo, a ver si cuando tengais el proyecto os acordais de los "pobres" de la Wfly para que sea compatible con el Headtracking.
Nosepo is offline   Responder Con Cita
Antiguo 29-10-2009, 00:53   #20
cacer
* * * *
 
Avatar de cacer
 
Registrado: 03 enero 2008
Posts: 705
Cita:
Empezado por Wavess Ver Mensaje
Me alegra que abras un nuevo hilo ya que se estaban desviando muchos existentes.

Si tu idea no es usar un sensor magnetico deberias cambiarle el titulo a tu hilo, a parte de todo esto con el MHT todos lo conocemos como el de Sinver y compañia, y fueron ellos los que lo llamaron asi.

Salu2
Cambaido el nombre del Hilo, Tienes toda la razon del mundo.

Mil perdones.


Cita:
Ehh animo a todos los emprendedores que quieren compartir su trabajo sin poco mas beneficio que su merecido reconocimiento por nuestra parte. Vosotros haceis grandioso este hobby y este foro. Basta ya de peloteo, a ver si cuando tengais el proyecto os acordais de los "pobres" de la Wfly para que sea compatible con el Headtracking.
No es necesario que seas pelota. Aunque mola Creo que podemos hacer que te lo hagas tu mismo.

Por cierto, editado la primera parte para WII Motion. Estoy con vosotros de que esta es la solucion, mejor y mas economica.
cacer is offline   Responder Con Cita
Antiguo 29-10-2009, 01:16   #21
Nosepo
* * * *
 
Avatar de Nosepo
 
Registrado: 12 julio 2009
Ubicación: Elche
Posts: 504
Contactar con Nosepo a través de MSN
Wii motion Plus por 16€ en casa.




http://www.dealextreme.com/details.dx/sku.26835
Nosepo is offline   Responder Con Cita
Antiguo 29-10-2009, 07:42   #22
acristóbal
* * * * * *
 
Avatar de acristóbal
 
Registrado: 09 octubre 2006
Ubicación: Madrid, Paracuellos y Maderuelo
Posts: 2.418
Enhorabuena Cacer, vas a toda velocidad
Ahora lo que deberías hacer es, poder detectar que tipo de pulso tiene cada emisora (positivo o negativo) y que el tren de pulsos que sacas sea igual que el que le entra. Esto lo puedes hacer tambien añadiendo un par de pulsadores para poder configurarlo antes de operar.
__________________
Haz grande nuestra WIKI-FPV
acristóbal is offline   Responder Con Cita
Antiguo 29-10-2009, 09:09   #23
miquel.s.m
* * * * * *
 
Avatar de miquel.s.m
 
Registrado: 22 marzo 2007
Ubicación: Amposta (Tarragona)
Posts: 2.058
Contactar con miquel.s.m a través de MSN
muy bueno si señor
__________________
http://www.clubrcdelebre.com/ estan en ello
miquel.s.m is offline   Responder Con Cita
Antiguo 29-10-2009, 10:09   #24
eb7dln
* * * * * *
 
Avatar de eb7dln
 
Registrado: 18 febrero 2008
Ubicación: Prado del Rey (Cádiz)
Posts: 1.947
Contactar con eb7dln a través de MSN
Pues sí, felicidades por tu proyecto!
__________________
Ayuda a llenar de contenido nuestra WIKI
eb7dln is offline   Responder Con Cita
Antiguo 29-10-2009, 19:45   #25
merss
* * * * *
 
Avatar de merss
 
Registrado: 26 diciembre 2006
Ubicación: Valencia, Sagunt
Posts: 1.101
He estado 5 minutos jugueteando con mis herramientas preferidas, y he dejado el nunchuk en paños menores. Ya esta todo listo para meterle mano con el código y ver si funciona...
Miniatura de Adjuntos
Pulsar la imagen para la versión amplia
Nombre:  Nun+Ardu.jpg
Vistas: 73
Tamaño:  168,1 KB  Pulsar la imagen para la versión amplia
Nombre:  Nunchuk.jpg
Vistas: 60
Tamaño:  154,2 KB  Pulsar la imagen para la versión amplia
Nombre:  nuntras.jpg
Vistas: 71
Tamaño:  67,3 KB  
merss is offline   Responder Con Cita
Antiguo 29-10-2009, 23:03   #26
cacer
* * * *
 
Avatar de cacer
 
Registrado: 03 enero 2008
Posts: 705
Mi gozo en un pozo.

La parte en teoria mas sencilla, que es leer los datos del WM+ no me funciona.

He probado casi todo lo que he leido, ya que es necesario modificar la libreri wire, pero naaaa.

Leido aqui

El nunchuck si me funciona, aunqur para leer el giro en eje z, se tiene que realizar con lecturas de entre 450 y 560 aprox. Merrss juega primero con las posiciones del nunchuck.

Con el joystick, está tiraooo.

Bueno hoy queria haber plantado un video con los resultados, pero veo que tendran que esperar. Creo que este WM+, no está bien.

Jugare un rato con el nunchuck, pero poco.
cacer is offline   Responder Con Cita
Antiguo 29-10-2009, 23:07   #27
merss
* * * * *
 
Avatar de merss
 
Registrado: 26 diciembre 2006
Ubicación: Valencia, Sagunt
Posts: 1.101
cacer, según he leído el giro en z da los siguientes valores: min= 74, central=126 y max=177. Yo tardaré aún en probar lo mio, pero cuando lo haga postearé resultados.

Saludos
merss is offline   Responder Con Cita
Antiguo 30-10-2009, 01:29   #28
javiroarak
* * *
 
Registrado: 19 noviembre 2007
Ubicación: Donostia Guipuzcoa
Posts: 392
Este hilo promete mucho!!
Cacer enhorabuena gracias por todo y animo!!
javiroarak is offline   Responder Con Cita
Antiguo 30-10-2009, 17:24   #29
ramos
*
 
Registrado: 04 diciembre 2008
Ubicación: Portugal
Posts: 75
Cita:
Empezado por cacer Ver Mensaje
Mi gozo en un pozo.

La parte en teoria mas sencilla, que es leer los datos del WM+ no me funciona.

He probado casi todo lo que he leido, ya que es necesario modificar la libreri wire, pero naaaa.

Leido aqui

El nunchuck si me funciona, aunqur para leer el giro en eje z, se tiene que realizar con lecturas de entre 450 y 560 aprox. Merrss juega primero con las posiciones del nunchuck.

Con el joystick, está tiraooo.

Bueno hoy queria haber plantado un video con los resultados, pero veo que tendran que esperar. Creo que este WM+, no está bien.

Jugare un rato con el nunchuck, pero poco.
hola,
encontrei algo de interesante en http://randomhacksofboredom.blogspot...uino-love.html
vos paso lo que ha lido
talvez sea a causa do problema

''
Anonymous said...
Hi, great work here.

I've been able to interface with the nunchuck before but I can't get it to work with the M+. Can't even get the I2C start sequence to work.

I don't have a proper oscilloscope but it seems my clock and data lines are always low. Usually when I connect the nunchuck the lines would go high, not the case of the M+ though. And there's nothing wrong with my M+, works great in Sports Resort.

Any ideas?

Dan
Anonymous said... Oh nevermind. I figured it out. It seems the M+ needs external pull-up resistors on the clock and data lines whereas the nunchuck doesn't. I tried 1K and 4K7 resistors, both worked fine (100KHz, 3.3V).
''
ramos is offline   Responder Con Cita
Antiguo 30-10-2009, 18:57   #30
luico
AeromodelismoVirtual
 
Avatar de luico
 
Registrado: 09 marzo 2007
Ubicación: Murcia
Posts: 1.917
Cita:
Empezado por ramos
hola,
encontrei algo de interesante en http://randomhacksofboredom.blogspot...uino-love.html
vos paso lo que ha lido
talvez sea a causa do problema
Eso mismo ya lo comente yo en el hilo de "MHT con gyro compas by Sinvertronic"

http://www.aeromodelismovirtual.com/...6&postcount=91
luico is offline   Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +1. Ahora son las 04:08.


Forum Powered by: vBulletin Derechos de Autor ©2000 - 2007, Jelsoft Enterprises Ltd. - Edited Buttons Powered by phpBB © 2001, 2005 phpBB Group