Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
[9DOF] Acelerómetro, giróscopo y brújula
#1
Hoy he recibido un IMU de 9 grados por menos de 8€, incluye:

resimresim

ITG3205: Giróscopo de 3 ejes
ADXL345: Acelerómetro de 3 ejes
HMC5883L: Brújula de 3 ejes

Todo en un reducido espacio:
resim

Unos buenos puntos de este IMU es que es compatible tanto en 3.3v como 5v y a través de I2C se tiene comunicación con los 3 sensores.

De momento un sketch básico para comprobar el funcionamiento:
https://github.com/hectorri/Bioloid/tree...ng/IMU9DOF
Código:
#include "Wire.h"
#include "I2Cdev.h"
#include "ADXL345.h"
#include "HMC5883L.h"
#include "ITG3200.h"

#define LED_PIN 13

HMC5883L mag;
ITG3200 gyro;
ADXL345 accel;

int16_t mx, my, mz;
int16_t gx, gy, gz;
int16_t ax, ay, az;

bool blinkState = false;

void setup() {
    // Iniciar BUS I2C
    Wire.begin();

    // Iniciar comunicación serie
    Serial.begin(9600);

    // Inicializar IMU
    Serial.println("Inicializando dispositivo...");
    accel.initialize();
    mag.initialize();
    gyro.initialize();

    // Verificar conexión
    Serial.println("Comprobando conexión...");
    Serial.println(accel.testConnection() ? "ADXL345 OK!" : "ADXL345 ERROR!");
    Serial.println(gyro.testConnection() ? "ITG3205 OK!" : "ITG3205 ERROR!");
    Serial.println(mag.testConnection() ? "HMC5883L OK!" : "HMC5883L ERROR!");

    // Led de Arduino para visualizar estado
    pinMode(LED_PIN, OUTPUT);
}

void loop() {
    // Lectura de valores
    accel.getAcceleration(&ax, &ay, &az);
    mag.getHeading(&mx, &my, &mz);
    gyro.getRotation(&gx, &gy, &gz);

    Serial.print("AC: ");
    Serial.print(ax); Serial.print(" ");
    Serial.print(ay); Serial.print(" ");
    Serial.print(az); Serial.print(" ");
    
    Serial.print("MA: ");
    Serial.print(mx); Serial.print(" ");
    Serial.print(my); Serial.print(" ");
    Serial.print(mz); Serial.print(" ");
    
    Serial.print("GY: ");
    Serial.print(gx); Serial.print(" ");
    Serial.print(gy); Serial.print(" ");
    Serial.print(az); Serial.print(" ");
    Serial.println();
    delay(300);

    //Parpadeo LED para indicar actividad
    blinkState = !blinkState;
    digitalWrite(LED_PIN, blinkState);
}
Como digo, el skecth es básico para comprobar el funcionamiento de los 3 sensores, deberíais obtener una salida como esta:

Código:
Inicializando dispositivo...
Comprobando conexión...
ADXL345 OK!
ITG3205 OK!
HMC5883L OK!
AC: -125 -126 -193 MA: 322 436 89 GY: 13 1 -193
AC: -126 -125 -194 MA: 322 437 88 GY: 24 -9 -194
AC: -127 -123 -194 MA: 323 435 88 GY: 25 6 -194
AC: -127 -124 -194 MA: 322 436 87 GY: 20 -4 -194
AC: -127 -124 -194 MA: 322 436 88 GY: 14 -7 -194
AC: -127 -124 -194 MA: 323 435 89 GY: 7 -8 -194
AC: -128 -123 -195 MA: 321 438 87 GY: 9 -20 -195

Necesitaréis añadir a vuestro IDE de Arduino las correspondientes librerías; descargar y descomprimir: http://www.i2cdevlib.com/usage

En mi caso la aplicación será para un robot humanoide por lo que no necesito más, pero en el mercado tenéis distintas opciones según los grados de libertad (Degrees Of Freedom). Hay placas 3DOF, 6DOF, 9DOF, 12DOF... no hay límite y hay combinaciones para todos. Además de Acelerómetro, giróscopo y brújula podéis encontrar algunos IMU's con barómetro (altímetro), sensor de humedad, GPS, etc..

De momento la primera impresión es muy positiva. El 'interfacing' se realiza con sólo 4 cables (VCC, GND, SDA y SCL). Ahora... a cacharrear!
Citar
#2
Tengo uno pero de 6 grados (acelerómetro y giroscopio) y con medidor de temperatura también, aunque bastante desfasado en el tema de temperatura, pero para cacharrear sirve, ahora a dejarlo guardado hasta que lo precise para algo. Confundidois1:

Saludos Mola
Citar
#3
¡Buenísimo! Me lo guardo, una plaquita así me vendría de miedo para un proyecto que tengo en mente con un avión RC. ¿Qué tal anda de precisión? ¿Le afecta mucho el ruido ambiente? (El ruido natural del orden de mV)
Citar
#4
Pues para un avion o cualquier cosa en vuelo yo iria a por el 12DOF, igual que este pero añadiendo el altímetro/barómetro. Sólo ten en cuenta el tipo de acelerometeo/giróscopo/brújula que lleva (hay varios tipos).

Aún no he echo suficientes pruebas como para verificar su precision pero los sensores que monta este 9DOF en particular estan bastante trillados por internet y reunen buenas opiniones.
Citar
#5
Hombre, pues si en una placa tiene ya eso genial.
Básicamente me interesa hacer algo así como un "Drone": despega, hace una "vuelta" y aterriza de forma automática, cogiendo datos de sensores.
Gracias por comentar! La verdad es que una plaquita tan pequeña me solucionará algunos problemas Gran sonrisa
Citar
#6
Pues por ejemplo: http://www.ebay.com/itm/10DOF-9-axis-Att...3f2e724717

Tienes muchas, pero de referencia esa no está mal.
Citar
#7
hectorri, llegaste a probar algún ejemplo en processing para mover un cubo 3D con el giroscopo?

Estoy probando uno que he encontrado pero el cubo se vuelve loco, no sé si es cosa del código o del sensor, lo cierto es que los datos varían ligeramente incluso sin moverlo.

A ver si encuentro otro ejemplo distinto para probarlo...


Edit:
Nada, ya lo he conseguido, tenia problemas con la librería, la de este hilo no servia para las pruebas que quería hacer, tampoco funcionaba correctamente el código de processing en el ultimo ide, era necesario usar el 2.0.3 (usar una versión mas reciente causaba errores gráficos en pantalla, una mas vieja no conectaba al puerto serie Facepalm )
Use esto: https://github.com/Anilm3/ADXL345-Accelerometer
giltesa.com Mi blog personal sobre informática, electrónica, Arduino, bricolaje, etc.
Citar


Temas similares...
Tema Autor Respuestas Vistas Último mensaje
  Acelerometro con pantalla oled antonio_gt_9.2 3 664 14-11-2016, 10:36 PM
Último mensaje: Miquel
  Código acelerometro Electromecánico 10 1,436 01-02-2015, 12:38 PM
Último mensaje: WeSo