Ver Mensaje Individual
Antiguo 07/04/2007, 17:44   #1
ZackY
Administrador
 
Avatar de ZackY
 
Fecha de ingreso: 31/mar/2001
Mensajes: 7.477
ZackY Va a salirse de la galaxia como siga asiZackY Va a salirse de la galaxia como siga asiZackY Va a salirse de la galaxia como siga asiZackY Va a salirse de la galaxia como siga asiZackY Va a salirse de la galaxia como siga asiZackY Va a salirse de la galaxia como siga asiZackY Va a salirse de la galaxia como siga asiZackY Va a salirse de la galaxia como siga asiZackY Va a salirse de la galaxia como siga asiZackY Va a salirse de la galaxia como siga asiZackY Va a salirse de la galaxia como siga asi
Post Proyecto MANDO XBOX360 con SENSOR DE MOVIMIENTO !!

Hace unos meses un aficionado a la electrónica y la XBOX publico un dispositivo, que acoplado a un mando inalámbrico de XBOX 360, le otorgaba a este mando características de las que disponen mandos como los de la Wii y la PS3. Podéis ver a su creador en su web: http://www.adamthole.com

Aquí podeis ver el resultado: http://www.youtube.com/watch?v=Dnd5O2P2uD0

Lamentáblemente este desarrollador finalmente no publico su desarrollo ni lo compartio con la comunidad, si no que lo vendio a una empresa que en breve lo comercializará.

Desde esta sección quiero plantearos la realización de un proyecto similar, para poder ahorrarnos unas pelillas, ya que pienso que tardará aún en llegar este dispositivo y su precio no será barato precisamente .

COMENZAMOS CON EL PROYECTO:

He estado revisando el sistema y no es para nada complicado. De hecho si leéis todo este posts comprobaréis que practicamente ya tenemos ese dispositivo (a falta de afinarlo y realizar unas pequeñas modificaciones).

Prácticamente el principal trabajo lo realiza el sensor/acelerómetro MMA6262Q. En ese datasheet que adjunto se puede incluso ver que el circuito típico de aplicación ("Typical Application") es idéntico al usado en este proyecto, con un Microcontrolador PIC16F88.

El sensor/acelerometro MMA6262Q entrega una tensión analógica dependiente de la orientación X-Y. Esa señal se la entrega a un microcontrolador PIC16F88 por su entrada analogico/digital. Los niveles de tensión analógica entregados por el sensor/acelerómetro son convertidos a niveles digitales TTL y escalados (rango) para adaptarlo a los grados del potenciómetro usado en el mando de la XBOX360. Posteriormente la salida resultante de esa adaptación es nuevamente convertida a tensión analógica por el conversor digital/analogico MCP4922 y finalmente esa señal analógica es la que se conecta a la placa del mando de la XBOX 360.

Resumiendo, lo que realmente hace el Microcontrolador PIC16F88 usado en ese proyecto es adaptar los niveles de tensión entregados por el sensor/acelerómetro a los niveles de escalado (rango) que usa el potenciómetro del mando.

Y aqui viene la buena noticia para los que somos algo perezosos a la hora de ponernos a desarrollar softs para microcontroladores PICs desde 0... Existen proyectos de ejemplo del uso de ese mismo sensor/acelerómetro con PICs. Os pongo aquí un ejemplo del uso del mismo sensor/acelerómetro con un PIC:

MATERIALES:

2- Resistencias SMD de 1K (1206)
3- Condensadores de 100nf (1206)
1- Acelerometro bi-axial (x,y) MMA6262Q

DISEÑO DE LA PLACA DE PRUEBA DEL SENSOR/ACELEROMETRO:


PLACA DEL SENSOR YA MONTADA:



CODIGO FUENTE PARA PROBAR EL SENSOR/ACELEROMETRO:

Este codigo maneja dos servos de forma que uno afecta al eje X y el otro al eje Y, de forma que cuando el acelerometro esta completamente llano los servos estan al centro de su recorrido (90º) y conforme inclinamos el acelerometro observamos como los servos van girando segun dicha inclinacion.

Para ello se ha utilizado un PIC18F452 a 4Mhz y se ha empleado dos entradas analogicas (x,y) y dos salidas digitales para los servos. Se puede adaptar este codigo para cualquier pic que disponga de al menos dos entradas analogicas y dos salidas digitales.

