Étape 3: Code :
Le code de la particule pour MPU-6000 peut être téléchargé depuis notre dépôt github-ControlEverythingCommunity
Voici le lien pour la même chose :
https://github.com/ControlEverythingCommunity/MPU-...
Le datasheet du MPU-6000 peut être trouvé ici :
https://S3.amazonaws.com/controleverything.Media/c...
Nous avons utilisé les deux bibliothèques de code de particules, qui sont application.h et spark_wiring_i2c.h. Spark_wiring_i2c bibliothèque est nécessaire pour faciliter la communication I2C avec le capteur.
Vous pouvez également copier le code d’ici, il est affecté comme suit :
Distribué avec une licence libre-arbitre.
Utilisez-le toute façon vous voulez, Profitez ou libre, autant il s’intègre dans les licences de ses ouvrages connexes.
MPU-6000
Ce code est conçu pour fonctionner avec le MPU-6000_I2CS I2C Mini Module disponible à ControlEverything.com.
https://www.controleverything.com/content/Accelor...
#include < application.h >
#include < spark_wiring_i2c.h >
MPU-6000 I2C adresse est 0x68(104)
Addr #define 0x68
int xGyro = 0, yGyro = 0, zGyro = 0, xAccl = 0, yAccl = 0, zAccl = 0 ;
void setup()
{
Définissez la variable
Particle.variable ("i2cdevice", « MPU-6000 ») ;
Particle.variable ("xAccl", xAccl) ;
Particle.variable ("yAccl", yAccl) ;
Particle.variable ("zAccl", zAccl) ;
Particle.variable ("xGyro", xGyro) ;
Particle.variable ("yGyro", yGyro) ;
Particle.variable ("zGyro", zGyro) ;
Initialiser la communication I2C maître
Wire.Begin() ;
Initialiser la communication série, réglée en bauds = 9600
Serial.Begin(9600) ;
Démarrer la transmission I2C
Wire.beginTransmission(Addr) ;
Registre de configuration sélectionnez gyroscope
Wire.Write(0x1B) ;
Gamme pleine échelle = 2000 dps
Wire.Write(0x18) ;
Interrompre la transmission I2C
Wire.endTransmission() ;
Démarrer la transmission I2C
Wire.beginTransmission(Addr) ;
Registre de configuration sélectionnez accéléromètre
Wire.Write(0x1C) ;
Gamme pleine échelle = +/-16g
Wire.Write(0x18) ;
Interrompre la transmission I2C
Wire.endTransmission() ;
Démarrer la transmission I2C
Wire.beginTransmission(Addr) ;
Gestion de l’alimentation sélectionner Enregistrer
Wire.Write(0x6b) ;
PLL avec référence xGyro
Wire.Write(0x01) ;
Interrompre la transmission I2C
Wire.endTransmission() ;
Delay(300) ;
}
void loop()
{
unsigned int données [6] ;
Démarrer la transmission I2C
Wire.beginTransmission(Addr) ;
Sélectionner des données de Registre
Wire.Write(0x3B) ;
Interrompre la transmission I2C
Wire.endTransmission() ;
Demande 6 octets de données
Wire.requestFrom (Addr, 6) ;
Lire les 6 octets de données
Si (Wire.available() == 6)
{
Data [0] = Wire.read() ;
données [1] = Wire.read() ;
données [2] = Wire.read() ;
données [3] = Wire.read() ;
données [4] = Wire.read() ;
données [5] = Wire.read() ;
}
Delay(800) ;
Convertir les données
xAccl = ((données [1] * 256) + data[0]) ;
Si (xAccl > 32767)
{
xAccl-= 65536 ;
}
yAccl = ((données [3] * 256) + data[2]) ;
Si (yAccl > 32767)
{
yAccl-= 65536 ;
}
zAccl = ((données [5] * 256) + data[4]) ;
Si (zAccl > 32767)
{
zAccl-= 65536 ;
}
Delay(800) ;
Démarrer la transmission I2C
Wire.beginTransmission(Addr) ;
Sélectionner des données de Registre
Wire.Write(0x43) ;
Interrompre la transmission I2C
Wire.endTransmission() ;
Demande 6 octets de données
Wire.requestFrom (Addr, 6) ;
Lire les 6 octets de données
Si (Wire.available() == 6)
{
Data [0] = Wire.read() ;
données [1] = Wire.read() ;
données [2] = Wire.read() ;
données [3] = Wire.read() ;
données [4] = Wire.read() ;
données [5] = Wire.read() ;
}
Delay(800) ;
Convertir les données
xGyro = ((données [1] * 256) + data[0]) ;
Si (xGyro > 32767)
{
xGyro-= 65536 ;
}
yGyro = ((données [3] * 256) + data[2]) ;
Si (yGyro > 32767)
{
yGyro-= 65536 ;
}
zGyro = ((données [5] * 256) + data[4]) ;
Si (zGyro > 32767)
{
zGyro-= 65536 ;
}
Delay(800) ;
Données de sortie au tableau de bord
Particle.Publish ("accélération dans l’axe des abscisses:", String(xAccl)) ;
Particle.Publish ("accélération dans l’axe des ordonnées:", String(yAccl)) ;
Particle.Publish ("accélération dans l’axe z:", String(zAccl)) ;
Delay(1000) ;
Particle.Publish ("axe de Rotation:", String(xGyro)) ;
Particle.Publish ("axe de Rotation:", String(yGyro)) ;
Particle.Publish ("axe de Rotation:", String(zGyro)) ;
Delay(1000) ;
}