Accede a los Sensores de tu Dispositivo desde el Navegador: La API Generic Sensor

¿Quieres llevar tus aplicaciones web al siguiente nivel utilizando los sensores de tu dispositivo? Descubre cómo la API Generic Sensor te permite acceder a datos del acelerómetro, giroscopio, y más, directamente desde tu navegador.

4 de mayo de 2025 por Alex Shalamov

Accede a los Sensores de tu Dispositivo desde el Navegador: La API Generic Sensor

¿Quieres llevar tus aplicaciones web al siguiente nivel utilizando los sensores de tu dispositivo? Descubre cómo la API Generic Sensor te permite acceder a datos del acelerómetro, giroscopio, y más, directamente desde tu navegador.

Alex Shalamov

Mikhail Pozdnyakov

Thomas Steiner

¿Qué es la API Generic Sensor y por qué te interesa?

La API Generic Sensor es un conjunto de interfaces que exponen los sensores de tu dispositivo a la web. Imagina las posibilidades: juegos inmersivos, seguimiento de actividad física, realidad aumentada, ¡todo en tu navegador!

  • Unifica el acceso a sensores: Simplifica la forma en que interactúas con diferentes sensores.
  • Fácil de extender: Nuevas clases de sensores se integran sin problemas.
  • Reutilización de código: El código escrito para un sensor puede adaptarse a otros.

Ventajas Clave: ¿Por qué la API Generic Sensor supera a las alternativas?

La API Generic Sensor no es solo otra forma de acceder a los sensores. Supera a las opciones existentes como DeviceMotion y DeviceOrientation en varios aspectos.

  • Configuración flexible: Ajusta la frecuencia de muestreo según las necesidades de tu aplicación.
  • Detección de disponibilidad: Comprueba si un sensor específico está presente en el dispositivo.
  • Timestamps de alta precisión: Sincroniza datos de sensores con otros eventos en tu aplicación con exactitud.
  • Independiente del DOM: Abre la puerta a su uso en service workers y entornos JavaScript sin interfaz gráfica.
  • Prioridad en seguridad y privacidad: Integración con la Permissions API para un control más seguro.
  • Sincronización automática con coordenadas de pantalla: Simplifica el desarrollo de aplicaciones de realidad aumentada y juegos.

Sensores a tu Alcance: ¿Qué puedes hacer con la API?

¡La API Generic Sensor te da acceso a una gran variedad de sensores!

Sensores de movimiento:

  • Accelerometer: Mide la aceleración en tres ejes.
  • Gyroscope: Mide la velocidad angular.
  • LinearAccelerationSensor: Mide la aceleración lineal, excluyendo la gravedad.
  • AbsoluteOrientationSensor: Mide la rotación con respecto al sistema de coordenadas de la Tierra.
  • RelativeOrientationSensor: Mide la rotación con respecto a un sistema de referencia estacionario.
  • GravitySensor: Determina la aceleración debida a la gravedad.

