Inicio > Delphi, Ejemplos, Sensores, XE5 > Probando los sensores (Delphi XE5) – Parte I

Probando los sensores (Delphi XE5) – Parte I

Share Button

La mayoría de dispositivos Android (teléfonos y tablets) actuales cuentan con un gran númeroimages de sensores, de diferentes tipos y de variada funcionalidad. Algunos más conocidos que otros y algunos más útiles que otros.

La idea de esta entrada y de las siguientes es mostrar cómo funcionan y cómo acceder a la información que nos proporcionan los diferentes sensores presentes.

Los sensores presentes en el dispositivo se gestionan utilizando la clase TSensorManager, que se encuentra en la unit System.Sensors. Además podemos encontrar otras units que completan las definiciones para cada una de las plataformas destino (System.IOS.Sensors, System.Win.Sensors, System.Mac.Sensors,…)

Para acceder al SensorManager, lo podemos hacer a través de la propiedad Current de la clase, que nos devolverá la instancia ya creada.

0
TSensorManager.Current

Imagen667Los sensores están organizados o divididos por categorías.

Las disponibles están definidas en el enumerado TSensorCategory. Podemos hacer un recorrido por todas las categorías disponibles y mostrarlas utilizando el siguiente código:

0
1
2
3
4
5
6
var
cat: TSensorCategory;// Recorrido por las categorías disponibles
for cat := Low(TSensorCategory) to High(TSensorCategory)  do begin
s := GetEnumName(TypeInfo(TSensorCategory), integer(cat));
Memo1.Lines.Add(IntToStr(Ord(cat)) + ' - ' + s);

Imagen668Dentro de cada una de las categorías, según el dispositivo, dispondremos de uno o varios sensores. Para acceder a los diferentes sensores de una categoría disponemos de la función GetSensorsByCategory; Esta función nos devolverá una array con los sensores disponibles en esa categoría.

Una vez que accedemos a un sensor, encontramos que todos las clases de sensores (TCustomLocationSensor, TCustomEnvironmentalSensor,…) derivan de la clase TCustomSensor, que posee la mayoría de métodos abstractos, que después se redefinen en las clases derivadas.

Una vez que activamos el TSensorManager, podemos acceder a las propiedades particulares de cada uno de los sensores.

Si utilizamos RTTI, podemos acceder a lista de propiedades para cada una de las clases de sensores. Si lo combinamos con la lista de sensores presentes (visto antes), tendremos la lista particular para nuestro dispositivo:

ClassName: TCustomLocationSensor
Latitude
Longitude
ErrorRadius
Altitude
Speed
TrueHeading
MagneticHeading
Address1
Address2
City
StateProvince
PostalCode
CountryRegion
····························································
ClassName: TCustomEnvironmentalSensor
Temperature
Pressure
Humidity
WindDirection
WindSpeed
····························································
ClassName: TCustomMotionSensor
AccelerationX
AccelerationY
AccelerationZ
AngleAccelX
AngleAccelY
AngleAccelZ
Motion
Speed
····························································
ClassName: TCustomOrientationSensor
TiltX
TiltY
TiltZ
DistanceX
DistanceY
DistanceZ
HeadingX
HeadingY
HeadingZ
MagHeading
TrueHeading
CompMagHeading
CompTrueHeading····························································
ClassName: TCustomElectricalSensor
  Capacitance
Resistance
Inductance
Current
Voltage
Power····························································
ClassName: TCustomMechanicalSensor
SwitchState
SwitchArrayState
MultiValueState
Force
AbsPressure
GaugePressure
Strain
Weight····························································
ClassName: TCustomBiometricSensor
HumanPresence
HumanProximity
Touch····························································
ClassName: TCustomLightSensor
Lux
Temperature
Chromacity
····························································

ClassName: TCustomScannerSensor
  RFIDTag
BarcodeData

Para algunas de estas clases, Embarcadero ha creado componentes que facilitan el trabajo de acceso a las propiedades, pero se puede acceder a las mismas funcionalidades a través del TSensorManager.

Imagen671

En próximas entradas iremos viendo algo más del funcionamiento de algunos de ellos.

Os adjunto el código fuente del proyecto de prueba, así como el compilado para Windows (exe) y el compilado para Android (apk).

<Código fuente>
<Compilado para Windows>
<Compilado para Android>

Share Button
Categories: Delphi, Ejemplos, Sensores, XE5 Tags: , , ,
  1. jueves, 3 de octubre de 2013 a las 18:48 | #1

    Interesante aporte, muchas gracias :)

  2. Marcelo
    sábado, 2 de noviembre de 2013 a las 15:40 | #2

    Muy interesante!!

    Soy nuevo en el mundo android y me ha surgido una duda.
    ¿la cámara y el micrófono los trata como sensores o son otra cosa?
    ¿cómo podría sensar lo que viene del micrófono? (me interesa sobre todo poder detectar unos pulsos sonoros)

    Desde ya muchas gracias

  3. Neftalí
    sábado, 2 de noviembre de 2013 a las 16:12 | #3

    Hola Marcelo.
    La cámara y el micrófono no se tratan con las clases de sensores. Poseen clases específicas para trabajar con ellos.
    Para el micrófono, puedes buscar una demo de Danysoft, donde puedes ver cómo grabar y reproducir sonidos (youtube).
    Y para el tema de la cámara creo que también se puede encontrar algun video de Embarcadero al respecto.

    Un saludo.

  4. victor
    jueves, 25 de junio de 2015 a las 16:21 | #4

    Hola, muchísimas gracias por esto.

    intento leer diversos sensores desde un Arduino conectado al ordenador.
    ¿Me puede ser útil esta unidad para controlar el puerto USB de una PC de escritorio?

    No estoy seguro de si es la pregunta apropiada en en lugar correcto, desde ya te agradezco cualquier respuesta.

  5. Neftalí
    jueves, 25 de junio de 2015 a las 19:54 | #5

    @victor
    Hola Víctor.
    Para un PC de escritorio, sea con VCL o FMX te puede ser útil la librería GLibWMI (http://neftali.clubdelphi.com/?p=589) que te dará información sobre gran parte de componentes del equipo.

  1. Sin trackbacks aún.
What is 15 + 7 ?
Please leave these two fields as-is:
IMPORTANTE! Para continuar, debes contestar la pregunta anterior (para evitar SPAM) :-)