11-01-2014, 01:18 PM
Hoy he recibido un IMU de 9 grados por menos de 8€, incluye:
ITG3205: Giróscopo de 3 ejes
ADXL345: Acelerómetro de 3 ejes
HMC5883L: Brújula de 3 ejes
Todo en un reducido espacio:
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
Como digo, el skecth es básico para comprobar el funcionamiento de los 3 sensores, deberíais obtener una salida como esta:
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!
ITG3205: Giróscopo de 3 ejes
ADXL345: Acelerómetro de 3 ejes
HMC5883L: Brújula de 3 ejes
Todo en un reducido espacio:
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);
}
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!