Bibliotecas de Arduino y software necesario para la IMU GP9 AHRS de CHRobotics.
- Redshift Serial Interface: Descargar aquí
Este software permite la conexión entre el dispositivo GP9 y la PC mediante serial (Es necesario un convertidor de USB a TTL). Permite ajustar la frecuencia de actualización de los datos de los sensores, el Baudrate para la comunicación entre el dispositivo y la computadora, así como algunas calibraciones.
Baudrates
Frecuencia de datos
Calibración
- Arduino IDE: Descargar aquí
Elige la versión del IDE según el sistema operativo.
-
Redshift Serial Interface: La interfaz del fabricante solo se descomprime y se instala sin ningún paso adicional (Solo para Windows). Para conectar la GP9 por USB, puede utilizarse cualquier adaptador de USB a TTL. Puedes encontrar uno aquí.
-
Arduino IDE: Para instalar el IDE de Arduino, sigue los pasos indicados en la página oficial.
-
Librerías GP9: Para instalar las librerías, comprime los archivos disponibles aquí en un archivo ZIP. Luego, sigue las instrucciones del siguiente tutorial para agregarlas: Tutorial de instalación de librerías en Arduino.
A continuación, se presenta una comparación entre las direcciones hexadecimales de cada registro y las variables asociadas, contrastando su disposición original con la forma en que deben ser utilizadas para Arduino:
void GP9::save() {
switch (address) {
case DREG_HEALTH :
{
sats_used = (uint8_t)((data[0] & 0xFC) >> 2);
hdop = (uint16_t)(((data[0] & 0x03) << 8) | data[1]);
sats_in_view = (uint8_t)((data[2] & 0xFC) >> 2);
ovf = (uint8_t)((data[2] >> 1) & 0x01);
gps_st = (uint8_t)((data[3] & 0x60) >> 5);
press = (uint8_t)((data[3] >> 4) & 0x01);
accel = (uint8_t)((data[3] >> 3) & 0x01);
gyro = (uint8_t)((data[3] >> 2) & 0x01);
mag = (uint8_t)((data[3] >> 1) & 0x01);
gps = (uint8_t)(data[3] & 0x01);
break;
}
case DREG_GYRO_RAW_XY:
{
gyro_raw_x = ((int16_t)data[0] << 8) + ((int16_t)data[1] << 8);
gyro_raw_y = ((int16_t)data[2] << 8) + ((int16_t)data[3] << 8);
gyro_raw_z = ((int16_t)data[4] << 8) + ((int16_t)data[5] << 8);
gyro_raw_time = read_register_as_float(6);
break;
}
case DREG_ACCEL_RAW_XY:
{
accel_raw_x = ((int16_t)data[0] << 8) + ((int16_t)data[1] << 8);
accel_raw_y = ((int16_t)data[2] << 8) + ((int16_t)data[3] << 8);
accel_raw_z = ((int16_t)data[4] << 8) + ((int16_t)data[5] << 8);
accel_raw_time = read_register_as_float(6);
break;
}
}
Código con las direcciones corregidas
Se adjuntan también las bibliotecas originales. Puedes encontrarlas en este enlace: GP9-Originales. Las bibliotecas modificadas solo contienen los directorios y variables necesarias para mi proyecto.
Este ejemplo lee los datos del giroscopio en los ejes X, Y y Z.
#include // Librería de Arduino
#include // Librería local de la GP9
HardwareSerial SerialObject(0); // Define a HardwareSerial object for Serial 0
GP9 imu(SerialObject); // Initialize the GP9 object with the SerialObject
void setup() {
Serial.begin(115200); //Inicializa el Serial con el Baudrate deseado
}
void loop() {
if (imu.decode(Serial.read())) { // Función decode de la librería GP9
Serial.print(imu.gyro_x); Serial.print(", "); // Datos inerciales
Serial.print(imu.gyro_y); Serial.print(", ");
Serial.println(imu.gyro_z);
delay(1000); // Espera de 1 segundo entre lecturas
}
}
Primero se incluye la librería que se agregó localmente
#include
Se crea el objeto imu
GP9 imu(Serial);
Inicializa el estado y el puerto serie. (La GP9 tiene este Baurate por default)
Serial.begin(115200);
Esta función determinará qué registro se está leyendo, la longitud del batch y llamará al checksum una vez que haya terminado. "decode()" devuelve true si se leyó correctamente un paquete.
imu.decode(Serial.read())
Se mandan a llamar las variables colocando el objeto imu. antes de cada variable.
Serial.print(imu.gyro_x); Serial.print(imu.gyro_y); Serial.println(imu.gyro_z);
La lista completa de variables se encuentra disponible aquí. Para revisar cuáles son las variables que efectivamente lee el sensor, consulta la datasheet.
Como se puede observar en la imagen, se están leyendo los datos del giroscopio en los tres ejes, con una frecuencia de 1Hz.






