BNO055 per esp32, esp8266 e Arduino: caratteristiche, configurazione e rimappatura assi – 3

Spread the love

In questo articolo, esploreremo tutte le funzionalità di BON055 e come configurarlo.

Il BNO055 è un System in Package (SiP), che integra un accelerometro triassiale a 14 bit, un giroscopio triassiale a 16 bit con un intervallo di ±2000 gradi al secondo, un sensore geomagnetico triassiale e un microcontrollore Cortex M0+ a 32 bit con sistema Bosch Sensortec sensor fusion software, in un unico pacchetto.

BNO055 features configuration and axes remap
BNO055 features configuration and axes remap

Caratteristiche del magnetometro

Un  magnetometro  è un dispositivo che misura il campo magnetico o momento di dipolo magnetico. Alcuni  magnetometri  misurano la direzione, la forza o la variazione relativa di un campo magnetico in una posizione particolare.

Scrivo alcuni esempi e informazioni aggiuntive sui magnetometri in questo articolo, “GY-273 QMC5883L clone HMC5883L magnetometer for Arduino, esp8266 and esp32”.

  • Funzionalità flessibile
    Intervallo campo magnetico tipico ±1300µT (asse x, y);
    ±2500µT (asse z)
    Risoluzione del campo magnetico di ~0,3µT
    • Modalità operative :
      • Bassa potenza
      • Regolare
      • Regolare potenziato
      • Alta precisione
    • Modalità di alimentazione :
      • Normale
      • Sonno
      • Sospendere
      • Forza

Caratteristiche dell’accelerometro

Un  accelerometro  è uno strumento che misura la corretta accelerazione. L’accelerazione corretta è l’accelerazione (il tasso di variazione della velocità) di un corpo nel proprio sistema di riposo istantaneo; questo è diverso dall’accelerazione delle coordinate, che è l’accelerazione in un sistema di coordinate fisso.

Ho spiegato in dettaglio di cosa si tratta e ho scritto vari esempi pratici di applicazione in questo articolo, “Accelerometro GY-291 ADXL345 i2c spi con interrupt per esp32, esp8266, stm32 e Arduino”.

  • Funzionalità programmabile Intervalli
    di accelerazione ±2g/±4g/±8g/±16g
    Larghezza di banda del filtro passa-basso 1kHz – <8Hz

    Modalità operative:
    • Normale
    • Sospendere
    • Bassa potenza
    • Pausa
    • Sospensione profonda
  • Controller di interrupt su chip
    Generazione del segnale di interrupt attivato dal movimento per
    • rilevamento di qualsiasi movimento (pendenza).
    • riconoscimento del movimento lento o assente
    • rilevamento ad alta gravità

Caratteristiche del giroscopio

Un  giroscopio è un dispositivo utilizzato per misurare o mantenere l’orientamento e la velocità angolare. In origine era un filatoio o disco in cui l’asse di rotazione (asse di rotazione) è libero di assumere da solo qualsiasi orientamento.

  • Funzionalità programmabile
    Intervalli commutabili da ±125°/s a ±2000°/s
    Larghezza di banda del filtro passa-basso 523Hz – 12Hz
    Modalità operative :
    • Normale
    • Accensione rapida
    • Sospensione profonda
    • Sospendere
    • Risparmio energetico avanzato
  • Controller di interrupt su chip
    Generazione del segnale di interrupt attivato dal movimento per
    • rilevamento di qualsiasi movimento (pendenza).
    • alta percentuale

Architettura

Ho preso questa immagine da un datasheet per ricordare che questo sensore aveva 3 sensori e un microcontrollore con software di fusione per gestire i dati e darti una posizione assoluta.

Architecture of bno055
Architecture of bno055

Modalità operative

Il BNO055 fornisce una varietà di segnali di uscita, che possono essere scelti selezionando la modalità operativa appropriata. La tabella seguente elenca le diverse modalità ei segnali dei sensori disponibili.

Non-fusion modes (generate solo da sensori)

Operating ModeAccelMagnGyroRel. orient.
Fusion
Absol. orient.
Fusion
CONFIGMODE
ACCONLYX
MAGONLYX
GYROONLYX
ACCMAGXX
ACCGYROXX
MAGGYROXX
AMGXXX

