Paso 3: código:
El código de la partícula para MPU-6000 puede descargarse desde el repositorio de github-ControlEverythingCommunity
Aquí está el enlace para el mismo:
https://github.com/ControlEverythingCommunity/MPU-...
Aquí encontrará la hoja de datos del MPU-6000:
https://S3.amazonaws.com/controleverything.Media/c...
Hemos utilizado dos bibliotecas para el código de la partícula, que son application.h y spark_wiring_i2c.h. Biblioteca de Spark_wiring_i2c es necesaria para facilitar la comunicación I2C con el sensor.
También puede copiar el código desde aquí, se da como sigue:
Distribuido con una licencia de libre albedrío.
Se usa cualquier forma desea, beneficio o libre, siempre cabe en las licencias de sus obras anexas.
MPU-6000
Este código está diseñado para trabajar con el módulo de Mini de I2C MPU-6000_I2CS de ControlEverything.com.
https://www.controleverything.com/content/Accelor...
#include < application.h >
#include < spark_wiring_i2c.h >
MPU-6000 I2C dirección es 0x68(104)
#define Addr 0x68
int xGyro = 0, yGyro = 0, zGyro = 0, xAccl = 0, yAccl = 0, zAccl = 0;
void setup()
{
Establecer 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);
Inicializar la comunicación I2C como maestro
Wire.Begin();
Inicializar la comunicación serial, juego velocidad en baudios = 9600
Serial.Begin(9600);
Iniciar transmisión I2C
Wire.beginTransmission(Addr);
Registro de configuración seleccione giroscopio
Wire.Write(0x1b);
Rango de la escala completa = 2000 dps
Wire.Write(0x18);
Detener la transmisión I2C
Wire.endTransmission();
Iniciar transmisión I2C
Wire.beginTransmission(Addr);
Registro de configuración de acelerómetro Select
Wire.Write(0x1C);
Rango de la escala completa = +-16g
Wire.Write(0x18);
Detener la transmisión I2C
Wire.endTransmission();
Iniciar transmisión I2C
Wire.beginTransmission(Addr);
Administración de energía seleccione registrarse
Wire.Write(0x6B);
PLL con referencia xGyro
Wire.Write(0x01);
Detener la transmisión I2C
Wire.endTransmission();
Delay(300);
}
void loop()
{
unsigned int datos [6];
Iniciar transmisión I2C
Wire.beginTransmission(Addr);
Registro de datos Seleccione
Wire.Write(0x3b);
Detener la transmisión I2C
Wire.endTransmission();
Solicitud de 6 bytes de datos
Wire.requestFrom (Addr, 6);
Leer 6 bytes de datos
Si (Wire.available() == 6)
{
datos [0] = Wire.read();
datos [1] = Wire.read();
datos [2] = Wire.read();
datos [3] = Wire.read();
datos [4] = Wire.read();
datos [5] = Wire.read();
}
Delay(800);
Convertir los datos
xAccl = ((datos [1] * 256) + data[0]);
Si (xAccl > 32767)
{
xAccl-= 65536;
}
yAccl = ((datos [3] * 256) + data[2]);
Si (yAccl > 32767)
{
yAccl-= 65536;
}
zAccl = ((datos [5] * 256) + data[4]);
Si (zAccl > 32767)
{
zAccl-= 65536;
}
Delay(800);
Iniciar transmisión I2C
Wire.beginTransmission(Addr);
Registro de datos Seleccione
Wire.Write(0X43);
Detener la transmisión I2C
Wire.endTransmission();
Solicitud de 6 bytes de datos
Wire.requestFrom (Addr, 6);
Leer 6 bytes de datos
Si (Wire.available() == 6)
{
datos [0] = Wire.read();
datos [1] = Wire.read();
datos [2] = Wire.read();
datos [3] = Wire.read();
datos [4] = Wire.read();
datos [5] = Wire.read();
}
Delay(800);
Convertir los datos
xGyro = ((datos [1] * 256) + data[0]);
Si (xGyro > 32767)
{
xGyro-= 65536;
}
yGyro = ((datos [3] * 256) + data[2]);
Si (yGyro > 32767)
{
yGyro-= 65536;
}
zGyro = ((datos [5] * 256) + data[4]);
Si (zGyro > 32767)
{
zGyro-= 65536;
}
Delay(800);
Datos de salida al tablero
Particle.Publish ("aceleración en el eje x:", String(xAccl));
Particle.Publish ("aceleración en el eje:", String(yAccl));
Particle.Publish ("aceleración en el eje z:", String(zAccl));
Delay(1000);
Particle.Publish ("eje de rotación:", String(xGyro));
Particle.Publish ("eje de rotación:", String(yGyro));
Particle.Publish ("eje de rotación:", String(zGyro));
Delay(1000);
}