utiliser 2 capteurs identiques sur une carte

Bonjour,

Je souhaiterais utiliser deux capteurs BNO055

Sur une Arduino Uno.

Lorsqu’on instancie le capteur avec la bibliothèque dédiée, il n’y a pas de paramètre pour préciser le port utilisé.
(un exemple ici : Arduino Code | Adafruit BNO055 Absolute Orientation Sensor | Adafruit Learning System )

Si quelqu’un connait une solution cela m’aiderait beaucoup.

Du lien que vous avez donné vers learnadafruit,

ADR: Set this pin high to change the default I2C address for the BNO055 if you need to connect two ICs on the same I2C bus. The default address is 0x28. If this pin is connected to 3V, the address will be 0x29

definit ces deux adresses lignes 32 à 34 -et le confirme.
Vous pouvez configurer une des deux cartes avec une adresse differente de l'autre; avec un "scanner I2C", vous pouvez vérifier qu'il y a bien 2 cartes visibles en x28 == 40 et x29
et vous pouvez definir -c'est lourd- deux cartes bno1 et bno2 en vous inspirant des exemples...

Merci beaucoup de votre réponse.

J'avais déjà remarqué les définitions d'adresse du .h en fouinant dans le code, mais je ne sais pas comment les utiliser. Comment configurer l'une des deux cartes différemment ?
La citation semble indiquer qu'il faut utiliser une autre broche (ADR) pour changer l'adresse du capteur. Mais à quel changement cela correspond sur les i/o de l'arduino ?
Je ne suis pas très aguerri en arduino comme en anglais.

Bonsoir

La citation semble indiquer qu'il faut utiliser une autre broche (ADR) pour changer l'adresse du capteur. Mais à quel changement cela correspond sur les i/o de l'arduino ?

Aucun, le changement est localisé aux modules

Sur la page Adeafruit du produit on lit :

ADR: Set this pin high to change the default I2C address for the BNO055 if you need to connect two ICs on the same I2C bus. The default address is 0x28. If this pin is connected to 3V, the address will be 0x29

Ne pas relier ADR à la carte Arduino , laisser tel quel un des modules , son adresse est 0x28
Sur l'autre module relier l'entrée ADR à 3V, son adresse devient alors 0x29

Les 2 modules , ainsi différenciés , peuvent alors cohabiter sur le même bus I2C

dans le code utiliser l'adresse de chaque module pour s'y connecter

all1fch vous a expliqué comment configurer le matériel:
une fois branché tout votre beau monde, avec un scanner I2C, vous pourrez verifier qu'il y a un emplacement I2C à l'adresse 0x28, un autre à l'adresse 0x29 (je préfère procéder par étapes)
Ensuite, je suis allé voir le premier exemple de Adafruit_BNO055/bunny.ino at master · adafruit/Adafruit_BNO055 · GitHub
et je vois:

Adafruit_BNO055 bno = Adafruit_BNO055(55, 0x28);

que je suis tenté de replacer par:

Adafruit_BNO055 bno28 = Adafruit_BNO055(55, 0x28); // 55 est un identifiant unique 
Adafruit_BNO055 bno29 = Adafruit_BNO055(155, 0x29);

Merci beaucoup,
Alors si je comprends bien l'adresse 0x28 ou 0x29 ne correspond pas à une entrée de l'arduino, je branche les deux capteurs sur les mêmes entrées (SCL sur A5 et SDA sur A4), et la différence se fait toute seule en interne.
Qu'appelez-vous un scanner I2C ? Pourquoi est-ce "lourd" selon vous ?

I2C est un bus, plusieurs composants y sont reliés aux deux lignes SDA et SCL
On trouve sur la toile de nombreuses descriptions de ce bus.....
en voilà une : I2C — Wikipédia

un scanner I2C est un petit programme qui balaye un bus I2C pour y découvrir les adresses où des composants sont présents.