Fusion modes

Operating ModeAccelMagnGyroRel. orient.
Fusion
Absol. orient.
Fusion
IMUXXX
COMPASSXXX
M4GXX X
NDOF_FMC_OFFXXXX
NDOFXXXX

Quindi per cambiare la modalità operativa devi solo chiamare questo comando:

  //Configuration to NDoF mode
  bno055_set_operation_mode(OPERATION_MODE_NDOF);

La libreria ti aiuta a mappare queste modalità operative con un elenco di costanti

/* Operation mode settings*/
#define OPERATION_MODE_CONFIG			0X00
#define OPERATION_MODE_ACCONLY			0X01
#define OPERATION_MODE_MAGONLY			0X02
#define OPERATION_MODE_GYRONLY			0X03
#define OPERATION_MODE_ACCMAG			0X04
#define OPERATION_MODE_ACCGYRO			0X05
#define OPERATION_MODE_MAGGYRO			0X06
#define OPERATION_MODE_AMG				0X07
#define OPERATION_MODE_IMUPLUS			0X08
#define OPERATION_MODE_COMPASS			0X09
#define OPERATION_MODE_M4G				0X0A
#define OPERATION_MODE_NDOF_FMC_OFF		0X0B
#define OPERATION_MODE_NDOF				0X0C

La modalità operativa predefinita dopo l’accensione è CONFIGMODE.

  1. Modalità non di fusione
    1. ACCONLYSe l’applicazione richiede solo dati grezzi dell’accelerometro, è possibile scegliere questa modalità. In questa modalità gli altri sensori (magnetometro, giroscopio) sono sospesi per ridurre il consumo energetico. In questa modalità, il BNO055 si comporta come un sensore di accelerazione autonomo.
      1. MAGONLY In modalità MAGONLY, il BNO055 si comporta come un magnetometro autonomo, con il sensore di accelerazione e il giroscopio sospesi.
      2. GYROONLY In modalità GYROONLY, il BNO055 si comporta come un giroscopio autonomo, con il sensore di accelerazione e il magnetometro sospesi.
      3. ACCMAG Sia l’accelerometro che il magnetometro sono accesi, l’utente può leggere i dati da questi due sensori.
      4. ACCGYRO Sia l’accelerometro che il giroscopio sono accesi; l’utente può leggere i dati da questi due sensori.
      5. MAGGYRO Sia il magnetometro che il giroscopio sono accesi, l’utente può leggere i dati da questi due sensori.
      6. AMG (ACC-MAG-GYRO) Tutti e tre i sensori accelerometro, magnetometro e giroscopio sono accesi.
  2. Modalità di fusione Le modalità di fusione dei sensori hanno lo scopo di calcolare le misure che descrivono l’orientamento del dispositivo nello spazio. Si può distinguere tra orientamento non assoluto o relativo e orientamento assoluto. Per orientamento assoluto si intende l’orientamento del sensore rispetto alla terra e al suo campo magnetico. In altre parole, le modalità di fusione del sensore di orientamento assoluto calcolano la direzione del polo nord magnetico. Nelle modalità di orientamento non assoluto o relativo, la direzione del sensore può variare a seconda di come il sensore è posizionato inizialmente.
    Tutte le modalità di fusione forniscono la direzione del sensore come dati quaternioni o in angoli di Eulero (angolo di rollio, beccheggio e imbardata). Il sensore di accelerazione è esposto sia alla forza di gravità che alle accelerazioni applicate al sensore dovute al movimento. Nelle modalità di fusione è possibile separare le due sorgenti di accelerazione, e quindi i dati di fusione del sensore forniscono separatamente l’accelerazione lineare (cioè l’accelerazione applicata a causa del movimento) e il vettore di gravità.
    1. IMU (Inertial Measurement Unit) Nella modalità IMU l’orientamento relativo del BNO055 nello spazio viene calcolato dai dati dell’accelerometro e del giroscopio. Il calcolo è veloce (ad es. velocità dati di output elevata).
    2. BUSSOLA La modalità BUSSOLA ha lo scopo di misurare il campo magnetico terrestre e calcolare la direzione geografica. Il campo magnetico terrestre è un vettore con le componenti orizzontali x,y e la componente verticale z. Dipende dalla posizione sul globo e dalla presenza naturale di ferro. Per il calcolo della direzione (direzione del puntatore della bussola) vengono utilizzate solo le componenti orizzontali x e y. Pertanto le componenti vettoriali del campo magnetico terrestre devono essere trasformate nel piano orizzontale, il che richiede la conoscenza della direzione del vettore di gravità. Riassumendo, la direzione può essere calcolata solo considerando contemporaneamente la gravità e il campo magnetico.
      Tuttavia, la precisione della misurazione dipende dalla stabilità del campo magnetico circostante. Inoltre, poiché il campo magnetico terrestre è solitamente molto più piccolo dei campi magnetici che si verificano attorno e all’interno dei dispositivi elettronici, la modalità bussola richiede la calibrazione.
    3. M4G (Magnete per giroscopio) La modalità M4G è simile alla modalità IMU, ma invece di utilizzare il segnale del giroscopio per rilevare la rotazione, viene utilizzato il cambiamento dell’orientamento del magnetometro nel campo magnetico. Poiché il magnetometro ha un consumo energetico molto inferiore rispetto al giroscopio, questa modalità consuma meno energia rispetto alla modalità IMU. Non ci sono effetti di deriva in questa modalità che sono inerenti al giroscopio.
      Tuttavia, come per la modalità bussola, la precisione della misurazione dipende dalla stabilità del campo magnetico circostante . Per questa modalità non è richiesta la calibrazione del magnetometro e inoltre non è disponibile.
    4. NDOF_FMC_OFF Questa modalità di fusione è la stessa della modalità NDOF, ma con la calibrazione rapida del magnetometro disattivata.
    5. NDOF Si tratta di una modalità di fusione con 9 gradi di libertà in cui i dati di orientamento assoluto fusi vengono calcolati dall’accelerometro, dal giroscopio e dal magnetometro. I vantaggi della combinazione di tutti e tre i sensori sono un calcolo rapido, che si traduce in un’elevata velocità di trasmissione dei dati e un’elevata robustezza dalle distorsioni del campo magnetico. In questa modalità la calibrazione del magnetometro veloce è attivata e quindi si ottiene una calibrazione rapida del magnetometro e una maggiore precisione dei dati di output. Il consumo di corrente è leggermente superiore rispetto alla modalità di fusione NDOF_FMC_OFF.

