Ir al contenido

Movimiento

Sensores de movimiento y orientación. Emiten data (periódico) y change (al cambiar). La mayoría requiere elegir el chip con controller.

new five.Accelerometer({ controller, ... }). Mide aceleración en los ejes (incluida la gravedad), de donde se derivan la inclinación y la orientación.

Controllers: ANALOG (default; requiere pins y a veces sensitivity/zeroV), MPU6050, BNO055, ADXL335, ADXL345, MMA7361, MMA8452, MMA7660, LIS3DH, LSM303C, ESPLORA.

Propiedades

PropiedadQué devuelve
x, y, zaceleración por eje (en g)
pitch, rollinclinación en grados
accelerationmagnitud total
inclinationángulo de inclinación
orientationorientación discreta (−3..3)

Métodos (devuelven el objeto): hasAxis(eje) → bool si el chip mide ese eje; enable() / disable().

Eventos

EventoQué recibe
data{ x, y, z }
change{ x, y, z }
accelerationla magnitud (número)
orientationla orientación (número)
inclinationla inclinación (número)
tap, tap:single, tap:doublesin payload (golpes detectados)
const acc = new five.Accelerometer({ controller: "MPU6050" });
acc.on("change", () => {
varG.x = acc.x;
varG.y = acc.y;
varG.z = acc.z;
});
acc.on("tap:double", () => { varG.doblegolpe = Date.now(); });

new five.Gyro({ controller, ... }). Mide velocidad angular (cuánto gira).

Controllers: ANALOG (default; requiere sensitivity, da error si falta), MPU6050, BNO055.

Propiedades: x, y, z (ángulo acumulado), rate{ x, y, z } (grados/s), pitch / roll / yaw ({ rate, angle }), isCalibrated (bool).

Métodos: recalibrate() → vuelve a calibrar (pone isCalibrated en false hasta recalibrar).

Eventos: data{ x, y, z }; change{ x, y, z } (tras calibrarse).

const gyro = new five.Gyro({ controller: "MPU6050" });
gyro.on("change", () => {
varG.giroX = gyro.rate.x; // grados/s
});

new five.Compass({ controller }). Da el rumbo magnético. Requiere controller.

Controllers: HMC5883L, HMC6352, MAG3110, LSM303C, BNO055.

Propiedades: heading (rumbo en grados), bearing ({ name, abbr, low, high, heading } — el punto cardinal), raw ({ x, y, z }).

Métodos: disable() → detiene las lecturas.

Eventos: data{ heading }; change{ heading }; calibrated{ x, y, z } (solo MAG3110).

const brujula = new five.Compass({ controller: "HMC5883L" });
brujula.on("change", () => {
varG.rumbo = brujula.heading; // grados
varG.cardinal = brujula.bearing.abbr; // p. ej. "NE"
});

new five.Orientation({ controller }). Da la orientación ya fusionada (Euler y cuaternión). Solo el controller BNO055.

Propiedades: euler{ heading, roll, pitch }; quarternion{ w, x, y, z }.

Eventos: data{ euler, quarternion, calibration }; change → igual; calibration → el estado de calibración (número).

const orient = new five.Orientation({ controller: "BNO055" });
orient.on("change", () => {
varG.heading = orient.euler.heading;
});

new five.IMU({ controller }) (también disponible como five.Multi). Agrupa en un solo objeto varios sub-sensores del mismo chip y los expone como propiedades.

Controllers y qué sub-sensores aportan:

ControllerSub-sensores
MPU6050accelerometer, gyro, thermometer
BNO055accelerometer, gyro, magnetometer, orientation, thermometer
BME280altimeter, barometer, hygrometer, thermometer
BMP280 / BMP180 / MS5611altimeter, barometer, thermometer
SHT31D / HTU21D / SI7020 / TH02hygrometer, thermometer

Accedes a cada sub-sensor como propiedad: imu.accelerometer, imu.gyro, imu.thermometer, etc. Cada uno funciona como su componente individual.

Propiedades: isReady (bool; true cuando todos los sub-sensores reportaron al menos una vez), más una propiedad por cada sub-sensor; en BNO055, isCalibrated.

Métodos: enable() / disable().

Eventos

EventoCuándoQué recibe
dataperiódico (si isReady)el propio IMU (lees imu.accelerometer.x, etc.)
changecuando cambia un sub-sensor(imu, componente) — el IMU y cuál sub-sensor cambió
calibration / calibratedsolo BNO055estado de calibración / sin payload
const imu = new five.IMU({ controller: "MPU6050" });
imu.on("change", () => {
varG.acelX = imu.accelerometer.x;
varG.temp = imu.thermometer.celsius;
});