El acelerómetro de iPhone
06 May 2008

Una de las características más vistosas de nuestro dispositivo iPhone/iPod touch es la del acelerómetro, que es aquel que nos permite controlar los distintos movimientos que se producen en el mismo, o como mejor definición la presentada por Wikipedia como:
"Usado para determinar la posición de un cuerpo, pues al conocerse su aceleración en todo momento, es posible calcular los desplazamientos que tuvo. Considerando que se conocen la posición y velocidad original del cuerpo bajo análisis, y sumando los desplazamientos medidos se determina la posición."
Pues bien, ya que sabemos de que hablamos, ahora vamos a saber como utilizarlo en nuestras aplicaciones, no sin antes dejar bien claro que este caso práctico solamente es posible compilarlo y depurarlo a través de nuestro dispositivo, ya que de momento mediante el simulador no hay manera de reproducir dichos movimientos.
-La clase UIAccelerometer
Esta clase es la responsable de registrar los movimientos que se producen en nuestro dispositivo. Obtenemos como información los cambios producidos en cualquiera de sus tres ejes X, Y, Z (rotación - inclinación).
UIAccelerationValue _accelerometer[3];
//3 para controlar cada uno de los ejes
No es necesario crear objetos de esta clase, ya que usaremos el objeto compartido del dispositivo (sharedAccelerometer) para recibir los eventos de dicha clase, según el intervalo de tiempo que le definamos (20 milisegundos son 50Hz). Dichos eventos serán siempre recogidos en el hilo principal de nuestra aplicación y controlados por su delegado (delegate).
[[UIAccelerometer sharedAccelerometer] setUpdateInterval:(1.0 / 50)];
[[UIAccelerometer sharedAccelerometer] setDelegate:self];
En nuestra clase delegada de UIApplication, es necesario definamos el protocolo UIAccelerometerDelegate en nuestro fichero de declaración:
@interface AppController : NSObject <UIAccelerometerDelegate>
Gracias a dicho protocolo, podemos recibir dichos eventos en nuestro fichero de implementación mediante:
- (void)accelerometer:(UIAccelerometer *)accelerometer
didAccelerate:(UIAcceleration *)acceleration
- Simular el efecto gravedad
El siguiente bloque de código, localizado en nuestra función didAccelerate, simula el efecto gravedad para que los movimientos no sean bruscos. Esto se consigue aplicando un leve filtro a nuestros valores de X, Y y Z, en este caso de un 10% de datos de aceleración no filtrada.
_accelerometer[0]=acceleration.x * 0.1 + _accelerometer[0]*(1.0 - 0.1);
_accelerometer[1]=acceleration.y * 0.1 + _accelerometer[1]*(1.0 - 0.1);
_accelerometer[2]=acceleration.z * 0.1 + _accelerometer[2]*(1.0 - 0.1);

Comentarios recientes
No entendi na.........
recientemente actualice mi iPhone 4s teniendo como consecuencia que el acelerometro no le funciona ni en el whatsaap como también en el twitter. quisiera saber a que se debe gracias
[...] aplicación funciona usando el accelerómetro que viene incluído en el iPhone. El móvil debe estar sobre la cama y medirá los movimientos que [...]
Amigos tengo un problema con mi telefono precisamente el acelerometro a dejado de funcionar o al menos eso creo, lo restaure y sigue igual, contactos, mail, safari y fotos teniendolo en posicion vertical se giran solos. Espero alguna ayuda de su parte gracias
[...] El acelerómetro de iPhone [...]
[...] iPhone Software wrote an interesting post today on El acelerómetro de iPhoneHere’s a quick excerptUna de las características más vistosas de nuestro dispositivo iPhone/iPod touch es la del [...]
Deja un comentario