Piedinatura BNO055

Esistono molte versioni di moduli di questi sensori, io scelgo il più piccolo ed economico.

Ecco il modulo Aliexpress

Tutti questi moduli avevano le stesse caratteristiche, ma per abilitarle è necessario fare operazioni diverse.

Questo è il clone che uso:

BNO055 pinout mischianti
BNO055 pinout mischianti

Ed ecco quello di Adafruit:

Adafruit bno055 pinout specs
Adafruit bno055 pinout specs

Il sensore supporta un livello logico 3.3v, ma il modulo può essere alimentato da 5v.

Può comunicare tramite i2c (opzione predefinita) e tramite UART. Per attivare l’ultima modalità è necessario dissaldare il PS1.

PS1PS0Functionality
00Standard/Fast I2C Interface
01HID over I2C
10UART Interface
11Reserved

In modalità i2c standard, puoi selezionare 2 indirizzi. Di default, in questo modulo, è attivo l’indirizzo 0x29. Se metti a GND il pin ADD, l’indirizzo diventa 0x28.

i2c configurationADDI2C address
SlaveHIGH0x29
SlaveLOW (default)0x28
HID-I2C0x40

INT è configurato come pin di interruzione per segnalare un’interruzione all’host. Il trigger di interrupt è configurato come raising edge ed è agganciato al pin INT. Una volta che si verifica un’interruzione, il pin INT viene impostato su alto e rimarrà alto fino a quando non verrà ripristinato da host .

Rimappatura degli assi

La posizione di montaggio del dispositivo non dovrebbe limitare l’uscita dati del dispositivo BNO055. L’asse del dispositivo può essere riconfigurato sul nuovo asse di riferimento.

