RS485, MODBUS, Leddar

Bonjour,

Je suis en train de réaliser un projet, pour lequel j'ai besoin de mesurer des distances précises. Je dispose de 3 capteurs Leddar One, qui utilisent le protocole RS485. J'ai une arduino Mega 2560 ainsi que 3 arduino uno. J'aimerais utiliser MODBUS pour faire communiquer mes 3 arduino uno, les esclaves, chacune ayant un capteur, avec mon arduino mega, le maître, afin qu'elle puisse lire les valeurs des capteurs.
Je débute complètement dans la manipulation d'arduino et je suis totalement perdu. Je dispose d'une bibliothèque Leddar dans laquelle une méthode me permet de stocker les valeurs lues par les capteurs dans un tableau, mais aussi des bibliothèques modbus master / simpleSlave , avec lesquelles je pourrais apparement aussi lire les valeurs des capteurs.
Je n'arrive pas à trouver de tutoriel clair sur comment procéder. Quelle bibliothèque dois-je utiliser ? Comment brancher mes arduinos les unes aux autres ?
Si quelqu'un connaît un site bien fait expliquant la procédure, je lui en serait très reconnaissant.

A quoi servent les UNOs? avec du RS-485 vous pouvez avoir un bus avec vos capteurs tous connectés à un seul arduino maître (le maître doit lire et écrire dans chaque esclave) et comme vos LeddarOne implémentent (si j'en crois la spec) le protocole Modbus, il suffit d'utiliser ce protocole pour leur parler

Bonjour, en fait je ne les ai pas encore reçus, et je n'arrive pas à savoir si je peux brancher 3 LeddarOne sur une seule UNO.

Vous avez sans doute commandé des LED-MOD1-3-XX

le XX c'était 10 ou 20 ? (10 = 3.3 V UART et 20 = RS-485)

(cf la doc)

20, ce sont des RS485

OK donc il faudra juste "fabriquer" le bus qui relie les modules


(source = ces explications)

et un module adaptateur RS485 depuis votre arduino maître qui le connectera au bus

Pensez-vous qu'il serait possible d'utiliser directement la communication série arduino pour envoyer les données du capteur récupérées sur ma UNO à travers le RS485 Shield à ma MEGA ? Est-ce qu'il serait plus avantageux d'utiliser MODBUS ?

on utilise généralement le RS485 quand il y a besoin de communication numériques sur de longues distances et/ou en environnement électrique bruité

c'est votre cas?

Non, ce n'est pas mon cas, mais n'y connaissant rien, je pensais y être obligé sachant que le capteur utilise ce protocole.

celui que vous avez commandé, oui - donc vous ne pouvez plus utiliser la communication série vers vos Leddar One - vous êtes obligé de passer par une interface RS485 entre un Leddar One et un arduino.

Vous pouvez soit avoir les 3 Leddar One sur le bus, connecté à un seul Arduino ou alors avoir 3 arduino UNO chacun parlant à son Leddar One (sur un bus ayant qu'un seul composant Leddar One) et ensuite mettre en place un protocole de communication entre les 3 arduinos UNO et un Arduino Maître. Le port série ne se prête pas à une configuration en étoile ou bus mais votre Mega possède 4 lignes séries matérielle donc peut gérer les 3 UNOs et il vous restera Serial pour afficher des choses sur votre PC.

Mais bon, si vous n'avez pas de calcul particuliers à faire sur les UNOs, à mon avis vaut mieux partir sur une configuration 1 bus, 3 Leddar One et la MEGA

Ok, merci beaucoup !
Donc pour être sûr, je devrais acheter 3 MAX485, que je connecterai chacun au bus décrit par le document que vous m'avez fourni, et je pourrai ensuite utiliser directement la bibliothèque Leddar pour récupérer les mesures ?
Aussi, à quoi correspond le module dans le bas du schéma ? Au Shield RS485 que je branche sur la MEGA ?
Mais dans cette configuration, pourrais-je savoir de quel capteur vient quelle mesure ?

Non 1 seul module est suffisant puisque vos Leddar One vont se greffer directement sur le bus

</sub> <sub>Mega <--> adaptateur RS485 <--> [bus] =========================================[fin de bus]                                         ||              ||              ||                                         ||              ||              ||                                         ||              ||              ||                                       Module          Module          Module</sub> <sub>

faudra lire cette doc par exemple ainsi que les explications de Nick sur ce sujet et sa librairie

Bonjour,

J'ai lu la documentation que vous m'avez envoyée, mais je suis un peu perdu.
J'ai deux questions :

  1. Sachant que le RS-485 shield dont je dispose a une pin A et une pin B, dois-je connecter les 3 capteurs sur le même A et le même B ?
    2)Dans ce cas, Comment savoir quel capteur a mesuré la donnée reçue sur la carte, et comment s'assurer qu'ils n'envoient pas des données en même temps sans les brancher sur une carte ?

oui - cf le dessin en #5 les A sont ensemble, les B sont ensemble et il faut des résistances pour faire le bus

ensuite tous les esclaves écoutent sur le bus et le protocole commence par l'adresse de l'esclave auquel le maître veut parler. Celui qui a le bon N° écoute fait ce qu'il faut, les autres ignorent la communication

Bonjour,
Mais comment je peux donner un numéro à mes capteurs ? Il y a juste ce point qui me laisse dans l'incompréhension.

EDIT :
La classe LeddarOne de la bibliothèque Leddar possède un attribut SlaveAddress, que l'on peut choisir grâce au constructeur.
Dans ce cas, imaginons que j'ai réalisé mon bus.
Déjà, quelle bibliothèque vais-je devoir utiliser pour la communication ?
Ensuite, à partir de mon Arduino, je crée 3 objets LeddarOne. Est-ce qu'ils seront automatiquements reliés à mes 3 Leddars ?

Bonjour,
that is the question !
seul le fabriquant peut le dire, il faut trouver la doc qui l'explique
espérons que si cela doit se faire avec le sdk du fabriquant, il ne s'agit pas d'une opération payante

sachasai:
Mais comment je peux donner un numéro à mes capteurs ? Il y a juste ce point qui me laisse dans l'incompréhension.

Bonjour,

Avec l'utilitaire de configuration. Voir la doc du composant.

Merci de vos réponses, avez vous lu l'edit de mon dernier message ?

Ensuite, à partir de mon Arduino, je crée 3 objets LeddarOne. Est-ce qu'ils seront automatiquements reliés à mes 3 Leddars ?

vous assignez physiquement une adresse à vos composants par exemple 1,2,3

ensuite quand vous instanciez vos objets dans votre code, vous les créez avec ces adresses; les messages envoyées sur ces instances partiront alors sur le bus à destination du bon composant et les autres ignoreront le message

J-M-L:
vous assignez physiquement une adresse à vos composants par exemple 1,2,3

Que veut dire assigner "physiquement" ?