BNO055 per esp32, esp8266 e Arduino: caratteristiche, configurazione e rimappatura assi – 3
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.
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
- Modalità operative :
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.
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 Mode | Accel | Magn | Gyro | Rel. orient. Fusion | Absol. orient. Fusion |
---|---|---|---|---|---|
CONFIGMODE | – | – | – | – | – |
ACCONLY | X | – | – | – | – |
MAGONLY | – | X | – | – | – |
GYROONLY | – | – | X | – | – |
ACCMAG | X | X | – | – | – |
ACCGYRO | X | – | X | – | – |
MAGGYRO | – | X | X | – | – |
AMG | X | X | X | – | – |
Fusion modes
Operating Mode | Accel | Magn | Gyro | Rel. orient. Fusion | Absol. orient. Fusion |
---|---|---|---|---|---|
IMU | X | – | X | X | – |
COMPASS | X | X | – | – | X |
M4G | X | X | X | – | |
NDOF_FMC_OFF | X | X | X | – | X |
NDOF | X | X | X | – | X |
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.
- Modalità non di fusione
- 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.
- MAGONLY In modalità MAGONLY, il BNO055 si comporta come un magnetometro autonomo, con il sensore di accelerazione e il giroscopio sospesi.
- GYROONLY In modalità GYROONLY, il BNO055 si comporta come un giroscopio autonomo, con il sensore di accelerazione e il magnetometro sospesi.
- ACCMAG Sia l’accelerometro che il magnetometro sono accesi, l’utente può leggere i dati da questi due sensori.
- ACCGYRO Sia l’accelerometro che il giroscopio sono accesi; l’utente può leggere i dati da questi due sensori.
- MAGGYRO Sia il magnetometro che il giroscopio sono accesi, l’utente può leggere i dati da questi due sensori.
- AMG (ACC-MAG-GYRO) Tutti e tre i sensori accelerometro, magnetometro e giroscopio sono accesi.
- 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.
- 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à.- 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).
- 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. - 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. - NDOF_FMC_OFF Questa modalità di fusione è la stessa della modalità NDOF, ma con la calibrazione rapida del magnetometro disattivata.
- 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:
Ed ecco quello di Adafruit:
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
.
PS1 | PS0 | Functionality |
---|---|---|
0 | 0 | Standard/Fast I2C Interface |
0 | 1 | HID over I2C |
1 | 0 | UART Interface |
1 | 1 | Reserved |
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 configuration | ADD | I2C address |
---|---|---|
Slave | HIGH | 0x29 |
Slave | LOW (default) | 0x28 |
HID-I2C | 0x40 |
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.
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
Parametri di default
Parameters | Value |
---|---|
Power Mode | NORMAL |
Range | +/- 4g |
Bandwidth | 62.5Hz |
Resolution | 14 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
Parameters | Value |
---|---|
Power Mode | NORMAL |
Range | 2000 °/s |
Bandwidth | 32Hz |
Resolution | 16 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
Parametri predefiniti
Parameters | Value |
---|---|
Power Mode | FORCED |
ODR | 20Hz |
XY Repetition | 15 |
Z Repetition | 16 |
Resolution x/y/z | 13/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
- BNO055 accelerometro, giroscopio, magnetometro con la semplice libreria Adafruit
- BNO055 per esp32, esp8266 e Arduino: cablaggio e libreria Bosch avanzata
- BNO055 per esp32, esp8266 e Arduino: caratteristiche, configurazione e rimappatura assi
- BNO055: modalità di alimentazione, accelerometro e interrupt di movimento
- BNO055 per esp32, esp8266 e Arduino: abilitare il pin INT e High G Interrupt dell’accelerometro
- BNO055 per esp32, esp8266 e Arduino: giroscopio ad alta velocità e interrupt per ogni movimento