Incrementar velocidad del Arduino Nano 33 BLE sense

Hola amigos,
Les escribo porque tengo una duda con el nuevo Arduino Nano 33 BLE sense: ¿Es posible aumentar la velocidad de cálculo de un Arduino?

Este nuevo Arduino tiene un sensor IMU incorporado lo que permite obtener los ángulos de rotación roll, pitch y yaw con las librerías: Arduino_LSM9DS1 y MadgwickAHRS. El ángulo calculado lo da correctamente, sin embargo es lento. Me explico, mi mano es más rápida que los datos mostrados en el monitor. De otra manera: cuando yo muevo rápidamente el arduino por ejemplo de 0 a 90º tarda en procesar los datos, de forma que hay un cierto retraso.

En general, los filtros y en concreto la librería de MadgwickAHRS implican una gran cantidad de cálculos. Yo no sé si es posible hacer que vaya más rápido en hacer estos cálculos. Por otro lado, quizás conozcáis otra forma de obtener los ángulos de manera más eficiente.

#include <Arduino_LSM9DS1.h>
#include <MadgwickAHRS.h>

// Madgwick
Madgwick filter;
// sensor's sample rate is fixed at 119 Hz:
const float sensorRate = 119;

float roll, pitch, heading;

void setup() {
  Serial.begin(9600);    // initialize serial communication

  // begin initialization
  if (!IMU.begin()) {
    Serial.println("Failed to initialize IMU!");
    while (1);
  }
  // start the filter to run at the sample rate:
  filter.begin(sensorRate);
}

void loop() {

  float ax, ay, az; // Acceleration
  float gx, gy, gz; // Gyroscope
  float mx, my, mz; // Magnometer

  // read orientation x, y and z eulers
  IMU.readAcceleration(ax, ay, az);
  IMU.readGyroscope(gx, gy, gz);
  //IMU.readMagneticField(mx, my, mz);

  filter.updateIMU(gx, gy, gz, ax, ay, az); //for all 3
  roll = filter.getRoll();
  pitch = filter.getPitch();
  heading = filter.getYaw();
  
  Serial.print("Orientation: ");
  Serial.print(heading);
  Serial.print(" ");
  Serial.print(pitch);
  Serial.print(" ");
  Serial.println(roll);
 
}

Os adjunto el código.
¡Muchas gracias!

Primero ubiquemos el contexto del problema, aunque lo has explicado bien aquí una imagen es mucho mas que las palabras.
En este link de Adafruit veo como se mueve un NANO 33 BLE y en la pantalla el conejo se mueve en consecuencia.
Es asi tu respuesta o mas lenta aún?

Buenos días.
Acabo de leer tu respuesta. Muchísimas gracias. Disculpa la tardanza.
Sí, la respuesta es muy lenta. La idea es no depender de sensores externos. Es decir, si el Arduino Nano 33 BLE sense tiene una unidad IMU, entonces aprovecharla. Todo es mucho más compacto. Lo curioso del caso es que el mismo código con el filtro Madwick para Arduino 33 IoT funciona perfectamente pero en cambio con el Arduino nano BLE sense, va muy lento. Además es muy fácil probar lo que digo. Es copiar el código y cargarlo en ambos Arduinos teniendo en cuenta que las librerías para cada IMU son diferentes.
Con el Arduino nano 33 BLE sense, cuando lo mueves y empieza a mostrar los datos es como si estuviera 'dormido', pero al final cuando se despierta, marca bien el ángulo.
Saludos.

Ese dormido me suena a un timeout.
Dejame ver si puedo descubrir qué ocurre. Mira las dos librerías e intenta encontrar las diferencias y en todo caso las discutimos.
Nos facilitas los dos links para compararlos?

Buenas noches Surbyte.
¡Gracias de nuevo! Sí, las librerías son:

  • para el BLE Sense: Arduino_LSM9DS1
  • para el 33 IoT: Arduino_LSM6DS3
  • y para ambos arduinos el filtro: MadgwickAHRS.

Todas son las librerías propias de Arduino. Es decir, IDE Arduino --> Administrar Bibliotecas. Pero adjunto los enlaces: Para el Arduino nano 33 BLE Sense: Arduino_LSM9DS1 y para el Arduino nano 33 IoT: https://www.arduino.cc/en/Reference/Arduino_LSM6DS3.

He probado también con otros filtros, y sucede exactamente lo mismo. Da igual el filtro, complementario de Kalman, filtro de Kalman, unificado, etc...

Entiendo que el filtro, si funciona para uno debería funcionar para el otro. Miraré también las librerías. A mí, no me hace falta para nada el magnetómetro. Sólo con el roll, pitch y Yaw es suficiente. Lo digo porque, aunque no me lo he mirado con profundidad, pudiera ser necesario calibrar el magnetómetro. Sin embargo es algo que no necesito.

¡Saludos!

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.