Étape 14 : Arduino démo : lecture de capteur
Ces deux capteurs sont connectés à votre microcontrôleur à l’aide d’un bus I2C. Ce type de bus est conçu pour permettre plusieurs périphériques de communiquer ensemble à l’aide de seulement deux fils.
J’ai également joint les ondes d’analyseur logique des signaux I2C bus. (capture d’écran et de logique Saleae 1.1.8 fichier de session)
Pour plus d’informations :
- http://en.wikipedia.org/wiki/I%C2%B2C
- < mes autres instructable qui explique I2C
- I2C Tutorial - Embedded Lab
- Fiche technique BMA180
- Fiche technique ITG-3200
Le logiciel de contrôleur de vol s’initialisera l’accéléromètre en réinitialisant première il, puis mise en place d’un filtre passe-bas de 10 Hz et en définissant la lecture vont à +/-2 g. lire sa fiche technique et voir mon code de démonstration pour plus de détails sur la façon de le faire. Il y a autres fonctionnalités telles que des interruptions, cliquez sur détection, etc., que nous n’utilisons pas.
Le logiciel de contrôleur de vol va initialiser le capteur gyroscopique en premier resetting, puis configurer son filtre passe-bas de 10 Hz et de dire à utiliser son propre oscillateur interne. Lire sa fiche et voir mon code de démonstration pour plus de détails sur la façon de le faire. Ce capteur permet d’utiliser un oscillateur externe et a également des sorties de digital de la température, mais nous n’utilisons pas ces fonctionnalités.
Voici le code :
#include < Wire.h >void setup()
{
Serial.Begin(115200) ;
Wire.Begin() ;
Serial.println ("Demo a commencé, l’initialisation des capteurs") ;
AccelerometerInit() ;
GyroInit() ;
Serial.println ("capteurs ont été initialisés") ;
}
Sub AccelerometerInit()
{
Wire.beginTransmission(0x40) ; adresse de l’accéléromètre
réinitialiser l’accéléromètre
Wire.Send(0x10) ;
Wire.Send(0xB6) ;
Wire.endTransmission() ;
Delay(10) ;
Wire.beginTransmission(0x40) ; adresse de l’accéléromètre
filtre passe-bas, paramètres de plage
Wire.Send(0x0D) ;
Wire.Send(0x10) ;
Wire.endTransmission() ;
Wire.beginTransmission(0x40) ; adresse de l’accéléromètre
Wire.Send(0x20) ; lire ici
Wire.endTransmission() ;
Wire.requestFrom(0x40, 1) ;
données d’octets = Wire.receive() ;
Wire.beginTransmission(0x40) ; adresse de l’accéléromètre
Wire.Send(0x20) ;
Wire.Send (données & 0x0F) ; filtre passe-bas à 10 Hz
Wire.endTransmission() ;
Wire.beginTransmission(0x40) ; adresse de l’accéléromètre
Wire.Send(0x35) ; lire ici
Wire.endTransmission() ;
Wire.requestFrom(0x40, 1) ;
données = Wire.receive() ;
Wire.beginTransmission(0x40) ; adresse de l’accéléromètre
Wire.Send(0x35) ;
Wire.Send ((data & 0xF1) | 0 x 04) ; fourchette de +/-2g
Wire.endTransmission() ;
}
Sub AccelerometerRead()
{
Wire.beginTransmission(0x40) ; adresse de l’accéléromètre
Wire.Send(0x02) ; jeu de lu pointeur vers les données
Wire.endTransmission() ;
Wire.requestFrom(0x40, 6) ;
lire dans les données de 3 axes, chacun d'entre eux est de 16 bits
imprimer les données à la borne
Serial.Print (« accéléromètre: X = ") ;
court de données = Wire.receive() ;
données += Wire.receive() << 8 ;
Serial.Print(Data) ;
Serial.Print (", Y =") ;
données = Wire.receive() ;
données += Wire.receive() << 8 ;
Serial.Print(Data) ;
Serial.Print («, Z = ") ;
données = Wire.receive() ;
données += Wire.receive() << 8 ;
Serial.Print(Data) ;
Serial.println() ;
}
Sub GyroInit()
{
Wire.beginTransmission(0x69) ; adresse du gyroscope
réinitialiser le gyroscope
Wire.Send(0x3E) ;
Wire.Send(0x80) ;
Wire.endTransmission() ;
Wire.beginTransmission(0x69) ; adresse du gyroscope
filtre passe-bas 10 Hz
Wire.Send(0x16) ;
Wire.Send(0x1d) ;
Wire.endTransmission() ;
Wire.beginTransmission(0x69) ; adresse du gyroscope
utiliser l’oscillateur interne
Wire.Send(0x3E) ;
Wire.Send(0x01) ;
Wire.endTransmission() ;
}
Sub GyroRead()
{
Wire.beginTransmission(0x69) ; adresse du gyroscope
Wire.Send(0x1d) ; jeu de lu pointeur
Wire.endTransmission() ;
Wire.requestFrom(0x69, 6) ;
lu dans les 3 axes de données, 16 bits chacun, imprimer à la borne
court de données = Wire.receive() << 8 ;
données += Wire.receive() ;
Serial.Print (« Gyro: X = ") ;
Serial.Print(Data) ;
Serial.Print (", Y =") ;
données = Wire.receive() << 8 ;
données += Wire.receive() ;
Serial.Print(Data) ;
Serial.Print («, Z = ") ;
données = Wire.receive() << 8 ;
données += Wire.receive() ;
Serial.Print(Data) ;
Serial.println() ;
}
void loop()
{
AccelerometerRead() ;
GyroRead() ;
Delay(500) ; ralentir la sortie
}