Paso 14: Arduino Demo: lectura del Sensor de
Estos dos sensores se conectan a tu microcontrolador mediante un bus I2C. Este tipo de bus está diseñado para permitir múltiples dispositivos a comunicarse usando solo dos cables.
También he unido las formas de onda de analizador de la lógica de las señales del bus I2C. (captura de pantalla y Saleae Logic 1.1.8 archivo de sesión)
Para más información:
- http://en.wikipedia.org/wiki/I%C2%B2C
- < mi otro instructivo que explica I2C
- Tutorial de I2C - laboratorio integrado
- Hoja de datos de BMA180
- Hoja de datos de ITG-3200
El software de controlador de vuelo inicializará el acelerómetro por primer reajuste lo, luego configurar un filtro de paso bajo de 10Hz y ajuste la lectura a +-2 g. leer su hoja de datos y ver mi código de demostración para obtener más información acerca de cómo hacerlo. Hay otras características tales como interrupciones, grifo detección, etc., que no estamos utilizando.
El software de controlador de vuelo se inicialice el sensor giroscópico primer reajuste lo, luego configurar su filtro de paso bajo de 10Hz y diciéndole que use su propio oscilador interno. Leer su hoja de datos y ver mi código de demostración para obtener más información acerca de cómo hacerlo. Este sensor le permite usar un oscilador externo y también tiene salidas de digital de la temperatura, pero no utiliza esas características.
Aquí está el código:
#include < Wire.h >void setup()
{
Serial.Begin(115200);
Wire.Begin();
Serial.println ("Demo iniciado, inicialización de los sensores");
AccelerometerInit();
GyroInit();
Serial.println ("sensores han sido inicializados");
}
void AccelerometerInit()
{
Wire.beginTransmission(0x40); Dirección del acelerómetro
restablecer el acelerómetro
Wire.Send(0x10);
Wire.Send(0xB6);
Wire.endTransmission();
Delay(10);
Wire.beginTransmission(0x40); Dirección del acelerómetro
filtro de paso bajo, ajustes de la gama
Wire.Send(0x0d);
Wire.Send(0x10);
Wire.endTransmission();
Wire.beginTransmission(0x40); Dirección del acelerómetro
Wire.Send(0x20); leer desde aqui
Wire.endTransmission();
Wire.requestFrom(0x40, 1);
datos byte = Wire.receive();
Wire.beginTransmission(0x40); Dirección del acelerómetro
Wire.Send(0x20);
Wire.Send (datos & 0x0F); filtro de paso bajo a 10 Hz
Wire.endTransmission();
Wire.beginTransmission(0x40); Dirección del acelerómetro
Wire.Send(0x35); leer desde aqui
Wire.endTransmission();
Wire.requestFrom(0x40, 1);
datos = Wire.receive();
Wire.beginTransmission(0x40); Dirección del acelerómetro
Wire.Send(0x35);
Wire.Send ((data & 0xF1) | 0 x 04); rango de +/-2g
Wire.endTransmission();
}
void AccelerometerRead()
{
Wire.beginTransmission(0x40); Dirección del acelerómetro
Wire.Send(0x02); conjunto Lee puntero a los datos
Wire.endTransmission();
Wire.requestFrom(0x40, 6);
leer en los datos de 3 ejes, cada uno es de 16 bits
imprimir los datos al terminal de
Serial.Print ("acelerómetro: X =");
breves datos = Wire.receive();
datos += Wire.receive() << 8;
Serial.Print(Data);
Serial.Print (", Y =");
datos = Wire.receive();
datos += Wire.receive() << 8;
Serial.Print(Data);
Serial.Print (", Z =");
datos = Wire.receive();
datos += Wire.receive() << 8;
Serial.Print(Data);
Serial.println();
}
void GyroInit()
{
Wire.beginTransmission(0x69); Dirección del giroscopio
restablecer el giro
Wire.Send(0x3E);
Wire.Send(0x80);
Wire.endTransmission();
Wire.beginTransmission(0x69); Dirección del giroscopio
filtro de paso bajo 10 Hz
Wire.Send(0x16);
Wire.Send(0x1D);
Wire.endTransmission();
Wire.beginTransmission(0x69); Dirección del giroscopio
Utilice el oscilador interno
Wire.Send(0x3E);
Wire.Send(0x01);
Wire.endTransmission();
}
void GyroRead()
{
Wire.beginTransmission(0x69); Dirección del giroscopio
Wire.Send(0x1D); conjunto Lee puntero
Wire.endTransmission();
Wire.requestFrom(0x69, 6);
leer en 3 ejes de datos, 16 bits cada una, imprimir en terminal
breves datos = Wire.receive() << 8;
datos += Wire.receive();
Serial.Print ("giro: X =");
Serial.Print(Data);
Serial.Print (", Y =");
datos = Wire.receive() << 8;
datos += Wire.receive();
Serial.Print(Data);
Serial.Print (", Z =");
datos = Wire.receive() << 8;
datos += Wire.receive();
Serial.Print(Data);
Serial.println();
}
void loop()
{
AccelerometerRead();
GyroRead();
Delay(500); reducir la velocidad de salida
}