bno055 default axis
bno055 default axis

Nella libreria puoi gestire gli assi con questo comando:

bno055_set_axis_remap_value(REMAP_X_Y);

I possibili valori sono:

/* Axis remap values*/
#define REMAP_X_Y			0X21
#define REMAP_Y_Z			0X18
#define REMAP_Z_X			0X06
#define REMAP_X_Y_Z_TYPE0	0X12
#define REMAP_X_Y_Z_TYPE1	0X09
#define DEFAULT_AXIS		0X24

e il risultato diventa:

  • REMAP_X_Y : In questo caso l’asse è stato rimappato come Z=Z;X=Y;Y=X
  • REMAP_Y_Z : In questo caso l’asse è stato rimappato come X=X;Y=Z;Z=Y
  • REMAP_Z_X : In questo caso l’asse è stato rimappato come Y=Y;X=Z;Z=X
  • REMAP_X_Y_Z_TYPE0 : In questo caso l’asse è stato rimappato come X=Z;Y=X;Z=Y
  • REMAP_X_Y_Z_TYPE1 : In questo caso l’asse è stato rimappato come X=Y;Y=Z;Z=X
  • DEFAULT_AXIS : Questo caso è l’impostazione predefinita dell’asse X=X;Y=Y;Z=Z

Puoi anche cambiare il segno dell’asse con questi comandi:

	  int change = bno055_set_axis_remap_value(REMAP_X_Y);
	  if (change == SUCCESS) {
		  Serial.println("SUCCESS");
	  }else{
		  Serial.println("FAIL");
	  }

Ecco lo sketch che, dopo 10 secondi, rimappa l’asse X con l’asse Y e, dopo 20 secondi, ripristina l’asse.

/**
 * bno055 example remap the X axis to the Y axis
 *
 * by Renzo Mischianti <www.mischianti.org>
 *
 * https://mischianti.org/
 */

#include "BNO055_support.h"		//Contains the bridge code between the API and Arduino
#include <Wire.h>

//The device address is set to BNO055_I2C_ADDR2 in this example. You can change this in the BNO055.h file in the code segment shown below.
// /* bno055 I2C Address */
// #define BNO055_I2C_ADDR1                0x28
// #define BNO055_I2C_ADDR2                0x29
// #define BNO055_I2C_ADDR                 BNO055_I2C_ADDR2

//Pin assignments as tested on the Arduino Due.
//Vdd,Vddio : 3.3V
//GND : GND
//SDA/SCL : SDA/SCL
//PSO/PS1 : GND/GND (I2C mode)

//This structure contains the details of the BNO055 device that is connected. (Updated after initialization)
struct bno055_t myBNO;
struct bno055_euler myEulerData; //Structure to hold the Euler data

unsigned char accelCalibStatus = 0;		//Variable to hold the calibration status of the Accelerometer
unsigned char magCalibStatus = 0;		//Variable to hold the calibration status of the Magnetometer
unsigned char gyroCalibStatus = 0;		//Variable to hold the calibration status of the Gyroscope
unsigned char sysCalibStatus = 0;		//Variable to hold the calibration status of the System (BNO055's MCU)

unsigned long lastTime = 0;

/* Set the delay between fresh samples */
#define BNO055_SAMPLERATE_DELAY_MS (300)

void setup() //This code is executed once
{
  //Initialize I2C communication
  Wire.begin();

  //Initialization of the BNO055
  BNO_Init(&myBNO); //Assigning the structure to hold information about the device

  //Configuration to NDoF mode
  bno055_set_operation_mode(OPERATION_MODE_NDOF);

  delay(1);

  //Initialize the Serial Port to view information on the Serial Monitor
  Serial.begin(115200);
}

bool suspended = false;
bool reactivated = false;

