Wiimote como podómetro

Por si alguno no lo sabe, en el MundoReal me dedicó a la informática. Ahora mismo estoy estudiando la ingeniería Superior y bueno, hay muchas prácticas que hacer. Una de ellas y en la que estoy ahora más metido está relacionada con el trabajo con acelerómetros. Una opción que se nos dio fue la de utilizar el wiimote ya que cuenta con acelerómetros para los 3 ejes. Y junto a otros dos compañeros decidimos hacer un podómetro (instrumento que cuenta los pasos).

Wiimote
Wiimote como podómetro

El primer paso es conectar el Wiimote al PC, para ello utilizó un adaptador bluetooth USB, el software de prueba BlueSoleil (creo no es indispensable, pero aun así lo he utilizado) y como SO trabajo desde XP.

El siguiente paso es buscar el entorno de desarrollo para empezar a programar. Había pensando trabajar con una librería que encontré en el Coding4Fun para C# ya que me defiendo bastante bien con ello, pero finalmente hemos decidido programar y trabajar en MATLAB(Zombie). La idea no es que me apasione, pero de cara a generar gráficas, filtros y captura de datos es bastante trivial.

Pues nada, instalamos la versión de MatLab 2007 y también necesitamos la librería fWIIne, que sirve como puente entre el Wiimote y las MATLAB. Ya está todo listo para empezar a trabajar así que manos a la obra.

Lo primero es pensar como vamos a medir los pasos. Lo que hemos hecho ha sido meter el wiimote dentro del calcetín del pie derecho en posición totalmente vertical con el fin de ver la señal que se obtiene al caminar, así que hacemos una captura de de datos. Para ello hemos usado la funcion de prueba test_fwiine pero modificada para que capture datos hasta que nosotros lo paremos, y posteriormente pintamos la gráfica obtenida con el comando plot.

>>test_fwiine %Guarda los datos en una matriz de 3 columnas (una por acelerometro)
>>plot(A(:,1)) %Pintamos la gráfica con la primera columna (que es la que nos interesa)
>>grid

Y el resultado obtenido es este:

 

Señal original

 

Señal original

Como veis hay muchos picos, así que podemos hacer un filtrado de la señal para verlo mejor. El filtrado de Butterworth nos vale para pillar una pequeña idea.

>>[B,C]=butter(5,0.2,’low’);
>>filtrada=filtfilt(B,C,A);
>>plot(filtrada(:,1))

Y obtenemos esta gráfica


Señal con filtro ButterWorth

Cuando pillamos los datos, íbamos contando también los pasos para comparar, y contando los pasos por cero en los picos pues podemos sacar fácilmente la cuenta total. Así que hicimos un pequeño programa que automatice esto (ojo, el programa usa la señal sin filtrar, ya que pillamos los datos al vuelo). Dejo el fuente como texto adjunto (hay que quitar la extensión txt, sino no me dejaba subirlo :P).

Y listo, ya tenemos una versión pobre, todo hay que decirlo, de un podómetro con el Wiimote Very Happy