Bonjour a tous
Après avoir galéré pendant 2 jours à avoir les bonnes valeurs venant d'un sensor imu altimu 10 V5 (accéléromètre, gyroscope, magnétomètre et baromètre) je vous transmet le code pour le faire fonctionner sans les librairies du sensor sur raspi avec processing.
la ou javais le bug c'était que je combinais les valeur de (x low et x high) comme écrit dans la librairie pour arduino
mais j'ai résolu mon problème en utilisant seulement les valeur de (x high)
fait un "sudo i2cdetect -y 1" dans la console du raspi pour trouver l’adressage du i2c
vous devez avoir la librairie "hardware io" d'installer et le sensor brancher pour utiliser ce code
broche raspi
sensor -> raspi
pin VIN pin 1 3.3v
pin SDA pin 3 SDA
pin SCL pin 5 SCL
pin GND pin 6,9,14,20,25,30,34,39 GND à votre choix
//*********************************************************
import processing.io.*;
I2C i2c;
PVector acc, gyro;
int addressAcc = 0x6b; //Adresse de l’accéléromètre et du gyro
int addressMag = 0x1e; //Adresse du Magnétomètre
int addressBar = 0x5d; //Adresse du Baromètre
int pitchDeg, rollDeg;
float pitchRaw, rollRaw;
void setup() {
size(400,400);
gpioSetup();
acc = new PVector(0,0,0);
gyro= new PVector(0,0,0);
}
void draw() {
accRead();
gyroRead();
}
void gpioSetup() {
i2cWriteReg(addressAcc, 0x10, 0x80); //config acc
i2cWriteReg(addressAcc, 0x11, 0x80); //config gyro
i2cWriteReg(addressAcc, 0x12, 0x04); //config acc/gyro
}
void i2cWriteReg(int address, int reg, int value) {
i2c.beginTransmission(address);
i2c.write(reg);
i2c.write(value);
i2c.endTransmission();
}
void accRead() {
i2c.beginTransmission(addressAcc); //commence la transmission sur le port i2c pour l'accéléromètre
i2c.write(0x28); //on demande linfo registre a partir du registre 0x28
byte[] accRaw = i2c.read(6); //on lit 6 registre après le 0x28 et on le store dans un tableau "accRaw"
byte xla = accRaw[0]; //valeur de X Low
byte xha = accRaw[1]; //valeur de X High
byte yla = accRaw[2]; //valeur de y Low
byte yha = accRaw[3]; //valeur de y High
byte zla = accRaw[4]; //valeur de z Low
byte zha = accRaw[5]; //valeur de z High
acc.x = xha;
acc.y = yha;
acc.z = zha;
pitchRaw = atan2(acc.x, acc.z); //besoin de cette valeur pour le magnétomètre
rollRaw = atan2(acc.y, acc.z); //besoin de cette valeur pour le magnétomètre
pitchDeg = int(degrees(atan2(acc.x, acc.z))); //donne l’angle en degré du sensor
rollDeg = int(degrees(atan2(acc.y, acc.z))); //donne l’angle en degré du sensor
print("pitch Deg ");
println(pitchDeg);
print("roll Deg ");
println(rollDeg);
}
void gyroRead() {
i2c.beginTransmission(addressAcc); //commence la transmission sur le port i2c pour le gyro
i2c.write(0x22); //on demande linfo registre a partir du registre 0x22
byte[] gyroRaw = i2c.read(6); //on lit 6 registre après le 0x22 et on le store dans un tableau "gyroRaw"
byte xlg = gyroRaw[0]; //valeur de X Low
byte xhg = gyroRaw[1]; //valeur de X High
byte ylg = gyroRaw[2]; //valeur de y Low
byte yhg = gyroRaw[3]; //valeur de y High
byte zlg = gyroRaw[4]; //valeur de z Low
byte zhg = gyroRaw[5]; //valeur de z High
gyro.x = xhg;
gyro.y = yhg;
gyro.z = zhg;
print("gyro x ");
println(gyro.x);
print("gyro y ");
println(gyro.y);
print("gyro z ");
println(gyro.z);
}
//*************************************************************
voila le code pour l’accéléromètre et le gyromètre je mettrais a jour ce post pour inclure le magnétomètre et le baromètre
en espérant en aider quelque un
Danny
Dernière modification par imdidi (2017-07-14 17:14:13)
Hors ligne
Pages: 1