Bon, un scanner i2c pour arduino permet de savoir ce qu'il y a sur le bus I2C (est il bien câblé? en état de marche? est ce que j'ai bien des perifériques aux bonnes adresses?)
Un exemple (c'est un code arduino à faire tourner avant de jouer avec son nouveau périférique) est là arduino-i2c-scanner/I2CScanner.ino at master · todbot/arduino-i2c-scanner · GitHub
(je note que ce scanner I2C ci affiche les adresses I2C en décimal: ça tombe bien que je vous aie donné la correspondance de 0x28 == 40 -base 10).

Mon idée n'est certainement pas optimale ni élégante d'un point de vue programmation. Donc, a priori, je la trouve "lourde" (copier du code et adapter peut être pesant). Elle peut cependant fonctionner, en évoluant à partir d'un exemple simple.

Merci beaucoup, grâce à vous tout fonctionne, j'arrive à utiliser les deux capteurs sur les deux adresses I2C. Quand on ne connais pas on se perd assez vite.

Bonne soirée à vous deux.

Bonjour à tous,
Je rencontre à nouveau une difficulté.
Cette fois j'essaye de réaliser la même chose sur une Arduino Due, mais sans succès. La carte ne détecte pas les capteurs. Peut-être ai-je fais une erreur de câblage ? J'ai pourtant relié le SCL et le SDA des capteurs au SDL et au SCA de la carte.
Les adresses I2C seraient-elles différentes d'une carte à l'autre ? Dans ce cas il faudrait les changer dans le .h du BNO055 ?

Bon, en espèrant que vous trouverez mieux (je n'ai pas de DUE):
il faut toujours commencer par "scanner le bus I2C" (les RPi -et les PC!- ont un executable i2cscan, si ma mémoire est bonne).
Un qui semble adapté au DUE est en Multi speed I2C scanner for Arduino Due · GitHub Il permet de tester à differentes vitesses....
Je commencerais par
brancher un seul de vos modules sur le DUE
verifier qu'il est bien branché,
et voir quels sont les diagnostics.
( les cartes d'adafruit adaptent correctement les voltages et ont les resistances de tirage: je commencerais par tester la vitesse)

Merci pour votre réponse. J'ai réussi à régler le problème. Il fallait alimenter les BNO055 en 3.3V et non en 5V. C'est assez mystérieux car la doc précise que l'entrée supporte de 3.3 à 5 volt, et le montage fonctionnait en 5V sur la Uno. Je ne comprends pas le problème mais il est résolu.
Encore merci,
Bonne journée.

Edit : j'ai compris, si on alimente le capteur en 5V, les sorties I2C seront aussi en 5V, or la carte Arduino Due, ne supporte que le 3.3V...

Votre Due a-t-il survécu? (en tous cas, ne le vendez pas: vous iriez en enfer)

Oui il fonctionne encore :slight_smile: Je ne pense pas qu'il soit endommagé. Mais comment s'en assurer ?

Je suis à moitié rassuré quant à la longevité/robustesse des DUE et je n’ai aucune méthode pour determiner l’espérance de (sur)vie d’un DUE -ou autre- soumis à une erreur de branchement et qui fonctionne encore (faire des tests exhaustifs avec toutes les pattes en entrée, en sortie ? regarder quel est l’étage susceptible d’être affecté et se contenter de tests exhaustifs sur ces étages là? vraiment, je n’en sais rien)

Tout dépend de la technologie de fabrication.

Si les microcontroleurs ARM ne peuvent pas fonctionner à plus de 3,3V c'est parce qu'il sont gravé très fin, beaucoup plus fin qu'un circuit prévu pour 5V, le risque principal avec une tension trop forte est l'arc électrique au niveau de la puce : c'est franc et définitif.

L'autre possibilité pour "cramer " une sortie c'est de lui faire passer un courant trop fort.
Dans les microcontrôleurs il y a le dilemme rapidité/courant max. Pour avoir un courant plus important il faut des transistors de sortie plus gros mais plus le transistor est gros, moins ( à technologie constante) il est rapide.
Selon les E/S la DUE propose deux types de courants max 5 et 8 mA si je me rappelle bien.
Là aussi en général c'est franc et définitif car si le courant est trop fort le silicium fond.

Si rien ne se passe on pourrait dire ouf c'est bon.

Et puis :

  • il y a les différents de lots fabrications qui sont plus ou moins résistants.
  • il y a les agressions limites en dessous des maximum létaux qui semblent ne pas laisser de trace.
  • il y a aussi le silicium qui fait son mauvais caractère et qui se rappelle de toutes les petites agressions qu'il a subit et qui un jour dit : ça suffit je crame.
    Ce qui fait qu'une pichenette de trop , même si elle parait inoffensive, et ce qui fonctionnait ne fonctionne plus.

AMHA tu gardes ta carte DUE pour faire du dévelopement, mais si tu as un montage définitif a réaliser prends en une neuve.

Question : une carte DUE est-elle bien nécessaire ? Une Mega ne suffirait-elle pas ?

il existe des arm en 5v mais c'est assez confidentiel
et puis les programmateurs / débogueurs sont en 3v3, alors on se la mord

s'il faut un truc puissant mais pas cher à cause du risque de casse, il y a l'esp32 ...