void loop() //This code is looped forever
{
  if ((millis() - lastTime) >= BNO055_SAMPLERATE_DELAY_MS) //To stream at 10Hz without using additional timers
  {
    lastTime = millis();

    bno055_read_euler_hrp(&myEulerData);			//Update Euler data into the structure

    /* The WebSerial 3D Model Viewer expects data as heading, pitch, roll */
    Serial.print(F("Orientation: z "));
    Serial.print((float(myEulerData.h) / 16.00));
    Serial.print(F(", y "));
    Serial.print((float(myEulerData.p) / 16.00));
    Serial.print(F(", x "));
    Serial.print((float(myEulerData.r) / 16.00));
    Serial.println(F(""));
  }
  if (millis() > 10000 && suspended == false) {
	  Serial.print("REMAP X WITH Y! ");

	  int change = bno055_set_axis_remap_value(REMAP_X_Y);
	  if (change == SUCCESS) {
		  Serial.println("SUCCESS");
	  }else{
		  Serial.println("FAIL");
	  }

	  delay(100);
	  suspended = true;
  }

  if (millis() > 20000 && reactivated == false) {
	  Serial.println("RESTORE!");
	  bno055_set_axis_remap_value(DEFAULT_AXIS);

	  reactivated = true;
  }
}

Ecco il risultato in cui mi muovo nella stessa direzione i primi 10 secondi e dopo la rimappatura.

Orientation: z 29.50, y 3.00, x 2.69
Orientation: z 29.00, y 3.19, x 2.56
Orientation: z 28.44, y 3.00, x 2.56
Orientation: z 28.25, y 3.00, x 2.62
Orientation: z 28.31, y 3.00, x 2.62
Orientation: z 28.44, y 3.06, x 2.50
Orientation: z 28.25, y 2.94, x -2.94
Orientation: z 26.81, y 2.75, x -25.31
Orientation: z 26.94, y 3.00, x -40.13
Orientation: z 27.56, y 3.25, x -47.06
Orientation: z 28.50, y 3.56, x -49.56
Orientation: z 28.56, y 3.75, x -50.88
Orientation: z 28.69, y 3.87, x -50.75
Orientation: z 29.50, y 3.19, x -29.56
Orientation: z 28.75, y 2.87, x -9.25
Orientation: z 28.06, y 3.25, x -1.62
Orientation: z 28.06, y 3.37, x 2.69
Orientation: z 28.19, y 3.50, x 2.94
Orientation: z 28.19, y 3.44, x 2.94
Orientation: z 28.19, y 3.44, x 2.94
Orientation: z 28.12, y 3.44, x 3.00
Orientation: z 28.12, y 3.44, x 3.00
Orientation: z 28.12, y 3.44, x 3.00
Orientation: z 28.12, y 3.44, x 3.00
Orientation: z 28.12, y 3.44, x 3.00
Orientation: z 28.12, y 3.44, x 3.00
Orientation: z 28.12, y 3.44, x 3.00
Orientation: z 28.12, y 3.44, x 3.00
Orientation: z 28.12, y 3.44, x 3.00
Orientation: z 28.12, y 3.44, x 3.00
Orientation: z 28.12, y 3.44, x 3.00
Orientation: z 28.12, y 3.44, x 3.00
Orientation: z 28.12, y 3.44, x 3.00
REMAP X WITH Y! SUCCESS
Orientation: z 28.12, y 2.19, x 1.81
Orientation: z 28.12, y -1.31, x -0.88
Orientation: z 27.25, y -10.94, x -1.50
Orientation: z 27.19, y -17.62, x -1.50
Orientation: z 27.62, y -18.12, x -1.87
Orientation: z 28.44, y 5.12, x -3.06
Orientation: z 29.12, y 22.75, x -3.50
Orientation: z 29.44, y 32.81, x -3.56
Orientation: z 29.56, y 35.63, x -3.56
Orientation: z 29.69, y 37.88, x -3.56
Orientation: z 29.87, y 38.88, x -3.50
Orientation: z 30.19, y 41.56, x -3.44
Orientation: z 31.31, y 72.44, x -2.87
Orientation: z 30.31, y 77.00, x -3.00
Orientation: z 28.62, y 35.81, x -4.06
Orientation: z 27.94, y 13.50, x -3.81
Orientation: z 27.62, y 3.56, x -3.50
Orientation: z 27.50, y 0.00, x -3.37
Orientation: z 27.50, y -1.12, x -3.31
Orientation: z 27.50, y -1.69, x -3.31
Orientation: z 27.44, y -1.94, x -3.25
Orientation: z 27.44, y -2.12, x -3.25
Orientation: z 27.44, y -2.31, x -3.25
Orientation: z 27.44, y -2.37, x -3.25
Orientation: z 27.44, y -2.37, x -3.25
Orientation: z 27.37, y -2.37, x -3.37
Orientation: z 27.37, y -2.62, x -3.62
Orientation: z 27.37, y -2.69, x -3.50
Orientation: z 27.37, y -2.69, x -3.37
Orientation: z 27.37, y -2.69, x -3.31
Orientation: z 27.37, y -2.69, x -3.25
Orientation: z 27.37, y -2.69, x -3.25
Orientation: z 27.37, y -2.69, x -3.25
RESTORE!
Orientation: z 0.00, y 0.00, x 0.00
Orientation: z 27.37, y 0.13, x 0.00
Orientation: z 27.37, y 1.12, x 1.12
Orientation: z 27.37, y 1.56, x 1.56
Orientation: z 27.37, y 1.75, x 1.87
Orientation: z 27.37, y 1.94, x 2.00
Orientation: z 27.37, y 2.00, x 2.12
Orientation: z 27.37, y 2.12, x 2.19
Orientation: z 27.37, y 2.12, x 2.25
Orientation: z 27.37, y 2.12, x 2.25
Orientation: z 27.37, y 2.12, x 2.25

