Bonjour, dans le cadre de mon tipe, je dois réaliser une expérience où il faut que j’acquiert les données de deux accéléromètres similaires en même temps (j'utilise des BMA400). Mes deux accéléromètres ont bien deux adresses I2C différentes (0x14 et 0x15). Cependant, il semble que la librairie associée à l'accéléromètre (BMA400.h) ne me permette pas de récupérer les données de mes deux capteurs simultanément. Comment pourrai-je faire pour remédier à cela ? (utiliser une autre librairie ? si oui laquelle ?)
Quelle carte Arduino ou ESP utilises-tu ?
Quelle est cette bibliothèque BMA400 ? En cherchant j'ai trouvé celle-ci :
Elle indique aussi deux adresses I2C possibles :
// I2C address selection
uint8_t i2cAddress = BMA400_I2C_ADDRESS_DEFAULT; // 0x14
//uint8_t i2cAddress = BMA400_I2C_ADDRESS_SECONDARY; // 0x15
L'exemple basique fait ceci :
// Create a new sensor object
BMA400 accelerometer;
// I2C address selection
uint8_t i2cAddress = BMA400_I2C_ADDRESS_DEFAULT; // 0x14
//uint8_t i2cAddress = BMA400_I2C_ADDRESS_SECONDARY; // 0x15
void setup()
{
// Start serial
Serial.begin(115200);
Serial.println("BMA400 Example 1 - Basic Readings I2C");
// Initialize the I2C library
Wire.begin();
// Check if sensor is connected and initialize
// Address is optional (defaults to 0x14)
while(accelerometer.beginI2C(i2cAddress) != BMA400_OK)
{
// Not connected, inform user
Serial.println("Error: BMA400 not connected, check wiring and I2C address!");
// Wait a bit to see if connection is established
delay(1000);
}
Serial.println("BMA400 connected!");
}
Je pense que tu peux déclarer deux instances d'accéléromètres comme ceci :
// Create a new sensor object
BMA400 accelerometer1;
BMA400 accelerometer2;
// I2C address selection
uint8_t i2cAddress1 = BMA400_I2C_ADDRESS_DEFAULT; // 0x14
uint8_t i2cAddress2 = BMA400_I2C_ADDRESS_SECONDARY; // 0x15
void setup()
{
// Start serial
Serial.begin(115200);
Serial.println("BMA400 Example 1 - Basic Readings I2C");
// Initialize the I2C library
Wire.begin();
// Check if sensor is connected and initialize
while(accelerometer1.beginI2C(i2cAddress1) != BMA400_OK)
{
// Not connected, inform user
Serial.println("Error: BMA400 number 1 not connected, check wiring and I2C address!");
// Wait a bit to see if connection is established
delay(1000);
}
Serial.println("BMA400 number 1 connected!");
// Check if sensor is connected and initialize
while(accelerometer2.beginI2C(i2cAddress2) != BMA400_OK)
{
// Not connected, inform user
Serial.println("Error: BMA400 number 2 not connected, check wiring and I2C address!");
// Wait a bit to see if connection is established
delay(1000);
}
Serial.println("BMA400 number 2 connected!");
}
A tester...
Désolé, je n'ai pas précisé, mon capteur est un Grove - 3 Axis Digital Accelerometer±16g Ultra-low Power (BMA400) et ma carte une arduino uno (R3 si je ne me trompe pas). La bibliothèque associée a mon capteur est
J'ai tout de même essayé le code que tu a envoyé mais comme mon capteur n'est pas le sparkfun, cela ne fonctionne pas.
Pour préciser, j'avais testé un code avec la librairie que j'ai envoyé, où je déclarais les deux accéléromètres, en calquant le programme pour acquérir les données d'un seul accéléromètre , et arduino me renvoyais bien des données pour deux accéléromètres dans le moniteur série mais en faisant des tests, les données correspondaient toutes deux au même accéléromètre.
C'est celui-là ?
Il est alimenté en 3.3V ou 5V, communique en I2C, je ne vois pas pourquoi ça ne fonctionnerait pas.
Peux-tu préciser ce qui ne fonctionne pas ? Compilation ? Données fournies par les capteurs incohérentes ?
Il y a un message important épinglé sur ce forum :
Il précise les informations nécessaires pour obtenir de l'aide efficacement. Dans ton cas, il faut nous donner les codes que tu testes : le problème peut venir d'une ligne de code et pas de la bibliothèque utilisée.
Pareil ici : quel est le code testé ?
La bibliothèque Grove utilise une adresse I2C unique : 0x15
#define BMA400_ADDRESS 0x15 // default setting
Donc impossible de s'en servir pour connecter deux capteurs, à moins de la modifier en profondeur. Je pense que tu as plus de chances d'y arriver avec la Sparkfun.
Question : as-tu modifié l'un des capteurs pour avoir deux adresses différentes, comme ceci :
En gros, si tu déposes un point de soudure entre les deux pads de gauche, ce sera 0x15, et entre les deux de droite ce sera 0x14. Si tu as conservé la configuration par défaut (pads de gauche) pour les deux, c'est normal que tu obtiennes des résultats bizarres.
Oui c'est cet accéléromètre là et j'ai bien soudé les pads d'un des deux accéléromètres. J'ai retenté avec la librairie du sparkfun, et cette fois cela a fonctionné (je devais avoir une erreur dans le programme la dernière fois). Il faut que je vérifie précisément les résultats mais à première vue ils sont tout à fait cohérents. Merci beaucoup pour l'aide
cool
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.