Apéndice IV: Descripción de funcionalidades software
IV.II MinIMU9AHRS
Es el programa principal implementado y subido al dispositivo ESP32. Esta función se encarga de recibir los datos de los sensores, procesarlos y enviarlos al servidor para que el cliente, en este caso Unity, pueda descargarlos y usarlos para la simulación.
Las funciones principales de este programa son:
• void init_arrays(): esta función se encarga de inicializar los vectores que usaremos para almacenar los datos recibidos de los sensores, los vectores que usaremos durante el proceso de procesamiento de datos y el vector que envía los datos al servidor. Recorre los vectores iniciándolos a 0.
• void I2C_init(): se encarga de inicializar el bus I2C para la comunicación entre la tarjeta
ESP32 y la IMU. Además inicializa algunos registros de control de la IMU. Estos registros son:
o CTRL4_C: Registro de la IMU del dispositivo empotrado del acelerómetro y del giroscopio. Este registro se encarga de activar en la IMU la opción de comunicación del bus I2C.
o CTRL3_C: Registro de la IMU del dispositivo empotrado del acelerómetro y del giroscopio. Este registro tiene varias funciones de propósito general, pero en este caso, las funciones que activa son bloqueo de actualización de datos, Block Data Update y la función de incremento de la dirección del registro de datos cuando se produce un acceso múltiple de bytes a través de la interfaz serie. Para tener una descripción más detallada véase tabla: Características Hardware - Dispositivo LSM6DS33 (LSM6DS33, www) - Descripción de Registros - CTRL3_C .
o TAP_CFG: Registro de la IMU del dispositivo empotrado del acelerómetro y del giroscopio. Se encarga de activar los registros de reconocimiento de Tap del dispositivo LSM6DS33.
o TAP_THS_6D: Registro de la IMU del dispositivo empotrado del acelerómetro y del giroscopio. Se encarga de situar el umbral para el reconocimiento de Tap y de la función D6D.
• void Accel_Init(): esta función se encarga de inicializar los registros del acelerómetro de la IMU. Estos registros son:
o CTRL1_XL: Registro de la IMU del dispositivo empotrado del acelerómetro y del giroscopio. Se encarga de configurar la potencia, escala de selección y el filtro de banda ancha del acelerómetro.
o CTRL8_XL: Registro de la IMU del dispositivo empotrado del acelerómetro y del giroscopio. Se encarga de configurar los filtros de paso alto y paso bajo del acelerómetro así como el filtro de paso bajo de la función 6D.
• void Compass_Init(): función que se encarga de inicializar los registros del magnetómetro de la IMU. Estos registros son:
o CTRL_REG1: Registro de la IMU del dispositivo empotrado del magnetómetro. Se encarga de seleccionar el modo de operación para los ejes X e Y, y de seleccionar la tasa de datos de salida.
o CTRL_REG2: Registro de la IMU del dispositivo empotrado del magnetómetro. Se encarga de la configuración de la escala del magnetómetro.
o CTRL_REG3: Registro de la IMU del dispositivo empotrado del magnetómetro. Este registro no tiene ninguna función que interese, pero se mantiene para futuras ampliaciones.
o CTRL_REG4: Registro de la IMU del dispositivo empotrado del magnetómetro. Este registro se encarga de seleccionar el modo de operación del eje Z.
• void Gyro_Init(): función que se encarga de inicializar los registros del giroscopio de la IMU. Estos registros son:
o CTRL2_G: Registro de la IMU del dispositivo empotrado del acelerómetro y del giroscopio. Este registro se encarga de establecer la selección del ratio de datos de salida del giroscopio, la selección de escala del giroscopio y activar/desactivar la escala de 125 grados por segundo.
o CTRL6_C: Registro de la IMU del dispositivo empotrado del acelerómetro y del giroscopio. Este registro se encarga de activar el gatillo de nivel de sensibilidad de los datos del giroscopio y de activar el cerrojo de nivel de sensibilidad del giroscopio.
o CTRL7_G: Registro de la IMU del dispositivo empotrado del acelerómetro y del giroscopio. Este registro se encarga de activar el modo de operación de alto rendimiento del giroscopio, de activar el filtro de paso alto del giroscopio y de situar la frecuencia de corte del filtro de paso alto del giroscopio.
• bool New_event_gyro_X(): función que se encarga de chequear si se ha producido algún movimiento en el eje X del giroscopio, si es así la función devuelve true, en caso contrario false.
• bool New_event_gyro_Y(): función que se encarga de chequear si se ha producido algún movimiento en eje Y del giroscopio, si es así la función devuelve true, en caso contrario false.
Apéndice IV: Descripción de funcionalidades software
• bool New_event_gyro_Z(): función que se encarga de chequear si se ha producido algún movimiento en el eje Z del giroscopio, si es así la función devuelve true, en caso contrario false.
• bool New_event_accel_X(): función que se encarga de chequear si se ha producido algún movimiento en el eje X del acelerómetro, si es así la función devuelve true, en caso contrario false.
• bool New_event_accel_Y(): función que se encarga de chequear si se ha producido algún movimiento en el eje Y del acelerómetro, si es así la función devuelve true, en caso contrario false.
• bool New_event_accel_Z(): función que se encarga de chequear si se ha producido algún movimiento en el eje Z del acelerómetro, si es así la función devuelve true, en caso contrario false.
• void Read_Gyro(): función que se encarga de leer los datos, tanto de la parte alta como de la parte baja, de los ejes X, Y, Z del giroscopio, almacenarlos en un vector, que posteriormente es tratado para juntar la parte alta y la parte baja con el fin de conseguir el dato asociado al eje correspondiente.
• void Read_Accel(): función que se encarga de leer los datos, tanto de la parte alta como de la parte baja, de los ejes X, Y, Z del acelerómetro. Estos se almacenan en un vector, que posteriormente es tratado para juntar la parte alta y la parte baja con el fin de conseguir el dato asociado a el eje correspondiente.
• void Read_Compass():función que se encarga de leer los datos, tanto de la parte alta como de la parte baja, de los ejes X, Y, Z del magnetómetro, almacenarlos en un vector, que posteriormente es tratado para juntar la parte alta y la parte baja con el fin de conseguir el dato asociado a el eje correspondiente.
• void printdata(void): función que se encarga de representar los datos obtenidos. Tiene tres opciones disponibles de representación, en este caso, la opción es la 1.