Vous êtes sur la page 1sur 8

INTRODUCCION A LOS SENSORES

La mayoria de los dispositivos de android incorpora sensores que miden su movimiento, orientacion
y otras varias magnitudes fisicas. Estos sensores proporcionan datos de magnitudes fisicas con alta
precision y exactitud y son utiles, por ejemplo, para controlar la posicion o el movimiento del
dispositivo en tres dimensiones o su localizacion mediante GPS.
Los sensores de android se pueden dividir en tres categorias:

Sensores de movimiento: miden las fuerzas de aceleracion y giro de un dispositivo en sus


tres ejes. Dentro de esta categoria podemos incluir aceleremetro, sensores de gravedad,
giroscopios y sensores de rotacion.
Sensores del medioambiente: miden magnitudes medioambientales, como la temperatura, la
presion, la iluminacion y la humedad. Dentro de esta categoria tenemos: barometros,
fotometros y termometros.
Sensores de Posicion: miden la posicion fisica del dispositivo. Entre ellos, encontramos: los
sensores de orientacion y los magnetometros.

En dispositivos android existen otros elementos que no puden ser considerados estrictamente
sensores en realidad, son componentes de hardware que contienen sensores que se usan con un
proposito muy definido. Por ejemplo, un dispositivo WIFI puede usarse para conectarse a una red
WIFI, dispositivos GPS, bluetooh y camara de fotos.
Para acceder a los sensores disponibles en un dispositivo y obtener sus datos, android proporciona
varias clases e interfaces que realizan una amplia variedad de tareas realacionados con los sensores,
estas clases son utilizadas para:

Obtener los sensores disponibles en el dispositivo.


Conseguir las capacidades e informacion de un sensor en particular, como el rango de
medida, el fabricante, la potencia y resolucion de la medida.
Recibir los datos de las magnitudes medidas de los sensores definiendo un intervalo de
actualizacion de las medidas.
Registrar y quitar los listeners (son eventos utilizados para almacenar datos acerca de la
interaccion del usuario con los componentes interactivos de la aplicacion, ejemplo claro
es: presionar sobre un boton like en una pantalla tactil.) asociados a la monitorizacion y
medida que realizan los sensores.

Todos los sensores se manipulan de forma homogenea y con ellos podremos implementar mejoras
de la interaccion del dispositivo con el usuario.
No todos los dispositivos disponen de los mismos sensores. Cada modelo y fabricante incluye
los que considera apropiados. Ademas, para gestionar estos sensores el dispositivo emplea
drivers que el fabricante no suele hacer publicos.
GESTION DE SENSORES EN ANDROID
Android permite acceder a los sensores internos del dispositivo a traves de las clases del paquete
android.hardware , las clases son:

Sensor: clase que representa a un sensor con todas sus propiedades.

SensorEvent: clase que se utiliza para pasar los datos medidos por el sensor a la aplicacin.
SensorManager: gestor que permite acceder a los sensores de un dispositivo.
SensorEventListener: interfaz utilizada para recibir las notificaciones del SensorManager
cuando se comunican nuevas medidas de los sensores.

Desde el punto de vista del desarrollador, las clases Java que debemos usar son pocas y sencillas.
Esto es asi porque; para que el dispositivo android gestione los sensores, debe utilizar drivers cuyo
codigo fuente no suele hacer publico su fabricante. Por esto, android tiene tanto xito entre los
fabricantes de dispositivos , ya que estos no tienen que publicar el codigo fuente de los drivers
que, en realidad, muestra como funciona su hardware.
La clase sensor contiene la informacion y propiedades completas de un sensor. Para obtener el tipo
de sensor que contiene un objeto de esta clase, debemos usar su metodo getType() que devuelve 11
tipos de sensores mediante alguna de las siguientes constantes.

Esta lista se va ampliando con las nuevas versiones de andorid, si bien los sensores disponibles
varian mucho en funcion del dispositivo utilizado.
Ademas, es posible dividir los sensores en dos categorias mas: real y virtual. Real se refiere a
que el sensor indica una medida de magnitud fisica. Virtual significa que son medidas obtenidas a
partir de la combinacion de las medidas de otros sensores o son medidas relativas.

En esta tabla es posible observar que los sensores TEMPERATURE y ORIENTATION son
obsoletos. El primero se ha sustituido por el sensor AMBIENT_TEMP, el segundo se quito en la
version de android 2.2 (API Level 8) porque normalmente no hay un sensor de orientacion en los
dispositivos. Para conocer la orientacion, el dispositivo combina los datos de los sensores
acelerometro y del campo magnetico (sensor geomagnetico basados en hardware del
dispositivo).
Para obtener la orientacion del dispositivo se puede utilizar el metodo
android.view.Display.getRotation() de android.
Para acceder a los sensores de un dispositivo android proporciona el gestor SensorManager.. Para
obtener el listado completo de los sensores del dispositivo, debemos usar su metodo
getSensorList(tipo) que devuelve una lista de tipo Sensor.
Al mismo tiempo a partir de la clase Sensor es posible hacer uso de sus metodos publicos:

La clase SensorManager dispone de los tres metodos getInclination(), getOrientation() y


getRotationMatrix() que se usan para calcular transformaciones de coordenadas.
Establecer el movimiento de un dispositivo en funcion a la inclinacion da lugar que la fuerza de
gravedad genere componentes vectoriales por medio de los sensores de movimiento retornando
arreglos multidimensionales con valores de tipo float para cada SensorEvent, devolviendo el radio
de los datos de rotacion para los tres ejes coordenados XYZ
Para que la actividad reciba las medidas de un sensor, es necesario registrar un Listener mediante el
metodo registerListener(). Este toma como primer parametro un objeto que implementa la
interface SensorEventListener y el segundo parametro que recibe es el tipo de sensor que
estamos registrando. Finalmente, el tercer parametro indica al sistema con que frecuencia desea
recibir las medidas del sensor, es posible establecer cuatro posibles valores (de menor a mayor
frecuencia):

