IMU - 3000 con ADXL345 y Arduino

1

¿Alguien ha usado el IMU-3000 con un acelerómetro conectado? Estoy creando un sistema que conecta el IMU-3000 y el ADXL345 (tablero de fusión IMU de SparkFun) con un tablero Arduino para realizar todos los cálculos sobre un proyectil en movimiento y enviar valores a un LCD. Estaba buscando la forma de leer los distintos ejes de forma individual, ya que todo viene a través del mismo pin. ¿Alguien sabe los comandos para eso en Arduino? Soy muy nuevo, así que si estoy sonando estúpido, por favor ayúdame a entender.

    
pregunta

1 respuesta

2

El IMU-3000 utiliza el bus I2C para comunicarse con el Arduino. El bus I2C es un protocolo en serie simple (muy parecido a la forma en que habla con el Arduino desde su PC) que utiliza una sola línea que funciona en ambas direcciones.

Para utilizar el bus I2C, debe incluir la biblioteca Wire.h que viene de serie con el Arduino. Luego puede implementar el protocolo descrito en la hoja de datos para obtener los valores específicos que desea.

Aquí hay un ejemplo aproximado de lo que estoy hablando. Este código no se ha probado, pero debería darle el flujo general de lo que está tratando de hacer en el Arudino. Una vez que haya terminado la lectura de bajo nivel, puede comenzar a implementar filtros para suavizar sus datos y obtener el formato que necesita para su aplicación.

#define GYRO 0x69 // gyro I2C address
void setup()
{
    Wire.begin();
    // Do other gyro stuff here, sample rate, max speed, power management
    // From datasheet, set power management to internal oscillator
    Wire.beginTransmission(GYRO); //Device Address
    Wire.send(0x3E); //Register Address
    Wire.send(0x00); // Value
    Wire.endTransmission();
}

void main()
{
    // A quick read example, temperature, gyro x,y,z
    Wire.beginTransmission(GYRO);
    Wire.send(0x1B); //Register Address TEMP_H
    Wire.endTransmission();

    Wire.beginTransmission(GYRO);
    Wire.requestFrom(GYRO,6); // Read 8 bytes
    int ii = 0;
    while(Wire.available())
    {
        buff[ii] = Wire.receive();
        ii++;
    }
    Wire.endTransmission;

    //Combine bytes into ints
    int temperature = buff[0] << 8 | buff[1];
    int gyro_x = buff[2] << 8 | buff[3];
    int gyro_y = buff[4] << 8 | buff[5];
    int gyro_z = buff[6] << 8 | buff[7];
}
    
respondido por el mjcarroll

Lea otras preguntas en las etiquetas