Configurazione del sensore

Le uscite di fusione del BNO055 sono strettamente collegate alle impostazioni di configurazione del sensore. Per questo motivo, la configurazione del sensore è limitata quando BNO055 è configurato per funzionare in una qualsiasi delle modalità operative di fusione.

Accelerometro

Accelerometer: cuboidal box having with a small ball with gravity effect
Accelerometer: cuboidal box having with a small ball with gravity effect

Parametri di default

ParametersValue
Power ModeNORMAL
Range+/- 4g
Bandwidth62.5Hz
Resolution14 bits

È possibile modificare questi parametri con questi comandi.

Gamma di accelerazione

  bno055_set_accel_range(ACCEL_RANGE_4G);

Qui le costanti definite nella libreria.

/* Accel Range */
#define ACCEL_RANGE_2G		0X00
#define ACCEL_RANGE_4G		0X01
#define ACCEL_RANGE_8G		0X02
#define ACCEL_RANGE_16G		0X03

Larghezza di banda di accelerazione

  bno055_set_accel_bandwidth(ACCEL_BW_62_5Hz);

Qui le costanti definite nella libreria.

/* Accel Bandwidth*/
#define ACCEL_BW_7_81Hz		0x00
#define ACCEL_BW_15_63Hz	0x01
#define ACCEL_BW_31_25Hz	0x02
#define ACCEL_BW_62_5Hz		0X03
#define ACCEL_BW_125Hz		0X04
#define ACCEL_BW_250Hz		0X05
#define ACCEL_BW_500Hz		0X06
#define ACCEL_BW_1000Hz		0X07

Potenza di accelerazione

bno055_set_accel_powermode(ACCEL_NORMAL);

Qui le costanti definite nella libreria.

/* Accel Power mode*/
#define ACCEL_NORMAL			0X00
#define ACCEL_SUSPEND			0X01
#define ACCEL_LOWPOWER_1		0X02
#define ACCEL_STANDBY			0X03
#define ACCEL_LOWPOWER_2		0X04
#define ACCEL_DEEPSUSPEND		0X05

La modalità di funzionamento del sensore dell’accelerometro non è configurabile dall’utente quando la modalità di alimentazione del BNO è configurata come modalità a basso consumo. Il BNO riscrive il valore configurato dall’utente in modalità normale quando si passa dalla modalità di configurazione a qualsiasi modalità operativa BNO. Viene utilizzato per ottenere le prestazioni della modalità a basso consumo BNO.

Giroscopio

Parametri di default

ParametersValue
Power ModeNORMAL
Range2000 °/s
Bandwidth32Hz
Resolution16 bits

È possibile modificare questi parametri con questo comando.