Sensores ambientales:

  • AmbientLightSensor: (Detrás de la flag #enable-generic-sensor-extra-classes en Chromium) Mide la luz ambiental.
  • Magnetometer: (Detrás de la flag #enable-generic-sensor-extra-classes en Chromium) Mide el campo magnético.

Detección de Funciones: Asegúrate de que tu Código Funcione

Antes de usar un sensor, verifica que el navegador lo soporte y que el dispositivo lo tenga.

if ('Accelerometer' in window) {
 // El navegador soporta la interfaz Accelerometer.
 // ¿El dispositivo tiene un acelerómetro?
}

Para una detección más completa, intenta conectarte al sensor:

let accelerometer = null;
try {
 accelerometer = new Accelerometer({ frequency: 10 });
 accelerometer.onerror = (event) => {
  // Maneja errores.
  if (event.error.name === 'NotAllowedError') {
   console.log('Permiso denegado para acceder al sensor.');
  } else if (event.error.name === 'NotReadableError') {
   console.log('No se puede conectar al sensor.');
  }
 };
 accelerometer.onreading = (e) => {
  console.log(e);
 };
 accelerometer.start();
} catch (error) {
 // Maneja errores de construcción.
 if (error.name === 'SecurityError') {
  console.log('Construcción del sensor bloqueada por la Permissions Policy.');
 } else if (error.name === 'ReferenceError') {
  console.log('El navegador no soporta el sensor.');
 } else {
  throw error;
 }
}

Polyfill: Compatibilidad para Todos

Si necesitas soporte para navegadores que no implementan la API Generic Sensor, utiliza un polyfill.

// Importa los objetos necesarios.
import { Gyroscope, AbsoluteOrientationSensor } from './src/motion-sensors.js';

// ¡Listos para usar!
const gyroscope = new Gyroscope({ frequency: 15 });
const orientation = new AbsoluteOrientationSensor({ frequency: 60 });

Una Mirada Detallada a los Sensores: ¿Qué Hacen y Cómo Funcionan?

¿Te sientes un poco perdido entre tantos sensores? Aquí tienes una breve introducción:

Acelerómetro y Aceleración Lineal

Accelerometer sensor measurements

  • Accelerometer: Mide la aceleración del dispositivo en los ejes X, Y y Z. Incluye la gravedad.
  • LinearAccelerationSensor: Mide la aceleración, excluyendo la influencia de la gravedad.

Sensor de Gravedad

El GravitySensor devuelve el efecto de la aceleración debido a la gravedad en los ejes X, Y y Z del dispositivo.

Giroscopio

Gyroscope sensor measurements

El Gyroscope mide la velocidad angular en radianes por segundo alrededor de los ejes X, Y y Z del dispositivo.

Sensores de Orientación

Absolute orientation sensor measurements

  • AbsoluteOrientationSensor: Mide la rotación del dispositivo en relación con el sistema de coordenadas de la Tierra.
  • RelativeOrientationSensor: Proporciona datos de rotación en relación con un sistema de referencia estacionario.

Sincronización con Coordenadas de Pantalla: Simplifica Aplicaciones Inmersivas

Device coordinate system

Screen coordinate system

La API Generic Sensor permite configurar el sistema de coordenadas para que coincida con la orientación de la pantalla, simplificando el desarrollo de juegos y aplicaciones de realidad aumentada.

// Lecturas resueltas en el sistema de coordenadas del dispositivo (por defecto).
const sensorRelDevice = new RelativeOrientationSensor();

// Lecturas resueltas en el sistema de coordenadas de la pantalla.
const sensorRelScreen = new RelativeOrientationSensor({ referenceFrame: 'screen' });

¡Manos a la Obra! Un Ejemplo Sencillo

La API Generic Sensor es intuitiva y fácil de usar. Aquí tienes un ejemplo básico:

const accelerometer = new Accelerometer({ frequency: 60 });

accelerometer.addEventListener('reading', () => {
  console.log("Aceleración X: " + accelerometer.x);
  console.log("Aceleración Y: " + accelerometer.y);
  console.log("Aceleración Z: " + accelerometer.z);
});

accelerometer.addEventListener('error', event => {
  console.log(event.error.name, event.error.message);
});

accelerometer.start();

Demo web application pun

Desarrollo con las DevTools de Chrome: Depura y Perfecciona

Utiliza las Chrome DevTools para simular sensores y depurar tu código:

Chrome DevTools used ove

Conclusión

La API Generic Sensor abre un mundo de posibilidades para las aplicaciones web. Desde juegos inmersivos hasta herramientas de seguimiento de actividad física, ¡ahora puedes aprovechar al máximo los sensores de tu dispositivo directamente en el navegador! Empieza a experimentar y descubre todo lo que puedes lograr.

Artículos relacionados

Aumenta el Rendimiento de tu Juego: Refactorización del Decisor de Frame Rate en Chromium
Aumenta el Rendimiento de tu Juego: Refactorización del Decisor de Frame Rate en Chromium
¿Te frustra el lag en tus juegos y aplicaciones en Chromium? La optimización del frame rate (tasa de fotogramas) es crucial para una experiencia fluida y responsiva. Una refactorización en el código encargado de esta tarea puede marcar una gran diferencia. Descubre cómo esta actualización en Chromium podría beneficiarte....
4 de mayo de 2025
Domina Chrome: Secretos Ocultos para Optimizar tu Experiencia (Guía Definitiva)
Domina Chrome: Secretos Ocultos para Optimizar tu Experiencia (Guía Definitiva)
¿Quieres sacarle el máximo partido a Chrome y convertirte en un usuario avanzado? Descubre funciones secretas y configuraciones ocultas que transformarán tu navegación. Deja de conformarte con lo básico y empieza a disfrutar de un Chrome más rápido, eficiente y personalizado....
4 de mayo de 2025
El Secreto para Animaciones JavaScript Fluidas: Dominando el 'Framerate' Perfecto
El Secreto para Animaciones JavaScript Fluidas: Dominando el 'Framerate' Perfecto
Crear animaciones fluidas en JavaScript requiere encontrar el 'framerate' ideal. Este artículo te guiará para optimizar tus animaciones usando `setInterval` y `setTimeout`, logrando efectos visuales impactantes. ¡Prepárate para llevar tus animaciones al siguiente nivel!...
4 de mayo de 2025 por Ricket
Análisis de Intervalos Temporales Complejos en R: Guía Paso a Paso para Series Temporales Múltiples
Análisis de Intervalos Temporales Complejos en R: Guía Paso a Paso para Series Temporales Múltiples
¿Te encuentras luchando con la comparación de intervalos en múltiples series temporales en R? Este artículo desglosa un problema común y ofrece soluciones prácticas, maximizando tu comprensión y eficiencia. No te pierdas los consejos SEO para optimizar tu análisis temporal....
4 de mayo de 2025 por pajulpajul 1231111 bronze badges
¿Cansado de que Google espíe tus búsquedas? Guía Sencilla para Borrar y Desactivar el Historial
¿Cansado de que Google espíe tus búsquedas? Guía Sencilla para Borrar y Desactivar el Historial
¿Te incomoda que Google recuerde cada una de tus búsquedas? ¿Quieres proteger tu privacidad y evitar sugerencias no deseadas? Estás en el lugar correcto. Esta guía te mostrará cómo eliminar tu historial de búsqueda de Google y cómo desactivar la función de "búsquedas recientes" para siempre. ¡Recupera el control de tu privacidad digital en minutos!...
4 de mayo de 2025
¿No Encuentras "chrome://flags/#organic-repeatable-queries"? Descubre Por Qué y Qué Alternativas Tienes
¿No Encuentras "chrome://flags/#organic-repeatable-queries"? Descubre Por Qué y Qué Alternativas Tienes
¿Alguna vez te has topado con la instrucción de buscar "chrome://flags/#organic-repeatable-queries" en Google Chrome y te has encontrado con que no existe? No te preocupes, no estás solo. Este artículo te explicará por qué sucede esto y qué puedes hacer en su lugar....
4 de mayo de 2025