Módulo BNO055 BMP280
Este módulo combina dos sensores en una sola placa:
- BNO055: Sensor de orientación absoluta de 9 grados de libertad (acelerómetro, giroscopio, magnetómetro) con fusión de sensores integrada.
- BMP280: Sensor de presión barométrica y temperatura de alta precisión.
Perfecto para proyectos de robótica, navegación inercial, drones, monitoreo ambiental y IoT.
Características
-
BNO055
Característica Descripción Fusión de sensores integrada cuaterniones
,ángulos Euler
,vectores de gravedad
, etc.Rangos del acelerómetro ±2/4/8/16 g Rangos del giroscopio ±125/250/500/1000/2000 °/s Rangos del magnetómetro ±1.3/1.9/2.5/4.0/4.7/5.6/8.1 gauss Protocolo I²C
,UART
(selección mediante PS0/PS1) -
BMP280
Característica Descripción Rango de presión 300…1100 hPa (±10…+1 m) Precisión de temperatura ±1 °C Protocolo I²C
,UART
,SWD
Aplicaciones del Módulo
Aplicación | Descripción |
---|---|
📈 Estación meteorológica portátil | Mide temperatura, humedad y presión con precisión. |
🪂 Altímetro / variómetro | Calcula la altitud basada en la presión atmosférica. |
🧍 Seguimiento de postura | Detecta inclinación o rotación del cuerpo. |
🛰️ Navegación inercial | Rastrea movimiento y orientación sin GPS. |
🕹️ Realidad aumentada / virtual | Proporciona orientación para entornos 3D. |
🚁 Controlador de vuelo | Estabilización para drones o robots. |
🤖 Interfaz de gestos | Usa movimiento para controlar dispositivos. |
🌐 Registro ambiental IoT | Recopila y transmite condiciones ambientales. |
Código de Ejemplo
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BNO055.h>
#include <Adafruit_BMP280.h>
#include <utility/imumaths.h>
// BNO055: orientación y movimiento
Adafruit_BNO055 bno(55, 0x28, &Wire);
// BMP280: temperatura y presión
Adafruit_BMP280 bmp;
Adafruit_Sensor* bmp_temp = bmp.getTemperatureSensor();
Adafruit_Sensor* bmp_pressure = bmp.getPressureSensor();
void setup() {
Serial.begin(115200);
while (!Serial);
// Inicializar BNO055
if (!bno.begin()) {
Serial.println("{\"error\":\"BNO055 no detectado\"}");
while (1);
}
delay(1000); // Estabilizar BNO055
// Inicializar BMP280 en dirección 0x76
if (!bmp.begin(0x76)) {
Serial.println("{\"error\":\"BMP280 no detectado en 0x76\"}");
while (1);
}
bmp.setSampling(Adafruit_BMP280::MODE_NORMAL,
Adafruit_BMP280::SAMPLING_X2,
Adafruit_BMP280::SAMPLING_X16,
Adafruit_BMP280::FILTER_X16,
Adafruit_BMP280::STANDBY_MS_500);
}
void loop() {
// Eventos del BNO055
sensors_event_t orientation, gyro, linearAccel, magnetometer, accel, gravity;
bno.getEvent(&orientation, Adafruit_BNO055::VECTOR_EULER);
bno.getEvent(&gyro, Adafruit_BNO055::VECTOR_GYROSCOPE);
bno.getEvent(&linearAccel, Adafruit_BNO055::VECTOR_LINEARACCEL);
bno.getEvent(&magnetometer, Adafruit_BNO055::VECTOR_MAGNETOMETER);
bno.getEvent(&accel, Adafruit_BNO055::VECTOR_ACCELEROMETER);
bno.getEvent(&gravity, Adafruit_BNO055::VECTOR_GRAVITY);
// BMP280: temperatura y presión
sensors_event_t temp_event, pressure_event;
bmp_temp->getEvent(&temp_event);
bmp_pressure->getEvent(&pressure_event);
// Calibración BNO055
int8_t temp_bno = bno.getTemp();
uint8_t sys, gyroCal, accelCal, magCal;
bno.getCalibration(&sys, &gyroCal, &accelCal, &magCal);
// JSON OUTPUT
Serial.print("{");
// BMP280
Serial.print("\"bmp280\":{\"temperature\":"); Serial.print(temp_event.temperature, 2);
Serial.print(",\"pressure\":"); Serial.print(pressure_event.pressure, 2); Serial.print("},");
// BNO055 - orientación
Serial.print("\"orientation\":{\"x\":"); Serial.print(orientation.orientation.x, 2);
Serial.print(",\"y\":"); Serial.print(orientation.orientation.y, 2);
Serial.print(",\"z\":"); Serial.print(orientation.orientation.z, 2); Serial.print("},");
// BNO055 - giroscopio
Serial.print("\"gyroscope\":{\"x\":"); Serial.print(gyro.gyro.x, 2);
Serial.print(",\"y\":"); Serial.print(gyro.gyro.y, 2);
Serial.print(",\"z\":"); Serial.print(gyro.gyro.z, 2); Serial.print("},");
// BNO055 - aceleración lineal
Serial.print("\"linear_accel\":{\"x\":"); Serial.print(linearAccel.acceleration.x, 2);
Serial.print(",\"y\":"); Serial.print(linearAccel.acceleration.y, 2);
Serial.print(",\"z\":"); Serial.print(linearAccel.acceleration.z, 2); Serial.print("},");
// BNO055 - magnetómetro
Serial.print("\"magnetometer\":{\"x\":"); Serial.print(magnetometer.magnetic.x, 2);
Serial.print(",\"y\":"); Serial.print(magnetometer.magnetic.y, 2);
Serial.print(",\"z\":"); Serial.print(magnetometer.magnetic.z, 2); Serial.print("},");
// BNO055 - aceleración total
Serial.print("\"acceleration\":{\"x\":"); Serial.print(accel.acceleration.x, 2);
Serial.print(",\"y\":"); Serial.print(accel.acceleration.y, 2);
Serial.print(",\"z\":"); Serial.print(accel.acceleration.z, 2); Serial.print("},");
// BNO055 - gravedad
Serial.print("\"gravity\":{\"x\":"); Serial.print(gravity.acceleration.x, 2);
Serial.print(",\"y\":"); Serial.print(gravity.acceleration.y, 2);
Serial.print(",\"z\":"); Serial.print(gravity.acceleration.z, 2); Serial.print("},");
// Temperatura interna y calibración
Serial.print("\"bno055_temp\":"); Serial.print(temp_bno); Serial.print(",");
Serial.print("\"calibration\":{\"sys\":"); Serial.print(sys);
Serial.print(",\"gyro\":"); Serial.print(gyroCal);
Serial.print(",\"accel\":"); Serial.print(accelCal);
Serial.print(",\"mag\":"); Serial.print(magCal); Serial.print("}");
Serial.println("}");
delay(500);
}