Portata del giroscopio

bno055_set_gyro_range(GYRO_RANGE_2000rps);

Qui le costanti definite nella libreria.

/* Gyro range*/
#define GYRO_RANGE_2000rps		0x00
#define GYRO_RANGE_1000rps		0x01
#define GYRO_RANGE_500rps		0x02
#define GYRO_RANGE_250rps		0x03
#define GYRO_RANGE_125rps		0x04

Larghezza di banda del giroscopio

bno055_set_gyro_bandwidth(GYRO_BW_32Hz);

Qui le costanti definite nella libreria.

/* Gyro Bandwidth*/
#define GYRO_BW_523Hz		0x00
#define GYRO_BW_230Hz		0x01
#define GYRO_BW_116Hz		0x02
#define GYRO_BW_47Hz		0x03
#define GYRO_BW_23Hz		0x04
#define GYRO_BW_12Hz		0x05
#define GYRO_BW_64Hz		0x06
#define GYRO_BW_32Hz		0x07

Modalità di funzionamento del giroscopio

bno055_set_gyro_operation_mode(GYRO_OPR_MODE_NORMAL);

Qui le costanti definite nella libreria.

/* Gyro Operation mode*/
#define GYRO_OPR_MODE_NORMAL				0X00
#define GYRO_OPR_MODE_FASTPOWERUP			0X01
#define GYRO_OPR_MODE_DEEPSUSPEND			0X02
#define GYRO_OPR_MODE_SUSPEND				0X03
#define GYRO_OPR_MODE_ADVANCE_POWERSAVE		0X04

Magnetometro

Stanley compass
Stanley compass

Parametri predefiniti

ParametersValue
Power ModeFORCED
ODR20Hz
XY Repetition15
Z Repetition16
Resolution x/y/z13/13/15 bits

Velocità dati di uscita del magnetometro

bno055_set_mag_data_outrate(MAG_DATA_OUTRATE_20Hz);

Qui le costanti definite nella libreria.

/* Mag data output rate*/
#define MAG_DATA_OUTRATE_2Hz		0X00
#define MAG_DATA_OUTRATE_6Hz		0X01
#define MAG_DATA_OUTRATE_8Hz		0X02
#define MAG_DATA_OUTRATE_10Hz		0X03
#define MAG_DATA_OUTRATE_15Hz		0X04
#define MAG_DATA_OUTRATE_20Hz		0X05
#define MAG_DATA_OUTRATE_25Hz		0X06
#define MAG_DATA_OUTRATE_30Hz		0X07

Modalità di funzionamento del magnetometro

bno055_set_mag_operation_mode(MAG_OPR_MODE_REGULAR);

Qui le costanti definite nella libreria.

/* Mag Operation mode*/
#define MAG_OPR_MODE_LOWPOWER				0X00
#define MAG_OPR_MODE_REGULAR				0X01
#define MAG_OPR_MODE_ENHANCED_REGULAR		0X02
#define MAG_OPR_MODE_HIGH_ACCURACY			0X03

Modalità di alimentazione del magnetometro

bno055_set_mag_powermode(MAG_POWER_MODE_NORMAL);

Qui le costanti definite nella libreria.

/* Mag power mode*/
#define MAG_POWER_MODE_NORMAL					0X00
#define MAG_POWER_MODE_SLEEP					0X01
#define MAG_POWER_MODE_SUSPEND					0X02
#define MAG_POWER_MODE_FORCE_MODE				0X03

Grazie

  1. BNO055 accelerometro, giroscopio, magnetometro con la semplice libreria Adafruit
  2. BNO055 per esp32, esp8266 e Arduino: cablaggio e libreria Bosch avanzata
  3. BNO055 per esp32, esp8266 e Arduino: caratteristiche, configurazione e rimappatura assi
  4. BNO055: modalità di alimentazione, accelerometro e interrupt di movimento
  5. BNO055 per esp32, esp8266 e Arduino: abilitare il pin INT e High G Interrupt dell’accelerometro
  6. BNO055 per esp32, esp8266 e Arduino: giroscopio ad alta velocità e interrupt per ogni movimento

Spread the love

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *