Problème de lecture d'un LSM9DS1 en I2C
Posté : ven. 24 févr. 2017 08:54
Bonjour,
Dans le cadre d'un projet, je souhaite obtenir les valeurs d'accélération et de vitesse angulaire sur 3 axes d'une plate-forme rotative. J'utilise un shield Sense HAT sur un Rapsberry Pi 3, mais n'utilise pas la bibliothèque Sense HAT qui limite le nombre d'enregistrements par seconde (environ 60 e/s dans mon cas). Au lieu de cela, je souhaite utiliser I2C pour augmenter le nombre de mesures par seconde.
Le problème, c'est que je n'arrive pas à obtenir des valeurs brutes cohérentes avec mon code... (code que je n'arrive pas à afficher ici, faute de BBCodes activés...)
Le gyroscope/accéléromètre/magnétomètre est un LSM9DS1, dont la datasheet est ici : http://www.st.com/resource/en/datasheet/lsm9ds1.pdf .
Dans un premier temps, je tente d'obtenir les valeurs de vitesse angulaire du gyroscope sur les 3 axes, les grandes lignes de mon code : j'importe la bibliothèque smbus ; je déclare un smbus avec bus = smbus.SMBus(1) (le 1 étant obtenu grâce à la commande i2cdetect -y 1 sur le terminal de Raspbian) ; je "démarre" le gyroscope avec bus.write_byte_data(0x6a, 0x10, 0b10100000) (0x6a adresse du gyroscope, 0x10 registre CTRL_REG1_G du gyroscope, 0b10100000 ODR à 476 Hz et cutoff à 21 Hz, gamme du gyroscope à +/- 245 dps) ; et enfin, lecture des données brutes du gyro avec bus.read_byte_data(0x6a, 0x18/).
Le souci, c'est que mes valeurs brutes lues ne sont pas cohérentes du tout : lorsque le Sense HAT est immobile, je devrais obtenir des valeurs brutes proches de 0, or j'obtiens des valeurs X, Y, Z valant respectivement environ 900, 100, 90...
Je ne pense pas rencontrer de soucis avec la conversion des données brutes vers des valeurs réelles, mais je pense tout simplement que c'est mon I2C qui n'est pas correctement réglé.
Pourriez-vous m'aider à configurer mon LSM9DS1 de manière à obtenir des valeurs cohérentes ?
Merci d'avance !
Dans le cadre d'un projet, je souhaite obtenir les valeurs d'accélération et de vitesse angulaire sur 3 axes d'une plate-forme rotative. J'utilise un shield Sense HAT sur un Rapsberry Pi 3, mais n'utilise pas la bibliothèque Sense HAT qui limite le nombre d'enregistrements par seconde (environ 60 e/s dans mon cas). Au lieu de cela, je souhaite utiliser I2C pour augmenter le nombre de mesures par seconde.
Le problème, c'est que je n'arrive pas à obtenir des valeurs brutes cohérentes avec mon code... (code que je n'arrive pas à afficher ici, faute de BBCodes activés...)
Le gyroscope/accéléromètre/magnétomètre est un LSM9DS1, dont la datasheet est ici : http://www.st.com/resource/en/datasheet/lsm9ds1.pdf .
Dans un premier temps, je tente d'obtenir les valeurs de vitesse angulaire du gyroscope sur les 3 axes, les grandes lignes de mon code : j'importe la bibliothèque smbus ; je déclare un smbus avec bus = smbus.SMBus(1) (le 1 étant obtenu grâce à la commande i2cdetect -y 1 sur le terminal de Raspbian) ; je "démarre" le gyroscope avec bus.write_byte_data(0x6a, 0x10, 0b10100000) (0x6a adresse du gyroscope, 0x10 registre CTRL_REG1_G du gyroscope, 0b10100000 ODR à 476 Hz et cutoff à 21 Hz, gamme du gyroscope à +/- 245 dps) ; et enfin, lecture des données brutes du gyro avec bus.read_byte_data(0x6a, 0x18/).
Le souci, c'est que mes valeurs brutes lues ne sont pas cohérentes du tout : lorsque le Sense HAT est immobile, je devrais obtenir des valeurs brutes proches de 0, or j'obtiens des valeurs X, Y, Z valant respectivement environ 900, 100, 90...
Je ne pense pas rencontrer de soucis avec la conversion des données brutes vers des valeurs réelles, mais je pense tout simplement que c'est mon I2C qui n'est pas correctement réglé.
Pourriez-vous m'aider à configurer mon LSM9DS1 de manière à obtenir des valeurs cohérentes ?
Merci d'avance !