SENSOR_DELAY_NORMAL: esta es la tasa de actualizacion utilizada por defecto.


SENSOR_DELAY_UI: los datos se actualizan a una velocidad suficiente para mostrarlo en
la interfaz de usuario.
SENSOR_DELAY_GAME : los datos se actualizan a una velocidad suficiente para ser
utilizados en videojuegos.
SENSOR_DELAY_FASTEST: los datos se actualizan tan rapido como pueda el
dispositivo.

Este parametro sirve para que el sistema conozca cuantas frecuencias de actualizacion de las
medidas de los sensores necesita nuestra aplicacin.
Clasificacion de los tipos de Sensores de Movimiento:

Sensor

TYPE_ACCELEROMETER

TYPE_GRAVITY

Sensor event data

Description

Units of
measure

Acceleration
force along the
SensorEvent.values[0] x axis
(including
gravity).
Acceleration
force along the
SensorEvent.values[1] y axis
m/s2
(including
gravity).
Acceleration
force along the
SensorEvent.values[2] z axis
(including
gravity).
2
SensorEvent.values[0] Force of gravity m/s
along the x axis.
SensorEvent.values[1] Force of gravity
along the y axis.

SensorEvent.values[2] Force of gravity


along the z axis.
Rate of rotation
SensorEvent.values[0] around the x
axis.
Rate of rotation
TYPE_GYROSCOPE
SensorEvent.values[1] around the y
rad/s
axis.
Rate of rotation
SensorEvent.values[2] around the z
axis.
Rate of rotation
(without drift
SensorEvent.values[0] compensation)
around the x
axis.
Rate of rotation
(without drift
SensorEvent.values[1] compensation)
around the y
axis.
Rate of rotation
(without drift
TYPE_GYROSCOPE_UNCALIBRATED SensorEvent.values[2]
compensation) rad/s
around the z
axis.
Estimated drift
SensorEvent.values[3] around the x
axis.
Estimated drift
SensorEvent.values[4] around the y
axis.
Estimated drift
SensorEvent.values[5] around the z
axis.
Acceleration
force along the
SensorEvent.values[0] x axis
(excluding
gravity).
Acceleration
force along the
TYPE_LINEAR_ACCELERATION
SensorEvent.values[1] y axis
m/s2
(excluding
gravity).
Acceleration
force along the
SensorEvent.values[2] z axis
(excluding
gravity).

TYPE_ROTATION_VECTOR

TYPE_SIGNIFICANT_MOTION

TYPE_STEP_COUNTER

TYPE_STEP_DETECTOR

Rotation vector
SensorEvent.values[0] component
along the x axis
(x * sin(/2)).
Rotation vector
SensorEvent.values[1] component
along the y axis
(y * sin(/2)).
Rotation vector Unitless
SensorEvent.values[2] component
along the z axis
(z * sin(/2)).
Scalar
component of
SensorEvent.values[3] the rotation
vector
((cos(/2)).1
N/A
N/A
N/A
Number of steps
taken by the
SensorEvent.values[0] user since the Steps
last reboot
while the sensor
was activated.
N/A
N/A
N/A

Sistema de coordenadas de un evento de sensor:

Simulador de sensores de Android (SensorSimulator)


Por defecto, el emulador de dispositivos virtuales (AVD) del SDK de Android no puede utilizar
sensores en el sentido mas general para depurar aplicaciones, es por este motivo que emplearemos
el simulador SensorSimulator para poder depurar una aplicacin Android que utilice sensores en su
funcionalidad, se incluira una librera en el desarrollo del proyecto Android.
Este sensor simula en tiempo real datos del sensor mediante el mouse. Actualmente, el emulador
incluye los siguientes sensores: acelerometro, brujula, orientacion, temperatura, luz,
proximidad, presion, gravedad, aceleracion lineal, rotacion y giroscopio. Tambien permite
simular el estado de carga de la bateria y la posicion del GPS mediante una conexin telnet.
Ademas, es posible guardar una secuencia de estados de un dispositivo y ejecutarla de forma
continua en el simulador. Es decir, podemos grabar el cambio de estado de los sensores y ejecutar
este cambio para ver como se comporta nuestra aplicacin.
Componentes de Hardware
Camara de fotos: casi todos los dispositivos Android integran una camara de fotos, incluso,
algunos disponen de una camara frontal y otra en la parte posterior. El SDK de Android incluye las
clases Java necesarias para gestionar una o varias camaras de fotos.
Existen dos formas de gestionar la camara de fotos:

Utilizando un Intent que gestiona por nosotros la camara de fotos y devuelve la imagen a la
aplicacin que lo ha iniciado.
Integrando directamente la camara en la aplicacin utilizando las bibliotecas (API) de
Android.
El SDK de Android incluye el soporte nativo, mediante una librera, que permite utilizar las

camaras de los dispositivos para sacar fotos y grabar videos.


Las clases que implementa la API de la camara de Android:

Camera: esta es la clase basica de la API para controlar la camara, tomar fotos y grabar
videos. Como un dispositivo Android puede tener varias camaras, para distinguirlas, esta
clase utiliza la variable de tipo entero camaraId.
CamaraInfo: clase que contiene la informacion de la camara con el identificativo camaraId.
SurfaceView: esta clase se usa para mostrar al usuario la previsualizacion de la camara de
fotos.
MediaRecorder: esta clase se emplea para grabar videos