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