Stap 14: Arduino Demo: sensorgegevens
Deze twee sensoren worden aangesloten op uw microcontroller met behulp van een I2C bus. Dit soort bus is ontworpen om meerdere apparaten kunnen communiceren samen met behulp van slechts twee draden.
Ik heb ook de logic analyzer golfvormen van de I2C bus signalen toegevoegd. (zowel screenshot en Saleae logica 1.1.8 sessiebestand)
Voor meer informatie:
- http://en.wikipedia.org/wiki/I%C2%B2C
- < mijn andere instructable dat I2C uitlegt
- I2C Tutorial - ingesloten Lab
- BMA180 Datasheet
- ITG-3200 gegevensblad
De vlucht controller-software zal de versnellingsmeter initialiseren door eerste resetten van het, dan het lezen en een 10 Hz low-pass filter ingesteld variëren tot +/-2 G. Lees het gegevensblad en zie mijn manifestatiecode voor meer details over hoe dit te doen. Er zijn andere functies zoals interrupts, tik detection, enz., die wij niet gebruiken.
De vlucht controller-software zal de gyro-sensor eerste herstelt het initialiseren, vervolgens setup zijn 10 Hz low-pass filter, en het gebruik van de eigen interne oscillator te vertellen. Lees het gegevensblad en zie mijn manifestatiecode voor meer details over hoe dit te doen. Deze sensor kunt gebruikmaken van een externe oscillator en heeft ook digitale temperatuur uitgangen, maar we deze functies niet gebruiken.
Hier is de code:
#include < Wire.h >VOID Setup
{
Serial.begin(115200);
Wire.begin();
Serial.println ("Demo begon, initialiseren sensoren");
AccelerometerInit();
GyroInit();
Serial.println ("sensoren zijn geïnitialiseerd");
}
VOID AccelerometerInit()
{
Wire.beginTransmission(0x40); adres van de versnellingsmeter
Reset de versnellingsmeter
Wire.send(0x10);
Wire.send(0xB6);
Wire.endTransmission();
delay(10);
Wire.beginTransmission(0x40); adres van de versnellingsmeter
Low-pass filter, gamma-instellingen
Wire.send(0x0D);
Wire.send(0x10);
Wire.endTransmission();
Wire.beginTransmission(0x40); adres van de versnellingsmeter
Wire.send(0x20); Lees vanaf hier
Wire.endTransmission();
Wire.requestFrom(0x40, 1);
bytegegevens = Wire.receive();
Wire.beginTransmission(0x40); adres van de versnellingsmeter
Wire.send(0x20);
Wire.send (data & 0x0F); Low-pass filter tot 10 Hz
Wire.endTransmission();
Wire.beginTransmission(0x40); adres van de versnellingsmeter
Wire.send(0x35); Lees vanaf hier
Wire.endTransmission();
Wire.requestFrom(0x40, 1);
gegevens = Wire.receive();
Wire.beginTransmission(0x40); adres van de versnellingsmeter
Wire.send(0x35);
Wire.send ((data & 0xF1) | 0x04); bereik +/-2g
Wire.endTransmission();
}
VOID AccelerometerRead()
{
Wire.beginTransmission(0x40); adres van de versnellingsmeter
Wire.send(0x02); set Lees pointer naar de gegevens
Wire.endTransmission();
Wire.requestFrom(0x40, 6);
in de 3 as-gegevens lezen, is elk 16 bits
afdrukken van de gegevens naar terminal
Serial.Print ("versnellingsmeter: X =");
korte gegevens = Wire.receive();
gegevens += Wire.receive() << 8;
Serial.Print(Data);
Serial.Print (", Y =");
gegevens = Wire.receive();
gegevens += Wire.receive() << 8;
Serial.Print(Data);
Serial.Print (", Z =");
gegevens = Wire.receive();
gegevens += Wire.receive() << 8;
Serial.Print(Data);
Serial.println();
}
VOID GyroInit()
{
Wire.beginTransmission(0x69); adres van de gyro
Reset de gyro
Wire.send(0x3E);
Wire.send(0x80);
Wire.endTransmission();
Wire.beginTransmission(0x69); adres van de gyro
Low-pass filter 10 Hz
Wire.send(0x16);
Wire.send(0x1D);
Wire.endTransmission();
Wire.beginTransmission(0x69); adres van de gyro
gebruik van interne oscillator
Wire.send(0x3E);
Wire.send(0x01);
Wire.endTransmission();
}
VOID GyroRead()
{
Wire.beginTransmission(0x69); adres van de gyro
Wire.send(0x1D); set Lees aanwijzer
Wire.endTransmission();
Wire.requestFrom(0x69, 6);
lezen in 3 as van gegevens, afdrukken 16 stukjes per stuk, naar terminal
korte gegevens = Wire.receive() << 8;
gegevens += Wire.receive();
Serial.Print ("Gyro: X =");
Serial.Print(Data);
Serial.Print (", Y =");
gegevens = Wire.receive() << 8;
gegevens += Wire.receive();
Serial.Print(Data);
Serial.Print (", Z =");
gegevens = Wire.receive() << 8;
gegevens += Wire.receive();
Serial.Print(Data);
Serial.println();
}
void loop
{
AccelerometerRead();
GyroRead();
delay(500); uitvoer vertragen
}