Pongo aqui el código de ejemplo desarrollado en PIC por Julio Montagut:

Descargar Code

Código:
Program Acelerometro  
 
'Programa acelerometro *********************************************************  
'Este codigo recorre los 180º de rango del servo cuando desplazamos en X e Y el  
'acelerometro MMA6262Q, la version es de Mikrobasic 5.0.0.0  
'  
'Creado y verificado por: Julio Montagut  
'Web: http://www.jvmbots.com  
'  
'Valores recogidos en modo analogico (8 bits):  
'    Horizontal:  76.77  
'    Minimo:      39  
'    Maximo:      115  
'  
'-HARDWARE:  
'    MCU: PIC 18F452  
'    Cristal: 4 Mhz  
'    1- Servo Futaba S3003 conectado a PORTB.0  
'    1- Servo Futaba S3003 conectado a PORTB.1  
'    - Canal X del MMA6262Q conectado a PORTA.0  
'    - Canal Y del MMA6262Q conectado a PORTA.1  
'*******************************************************************************  
 
 
dim VAD1, VAD2 as word  
dim AD1, AD2 as byte  
dim Tmp1, Tmp2 as byte  
dim Tmp1A, Tmp2A as byte  
dim aa as byte  
 
'Sub-rutina para generar pulsos a los servos 0-255  
Sub procedure Pulsout(dim byref Puerto as byte,dim Pin as byte,dim Pos as Byte)  
 Setbit(Puerto,Pin)  
 Delay_Cyc(Pos)  
 Clearbit(Puerto,Pin)  
End sub  
 
 
main:  
 ADCON1 = $80                   ' Configuracion analogica y Vref  
 TRISA  = $FF                   ' PORTA como entradas  
 TRISB=0                        ' PORTB como salidas  
 
 'Inicializacion  
 PORTB=0  
 Tmp1=127  
 Tmp1A=127  
 Tmp2=127  
 Tmp2A=127  
 
 while TRUE  
   'Lectura analogica (10 bits)  
   VAD1 = Adc_Read(0)  
   VAD2 = Adc_Read(1)  
 
   'Conversion de 10 a 8 Bytes del conversor AD  
   AD1= byte(VAD1 >>2)  
   AD2= byte(VAD2 >>2)  
 
   'Coeficiente de escala para el recorrido completo  
   Tmp1=((AD1*2)-20)  
   Tmp2=((AD2*2)-20)  
 
   'Corrector del Margen de vibracion  
   If (Tmp1<(Tmp1A-2)) or (Tmp1>(Tmp1A+2)) then Tmp1A = Tmp1 end if  
   If (Tmp2<(Tmp2A-2)) or (Tmp2>(Tmp2A+2)) then Tmp2A = Tmp2 end if  
 
   'Envio a los servos  
   For aa=0 to 2  
     Pulsout(PORTB,0,Tmp1A)      'Enviamos el tren de pulsos para el servo1  
     Pulsout(PORTB,1,Tmp2A)      'Enviamos el tren de pulsos para el servo2  
     Delay_ms(20)  
   Next aa  
 
 wend  
end.
En ese code será necesario elditar las rutinas del manejo de servos, ya que esas salidas son nuestras XOUT e YOUT que irán al conversor digital/analógico

Aqui un video de la prueba del sensor/acelerometro con el PIC:

Una última sugerencia. Pienso que se podría prescindir del conversor Digital/Analogico MCP4922, si colocásemos un Microcontrolador que ya dispusiese de ese conversor internamente.

AGRADECIMIENTOS:

A Julio Montagut por su estupendo proyecto para la adaptación y prueba del sensor/acelerómetro, corazón de este proyecto.

Espero que esta idea os resulte atractiva y ayudéis a la adaptación de este proyecto para su colocación en un mando de XBOX 360.

PETICIÓN

Please, os pediría que si estáis interesados en ayudar, sugerir o colaborar en este proyecto, lo hagáis en este mismo hilo.

Agradecemos igualmente si este proyecto es anunciado en otros foros, pero please, NO COPIÉIS ESTE HILO integramente en otros foros, ayudar a desarrollarlo desde aquí. Si lo deseáis podéis copiar este enlace en otros foros: http://foros.zackyfiles.com/showpost...30&postcount=1
ZackY está desconectado
Respuesta rápida a este mensaje
Responder Citando Subir
Publicidad: Conoce las ofertas de ANUNCIATE